diff --git a/conntrackt/tests/test_views.py b/conntrackt/tests/test_views.py --- a/conntrackt/tests/test_views.py +++ b/conntrackt/tests/test_views.py @@ -4,12 +4,14 @@ from zipfile import ZipFile, ZIP_DEFLATE # Django imports. from django.core.urlresolvers import reverse +from django.test import RequestFactory from django.test import TestCase from django.test.client import Client from django.contrib.auth.models import User, Permission # Application imports from conntrackt.models import Project, Location +from conntrackt.views import EntityCreateView class ViewTest(TestCase): @@ -746,3 +748,104 @@ class LocationDeleteViewTest(TestCase): follow=True) self.assertContains(response, "Location Test Location 1 has been removed.") + + +class EntityCreateViewTest(TestCase): + + def setUp(self): + """ + Sets-up some data necessary for testing. + """ + + # Set-up some data for testing. + Project.objects.create(name="Test Project 1", description="This is test project 1.") + Project.objects.create(name="Test Project 2", description="This is test project 2.") + Location.objects.create(name="Test Location 1", description="This is test location 1.") + Location.objects.create(name="Test Location 2", description="This is test location 2.") + + def test_permission_denied(self): + """ + Tests if permission will be denied for client without sufficient privileges. + """ + + User.objects.create_user("noperms", "noperms@example.com", "noperms") + + self.client.login(username="noperms", password="noperms") + + response = self.client.get(reverse("entity_create")) + + self.assertContains(response, "You have insufficient privileges to access this resource. Please contact your local system administrator if you believe you should have been granted access.", status_code=403) + + def test_permission_granted(self): + """ + Tests if permission will be granted for user with correct privileges. + """ + + user = User.objects.create_user("fullperms", "fullperms@example.com", "fullperms") + user.user_permissions.add(Permission.objects.get(codename="add_entity")) + + self.client.login(username="fullperms", password="fullperms") + + response = self.client.get(reverse("entity_create")) + + self.assertEqual(response.status_code, 200) + + def test_form_project_limit(self): + """ + Tests if the queryset is properly limitted to specific project if GET + parameters is passed. + """ + + # Set-up the view. + view = EntityCreateView() + view.request = RequestFactory().get("/fake-path?project=1") + view.object = None + + # Get the form. + form = view.get_form(view.get_form_class()) + + self.assertQuerysetEqual(form.fields["project"].queryset, [""]) + + def test_form_location_limit(self): + """ + Tests if the queryset is properly limitted to specific location if GET + parameters is passed. + """ + + # Set-up the view. + view = EntityCreateView() + view.request = RequestFactory().get("/fake-path?location=1") + view.object = None + + # Get the form. + form = view.get_form(view.get_form_class()) + + self.assertQuerysetEqual(form.fields["location"].queryset, [""]) + + def test_initial_project(self): + """ + Tests if the choice field for project is defaulted to project passed as + part of GET parameters. + """ + + view = EntityCreateView() + view.request = RequestFactory().get("/fake-path?project=1") + view.object = None + + initial = view.get_initial() + + self.assertDictContainsSubset({"project": "1"}, initial) + + def test_initial_location(self): + """ + Tests if the choice field for location is defaulted to location passed + as part of GET parameters. + """ + + view = EntityCreateView() + view.request = RequestFactory().get("/fake-path?location=1") + view.object = None + + initial = view.get_initial() + + self.assertDictContainsSubset({"location": "1"}, initial)