Compare commits
	
		
			4 commits
		
	
	
		
			11c04df074
			...
			5b04c476c9
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5b04c476c9 | |||
| 38b120b03e | |||
| f3ef40df0b | |||
| a3feb92503 | 
					 9 changed files with 822 additions and 628 deletions
				
			
		|  | @ -6,9 +6,12 @@ Common settings and globals. | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| from os.path import abspath, basename, dirname, join, normpath | from os.path import abspath, basename, dirname, join, normpath | ||||||
|  | from environs import Env | ||||||
| 
 | 
 | ||||||
| from django.contrib.messages import constants as messages | from django.contrib.messages import constants as messages | ||||||
| from gvacommon.settings_utils import get_env_variable | 
 | ||||||
|  | env = Env() | ||||||
|  | env.read_env() | ||||||
| 
 | 
 | ||||||
| # ######### PATH CONFIGURATION | # ######### PATH CONFIGURATION | ||||||
| # Absolute filesystem path to the Django project directory: | # Absolute filesystem path to the Django project directory: | ||||||
|  | @ -17,12 +20,14 @@ DJANGO_ROOT = dirname(dirname(abspath(__file__))) | ||||||
| # Absolute filesystem path to the top-level project folder: | # Absolute filesystem path to the top-level project folder: | ||||||
| SITE_ROOT = dirname(DJANGO_ROOT) | SITE_ROOT = dirname(DJANGO_ROOT) | ||||||
| 
 | 
 | ||||||
|  | ROOT_DIR = dirname(DJANGO_ROOT) | ||||||
|  | 
 | ||||||
| # Site name: | # Site name: | ||||||
| SITE_NAME = basename(DJANGO_ROOT) | SITE_NAME = basename(DJANGO_ROOT) | ||||||
| 
 | 
 | ||||||
| # ######### END PATH CONFIGURATION | # ######### END PATH CONFIGURATION | ||||||
| 
 | 
 | ||||||
| GVA_ENVIRONMENT = get_env_variable("GVA_ENVIRONMENT", default="prod") | GVA_ENVIRONMENT = env.str("GVA_ENVIRONMENT", default="prod") | ||||||
| 
 | 
 | ||||||
