From 0a0524f1f0704b9520e84e35b7326deb9f31f96e Mon Sep 17 00:00:00 2001 From: Jan Dittberner Date: Fri, 29 Jan 2016 10:03:24 +0000 Subject: [PATCH] Add tests for userdbs.views.ChangeDatabaseUserPassword This commit adds tests for the ChangeDatabaseUserPassword view. --- gnuviechadmin/userdbs/tests/test_views.py | 81 +++++++++++++++++++++-- 1 file changed, 76 insertions(+), 5 deletions(-) diff --git a/gnuviechadmin/userdbs/tests/test_views.py b/gnuviechadmin/userdbs/tests/test_views.py index a0ca19c..89aa381 100644 --- a/gnuviechadmin/userdbs/tests/test_views.py +++ b/gnuviechadmin/userdbs/tests/test_views.py @@ -21,7 +21,7 @@ from hostingpackages.models import ( ) from userdbs.models import DB_TYPES, UserDatabase -from userdbs.views import AddUserDatabase +from userdbs.views import AddUserDatabase, ChangeDatabaseUserPassword User = get_user_model() @@ -174,18 +174,89 @@ class AddUserDatabaseTest( dbuser=db.db_user)) -class ChangeDatabaseUserPasswordTest(HostingPackageAwareTestMixin, TestCase): +class ChangeDatabaseUserPasswordTest( + HostingPackageAwareTestMixin, CustomerUserDatabaseOptionAwareTestMixin, + TestCase +): def setUp(self): self.customer = User.objects.create_user( username=TEST_USER, password=TEST_PASSWORD) self.package = self._setup_hosting_package(self.customer) + template = self._create_userdatabase_option() + database = UserDatabase.objects.create_userdatabase_with_user( + template.db_type, self.package.osuser) + self.dbuser = database.db_user - def _get_url(self, userdatabase): + def _get_url(self, dbuser): return reverse( 'change_dbuser_password', kwargs={ - 'package': self.package.id, - 'slug': userdatabase.db_name}) + 'package': self.package.id, 'slug': dbuser.name}) + + def test_get_anonymous(self): + response = self.client.get(self._get_url(self.dbuser)) + self.assertEqual(response.status_code, 403) + + def test_get_regular_user(self): + self.client.login(username=TEST_USER, password=TEST_PASSWORD) + response = self.client.get(self._get_url(self.dbuser)) + self.assertEqual(response.status_code, 200) + + def test_get_other_regular_user(self): + User.objects.create_user( + 'test2', password=TEST_PASSWORD) + self.client.login(username='test2', password=TEST_PASSWORD) + response = self.client.get(self._get_url(self.dbuser)) + self.assertEqual(response.status_code, 403) + + def test_get_staff_user(self): + User.objects.create_superuser( + 'admin', email=TEST_EMAIL, password=TEST_PASSWORD) + self.client.login(username='admin', password=TEST_PASSWORD) + response = self.client.get(self._get_url(self.dbuser)) + self.assertEqual(response.status_code, 200) + + def test_get_template(self): + self.client.login(username=TEST_USER, password=TEST_PASSWORD) + response = self.client.get(self._get_url(self.dbuser)) + self.assertTemplateUsed( + response, 'userdbs/databaseuser_setpassword.html') + + def test_get_form_kwargs(self): + self.client.login(username=TEST_USER, password=TEST_PASSWORD) + view = ChangeDatabaseUserPassword(request=MagicMock(), kwargs={ + 'package': str(self.package.pk), 'slug': self.dbuser.name}) + the_kwargs = view.get_form_kwargs() + self.assertIn('hostingpackage', the_kwargs) + self.assertEqual(the_kwargs['hostingpackage'], self.package) + + def test_get_context_data(self): + self.client.login(username=TEST_USER, password=TEST_PASSWORD) + response = self.client.get(self._get_url(self.dbuser)) + self.assertIn('dbuser', response.context) + self.assertEqual(response.context['dbuser'], self.dbuser) + self.assertIn('hostingpackage', response.context) + self.assertEqual(response.context['hostingpackage'], self.package) + self.assertIn('customer', response.context) + self.assertEqual(response.context['customer'], self.customer) + + def test_form_valid_redirect(self): + self.client.login(username=TEST_USER, password=TEST_PASSWORD) + response = self.client.post(self._get_url(self.dbuser), data={ + 'password1': TEST_PASSWORD, 'password2': TEST_PASSWORD}) + self.assertRedirects(response, self.package.get_absolute_url()) + + def test_form_valid_message(self): + self.client.login(username=TEST_USER, password=TEST_PASSWORD) + response = self.client.post( + self._get_url(self.dbuser), follow=True, data={ + 'password1': TEST_PASSWORD, 'password2': TEST_PASSWORD}) + messages = list(response.context['messages']) + self.assertEqual(len(messages), 1) + self.assertEqual( + str(messages[0]), + 'Successfully changed password of database user {dbuser}.'.format( + dbuser=self.dbuser.name)) class DeleteUserDatabaseTest(