diff --git a/django_lostplaces/lostplaces/tests/views/test_place_views.py b/django_lostplaces/lostplaces/tests/views/test_place_views.py
index 2880893..397f434 100644
--- a/django_lostplaces/lostplaces/tests/views/test_place_views.py
+++ b/django_lostplaces/lostplaces/tests/views/test_place_views.py
@@ -1,10 +1,14 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+import re
+from os import path
+
from django.test import TestCase, Client
from django.urls import reverse
from django.contrib.auth.models import User
from django.utils import timezone
+from django.conf import settings
from lostplaces.models import Place
@@ -23,6 +27,9 @@ from lostplaces.tests.views import (
class TestPlaceListView(GlobalTemplateTestCaseMixin, ViewTestCase):
+ """
+ Tests the view listing all placs
+ """
view = PlaceListView
@classmethod
@@ -32,15 +39,16 @@ class TestPlaceListView(GlobalTemplateTestCaseMixin, ViewTestCase):
password='Develop123'
)
- place = Place.objects.create(
- name='Im a place',
- submitted_when=timezone.now(),
- submitted_by=user.explorer,
- location='Testtown',
- latitude=50.5,
- longitude=7.0,
- description='This is just a test, do not worry'
- )
+ for i in range(12):
+ place = Place.objects.create(
+ name='Im a place %d' % i,
+ submitted_when=timezone.now(),
+ submitted_by=user.explorer,
+ location='Test %d town' % i,
+ latitude=50.5 + i/10,
+ longitude=7.0 - i/10,
+ description='This is just a test, do not worry'
+ )
place.tags.add('I a tag', 'testlocation')
place.save()
@@ -53,7 +61,20 @@ class TestPlaceListView(GlobalTemplateTestCaseMixin, ViewTestCase):
self.assertContext(response, 'mapping_config')
self.assertGlobal(response)
+
+ def test_pagination(self):
+ self.client.login(username='testpeter', password='Develop123')
+ response = self.client.get(reverse('place_list'))
+ self.assertNotEqual(
+ None,
+ re.search(
+ """
\s*(.*\s*){6,}""",
+ response.content.decode().replace('\n', '').lower()
+ ),
+ msg='Expecting the place list to be paginated like [first] [previous] [item] at least 2 times [next] [last]'
+ )
+
class TestPlaceCreateView(ViewTestCase):
view = PlaceCreateView
@@ -64,27 +85,90 @@ class TestPlaceCreateView(ViewTestCase):
password='Develop123'
)
- place = Place.objects.create(
- name='Im a place',
- submitted_when=timezone.now(),
- submitted_by=user.explorer,
- location='Testtown',
- latitude=50.5,
- longitude=7.0,
- description='This is just a test, do not worry'
- )
- place.tags.add('I a tag', 'testlocation')
- place.save()
-
def setUp(self):
self.client = Client()
-
+
def test_has_forms(self):
self.client.login(username='testpeter', password='Develop123')
response = self.client.get(reverse('place_create'))
self.assertHasForm(response, 'place_image_form', PlaceImageForm)
self.assertHasForm(response, 'place_form', PlaceForm)
+
+ def test_positive_no_image(self):
+ self.client.login(username='testpeter', password='Develop123')
+ response = self.client.post(
+ reverse('place_create'),
+ {
+ 'name': 'test place 486',
+ 'location': 'test location',
+ 'latitude': 45.804192,
+ 'longitude': 1.860222,
+ 'description': """
+ Cupiditate harum reprehenderit ipsam iure consequuntur eaque eos reiciendis. Blanditiis vel minima minus repudiandae voluptate aut quia sed. Provident ex omnis illo molestiae. Ullam eos et est provident enim deserunt.
+ """
+ }
+ )
+ self.assertHttpRedirect(response)
+ place = Place.objects.get(name='test place 486')
+ self.assertNotEqual(
+ None,
+ place,
+ msg='Submitted place not found in database / model'
+ ),
+ self.assertNotEqual(
+ None,
+ re.search(
+ """.*%s""" % reverse(
+ 'place_detail', kwargs={'pk': place.id}
+ ),
+ response.url
+ )
+ )
+
+ def test_positive_image(self):
+ self.client.login(username='testpeter', password='Develop123')
+ image = open(
+ path.join(
+ settings.BASE_DIR,
+ 'testdata',
+ 'test_image.jpg'
+ )
+ )
+ response = self.client.post(
+ reverse('place_create'),
+ {
+ 'name': 'test place 894',
+ 'location': 'test location',
+ 'latitude': 45.804192,
+ 'longitude': 1.860222,
+ 'description': """
+ Cupiditate harum reprehenderit ipsam iure consequuntur eaque eos reiciendis. Blanditiis vel minima minus repudiandae voluptate aut quia sed. Provident ex omnis illo molestiae. Ullam eos et est provident enim deserunt.
+ """,
+ 'images': [image]
+ }
+ )
+ self.assertHttpRedirect(response)
+ place = Place.objects.get(name='test place 894')
+ self.assertNotEqual(
+ None,
+ place,
+ msg='Submitted place not found in database / model'
+ ),
+ self.assertNotEqual(
+ None,
+ re.search(
+ """.*%s""" % reverse(
+ 'place_detail', kwargs={'pk': place.id}
+ ),
+ response.url
+ )
+ )
+ self.assertEqual(
+ len(place.placeimages.all()),
+ 1,
+ msg='Expecting the place to have exactly 1 place image'
+ )
class PlaceDetailViewTestCase(TaggableViewTestCaseMixin, MapableViewTestCaseMixin, ViewTestCase):
view = PlaceDetailView
diff --git a/django_lostplaces/testdata/test_image.jpg b/django_lostplaces/testdata/test_image.jpg
new file mode 100644
index 0000000..e24e4e4
Binary files /dev/null and b/django_lostplaces/testdata/test_image.jpg differ