| # ######### DEBUG CONFIGURATION | # ######### DEBUG CONFIGURATION | ||||||
| # See: https://docs.djangoproject.com/en/dev/ref/settings/#debug | # See: https://docs.djangoproject.com/en/dev/ref/settings/#debug | ||||||
|  | @ -34,8 +39,8 @@ DEBUG = GVA_ENVIRONMENT == "local" | ||||||
| # See: https://docs.djangoproject.com/en/dev/ref/settings/#admins | # See: https://docs.djangoproject.com/en/dev/ref/settings/#admins | ||||||
| ADMINS = ( | ADMINS = ( | ||||||
|     ( |     ( | ||||||
|         get_env_variable("GVA_ADMIN_NAME", default="Admin"), |         env.str("GVA_ADMIN_NAME", default="Admin"), | ||||||
|         get_env_variable("GVA_ADMIN_EMAIL", default="admin@example.org"), |         env.str("GVA_ADMIN_EMAIL", default="admin@example.org"), | ||||||
|     ), |     ), | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -47,14 +52,7 @@ MANAGERS = ADMINS | ||||||
| # ######### DATABASE CONFIGURATION | # ######### DATABASE CONFIGURATION | ||||||
| # See: https://docs.djangoproject.com/en/dev/ref/settings/#databases | # See: https://docs.djangoproject.com/en/dev/ref/settings/#databases | ||||||
| DATABASES = { | DATABASES = { | ||||||
|     "default": { |     "default": env.dj_db_url("GVA_DATABASE_URL"), | ||||||
|         "ENGINE": "django.db.backends.postgresql", |  | ||||||
|         "NAME": get_env_variable("GVA_PGSQL_DATABASE", default="gnuviechadmin"), |  | ||||||
|         "USER": get_env_variable("GVA_PGSQL_USER", default="gnuviechadmin"), |  | ||||||
|         "PASSWORD": get_env_variable("GVA_PGSQL_PASSWORD"), |  | ||||||
|         "HOST": get_env_variable("GVA_PGSQL_HOSTNAME", default="db"), |  | ||||||
|         "PORT": get_env_variable("GVA_PGSQL_PORT", int, default=5432), |  | ||||||
|     } |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DEFAULT_AUTO_FIELD = "django.db.models.AutoField" | DEFAULT_AUTO_FIELD = "django.db.models.AutoField" | ||||||
|  | @ -70,8 +68,8 @@ LANGUAGE_CODE = "en-us" | ||||||
| 
 | 
 | ||||||
| # See: https://docs.djangoproject.com/en/dev/ref/settings/#site-id | # See: https://docs.djangoproject.com/en/dev/ref/settings/#site-id | ||||||
| SITE_ID = 1 | SITE_ID = 1 | ||||||
| SITES_DOMAIN_NAME = get_env_variable("GVA_DOMAIN_NAME") | SITES_DOMAIN_NAME = env.str("GVA_DOMAIN_NAME") | ||||||
| SITES_SITE_NAME = get_env_variable("GVA_SITE_NAME") | SITES_SITE_NAME = env.str("GVA_SITE_NAME") | ||||||
| 
 | 
 | ||||||
| # See: https://docs.djangoproject.com/en/dev/ref/settings/#use-i18n | # See: https://docs.djangoproject.com/en/dev/ref/settings/#use-i18n | ||||||
| USE_I18N = True | USE_I18N = True | ||||||
|  | @ -109,7 +107,7 @@ STATICFILES_FINDERS = ( | ||||||
| # ######### SECRET CONFIGURATION | # ######### SECRET CONFIGURATION | ||||||
| # See: https://docs.djangoproject.com/en/dev/ref/settings/#secret-key | # See: https://docs.djangoproject.com/en/dev/ref/settings/#secret-key | ||||||
| # Note: This key should only be used for development and testing. | # Note: This key should only be used for development and testing. | ||||||
| SECRET_KEY = get_env_variable("GVA_SITE_SECRET") | SECRET_KEY = env.str("GVA_SITE_SECRET") | ||||||
| # ######### END SECRET CONFIGURATION | # ######### END SECRET CONFIGURATION | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -164,7 +162,6 @@ MIDDLEWARE = [ | ||||||
|     "allauth.account.middleware.AccountMiddleware", |     "allauth.account.middleware.AccountMiddleware", | ||||||
|     "django.middleware.locale.LocaleMiddleware", |     "django.middleware.locale.LocaleMiddleware", | ||||||
|     "django.contrib.messages.middleware.MessageMiddleware", |     "django.contrib.messages.middleware.MessageMiddleware", | ||||||
|     # uncomment next line to enable translation to browser locale |  | ||||||
|     "django.middleware.clickjacking.XFrameOptionsMiddleware", |     "django.middleware.clickjacking.XFrameOptionsMiddleware", | ||||||
| ] | ] | ||||||
| # ######### END MIDDLEWARE CONFIGURATION | # ######### END MIDDLEWARE CONFIGURATION | ||||||
|  | @ -236,6 +233,7 @@ LOCAL_APPS = ( | ||||||
|     "help", |     "help", | ||||||
|     "invoices", |     "invoices", | ||||||
|     "contact_form", |     "contact_form", | ||||||
|  |     "exit", | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| # See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps | # See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps | ||||||
|  | @ -309,7 +307,7 @@ LOGGING = { | ||||||
|         "logfile": { |         "logfile": { | ||||||
|             "level": "INFO", |             "level": "INFO", | ||||||
|             "class": "logging.FileHandler", |             "class": "logging.FileHandler", | ||||||
|             "filename": get_env_variable("GVA_LOG_FILE", default="gva.log"), |             "filename": env.str("GVA_LOG_FILE", default="gva.log"), | ||||||
|             "formatter": "verbose", |             "formatter": "verbose", | ||||||
|         }, |         }, | ||||||
|         "mail_admins": { |         "mail_admins": { | ||||||
|  | @ -352,7 +350,7 @@ WSGI_APPLICATION = "%s.wsgi.application" % SITE_NAME | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| # ######### CELERY CONFIGURATION | # ######### CELERY CONFIGURATION | ||||||
| BROKER_URL = get_env_variable( | BROKER_URL = env.str( | ||||||
|     "GVA_BROKER_URL", default="amqp://gnuviechadmin:gnuviechadmin@mq/gnuviechadmin" |     "GVA_BROKER_URL", default="amqp://gnuviechadmin:gnuviechadmin@mq/gnuviechadmin" | ||||||
| ) | ) | ||||||
| BROKER_TRANSPORT_OPTIONS = { | BROKER_TRANSPORT_OPTIONS = { | ||||||
|  | @ -361,7 +359,7 @@ BROKER_TRANSPORT_OPTIONS = { | ||||||
|     "interval_step": 0.2, |     "interval_step": 0.2, | ||||||
|     "interval_max": 0.2, |     "interval_max": 0.2, | ||||||
| } | } | ||||||
| CELERY_RESULT_BACKEND = get_env_variable( | CELERY_RESULT_BACKEND = env.str( | ||||||
|     "GVA_RESULTS_REDIS_URL", default="redis://:gnuviechadmin@redis:6379/0" |     "GVA_RESULTS_REDIS_URL", default="redis://:gnuviechadmin@redis:6379/0" | ||||||
| ) | ) | ||||||
| CELERY_TASK_RESULT_EXPIRES = None | CELERY_TASK_RESULT_EXPIRES = None | ||||||
|  | @ -375,32 +373,32 @@ CELERY_RESULT_SERIALIZER = "json" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| # ######### CUSTOM APP CONFIGURATION | # ######### CUSTOM APP CONFIGURATION | ||||||
| OSUSER_MINUID = get_env_variable("GVA_MIN_OS_UID", int, default=10000) | OSUSER_MINUID = env.int("GVA_MIN_OS_UID", default=10000) | ||||||
| OSUSER_MINGID = get_env_variable("GVA_MIN_OS_GID", int, default=10000) | OSUSER_MINGID = env.int("GVA_MIN_OS_GID", default=10000) | ||||||
| OSUSER_USERNAME_PREFIX = get_env_variable("GVA_OSUSER_PREFIX", default="usr") | OSUSER_USERNAME_PREFIX = env.str("GVA_OSUSER_PREFIX", default="usr") | ||||||
| OSUSER_HOME_BASEPATH = get_env_variable("GVA_OSUSER_HOME_BASEPATH", default="/home") | OSUSER_HOME_BASEPATH = env.str("GVA_OSUSER_HOME_BASEPATH", default="/home") | ||||||
| OSUSER_DEFAULT_SHELL = get_env_variable( | OSUSER_DEFAULT_SHELL = env.str( | ||||||
|     "GVA_OSUSER_DEFAULT_SHELL", default="/usr/bin/rssh" |     "GVA_OSUSER_DEFAULT_SHELL", default="/usr/bin/rssh" | ||||||
| ) | ) | ||||||
| OSUSER_SFTP_GROUP = "sftponly" | OSUSER_SFTP_GROUP = "sftponly" | ||||||
| OSUSER_SSH_GROUP = "sshusers" | OSUSER_SSH_GROUP = "sshusers" | ||||||
| OSUSER_DEFAULT_GROUPS = [OSUSER_SFTP_GROUP] | OSUSER_DEFAULT_GROUPS = [OSUSER_SFTP_GROUP] | ||||||
| OSUSER_UPLOAD_SERVER = get_env_variable("GVA_OSUSER_UPLOADSERVER", default="file") | OSUSER_UPLOAD_SERVER = env.str("GVA_OSUSER_UPLOADSERVER", default="file") | ||||||
| 
 | 
 | ||||||
| GVA_LINK_WEBMAIL = get_env_variable( | GVA_LINK_WEBMAIL = env.str( | ||||||
|     "GVA_WEBMAIL_URL", default="https://webmail.example.org/" |     "GVA_WEBMAIL_URL", default="https://webmail.example.org/" | ||||||
| ) | ) | ||||||
| GVA_LINK_PHPMYADMIN = get_env_variable( | GVA_LINK_PHPMYADMIN = env.str( | ||||||
|     "GVA_PHPMYADMIN_URL", default="https://phpmyadmin.example.org/" |     "GVA_PHPMYADMIN_URL", default="https://phpmyadmin.example.org/" | ||||||
| ) | ) | ||||||
| GVA_LINK_PHPPGADMIN = get_env_variable( | GVA_LINK_PHPPGADMIN = env.str( | ||||||
|     "GVA_PHPPGADMIN_URL", default="https://phppgadmin.example.org/" |     "GVA_PHPPGADMIN_URL", default="https://phppgadmin.example.org/" | ||||||
| ) | ) | ||||||
| # ######### END CUSTOM APP CONFIGURATION | # ######### END CUSTOM APP CONFIGURATION | ||||||
| 
 | 
 | ||||||
| # ######### STATIC FILE CONFIGURATION | # ######### STATIC FILE CONFIGURATION | ||||||
| # See: https://docs.djangoproject.com/en/dev/ref/settings/#static-root | # See: https://docs.djangoproject.com/en/dev/ref/settings/#static-root | ||||||
| STATIC_ROOT = "/srv/gva/static/" | STATIC_ROOT = env.str("GVA_STATIC_PATH", default=normpath(join(ROOT_DIR, "static"))) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def show_debug_toolbar(request): | def show_debug_toolbar(request): | ||||||
|  | @ -495,12 +493,12 @@ else: | ||||||
|     EMAIL_SUBJECT_PREFIX = "[%s] " % SITE_NAME |     EMAIL_SUBJECT_PREFIX = "[%s] " % SITE_NAME | ||||||
| 
 | 
 | ||||||
|     # See: https://docs.djangoproject.com/en/dev/ref/settings/#default-from-email |     # See: https://docs.djangoproject.com/en/dev/ref/settings/#default-from-email | ||||||
|     DEFAULT_FROM_EMAIL = get_env_variable( |     DEFAULT_FROM_EMAIL = env.str( | ||||||
|         "GVA_SITE_ADMINMAIL", default="admin@example.org" |         "GVA_SITE_ADMINMAIL", default="admin@example.org" | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     # See: https://docs.djangoproject.com/en/dev/ref/settings/#server-email |     # See: https://docs.djangoproject.com/en/dev/ref/settings/#server-email | ||||||
|     SERVER_EMAIL = get_env_variable("GVA_SITE_ADMINMAIL", default="admin@example.org") |     SERVER_EMAIL = env.str("GVA_SITE_ADMINMAIL", default="admin@example.org") | ||||||
|     # ######### END EMAIL CONFIGURATION |     # ######### END EMAIL CONFIGURATION | ||||||
| 
 | 
 | ||||||
|     # ######### CACHE CONFIGURATION |     # ######### CACHE CONFIGURATION | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ PASSWORD_MISMATCH_ERROR = _("Passwords don't match") | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class ReadOnlyPasswordHashWidget(forms.Widget): | class ReadOnlyPasswordHashWidget(forms.Widget): | ||||||
|     def render(self, name, value, attrs): |     def render(self, name, value, attrs, renderer=None): | ||||||
|         final_attrs = self.build_attrs(attrs) |         final_attrs = self.build_attrs(attrs) | ||||||
|         summary = format_html("<strong>{0}</strong>: {1} ", _("Hash"), value) |         summary = format_html("<strong>{0}</strong>: {1} ", _("Hash"), value) | ||||||
|         return format_html("<div{0}>{1}</div>", flatatt(final_attrs), summary) |         return format_html("<div{0}>{1}</div>", flatatt(final_attrs), summary) | ||||||
|  |  | ||||||
|  | @ -119,13 +119,13 @@ class ActivationChangeMixinTest(TestCase): | ||||||
|         querysetmock = Mock() |         querysetmock = Mock() | ||||||
|         activationchange = ActivationChangeMixin() |         activationchange = ActivationChangeMixin() | ||||||
|         activationchange.activate(Mock(), querysetmock) |         activationchange.activate(Mock(), querysetmock) | ||||||
|         querysetmock.update.called_with(active=True) |         querysetmock.update.assert_called_with(active=True) | ||||||
| 
 | 
 | ||||||
|     def test_deactivate(self): |     def test_deactivate(self): | ||||||
|         querysetmock = Mock() |         querysetmock = Mock() | ||||||
|         activationchange = ActivationChangeMixin() |         activationchange = ActivationChangeMixin() | ||||||
|         activationchange.deactivate(Mock(), querysetmock) |         activationchange.deactivate(Mock(), querysetmock) | ||||||
|         querysetmock.update.called_with(active=False) |         querysetmock.update.assert_called_with(active=False) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class MailBoxAdminTest(CustomerTestCase): | class MailBoxAdminTest(CustomerTestCase): | ||||||
|  |  | ||||||
|  | @ -35,8 +35,8 @@ class FetchTaskResultsCommandTest(TestCase): | ||||||
|         Command().handle(verbosity=0) |         Command().handle(verbosity=0) | ||||||
| 
 | 
 | ||||||
|         tr = TaskResult.objects.get(task_id=TEST_TASK_UUID) |         tr = TaskResult.objects.get(task_id=TEST_TASK_UUID) | ||||||
|         self.assertTrue(asyncresult.called_with(TEST_TASK_UUID)) |         asyncresult.assert_called_with(TEST_TASK_UUID) | ||||||
|         self.assertTrue(aresult.ready.called_with()) |         aresult.ready.assert_called_with() | ||||||
|         self.assertFalse(tr.finished) |         self.assertFalse(tr.finished) | ||||||
|         self.assertEqual(tr.result, "") |         self.assertEqual(tr.result, "") | ||||||
|         self.assertEqual(tr.state, "PENDING") |         self.assertEqual(tr.state, "PENDING") | ||||||
|  | @ -58,9 +58,9 @@ class FetchTaskResultsCommandTest(TestCase): | ||||||
|         Command().handle(verbosity=0) |         Command().handle(verbosity=0) | ||||||
| 
 | 
 | ||||||
|         tr = TaskResult.objects.get(task_id=TEST_TASK_UUID) |         tr = TaskResult.objects.get(task_id=TEST_TASK_UUID) | ||||||
|         self.assertTrue(asyncresult.called_with(TEST_TASK_UUID)) |         asyncresult.assert_called_with(TEST_TASK_UUID) | ||||||
|         self.assertTrue(aresult.ready.called_with()) |         aresult.ready.assert_called_with() | ||||||
|         self.assertTrue(aresult.get.called_with()) |         aresult.get.assert_called_with(propagate=False, timeout=5) | ||||||
|         self.assertTrue(tr.finished) |         self.assertTrue(tr.finished) | ||||||
|         self.assertEqual(tr.result, TEST_TASK_RESULT) |         self.assertEqual(tr.result, TEST_TASK_RESULT) | ||||||
|         self.assertEqual(tr.state, "SUCCESS") |         self.assertEqual(tr.state, "SUCCESS") | ||||||
|  |  | ||||||
|  | @ -41,7 +41,7 @@ class TaskResultTest(TestCase): | ||||||
|         aresult.ready.return_value = True |         aresult.ready.return_value = True | ||||||
|         aresult.get.return_value = TEST_TASK_RESULT |         aresult.get.return_value = TEST_TASK_RESULT | ||||||
|         tr.fetch_result() |         tr.fetch_result() | ||||||
|         self.assertTrue(aresult.get.called_with()) |         aresult.get.assert_called_with(propagate=False, timeout=5) | ||||||
|         self.assertEqual(aresult.get.call_count, 1) |         self.assertEqual(aresult.get.call_count, 1) | ||||||
|         self.assertTrue(tr.finished) |         self.assertTrue(tr.finished) | ||||||
|         self.assertEqual(tr.result, str(TEST_TASK_RESULT)) |         self.assertEqual(tr.result, str(TEST_TASK_RESULT)) | ||||||
|  |  | ||||||
|  | @ -24,11 +24,9 @@ class DatabaseUserCreationFormTest(TestCase): | ||||||
|         mockuser = Mock(name="osuser") |         mockuser = Mock(name="osuser") | ||||||
|         form.cleaned_data = {"osuser": mockuser, "db_type": DB_TYPES.pgsql} |         form.cleaned_data = {"osuser": mockuser, "db_type": DB_TYPES.pgsql} | ||||||
|         retval = form.save() |         retval = form.save() | ||||||
|         self.assertTrue( |         create_database_user.assert_called_with( | ||||||
|             create_database_user.called_with( |  | ||||||
|             osuser=mockuser, db_type=DB_TYPES.pgsql, commit=True |             osuser=mockuser, db_type=DB_TYPES.pgsql, commit=True | ||||||
|         ) |         ) | ||||||
|         ) |  | ||||||
|         self.assertEqual(retval, create_database_user.return_value) |         self.assertEqual(retval, create_database_user.return_value) | ||||||
| 
 | 
 | ||||||
|     def test_save_m2m_returns_none(self): |     def test_save_m2m_returns_none(self): | ||||||
|  | @ -44,7 +42,7 @@ class UserDatabaseCreationFormTest(TestCase): | ||||||
|         mockuser = Mock(name="mockuser") |         mockuser = Mock(name="mockuser") | ||||||
|         form.cleaned_data = {"db_user": mockuser} |         form.cleaned_data = {"db_user": mockuser} | ||||||
|         retval = form.save() |         retval = form.save() | ||||||
|         self.assertTrue(create_userdatabase.called_with(db_user=mockuser, commit=True)) |         create_userdatabase.assert_called_with(db_user=mockuser, commit=True) | ||||||
|         self.assertEqual(retval, create_userdatabase.return_value) |         self.assertEqual(retval, create_userdatabase.return_value) | ||||||
| 
 | 
 | ||||||
|     def test_save_m2m_returns_none(self): |     def test_save_m2m_returns_none(self): | ||||||
|  | @ -79,20 +77,20 @@ class DatabaseUserAdminTest(TestCase): | ||||||
|     def test_save_model_change(self): |     def test_save_model_change(self): | ||||||
|         objmock = Mock() |         objmock = Mock() | ||||||
|         self.dbuadmin.save_model(Mock(name="request"), objmock, Mock(), True) |         self.dbuadmin.save_model(Mock(name="request"), objmock, Mock(), True) | ||||||
|         self.assertTrue(objmock.create_in_database.not_called()) |         objmock.create_in_database.assert_not_called() | ||||||
| 
 | 
 | ||||||
|     def test_save_model_no_change(self): |     def test_save_model_no_change(self): | ||||||
|         objmock = Mock() |         objmock = Mock() | ||||||
|         self.dbuadmin.save_model(Mock(name="request"), objmock, Mock(), False) |         self.dbuadmin.save_model(Mock(name="request"), objmock, Mock(), False) | ||||||
|         self.assertTrue(objmock.create_in_database.called_with()) |         objmock.create_in_database.assert_called_with() | ||||||
| 
 | 
 | ||||||
|     def test_perform_delete_selected(self): |     def test_perform_delete_selected(self): | ||||||
|         usermock = Mock() |         usermock = Mock() | ||||||
|         selected = Mock() |         selected = Mock() | ||||||
|         selected.all.return_value = [usermock] |         selected.all.return_value = [usermock] | ||||||
|         self.dbuadmin.perform_delete_selected(Mock(name="request"), selected) |         self.dbuadmin.perform_delete_selected(Mock(name="request"), selected) | ||||||
|         self.assertTrue(selected.all.called_with()) |         selected.all.assert_called_with() | ||||||
|         self.assertTrue(usermock.delete.called_with()) |         usermock.delete.assert_called_with() | ||||||
| 
 | 
 | ||||||
|     def test_get_actions(self): |     def test_get_actions(self): | ||||||
|         requestmock = MagicMock(name="request") |         requestmock = MagicMock(name="request") | ||||||
|  | @ -127,20 +125,20 @@ class UserDatabaseAdminTest(TestCase): | ||||||
|     def test_save_model_change(self): |     def test_save_model_change(self): | ||||||
|         objmock = Mock() |         objmock = Mock() | ||||||
|         self.udbadmin.save_model(Mock(name="request"), objmock, Mock(), True) |         self.udbadmin.save_model(Mock(name="request"), objmock, Mock(), True) | ||||||
|         self.assertTrue(objmock.create_in_database.not_called()) |         objmock.create_in_database.assert_not_called() | ||||||
| 
 | 
 | ||||||
|     def test_save_model_no_change(self): |     def test_save_model_no_change(self): | ||||||
|         objmock = Mock() |         objmock = Mock() | ||||||
|         self.udbadmin.save_model(Mock(name="request"), objmock, Mock(), False) |         self.udbadmin.save_model(Mock(name="request"), objmock, Mock(), False) | ||||||
|         self.assertTrue(objmock.create_in_database.called_with()) |         objmock.create_in_database.assert_called_with() | ||||||
| 
 | 
 | ||||||
|     def test_perform_delete_selected(self): |     def test_perform_delete_selected(self): | ||||||
|         userdbmock = Mock() |         userdbmock = Mock() | ||||||
|         selected = Mock() |         selected = Mock() | ||||||
|         selected.all.return_value = [userdbmock] |         selected.all.return_value = [userdbmock] | ||||||
|         self.udbadmin.perform_delete_selected(Mock(name="request"), selected) |         self.udbadmin.perform_delete_selected(Mock(name="request"), selected) | ||||||
|         self.assertTrue(selected.all.called_with()) |         selected.all.assert_called_with() | ||||||
|         self.assertTrue(userdbmock.delete.called_with()) |         userdbmock.delete.assert_called_with() | ||||||
| 
 | 
 | ||||||
|     def test_get_actions(self): |     def test_get_actions(self): | ||||||
|         requestmock = MagicMock(name="request") |         requestmock = MagicMock(name="request") | ||||||
|  |  | ||||||
|  | @ -82,14 +82,12 @@ class AddUserDatabaseFormTest(TestCase): | ||||||
|         ) |         ) | ||||||
|         form.cleaned_data = {"db_type": DB_TYPES.pgsql, "password1": "secret"} |         form.cleaned_data = {"db_type": DB_TYPES.pgsql, "password1": "secret"} | ||||||
|         form.save() |         form.save() | ||||||
|         self.assertTrue( |         create_userdatabase_with_user.assert_called_with( | ||||||
|             create_userdatabase_with_user.called_with( |  | ||||||
|             DB_TYPES.pgsql, |             DB_TYPES.pgsql, | ||||||
|             self.hostingpackage.osuser, |             self.hostingpackage.osuser, | ||||||
|             password="secret", |             password="secret", | ||||||
|             commit=True, |             commit=True, | ||||||
|         ) |         ) | ||||||
|         ) |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class ChangeDatabaseUserPasswordFormTest(TestCase): | class ChangeDatabaseUserPasswordFormTest(TestCase): | ||||||
|  | @ -131,4 +129,4 @@ class ChangeDatabaseUserPasswordFormTest(TestCase): | ||||||
|         ) |         ) | ||||||
|         form.cleaned_data = {"password1": "secret"} |         form.cleaned_data = {"password1": "secret"} | ||||||
|         form.save() |         form.save() | ||||||
|         self.assertTrue(instance.set_password.called_with("secret")) |         instance.set_password.assert_called_with("secret") | ||||||
|  |  | ||||||
							
								
								
									
										1332
									
								
								poetry.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										1332
									
								
								poetry.lock
									
										
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -5,6 +5,7 @@ description = "gnuviechadmin web interface" | ||||||
| authors = ["Jan Dittberner <jan@dittberner.info>"] | authors = ["Jan Dittberner <jan@dittberner.info>"] | ||||||
| license = "AGPL-3+" | license = "AGPL-3+" | ||||||
| readme = "README.rst" | readme = "README.rst" | ||||||
|  | package-mode = false | ||||||
| 
 | 
 | ||||||
| [tool.poetry.dependencies] | [tool.poetry.dependencies] | ||||||
| python = "^3.8" | python = "^3.8" | ||||||
|  | @ -26,6 +27,7 @@ django-filter = "^23.1" | ||||||
| crispy-bootstrap5 = "^2023.10" | crispy-bootstrap5 = "^2023.10" | ||||||
| python-magic = "^0.4.27" | python-magic = "^0.4.27" | ||||||
| isort = "^5.12.0" | isort = "^5.12.0" | ||||||
|  | environs = {extras = ["django"], version = "^11.0.0"} | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| [tool.poetry.group.dev.dependencies] | [tool.poetry.group.dev.dependencies] | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue