Refactoring

This commit is contained in:
reverend 2020-09-13 19:43:47 +02:00
parent cea3a909b5
commit b3db6643b9
3 changed files with 58 additions and 43 deletions

View File

@ -1,17 +1,14 @@
from django.test import Client from django.test import TestCase
class ViewTestCaseMixin: class ViewTestCase(TestCase):
''' '''
This is a mixni for testing views. It provides functionality to This is a mixni for testing views. It provides functionality to
test the context, forms and HTTP Response of responses. test the context, forms and HTTP Response of responses.
Also works with django's ReqeustFactory and provides a self.client All methods take responses, so this base class can be used
with django's RequestFactory and Test-Client
''' '''
view = None view = None
def setUp(self):
self.view_name = self.view.__name__
self.client = Client()
def assertContext(self, response, key, value=None): def assertContext(self, response, key, value=None):
''' '''
Checks weather the response's context has the given key Checks weather the response's context has the given key
@ -20,7 +17,7 @@ class ViewTestCaseMixin:
self.assertTrue( self.assertTrue(
key in response.context, key in response.context,
msg='Expecting the context of %s to have an attribute \'%s\'' % ( msg='Expecting the context of %s to have an attribute \'%s\'' % (
self.view_name, self.view.__name__,
key key
) )
) )
@ -30,24 +27,24 @@ class ViewTestCaseMixin:
value, value,
response.context[key], response.context[key],
msg='Expecting the context of %s to have %s set to \'%s\'' % ( msg='Expecting the context of %s to have %s set to \'%s\'' % (
self.view_name, self.view.__name__,
key, key,
str(value) str(value)
) )
) )
def assertHasForm(self, response, context_key, form_class): def assertHasForm(self, response, key, form_class):
''' '''
Checks if response has a form under the given key and if Checks if response has a form under the given key and if
the forms class matches. the forms class matches.
''' '''
self.assertContext(response, context_key) self.assertContext(response, key)
self.assertEqual( self.assertEqual(
type(response.context[context_key]), type(response.context[key]),
form_class, form_class,
msg='Expecting %s\'s context.%s to be of the type %s' % ( msg='Expecting %s\'s context.%s to be of the type %s' % (
self.view_name, self.view.__name__,
context_key, key,
form_class.__name__ form_class.__name__
) )
) )
@ -63,6 +60,31 @@ class ViewTestCaseMixin:
response.status_code response.status_code
) )
) )
def assertHttpRedirect(self, response, redirect_to=None):
'''
Checks weather the response redirected, and if passed,
if it redirected to the expected loaction
'''
self.assertTrue(
300 <= response.status_code < 400,
'Expected an HTTP 3XX (redirect) response, but got HTTP %s' %
response.status_code
)
self.assertTrue(
'location' in response,
msg='Expecting a redirect to have an location, got none'
)
if redirect_to:
self.assertEqual(
response['location'],
redirect_to,
msg='Expecing the response to redirect to %s, where redirected to %s instea' % (
str(redirect_to),
str(response['location'])
)
)
def assertHttpOK(self, response): def assertHttpOK(self, response):
self.assertHttpCode(response, 200) self.assertHttpCode(response, 200)
@ -70,28 +92,6 @@ class ViewTestCaseMixin:
def assertHttpCreated(self, response): def assertHttpCreated(self, response):
self.assertHttpCode(response, 201) self.assertHttpCode(response, 201)
def assertHttpRedirect(self, response, redirect_to=None):
'''
Checks weather the response redirected, and if passed,
if it redirected to the expected loaction
'''
self.assertTrue(
300 <= response.status_code < 400,
'Expected an HTTP 3XX (redirect) response, but got HTTP %s' %
response.status_code
)
if redirect_to:
self.assertEqual(
response['Location'],
redirect_to,
msg='Expecing the response to redirect to %s, where redirected to %s instea' % (
str(redirect_to),
str(response['Location'])
)
)
def assertHttpBadRequest(self, response): def assertHttpBadRequest(self, response):
self.assertHttpCode(response, 400) self.assertHttpCode(response, 400)

