From 8e8d6bbe8be3be7f9616830880f620f7226a75fe Mon Sep 17 00:00:00 2001 From: Rebecca Graber Date: Mon, 13 Jan 2025 15:02:04 -0500 Subject: [PATCH 1/9] test: rename admin user in fixture (#5415) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### 💭 Notes Developer-facing changes only. Changes the username of the admin user to `adminuser` in preparation for disallowing the name `admin` as part of https://www.notion.so/kobotoolbox/Anonymous-submissions-dont-work-if-user-named-admin-owns-asset-1767e515f65480608dfcee76ba9b3710 --- .../tests/api/v2/test_api_audit_log.py | 31 +++++++------- .../tests/test_project_history_logs.py | 22 +++++----- .../tests/admin/test_organization_admin.py | 2 +- kobo/apps/trash_bin/tests/test_utils.py | 6 +-- kpi/fixtures/test_data.json | 2 +- kpi/tests/api/v1/test_api_permissions.py | 3 +- .../api/v2/test_api_asset_bulk_actions.py | 2 +- .../test_api_asset_permission_assignment.py | 22 +++++----- kpi/tests/api/v2/test_api_assets.py | 2 +- kpi/tests/api/v2/test_api_permissions.py | 40 +++++++++---------- kpi/tests/api/v2/test_api_users.py | 8 ++-- kpi/tests/test_permissions.py | 2 +- kpi/tests/test_token.py | 4 +- 13 files changed, 74 insertions(+), 72 deletions(-) diff --git a/kobo/apps/audit_log/tests/api/v2/test_api_audit_log.py b/kobo/apps/audit_log/tests/api/v2/test_api_audit_log.py index b25536f41b..ff73c25cd1 100644 --- a/kobo/apps/audit_log/tests/api/v2/test_api_audit_log.py +++ b/kobo/apps/audit_log/tests/api/v2/test_api_audit_log.py @@ -200,7 +200,7 @@ def test_list_as_superuser(self): action=AuditAction.DELETE, log_type=AuditType.DATA_EDITING, ) - self.login_user(username='admin', password='pass') + self.login_user(username='adminuser', password='pass') expected = [ { 'app_label': 'foo', @@ -242,7 +242,7 @@ def test_filter_list(self): action=AuditAction.DELETE, log_type=AuditType.DATA_EDITING, ) - self.login_user(username='admin', password='pass') + self.login_user(username='adminuser', password='pass') expected = [ { 'app_label': 'foo', @@ -363,14 +363,14 @@ def test_regular_user_access_returns_forbidden(self): self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_show_all_access_logs_succeeds_for_superuser(self): - self.force_login_user(User.objects.get(username='admin')) + self.force_login_user(User.objects.get(username='adminuser')) response = self.client.get(self.url) self.assertEqual(response.status_code, status.HTTP_200_OK) def test_show_all_access_logs_includes_all_users(self): user1 = User.objects.get(username='someuser') user2 = User.objects.get(username='anotheruser') - admin = User.objects.get(username='admin') + admin = User.objects.get(username='adminuser') AccessLog.objects.create(user=user1) AccessLog.objects.create(user=user2) self.force_login_user(admin) @@ -384,7 +384,7 @@ def test_endpoint_groups_submissions(self): # this is just to ensure that we're using the grouping query user1 = User.objects.get(username='someuser') user2 = User.objects.get(username='anotheruser') - admin = User.objects.get(username='admin') + admin = User.objects.get(username='adminuser') self.force_login_user(admin) jan_1_1_30_am = datetime.fromisoformat('2024-01-01T01:30:25.123456+00:00') @@ -440,10 +440,9 @@ def test_endpoint_groups_submissions(self): def test_can_search_access_logs_by_username(self): user1 = User.objects.get(username='someuser') user2 = User.objects.get(username='anotheruser') - admin = User.objects.get(username='admin') AccessLog.objects.create(user=user1) AccessLog.objects.create(user=user2) - self.force_login_user(User.objects.get(username='admin')) + self.force_login_user(User.objects.get(username='adminuser')) response = self.client.get(f'{self.url}?q=user__username:anotheruser') # only return logs from user1 @@ -456,7 +455,7 @@ def test_can_search_access_logs_by_username_including_submission_groups( ): user1 = User.objects.get(username='someuser') user2 = User.objects.get(username='anotheruser') - admin = User.objects.get(username='admin') + admin = User.objects.get(username='adminuser') self.force_login_user(admin) # create two submissions that will be grouped together @@ -489,7 +488,7 @@ def test_can_search_access_logs_by_username_including_submission_groups( def test_can_search_access_logs_by_date(self): user = User.objects.get(username='someuser') with skip_login_access_log(): - self.client.force_login(User.objects.get(username='admin')) + self.client.force_login(User.objects.get(username='adminuser')) tomorrow = timezone.now() + timedelta(days=1) tomorrow_str = tomorrow.strftime('%Y-%m-%d') # create one log from today and one from tomorrow @@ -514,7 +513,7 @@ def test_can_search_access_logs_by_date(self): def test_can_search_access_logs_by_date_including_submission_groups(self): user = User.objects.get(username='someuser') with skip_login_access_log(): - self.client.force_login(User.objects.get(username='admin')) + self.client.force_login(User.objects.get(username='adminuser')) tomorrow = timezone.now() + timedelta(days=1) two_days_from_now = tomorrow + timedelta(days=1) tomorrow_str = tomorrow.strftime('%Y-%m-%d') @@ -649,7 +648,7 @@ def get_endpoint_basename(self): def setUp(self): super().setUp() - self.user = User.objects.get(username='admin') + self.user = User.objects.get(username='adminuser') self.asset = Asset.objects.get(pk=1) self.force_login_user(self.user) @@ -705,7 +704,7 @@ def test_export_for_user_returns_success(self): self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) def test_export_for_superuser_commences(self): - self.force_login_user(User.objects.get(username='admin')) + self.force_login_user(User.objects.get(username='adminuser')) response = self.client.post(self.url) self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) @@ -790,12 +789,12 @@ def test_regular_user_cannot_export_access_logs(self): self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_export_access_logs_for_superuser_returns_success(self): - self.force_login_user(User.objects.get(username='admin')) + self.force_login_user(User.objects.get(username='adminuser')) response = self.client.post(self.url) self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) def test_superuser_create_export_task_on_post(self): - test_superuser = User.objects.get(username='admin') + test_superuser = User.objects.get(username='adminuser') self.force_login_user(test_superuser) response = self.client.post(self.url) @@ -811,7 +810,7 @@ def test_superuser_create_export_task_on_post(self): self.assertTrue(task.get_all_logs) def test_superuser_get_status_tasks(self): - test_superuser = User.objects.get(username='admin') + test_superuser = User.objects.get(username='adminuser') self.force_login_user(test_superuser) AccessLogExportTask.objects.create( @@ -844,7 +843,7 @@ def test_permission_denied_for_non_superusers_on_get_status(self): self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_multiple_export_tasks_not_allowed(self): - test_superuser = User.objects.get(username='admin') + test_superuser = User.objects.get(username='adminuser') self.force_login_user(test_superuser) response_first = self.client.post(self.url) diff --git a/kobo/apps/audit_log/tests/test_project_history_logs.py b/kobo/apps/audit_log/tests/test_project_history_logs.py index 4af16d297f..34a88056ee 100644 --- a/kobo/apps/audit_log/tests/test_project_history_logs.py +++ b/kobo/apps/audit_log/tests/test_project_history_logs.py @@ -57,7 +57,7 @@ class TestProjectHistoryLogs(BaseAuditLogTestCase): def setUp(self): super().setUp() # log in as admin - user = User.objects.get(username='admin') + user = User.objects.get(username='adminuser') self.user = user self.client.force_login(user=user) # use the same asset @@ -1390,7 +1390,9 @@ def test_no_logs_if_bulk_request_fails(self): 'permission': reverse( 'api_v2:permission-detail', kwargs={'codename': PERM_VIEW_ASSET} ), - 'user': reverse('api_v2:user-kpi-detail', kwargs={'username': 'admin'}), + 'user': reverse( + 'api_v2:user-kpi-detail', kwargs={'username': 'adminuser'} + ), }, ] self.client.post( @@ -1476,9 +1478,9 @@ def test_no_log_created_for_non_project_transfer(self): ) self.assertEqual(ProjectHistoryLog.objects.count(), 0) - @data('admin', 'someuser') + @data('adminuser', 'someuser') def test_log_created_for_duplicate_submission(self, duplicating_user): - self._add_submission('admin') + self._add_submission('adminuser') submissions = self.asset.deployment.get_submissions( self.asset.owner, fields=['_id'] ) @@ -1505,7 +1507,7 @@ def test_log_created_for_duplicate_submission(self, duplicating_user): ) self.assertEqual(metadata['submission']['submitted_by'], duplicating_user) - @data('admin', None) + @data('adminuser', None) def test_update_one_submission_content(self, username): self._add_submission(username) submissions_xml = self.asset.deployment.get_submissions( @@ -1550,7 +1552,7 @@ def test_update_one_submission_content(self, username): self.assertEqual(log.metadata['submission']['submitted_by'], submitted_by) def test_update_multiple_submissions_content(self): - self._add_submission('admin') + self._add_submission('adminuser') self._add_submission('someuser') self._add_submission(None) @@ -1574,7 +1576,7 @@ def test_update_multiple_submissions_content(self): self.assertEqual(ProjectHistoryLog.objects.count(), 3) log1 = ProjectHistoryLog.objects.filter( - metadata__submission__submitted_by='admin' + metadata__submission__submitted_by='adminuser' ).first() self._check_common_metadata(log1.metadata, PROJECT_HISTORY_LOG_PROJECT_SUBTYPE) self.assertEqual(log1.action, AuditAction.MODIFY_SUBMISSION) @@ -1591,7 +1593,7 @@ def test_update_multiple_submissions_content(self): self._check_common_metadata(log2.metadata, PROJECT_HISTORY_LOG_PROJECT_SUBTYPE) self.assertEqual(log2.action, AuditAction.MODIFY_SUBMISSION) - @data('admin', None) + @data('adminuser', None) def test_update_single_submission_validation_status(self, username): self._add_submission(username) submissions_json = self.asset.deployment.get_submissions( @@ -1615,7 +1617,7 @@ def test_update_single_submission_validation_status(self, username): self.assertEqual(log_metadata['submission']['status'], 'On Hold') def test_multiple_submision_validation_statuses(self): - self._add_submission('admin') + self._add_submission('adminuser') self._add_submission('someuser') self._add_submission(None) submissions_json = self.asset.deployment.get_submissions( @@ -1639,7 +1641,7 @@ def test_multiple_submision_validation_statuses(self): self.assertEqual(ProjectHistoryLog.objects.count(), 3) log1 = ProjectHistoryLog.objects.filter( - metadata__submission__submitted_by='admin' + metadata__submission__submitted_by='adminuser' ).first() self._check_common_metadata(log1.metadata, PROJECT_HISTORY_LOG_PROJECT_SUBTYPE) self.assertEqual(log1.action, AuditAction.MODIFY_SUBMISSION) diff --git a/kobo/apps/organizations/tests/admin/test_organization_admin.py b/kobo/apps/organizations/tests/admin/test_organization_admin.py index e27b48b3fc..d6376e01dd 100644 --- a/kobo/apps/organizations/tests/admin/test_organization_admin.py +++ b/kobo/apps/organizations/tests/admin/test_organization_admin.py @@ -19,7 +19,7 @@ def setUp(self): self.someuser = User.objects.get(username='someuser') self.anotheruser = User.objects.get(username='anotheruser') - self.admin = User.objects.get(username='admin') + self.admin = User.objects.get(username='adminuser') self.organization.add_user(self.someuser) # someuser becomes the owner diff --git a/kobo/apps/trash_bin/tests/test_utils.py b/kobo/apps/trash_bin/tests/test_utils.py index 5d625ddec0..093374019b 100644 --- a/kobo/apps/trash_bin/tests/test_utils.py +++ b/kobo/apps/trash_bin/tests/test_utils.py @@ -28,7 +28,7 @@ def test_delete_user(self): someuser = get_user_model().objects.get(username='someuser') someuser_uid = someuser.extra_details.uid someuser_id = someuser.pk - admin = get_user_model().objects.get(username='admin') + admin = get_user_model().objects.get(username='adminuser') # Create dummy logs for someuser audit_log = AuditLog.objects.create( @@ -114,7 +114,7 @@ def test_move_to_trash(self): def test_put_back(self): self.test_move_to_trash() someuser = get_user_model().objects.get(username='someuser') - admin = get_user_model().objects.get(username='admin') + admin = get_user_model().objects.get(username='adminuser') assert not someuser.is_active account_trash = AccountTrash.objects.get(user=someuser) periodic_task_id = account_trash.periodic_task_id @@ -154,7 +154,7 @@ def test_remove_user(self): everything from their account is deleted except their username """ someuser = get_user_model().objects.get(username='someuser') - admin = get_user_model().objects.get(username='admin') + admin = get_user_model().objects.get(username='adminuser') someuser.extra_details.data['name'] = 'someuser' someuser.extra_details.save(update_fields=['data']) diff --git a/kpi/fixtures/test_data.json b/kpi/fixtures/test_data.json index 2c6fee0074..5ce2c561d8 100644 --- a/kpi/fixtures/test_data.json +++ b/kpi/fixtures/test_data.json @@ -12,7 +12,7 @@ "last_name": "", "password": "pbkdf2_sha256$15000$fsiY4ICrvcIa$z8esAlmJ/ip0sR7TZkmpxxt4CWw1O1+cfWLbZ3/ip4E=", "user_permissions": [], - "username": "admin" + "username": "adminuser" }, "model": "kobo_auth.user", "pk": 1 diff --git a/kpi/tests/api/v1/test_api_permissions.py b/kpi/tests/api/v1/test_api_permissions.py index 9abb417f90..d63587c01b 100644 --- a/kpi/tests/api/v1/test_api_permissions.py +++ b/kpi/tests/api/v1/test_api_permissions.py @@ -5,6 +5,7 @@ from kobo.apps.kobo_auth.shortcuts import User from kpi.constants import ASSET_TYPE_COLLECTION from kpi.models import Asset, ObjectPermission + # importing module instead of the class, avoid running the tests twice from kpi.tests.api.v2 import test_api_permissions from kpi.tests.kpi_test_case import KpiTestCase @@ -40,7 +41,7 @@ class ApiAssignedPermissionsTestCase(KpiTestCase): def setUp(self): super().setUp() self.anon = get_anonymous_user() - self.super = User.objects.get(username='admin') + self.super = User.objects.get(username='adminuser') self.super_password = 'pass' self.someuser = User.objects.get(username='someuser') self.someuser_password = 'someuser' diff --git a/kpi/tests/api/v2/test_api_asset_bulk_actions.py b/kpi/tests/api/v2/test_api_asset_bulk_actions.py index 7831ec4358..faacde197d 100644 --- a/kpi/tests/api/v2/test_api_asset_bulk_actions.py +++ b/kpi/tests/api/v2/test_api_asset_bulk_actions.py @@ -92,7 +92,7 @@ def _get_asset_detail_results(self, asset_uid: str) -> Response: def _login_superuser(self): self.client.logout() - self.client.login(username='admin', password='pass') + self.client.login(username='adminuser', password='pass') def _login_user(self, userpass: str): self.client.logout() diff --git a/kpi/tests/api/v2/test_api_asset_permission_assignment.py b/kpi/tests/api/v2/test_api_asset_permission_assignment.py index 9162bce1e4..f0f8b5fcd7 100644 --- a/kpi/tests/api/v2/test_api_asset_permission_assignment.py +++ b/kpi/tests/api/v2/test_api_asset_permission_assignment.py @@ -30,11 +30,11 @@ class BaseApiAssetPermissionTestCase(PermissionAssignmentTestCaseMixin, KpiTestC URL_NAMESPACE = ROUTER_URL_NAMESPACE def setUp(self): - self.admin = User.objects.get(username='admin') + self.admin = User.objects.get(username='adminuser') self.someuser = User.objects.get(username='someuser') self.anotheruser = User.objects.get(username='anotheruser') - self.client.login(username='admin', password='pass') + self.client.login(username='adminuser', password='pass') self.asset = self.create_asset('An asset to be shared') def _grant_perm_as_logged_in_user(self, username, codename): @@ -342,7 +342,7 @@ def test_cannot_assign_permissions_to_owner(self): self._grant_perm_as_logged_in_user('someuser', PERM_MANAGE_ASSET) self.client.login(username='someuser', password='someuser') response = self._assign_perms_as_logged_in_user( - [('admin', PERM_VIEW_ASSET), ('admin', PERM_CHANGE_ASSET)] + [('adminuser', PERM_VIEW_ASSET), ('adminuser', PERM_CHANGE_ASSET)] ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) @@ -381,14 +381,14 @@ def test_owner_can_assign_permissions(self): ), sorted( [ - ('admin', PERM_VIEW_ASSET), - ('admin', PERM_CHANGE_ASSET), - ('admin', PERM_MANAGE_ASSET), - ('admin', PERM_ADD_SUBMISSIONS), - ('admin', PERM_DELETE_SUBMISSIONS), - ('admin', PERM_VIEW_SUBMISSIONS), - ('admin', PERM_CHANGE_SUBMISSIONS), - ('admin', PERM_VALIDATE_SUBMISSIONS), + ('adminuser', PERM_VIEW_ASSET), + ('adminuser', PERM_CHANGE_ASSET), + ('adminuser', PERM_MANAGE_ASSET), + ('adminuser', PERM_ADD_SUBMISSIONS), + ('adminuser', PERM_DELETE_SUBMISSIONS), + ('adminuser', PERM_VIEW_SUBMISSIONS), + ('adminuser', PERM_CHANGE_SUBMISSIONS), + ('adminuser', PERM_VALIDATE_SUBMISSIONS), ('someuser', PERM_VIEW_ASSET), ('anotheruser', PERM_VIEW_ASSET), ('anotheruser', PERM_CHANGE_ASSET), diff --git a/kpi/tests/api/v2/test_api_assets.py b/kpi/tests/api/v2/test_api_assets.py index 8027cbff03..70d7615c04 100644 --- a/kpi/tests/api/v2/test_api_assets.py +++ b/kpi/tests/api/v2/test_api_assets.py @@ -1098,7 +1098,7 @@ def test_report_submissions(self): # Verify an admin user has access to the data self.client.logout() - self.client.login(username='admin', password='pass') + self.client.login(username='adminuser', password='pass') response = self.client.get(report_url) self.assertEqual(response.status_code, status.HTTP_200_OK) diff --git a/kpi/tests/api/v2/test_api_permissions.py b/kpi/tests/api/v2/test_api_permissions.py index ff63d5b49b..23eea36fd4 100644 --- a/kpi/tests/api/v2/test_api_permissions.py +++ b/kpi/tests/api/v2/test_api_permissions.py @@ -64,7 +64,7 @@ def setUp(self): KpiTestCase.setUp(self) self.anon = get_anonymous_user() - self.admin = User.objects.get(username='admin') + self.admin = User.objects.get(username='adminuser') self.admin_password = 'pass' self.someuser = User.objects.get(username='someuser') self.someuser_password = 'someuser' @@ -125,7 +125,7 @@ class ApiPermissionsTestCase(KpiTestCase): URL_NAMESPACE = ROUTER_URL_NAMESPACE def setUp(self): - self.admin = User.objects.get(username='admin') + self.admin = User.objects.get(username='adminuser') self.admin_password = 'pass' self.someuser = User.objects.get(username='someuser') self.someuser_password = 'someuser' @@ -147,7 +147,7 @@ def test_own_asset_in_asset_list(self): self.admin_password) def test_viewable_asset_in_asset_list(self): - # Give "someuser" view permissions on an asset owned by "admin". + # Give "someuser" view permissions on an asset owned by "adminuser". self.add_perm(self.admin_asset, self.someuser, 'view_') # Test that "someuser" can now view the asset. @@ -157,7 +157,7 @@ def test_viewable_asset_in_asset_list(self): def test_non_viewable_asset_not_in_asset_list(self): # Wow, that's quite a function name... # Ensure that "someuser" doesn't have permission to view the survey - # asset owned by "admin". + # asset owned by "adminuser". perm_name = self._get_perm_name('view_', self.admin_asset) self.assertFalse(self.someuser.has_perm(perm_name, self.admin_asset)) @@ -166,8 +166,8 @@ def test_non_viewable_asset_not_in_asset_list(self): self.someuser_password, viewable=False) def test_inherited_viewable_assets_in_asset_list(self): - # Give "someuser" view permissions on a collection owned by "admin" and - # add an asset also owned by "admin" to that collection. + # Give "someuser" view permissions on a collection owned by "adminuser" and + # add an asset also owned by "adminuser" to that collection. self.add_perm(self.admin_asset, self.someuser, 'view_') self.add_to_collection(self.admin_asset, self.admin_collection, @@ -216,7 +216,7 @@ def test_non_viewable_asset_inheritance_conflict(self): self.someuser_password, viewable=False) def test_viewable_asset_not_deletable(self): - # Give "someuser" view permissions on an asset owned by "admin". + # Give "someuser" view permissions on an asset owned by "adminuser". self.add_perm(self.admin_asset, self.someuser, 'view_') # Confirm that "someuser" is not allowed to delete the asset. @@ -231,8 +231,8 @@ def test_viewable_asset_not_deletable(self): self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_inherited_viewable_asset_not_deletable(self): - # Give "someuser" view permissions on a collection owned by "admin" and - # add an asset also owned by "admin" to that collection. + # Give "someuser" view permissions on a collection owned by "adminuser" and + # add an asset also owned by "adminuser" to that collection. self.add_perm(self.admin_asset, self.someuser, 'view_') self.add_to_collection(self.admin_asset, self.admin_collection, self.admin, self.admin_password) @@ -398,7 +398,7 @@ def test_shared_asset_manage_asset_remove_another_non_owners_permissions_allowed assert not yetanotheruser.has_perm(PERM_VIEW_ASSET, new_asset) def test_copy_permissions_between_assets(self): - # Give "someuser" edit permissions on an asset owned by "admin" + # Give "someuser" edit permissions on an asset owned by "adminuser" self.add_perm(self.admin_asset, self.someuser, 'change_') # Confirm that "someuser" has received the implied permissions expected_perms = [PERM_CHANGE_ASSET, PERM_VIEW_ASSET] @@ -441,7 +441,7 @@ def test_copy_permissions_between_assets(self): ) def test_cannot_copy_permissions_between_non_owned_assets(self): - # Give "someuser" view permissions on an asset owned by "admin" + # Give "someuser" view permissions on an asset owned by "adminuser" self.add_perm(self.admin_asset, self.someuser, 'view_') self.assertTrue(self.someuser.has_perm(PERM_VIEW_ASSET, self.admin_asset)) # Create another asset to receive the copied permissions @@ -449,7 +449,7 @@ def test_cannot_copy_permissions_between_non_owned_assets(self): name='destination asset', owner=self.admin, owner_password=self.admin_password ) - # Give "someuser" edit permissions on the new asset owned by "admin" + # Give "someuser" edit permissions on the new asset owned by "adminuser" self.add_perm(new_asset, self.someuser, 'change_') self.assertTrue(self.someuser.has_perm(PERM_CHANGE_ASSET, new_asset)) new_asset_perms_before_copy_attempt = new_asset.get_users_with_perms( @@ -479,7 +479,7 @@ def test_cannot_copy_permissions_between_non_owned_assets(self): ) def test_user_cannot_copy_permissions_from_non_viewable_asset(self): - # Make sure "someuser" cannot view the asset owned by "admin" + # Make sure "someuser" cannot view the asset owned by "adminuser" self.assertFalse( self.someuser.has_perm(PERM_VIEW_ASSET, self.admin_asset) ) @@ -517,7 +517,7 @@ def test_user_cannot_copy_permissions_from_non_viewable_asset(self): ) def test_user_cannot_copy_permissions_to_non_editable_asset(self): - # Give "someuser" view permissions on an asset owned by "admin" + # Give "someuser" view permissions on an asset owned by "adminuser" self.add_perm(self.admin_asset, self.someuser, 'view_') self.assertTrue(self.someuser.has_perm(PERM_VIEW_ASSET, self.admin_asset)) # Create another asset to receive the copied permissions @@ -525,7 +525,7 @@ def test_user_cannot_copy_permissions_to_non_editable_asset(self): name='destination asset', owner=self.admin, owner_password=self.admin_password ) - # Give "someuser" view permissions on the new asset owned by "admin" + # Give "someuser" view permissions on the new asset owned by "adminuser" self.add_perm(new_asset, self.someuser, 'view_') self.assertTrue(self.someuser.has_perm(PERM_VIEW_ASSET, new_asset)) # Take note of the destination asset's permissions to make sure they @@ -563,7 +563,7 @@ def test_own_collection_in_collection_list(self): self.admin_password) def test_viewable_collection_in_collection_list(self): - # Give "someuser" view permissions on a collection owned by "admin". + # Give "someuser" view permissions on a collection owned by "adminuser". self.add_perm(self.admin_collection, self.someuser, 'view_') # Test that "someuser" can now view the collection. @@ -573,7 +573,7 @@ def test_viewable_collection_in_collection_list(self): def test_non_viewable_collection_not_in_collection_list(self): # Wow, that's quite a function name... # Ensure that "someuser" doesn't have permission to view the survey - # collection owned by "admin". + # collection owned by "adminuser". perm_name = self._get_perm_name('view_', self.admin_collection) self.assertFalse(self.someuser.has_perm(perm_name, self.admin_collection)) @@ -628,7 +628,7 @@ def test_non_viewable_collection_inheritance_conflict(self): self.someuser_password, viewable=False) def test_viewable_collection_not_deletable(self): - # Give "someuser" view permissions on a collection owned by "admin". + # Give "someuser" view permissions on a collection owned by "adminuser". self.add_perm(self.admin_collection, self.someuser, 'view_') # Confirm that "someuser" is not allowed to delete the collection. @@ -645,7 +645,7 @@ def test_viewable_collection_not_deletable(self): self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_inherited_viewable_collection_not_deletable(self): - # Give "someuser" view permissions on a collection owned by "admin". + # Give "someuser" view permissions on a collection owned by "adminuser". self.add_perm(self.admin_collection, self.someuser, 'view_') # Confirm that "someuser" is not allowed to delete the child collection. @@ -684,7 +684,7 @@ class ApiAssignedPermissionsTestCase(PermissionAssignmentTestCaseMixin, KpiTestC def setUp(self): super().setUp() self.anon = get_anonymous_user() - self.super = User.objects.get(username='admin') + self.super = User.objects.get(username='adminuser') self.super_password = 'pass' self.someuser = User.objects.get(username='someuser') self.someuser_password = 'someuser' diff --git a/kpi/tests/api/v2/test_api_users.py b/kpi/tests/api/v2/test_api_users.py index e3f78887bf..f089fd37b7 100644 --- a/kpi/tests/api/v2/test_api_users.py +++ b/kpi/tests/api/v2/test_api_users.py @@ -12,7 +12,7 @@ class UserListTests(BaseTestCase): URL_NAMESPACE = ROUTER_URL_NAMESPACE def setUp(self): - self.client.login(username='admin', password='pass') + self.client.login(username='adminuser', password='pass') def test_user_list_allowed_superuser(self): """ @@ -23,11 +23,11 @@ def test_user_list_allowed_superuser(self): assert response.status_code == status.HTTP_200_OK # test filtering by username - q = '?q=admin' + q = '?q=adminuser' response = self.client.get(url + q, format='json') assert response.status_code == status.HTTP_200_OK assert len(response.data['results']) == 1 - assert response.data['results'][0]['username'] == 'admin' + assert response.data['results'][0]['username'] == 'adminuser' def test_user_list_forbidden_non_superuser(self): """ @@ -52,7 +52,7 @@ def test_user_page_succeeds(self): """ we can retrieve user details """ - username = 'admin' + username = 'adminuser' url = reverse(self._get_endpoint('user-kpi-detail'), args=[username]) response = self.client.get(url, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) diff --git a/kpi/tests/test_permissions.py b/kpi/tests/test_permissions.py index 337d7833c5..f2f2cba51a 100644 --- a/kpi/tests/test_permissions.py +++ b/kpi/tests/test_permissions.py @@ -165,7 +165,7 @@ class PermissionsTestCase(BasePermissionsTestCase): fixtures = ['test_data'] def setUp(self): - self.admin = User.objects.get(username='admin') + self.admin = User.objects.get(username='adminuser') self.someuser = User.objects.get(username='someuser') self.anotheruser = User.objects.get(username='anotheruser') diff --git a/kpi/tests/test_token.py b/kpi/tests/test_token.py index 4433e6eb32..ef17551a45 100644 --- a/kpi/tests/test_token.py +++ b/kpi/tests/test_token.py @@ -1,6 +1,6 @@ # coding: utf-8 -from django.urls import reverse from django.contrib.auth import get_user_model +from django.urls import reverse from rest_framework import status from rest_framework.authtoken.models import Token @@ -79,7 +79,7 @@ def test_regular_user_cannot_get_token_for_another_user(self): def test_superuser_can_get_token_for_another_user(self): self.client.logout() - self.client.login(username='admin', password='pass') + self.client.login(username='adminuser', password='pass') response = self.client.get(self.url, {'username': self.username}) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( From 9189ac979e9db4c65696b36b94fa6094966b3fda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20L=C3=A9ger?= Date: Tue, 14 Jan 2025 09:40:34 -0500 Subject: [PATCH 2/9] fix: handle case sensitivity for "Settings" sheet name with explicit error TASK-1353 (#5417) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### đŸ“Ŗ Summary Improved error handling for case-sensitive "Settings" sheet names. ### 📖 Description This update addresses an issue where a sheet named "Settings" with uppercase or mixed case letters causes unexpected behavior. An explicit error message is now raised to alert users of the case sensitivity, ensuring they can resolve the issue easily. --- kpi/mixins/xls_exportable.py | 4 +-- kpi/serializers/v2/deployment.py | 11 +++---- kpi/tests/api/v2/test_api_assets.py | 46 ++++++++++++++++++++++++++--- 3 files changed, 49 insertions(+), 12 deletions(-) diff --git a/kpi/mixins/xls_exportable.py b/kpi/mixins/xls_exportable.py index 14c0ba7825..76d08d57fc 100644 --- a/kpi/mixins/xls_exportable.py +++ b/kpi/mixins/xls_exportable.py @@ -14,9 +14,7 @@ class XlsExportableMixin: - def ordered_xlsform_content(self, - kobo_specific_types=False, - append=None): + def ordered_xlsform_content(self, kobo_specific_types=False, append=None): # currently, this method depends on "FormpackXLSFormUtilsMixin" content = copy.deepcopy(self.content) if append: diff --git a/kpi/serializers/v2/deployment.py b/kpi/serializers/v2/deployment.py index 1bd57729c1..da48c8eef5 100644 --- a/kpi/serializers/v2/deployment.py +++ b/kpi/serializers/v2/deployment.py @@ -1,7 +1,7 @@ -# coding: utf-8 from django.conf import settings from pyxform.errors import PyXFormError from rest_framework import serializers +from xlsxwriter.exceptions import DuplicateWorksheetName from .asset import AssetSerializer @@ -16,8 +16,9 @@ class DeploymentSerializer(serializers.Serializer): def _raise_unless_current_version(asset, validated_data): # Stop if the requester attempts to deploy any version of the asset # except the current one - if 'version_id' in validated_data and \ - validated_data['version_id'] != str(asset.version_id): + if 'version_id' in validated_data and validated_data[ + 'version_id' + ] != str(asset.version_id): raise NotImplementedError( 'Only the current version_id can be deployed') @@ -35,8 +36,8 @@ def create(self, validated_data): # 'deployed' boolean value try: asset.deploy(backend=backend_id, active=validated_data.get('active', False)) - except PyXFormError as e: - raise serializers.ValidationError({'error': (f'ODK Validation Error: {e}')}) + except (DuplicateWorksheetName, PyXFormError) as e: + raise serializers.ValidationError({'error': str(e)}) return asset.deployment def update(self, instance, validated_data): diff --git a/kpi/tests/api/v2/test_api_assets.py b/kpi/tests/api/v2/test_api_assets.py index fa60d507d5..708df0b9d8 100644 --- a/kpi/tests/api/v2/test_api_assets.py +++ b/kpi/tests/api/v2/test_api_assets.py @@ -1862,10 +1862,48 @@ def test_asset_deployment_validation_error(self): self.assertEqual(deploy_response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual( deploy_response.data['error'], - ( - 'ODK Validation Error: ' - "The survey element named 'Enter_an_int_number' has no label or hint." - ), + "The survey element named 'Enter_an_int_number' has no label or hint.", + ) + + def test_asset_deployment_with_sheet_name_Settings(self): # noqa + content = { + 'schema': '1', + 'survey': [ + { + 'name': 'Enter_a_float_number', + 'type': 'decimal', + 'label': ['Enter a float number'], + 'required': False, + }, + ], + 'choices': [], + 'settings': {}, + 'Settings': [], # simulate sheet name called `Settings` on import + } + assets_url = reverse(self._get_endpoint('asset-list')) + asset_response = self.client.post( + assets_url, + {'content': content, 'asset_type': 'survey'}, + format='json', + ) + asset = Asset.objects.get(uid=asset_response.data.get('uid')) + + deployment_url = reverse( + self._get_endpoint('asset-deployment'), kwargs={'uid': asset.uid} + ) + + deploy_response = self.client.post( + deployment_url, + { + 'backend': 'mock', + 'active': True, + }, + ) + + assert deploy_response.status_code == status.HTTP_400_BAD_REQUEST + assert ( + "Sheetname 'Settings', with case ignored, is already in use" + in deploy_response.data['error'] ) @patch('kpi.views.v2.asset.ProjectHistoryLog.create_from_deployment_request') From dddd6198cc30b57140fcffa7014e7399c756ab03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20L=C3=A9ger?= Date: Tue, 14 Jan 2025 14:10:31 -0500 Subject: [PATCH 3/9] fix: catch additional XLSForm validation errors during deployment (#5419) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### đŸ“Ŗ Summary Enhanced error handling to catch more validation errors in XLSForm during deployment. ### 📖 Description Validation error handling for XLSForm deployment has been enhanced to catch a wider range of issues. This prevents the display of a generic 500 error in the deployment modal and instead returns the explicit error message. ### Notes Supersedes #5417, #5411 and #5403 --- kpi/serializers/v2/deployment.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/kpi/serializers/v2/deployment.py b/kpi/serializers/v2/deployment.py index da48c8eef5..c82d755e86 100644 --- a/kpi/serializers/v2/deployment.py +++ b/kpi/serializers/v2/deployment.py @@ -1,5 +1,7 @@ from django.conf import settings from pyxform.errors import PyXFormError +from pyxform.validators.enketo_validate import EnketoValidateError +from pyxform.validators.odk_validate import ODKValidateError from rest_framework import serializers from xlsxwriter.exceptions import DuplicateWorksheetName @@ -36,7 +38,12 @@ def create(self, validated_data): # 'deployed' boolean value try: asset.deploy(backend=backend_id, active=validated_data.get('active', False)) - except (DuplicateWorksheetName, PyXFormError) as e: + except ( + DuplicateWorksheetName, + EnketoValidateError, + PyXFormError, + ODKValidateError, + ) as e: raise serializers.ValidationError({'error': str(e)}) return asset.deployment From b4aa1b750e774465cc46b3cbe9004c8db9f5be4c Mon Sep 17 00:00:00 2001 From: jnm Date: Tue, 14 Jan 2025 15:01:18 -0500 Subject: [PATCH 4/9] feat: export background-geopoint as GPS field (#5420) See kobotoolbox/formpack#327. This change just updates the formpack commit hash used by KPI --- dependencies/pip/dev_requirements.txt | 2 +- dependencies/pip/requirements.in | 2 +- dependencies/pip/requirements.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dependencies/pip/dev_requirements.txt b/dependencies/pip/dev_requirements.txt index 93f2c64a33..8c278a8174 100644 --- a/dependencies/pip/dev_requirements.txt +++ b/dependencies/pip/dev_requirements.txt @@ -8,7 +8,7 @@ # via -r dependencies/pip/requirements.in -e git+https://github.com/trevoriancox/django-dont-vary-on.git@01a804122b7ddcdc22f50b40993f91c27b03bef6#egg=django-dont-vary-on # via -r dependencies/pip/requirements.in --e git+https://github.com/kobotoolbox/formpack.git@5a8cda8cc37a56a2313c98b88fcacc18049ef477#egg=formpack +-e git+https://github.com/kobotoolbox/formpack.git@894d285b1d2955b2990500427158e845af32259d#egg=formpack # via -r dependencies/pip/requirements.in -e git+https://github.com/dimagi/python-digest@5c94bb74516b977b60180ee832765c0695ff2b56#egg=python_digest # via -r dependencies/pip/requirements.in diff --git a/dependencies/pip/requirements.in b/dependencies/pip/requirements.in index 5db53d0e5e..93ec925c84 100644 --- a/dependencies/pip/requirements.in +++ b/dependencies/pip/requirements.in @@ -2,7 +2,7 @@ # https://github.com/bndr/pipreqs is a handy utility, too. # formpack --e git+https://github.com/kobotoolbox/formpack.git@5a8cda8cc37a56a2313c98b88fcacc18049ef477#egg=formpack +-e git+https://github.com/kobotoolbox/formpack.git@894d285b1d2955b2990500427158e845af32259d#egg=formpack # More up-to-date version of django-digest than PyPI seems to have. # Also, python-digest is an unlisted dependency thereof. diff --git a/dependencies/pip/requirements.txt b/dependencies/pip/requirements.txt index 70dee7d3ea..5ee0ef1b90 100644 --- a/dependencies/pip/requirements.txt +++ b/dependencies/pip/requirements.txt @@ -8,7 +8,7 @@ # via -r dependencies/pip/requirements.in -e git+https://github.com/trevoriancox/django-dont-vary-on.git@01a804122b7ddcdc22f50b40993f91c27b03bef6#egg=django-dont-vary-on # via -r dependencies/pip/requirements.in --e git+https://github.com/kobotoolbox/formpack.git@5a8cda8cc37a56a2313c98b88fcacc18049ef477#egg=formpack +-e git+https://github.com/kobotoolbox/formpack.git@894d285b1d2955b2990500427158e845af32259d#egg=formpack # via -r dependencies/pip/requirements.in -e git+https://github.com/dimagi/python-digest@5c94bb74516b977b60180ee832765c0695ff2b56#egg=python_digest # via -r dependencies/pip/requirements.in From 89bd9b7968ac89bdb2d7ed8f889fb2a93aa6e944 Mon Sep 17 00:00:00 2001 From: Rebecca Graber Date: Tue, 14 Jan 2025 15:11:37 -0500 Subject: [PATCH 5/9] fix(auditLogs): correctly serialize audit logs from deleted users (#5418) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### đŸ“Ŗ Summary Fixes a 500 error from the various audit log endpoints when there are actions by deleted users. ### 📖 Description Return empty user and username fields in the response if the user was deleted after the log was created. This applies to `/api/v2/audit-logs`, `api/v2/assets//history`, and `api/v2/project-history-logs`. ### 💭 Notes Small fix in the serializer. Also updates the ProjectHistoryLog serializer to inherit from the AuditLogSerializer so we don't have to duplicate the method fields. ### 👀 Preview steps Bug template: 1. ℹī¸ have a super user account and a project 2. Create a new user (user1) and give them the `Edit Form` permission on the project. 3. Log in as user1 and make an edit to the project. 4. Log out user1 and log back in as the super user 5. Delete user1. You can do this from the admin page if you delete the user from the User list, then from the Trash Bin. 6. Go to: a. `api/v2/audit-logs` b. `api/v2/project-history-logs` c. `api/v2/assets//history` 7. 🔴 [on main] All will return a 500 error (`AttributeError: 'NoneType' object has no attribute 'username'`) 8. đŸŸĸ [on PR] The endpoint will return the expected logs. For all user1's actions, the user and username fields will be empty. but the user_uid should still refer to the old user. --- kobo/apps/audit_log/serializers.py | 17 ++-------------- .../tests/api/v2/test_api_audit_log.py | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/kobo/apps/audit_log/serializers.py b/kobo/apps/audit_log/serializers.py index 5307018584..4130e47279 100644 --- a/kobo/apps/audit_log/serializers.py +++ b/kobo/apps/audit_log/serializers.py @@ -45,7 +45,7 @@ def get_date_created(self, audit_log): return audit_log.date_created.strftime('%Y-%m-%dT%H:%M:%SZ') def get_username(self, audit_log): - return audit_log.user.username + return getattr(audit_log.user, 'username', None) class AccessLogSerializer(serializers.Serializer): @@ -66,14 +66,7 @@ def get_date_created(self, audit_log): return audit_log['date_created'].strftime('%Y-%m-%dT%H:%M:%SZ') -class ProjectHistoryLogSerializer(serializers.ModelSerializer): - user = serializers.HyperlinkedRelatedField( - queryset=get_user_model().objects.all(), - lookup_field='username', - view_name='user-kpi-detail', - ) - date_created = serializers.SerializerMethodField() - username = serializers.SerializerMethodField() +class ProjectHistoryLogSerializer(AuditLogSerializer): class Meta: model = ProjectHistoryLog @@ -94,9 +87,3 @@ class Meta: 'metadata', 'date_created', ) - - def get_date_created(self, audit_log): - return audit_log.date_created.strftime('%Y-%m-%dT%H:%M:%SZ') - - def get_username(self, audit_log): - return audit_log.user.username diff --git a/kobo/apps/audit_log/tests/api/v2/test_api_audit_log.py b/kobo/apps/audit_log/tests/api/v2/test_api_audit_log.py index ff73c25cd1..b0a0d9f9d0 100644 --- a/kobo/apps/audit_log/tests/api/v2/test_api_audit_log.py +++ b/kobo/apps/audit_log/tests/api/v2/test_api_audit_log.py @@ -263,6 +263,26 @@ def test_filter_list(self): assert response.data['count'] == 1 assert response.data['results'] == expected + def test_view_log_from_deleted_user(self): + someuser = get_user_model().objects.get(username='someuser') + date_created = timezone.now().strftime('%Y-%m-%dT%H:%M:%SZ') + AuditLog.objects.create( + user=someuser, + app_label='foo', + model_name='bar', + object_id=1, + date_created=date_created, + action=AuditAction.UPDATE, + log_type=AuditType.DATA_EDITING, + ) + someuser.delete() + self.login_user(username='adminuser', password='pass') + response = self.client.get(self.url) + assert response.status_code == status.HTTP_200_OK + assert response.data['count'] == 1 + assert response.data['results'][0]['username'] is None + assert response.data['results'][0]['user'] is None + class ApiAccessLogTestCase(BaseAuditLogTestCase): From 9598180d07afdc8e3ebe5f4e0a7e35e4a252fd1d Mon Sep 17 00:00:00 2001 From: Raj Patel <51355159+rajpatel24@users.noreply.github.com> Date: Wed, 15 Jan 2025 13:29:03 +0530 Subject: [PATCH 6/9] fix!: reject duplicate submissions (#5047) ## Summary Implemented logic to detect and reject duplicate submissions. ## Description We have identified a race condition in the submission processing that causes duplicate submissions with identical UUIDs and XML hashes. This issue is particularly problematic under conditions with multiple remote devices submitting forms simultaneously over unreliable networks. To address this issue, a PR has been raised with the following proposed changes: - Race Condition Resolution: A locking mechanism has been added to prevent the race condition when checking for existing instances and creating new ones. This aims to eliminate duplicate submissions. - UUID Enforcement: Submissions without a UUID are now explicitly disallowed. This ensures that every submission is uniquely identifiable and further mitigates the risk of duplicate entries. - Introduction of `root_uuid`: - To ensure a consistent submission UUID throughout its lifecycle and prevent duplicate submissions with the same UUID, a new `root_uuid` column has been added to the `Instance` model with a unique constraint (`root_uuid` per `xform`). - If the `` is present in the submission XML, it is stored in the `root_uuid` column. - If `` is not present, the value from `` is used instead. - This approach guarantees that the `root_uuid` remains constant across the lifecycle of a submission, providing a reliable identifier for all instances. - UUID Handling Improvement: Updated the logic to strip only the `uuid:` prefix while preserving custom, non-UUID ID schemes (e.g., domain.com:1234). This ensures compliance with the OpenRosa spec and prevents potential ID collisions with custom prefixes. - Error Handling: - 202 Accepted: Returns when content is identical to an existing submission and successfully processed. - 409 Conflict: Returns when a duplicate UUID is detected but with differing content. These changes should improve the robustness of the submission process and prevent both race conditions and invalid submissions. ## Notes - Implemented a fix to address the race condition that leads to duplicate submissions with the same UUID and XML hash. - Incorporated improvements from existing work, ensuring consistency and robustness in handling concurrent submissions. - The fix aims to prevent duplicate submissions, even under high load and unreliable network conditions. ## Related issues Supersedes [kobotoolbox/kobocat#876](https://github.com/kobotoolbox/kobocat/pull/876) and https://github.com/kobotoolbox/kobocat/pull/859 --------- Co-authored-by: Olivier Leger --- .github/workflows/pytest.yml | 1 + .../viewsets/test_xform_submission_api.py | 124 ++++++++- kobo/apps/openrosa/apps/logger/exceptions.py | 42 ++- .../instances/multiple_nodes_error.xml | 3 + .../new_repeats_2012-07-05-14-33-53.xml | 3 + .../survey_names_2012-08-17_11-24-53.xml | 2 +- ...orial_2012-06-27_11-27-53_w_xform_uuid.xml | 3 + .../instances/tutorial_unicode_submission.xml | 3 + .../1335783522563.jpg | Bin 0 -> 714104 bytes .../1335783522563.jpg | Bin 0 -> 6512976 bytes ...orial_2012-06-27_11-27-53_w_attachment.xml | 17 ++ ..._2012-06-27_11-27-53_w_attachment_edit.xml | 18 ++ .../commands/clean_duplicated_submissions.py | 248 ++++++++++++------ .../0041_add_root_uuid_field_to_instance.py | 26 ++ .../openrosa/apps/logger/models/instance.py | 17 ++ .../apps/openrosa/apps/logger/models/xform.py | 2 +- .../Water_2011_03_17_2011-03-17_16-29-59.xml | 2 +- ...nslated_2011_03_10_2011-03-10_14-38-28.xml | 2 +- .../data_from_sdcard/bulk_submission.zip | Bin 21749 -> 21776 bytes .../apps/logger/tests/test_backup_tools.py | 4 +- .../apps/logger/tests/test_form_submission.py | 177 ++++++++++++- .../apps/logger/tests/test_parsing.py | 17 +- .../logger/tests/test_simple_submission.py | 24 +- .../apps/logger/xform_instance_parser.py | 108 ++++---- .../gps/instances/gps_1980-01-23_20-52-08.xml | 2 +- .../gps/instances/gps_1980-01-23_21-21-33.xml | 2 +- .../transport_with_no_custom_attribute.xml | 2 +- .../grouped_gps/instances/grouped_gps_01.xml | 3 + .../new_repeats/instances/new_repeats_01.xml | 3 + .../new_repeats/instances/new_repeats_02.xml | 3 + .../new_repeats/instances/new_repeats_03.xml | 20 ++ .../viewer/tests/test_pandas_mongo_bridge.py | 27 +- .../tests/mixins/make_submission_mixin.py | 28 ++ kobo/apps/openrosa/libs/utils/logger_tools.py | 176 ++++++++----- .../tests/test_submission_stream.py | 51 ++-- kobo/settings/testing.py | 3 + kpi/tests/api/v2/test_api_submissions.py | 16 +- 37 files changed, 915 insertions(+), 264 deletions(-) create mode 100755 kobo/apps/openrosa/apps/logger/fixtures/tutorial/instances/tutorial_with_attachment/1335783522563.jpg create mode 100644 kobo/apps/openrosa/apps/logger/fixtures/tutorial/instances/tutorial_with_attachment/attachment_with_different_content/1335783522563.jpg create mode 100644 kobo/apps/openrosa/apps/logger/fixtures/tutorial/instances/tutorial_with_attachment/tutorial_2012-06-27_11-27-53_w_attachment.xml create mode 100644 kobo/apps/openrosa/apps/logger/fixtures/tutorial/instances/tutorial_with_attachment/tutorial_2012-06-27_11-27-53_w_attachment_edit.xml create mode 100644 kobo/apps/openrosa/apps/logger/migrations/0041_add_root_uuid_field_to_instance.py create mode 100644 kobo/apps/openrosa/apps/viewer/tests/fixtures/new_repeats/instances/new_repeats_03.xml diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index b6b4718e5a..5a77b98e10 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -24,6 +24,7 @@ jobs: KOBOCAT_URL: http://kobocat KOBOCAT_INTERNAL_URL: http://kobocat KOBOFORM_URL: http://kpi + SKIP_TESTS_WITH_CONCURRENCY: 'True' strategy: matrix: python-version: ['3.10'] diff --git a/kobo/apps/openrosa/apps/api/tests/viewsets/test_xform_submission_api.py b/kobo/apps/openrosa/apps/api/tests/viewsets/test_xform_submission_api.py index 5c4c07ebd0..73aaf5fcf3 100644 --- a/kobo/apps/openrosa/apps/api/tests/viewsets/test_xform_submission_api.py +++ b/kobo/apps/openrosa/apps/api/tests/viewsets/test_xform_submission_api.py @@ -1,9 +1,22 @@ +import multiprocessing import os +from collections import defaultdict +from functools import partial +import pytest +import requests import simplejson as json +from django.conf import settings from django.contrib.auth.models import AnonymousUser +from django.core.files.base import ContentFile from django.core.files.uploadedfile import InMemoryUploadedFile +from django.test.testcases import LiveServerTestCase from django_digest.test import DigestAuth +from rest_framework.authtoken.models import Token + +from kobo.apps.kobo_auth.shortcuts import User +from kobo.apps.openrosa.apps.main.models import UserProfile +from kobo.apps.openrosa.libs.tests.mixins.request_mixin import RequestMixin from rest_framework import status from kobo.apps.openrosa.apps.api.tests.viewsets.test_abstract_viewset import ( @@ -11,8 +24,10 @@ ) from kobo.apps.openrosa.apps.api.viewsets.xform_submission_api import XFormSubmissionApi from kobo.apps.openrosa.apps.logger.models import Attachment +from kobo.apps.openrosa.apps.main import tests as main_tests from kobo.apps.openrosa.libs.constants import CAN_ADD_SUBMISSIONS from kobo.apps.openrosa.libs.utils.guardian import assign_perm +from kobo.apps.openrosa.libs.utils import logger_tools from kobo.apps.openrosa.libs.utils.logger_tools import ( OpenRosaResponseNotAllowed, OpenRosaTemporarilyUnavailable, @@ -212,7 +227,7 @@ def test_post_submission_authenticated_bad_json(self): self.assertTrue('error' in rendered_response.data) self.assertTrue( rendered_response.data['error'].startswith( - 'Received empty submission' + 'Instance ID is required' ) ) self.assertTrue(rendered_response.status_code == 400) @@ -418,7 +433,7 @@ def test_submission_account_inactive(self): def test_submission_blocking_flag(self): # Set 'submissions_suspended' True in the profile to test if - # submission do fail with the flag set + # submission does fail with the flag set self.xform.user.profile.submissions_suspended = True self.xform.user.profile.save() @@ -536,3 +551,108 @@ def test_submission_customizable_confirmation_message(self): self.assertContains( response, 'Successful submission.', status_code=201 ) + + +class ConcurrentSubmissionTestCase(RequestMixin, LiveServerTestCase): + """ + Inherit from LiveServerTestCase to be able to test concurrent requests + to submission endpoint in different transactions (and different processes). + Otherwise, DB is populated only on the first request but still empty on + subsequent ones. + """ + + def setUp(self): + self.user = User.objects.create_user( + username='bob', password='bob', email='bob@columbia.edu' + ) + self.token, _ = Token.objects.get_or_create(user=self.user) + UserProfile.objects.get_or_create(user=self.user) + + def publish_xls_form(self): + path = os.path.join( + settings.OPENROSA_APP_DIR, + 'apps', + 'main', + 'tests', + 'fixtures', + 'transportation', + 'transportation.xls', + ) + + with open(path, 'rb') as f: + xls_file = ContentFile(f.read(), name='transportation.xls') + + self.xform = logger_tools.publish_xls_form(xls_file, self.user) + + @pytest.mark.skipif( + settings.SKIP_TESTS_WITH_CONCURRENCY, + reason='GitLab does not seem to support multi-processes' + ) + def test_post_concurrent_same_submissions(self): + DUPLICATE_SUBMISSIONS_COUNT = 2 # noqa + + self.publish_xls_form() + username = 'bob' + survey = 'transport_2011-07-25_19-05-49' + results = defaultdict(int) + + with multiprocessing.Pool() as pool: + for result in pool.map( + partial( + submit_data, + live_server_url=self.live_server_url, + survey_=survey, + username_=username, + token_=self.token.key + ), + range(DUPLICATE_SUBMISSIONS_COUNT), + ): + results[result] += 1 + + assert results[status.HTTP_201_CREATED] == 1 + assert results[status.HTTP_202_ACCEPTED] == DUPLICATE_SUBMISSIONS_COUNT - 1 + + +def submit_data(identifier, survey_, username_, live_server_url, token_): + """ + Submit data to live server. + + It has to be outside `ConcurrentSubmissionTestCase` class to be pickled by + `multiprocessing.Pool().map()`. + """ + media_file = '1335783522563.jpg' + main_directory = os.path.dirname(main_tests.__file__) + path = os.path.join( + main_directory, + 'fixtures', + 'transportation', + 'instances', + survey_, + media_file, + ) + with open(path, 'rb') as f: + f = InMemoryUploadedFile( + f, + 'media_file', + media_file, + 'image/jpg', + os.path.getsize(path), + None, + ) + submission_path = os.path.join( + main_directory, + 'fixtures', + 'transportation', + 'instances', + survey_, + f'{survey_}.xml', + ) + with open(submission_path) as sf: + files = {'xml_submission_file': sf, 'media_file': f} + headers = {'Authorization': f'Token {token_}'} + response = requests.post( + f'{live_server_url}/{username_}/submission', + files=files, + headers=headers + ) + return response.status_code diff --git a/kobo/apps/openrosa/apps/logger/exceptions.py b/kobo/apps/openrosa/apps/logger/exceptions.py index 64c51e39ae..70b0e9ebaf 100644 --- a/kobo/apps/openrosa/apps/logger/exceptions.py +++ b/kobo/apps/openrosa/apps/logger/exceptions.py @@ -1,3 +1,7 @@ +class AccountInactiveError(Exception): + pass + + class BuildDbQueriesAttributeError(Exception): pass @@ -10,8 +14,14 @@ class BuildDbQueriesNoConfirmationProvidedError(Exception): pass -class AccountInactiveError(Exception): - pass +class ConflictingSubmissionUUIDError(Exception): + def __init__(self, message='Submission with this instance ID already exists'): + super().__init__(message) + + +class DuplicateInstanceError(Exception): + def __init__(self, message='Duplicate Instance'): + super().__init__(message) class DuplicateUUIDError(Exception): @@ -22,9 +32,37 @@ class FormInactiveError(Exception): pass +class InstanceEmptyError(Exception): + def __init__(self, message='Empty instance'): + super().__init__(message) + + +class InstanceInvalidUserError(Exception): + def __init__(self, message='Could not determine the user'): + super().__init__(message) + + +class InstanceIdMissingError(Exception): + def __init__(self, message='Could not determine the instance ID'): + super().__init__(message) + + +class InstanceMultipleNodeError(Exception): + pass + + +class InstanceParseError(Exception): + def __init__(self, message='The instance could not be parsed'): + super().__init__(message) + + class MissingValidationStatusPayloadError(Exception): pass class TemporarilyUnavailableError(Exception): pass + + +class XLSFormError(Exception): + pass diff --git a/kobo/apps/openrosa/apps/logger/fixtures/new_repeats/instances/multiple_nodes_error.xml b/kobo/apps/openrosa/apps/logger/fixtures/new_repeats/instances/multiple_nodes_error.xml index 9b7b9a3cde..f0569b1166 100644 --- a/kobo/apps/openrosa/apps/logger/fixtures/new_repeats/instances/multiple_nodes_error.xml +++ b/kobo/apps/openrosa/apps/logger/fixtures/new_repeats/instances/multiple_nodes_error.xml @@ -14,4 +14,7 @@ -1.2627557 36.7926442 0.0 30.0 chrome ie + + uuid:364f173c688e482486a48661700466gg + diff --git a/kobo/apps/openrosa/apps/logger/fixtures/new_repeats/instances/new_repeats_2012-07-05-14-33-53.xml b/kobo/apps/openrosa/apps/logger/fixtures/new_repeats/instances/new_repeats_2012-07-05-14-33-53.xml index f0ee825508..eaab7f531e 100644 --- a/kobo/apps/openrosa/apps/logger/fixtures/new_repeats/instances/new_repeats_2012-07-05-14-33-53.xml +++ b/kobo/apps/openrosa/apps/logger/fixtures/new_repeats/instances/new_repeats_2012-07-05-14-33-53.xml @@ -13,4 +13,7 @@ -1.2627557 36.7926442 0.0 30.0 chrome ie + + uuid:364f173c688e482486a48661700466gg + diff --git a/kobo/apps/openrosa/apps/logger/fixtures/test_forms/survey_names/instances/survey_names_2012-08-17_11-24-53.xml b/kobo/apps/openrosa/apps/logger/fixtures/test_forms/survey_names/instances/survey_names_2012-08-17_11-24-53.xml index 4a4550a9f6..6e07597a68 100644 --- a/kobo/apps/openrosa/apps/logger/fixtures/test_forms/survey_names/instances/survey_names_2012-08-17_11-24-53.xml +++ b/kobo/apps/openrosa/apps/logger/fixtures/test_forms/survey_names/instances/survey_names_2012-08-17_11-24-53.xml @@ -1 +1 @@ -2012-08-17T11:24:53.254+03HD2012-08-17T11:24:57.897+03 +2012-08-17T11:24:53.254+03HD2012-08-17T11:24:57.897+03uuid:729f173c688e482486a48661700455ff diff --git a/kobo/apps/openrosa/apps/logger/fixtures/tutorial/instances/tutorial_2012-06-27_11-27-53_w_xform_uuid.xml b/kobo/apps/openrosa/apps/logger/fixtures/tutorial/instances/tutorial_2012-06-27_11-27-53_w_xform_uuid.xml index 78426e9db8..1054169b4c 100644 --- a/kobo/apps/openrosa/apps/logger/fixtures/tutorial/instances/tutorial_2012-06-27_11-27-53_w_xform_uuid.xml +++ b/kobo/apps/openrosa/apps/logger/fixtures/tutorial/instances/tutorial_2012-06-27_11-27-53_w_xform_uuid.xml @@ -7,4 +7,7 @@ 0 -1.2836198 36.8795437 0.0 1044.0 firefox chrome safari + + uuid:364f173c688e482486a48661700466gg + diff --git a/kobo/apps/openrosa/apps/logger/fixtures/tutorial/instances/tutorial_unicode_submission.xml b/kobo/apps/openrosa/apps/logger/fixtures/tutorial/instances/tutorial_unicode_submission.xml index aad35e71a4..92c434acac 100644 --- a/kobo/apps/openrosa/apps/logger/fixtures/tutorial/instances/tutorial_unicode_submission.xml +++ b/kobo/apps/openrosa/apps/logger/fixtures/tutorial/instances/tutorial_unicode_submission.xml @@ -6,4 +6,7 @@ 0 -1.2836198 36.8795437 0.0 1044.0 firefox chrome safari + + uuid:639f173c688e482486a48661700456ty + diff --git a/kobo/apps/openrosa/apps/logger/fixtures/tutorial/instances/tutorial_with_attachment/1335783522563.jpg b/kobo/apps/openrosa/apps/logger/fixtures/tutorial/instances/tutorial_with_attachment/1335783522563.jpg new file mode 100755 index 0000000000000000000000000000000000000000..e8d953e387afaf8ec1c24fbef637d0006d35a306 GIT binary patch literal 714104 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
  • @)~%bxcKpttK?D|PWh^)2xwbJHQI$Fh+snd{Z}@go6$PHrA74%>DoQI#Erh1I!9CKS~|1r!Ss~W%=;!nVoKYIxu<9 zO4hlq;6zoj>tk7S@7W}04!s9xE0q0(f={{T*{^e6a=EIabCUvdn!6+;_h6#YMZ zLLA2JJ=LB1oyWaA2$R$`Qo{7?9~_p}o4(O00a<-^KQ6U`2IXWRxVh|&Twil86kB3*3V-OaihPxV#Dw=akYGw~N=qOsg>3l2E!jBD zxI|dja6$Osfbf@V6EW$|q9p_N({a6Oj%qlV5T}PTY=G`my>r;S! zXUBx(qx?%qA`FpIf3Iq*#rc5aNFY*1bArI%T+(+!727QPhXk4f&9Sw`-V$!Eik`X2 zT<_e#A-kax4dLICpux`lh>Sr(pw3|d;T9wK8TbC8D(9e_Qf9B~r@&DW*?53((i@J1 zN>7A%D}HtB+h?t&-b*FUbEjBBx;`- zbo-sWsbb9JH5yA!mJ~OG+Rqiq8xGfIkG(-R{|;ak4V7pU$vl~j2&L3+ply+sAX