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