View File

@ -7,9 +7,9 @@ from django.contrib.messages.storage.fallback import FallbackStorage
from lostplaces_app.models import Place from lostplaces_app.models import Place
from lostplaces_app.views import IsAuthenticatedMixin from lostplaces_app.views import IsAuthenticatedMixin
from lostplaces_app.tests.views import ViewTestCaseMixin from lostplaces_app.tests.views import ViewTestCase
class TestIsAuthenticated(ViewTestCaseMixin, TestCase): class TestIsAuthenticated(ViewTestCase):
view = IsAuthenticatedMixin view = IsAuthenticatedMixin
@classmethod @classmethod
@ -18,6 +18,9 @@ class TestIsAuthenticated(ViewTestCaseMixin, TestCase):
username='testpeter', username='testpeter',
password='Develop123' password='Develop123'
) )
def setUp(self):
self.client = Client()
def test_logged_in(self): def test_logged_in(self):
request = RequestFactory().get('/') request = RequestFactory().get('/')
@ -60,6 +63,9 @@ class TestIsPlaceSubmitterMixin(TestCase):
) )
place.tags.add('I a tag', 'testlocation') place.tags.add('I a tag', 'testlocation')
place.save() place.save()
def setUp(self):
self.client = Client()
def setUp(self): def setUp(self):
self. client = Client() self. client = Client()

View File

@ -1,6 +1,6 @@
import datetime import datetime
from django.test import TestCase from django.test import TestCase, Client
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.contrib.auth.models import User from django.contrib.auth.models import User
@ -10,10 +10,9 @@ from lostplaces_app.views import (
PlaceListView PlaceListView
) )
from lostplaces_app.forms import PlaceImageCreateForm, PlaceForm from lostplaces_app.forms import PlaceImageCreateForm, PlaceForm
from lostplaces_app.tests.views import ViewTestCaseMixin from lostplaces_app.tests.views import ViewTestCase
class TestPlaceCreateView(ViewTestCaseMixin, TestCase): class TestPlaceCreateView(ViewTestCase):
view = PlaceCreateView view = PlaceCreateView
@classmethod @classmethod
@ -35,6 +34,9 @@ class TestPlaceCreateView(ViewTestCaseMixin, TestCase):
place.tags.add('I a tag', 'testlocation') place.tags.add('I a tag', 'testlocation')
place.save() place.save()
def setUp(self):
self.client = Client()
def test_has_forms(self): def test_has_forms(self):
self.client.login(username='testpeter', password='Develop123') self.client.login(username='testpeter', password='Develop123')
response = self.client.get(reverse_lazy('place_create')) response = self.client.get(reverse_lazy('place_create'))
@ -42,7 +44,7 @@ class TestPlaceCreateView(ViewTestCaseMixin, TestCase):
self.assertHasForm(response, 'place_image_form', PlaceImageCreateForm) self.assertHasForm(response, 'place_image_form', PlaceImageCreateForm)
self.assertHasForm(response, 'place_form', PlaceForm) self.assertHasForm(response, 'place_form', PlaceForm)
class TestPlaceListView(ViewTestCaseMixin, TestCase): class TestPlaceListView(ViewTestCase):
view = PlaceListView view = PlaceListView
@classmethod @classmethod
@ -64,10 +66,17 @@ class TestPlaceListView(ViewTestCaseMixin, TestCase):
place.tags.add('I a tag', 'testlocation') place.tags.add('I a tag', 'testlocation')
place.save() place.save()
def setUp(self):
self.client = Client()
def test_list_view(self): def test_list_view(self):
self.client.login(username='testpeter', password='Develop123') self.client.login(username='testpeter', password='Develop123')
response = self.client.get(reverse_lazy('place_list')) response = self.client.get(reverse_lazy('place_list'))
self.assertContext(response, 'map_config') self.assertContext(response, 'map_config')
def test_test(self):
response = self.client.get(reverse_lazy('place_list'))
print(response['location'])