diff --git a/django/contrib/contenttypes/views.py b/django/contrib/contenttypes/views.py index bfde73c567..fac15df107 100644 --- a/django/contrib/contenttypes/views.py +++ b/django/contrib/contenttypes/views.py @@ -1,7 +1,7 @@ from django.apps import apps from django.contrib.contenttypes.models import ContentType from django.contrib.sites.shortcuts import get_current_site -from django.core.exceptions import ObjectDoesNotExist +from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.http import Http404, HttpResponseRedirect from django.utils.translation import gettext as _ @@ -19,7 +19,7 @@ def shortcut(request, content_type_id, object_id): % {"ct_id": content_type_id} ) obj = content_type.get_object_for_this_type(pk=object_id) - except (ObjectDoesNotExist, ValueError): + except (ObjectDoesNotExist, ValidationError, ValueError): raise Http404( _("Content type %(ct_id)s object %(obj_id)s doesn’t exist") % {"ct_id": content_type_id, "obj_id": object_id} diff --git a/django/forms/models.py b/django/forms/models.py index 8084e16c8d..8ccca3c195 100644 --- a/django/forms/models.py +++ b/django/forms/models.py @@ -1562,7 +1562,12 @@ def to_python(self, value): if isinstance(value, self.queryset.model): value = getattr(value, key) value = self.queryset.get(**{key: value}) - except (ValueError, TypeError, self.queryset.model.DoesNotExist): + except ( + ValueError, + TypeError, + ValidationError, + self.queryset.model.DoesNotExist, + ): raise ValidationError( self.error_messages["invalid_choice"], code="invalid_choice", @@ -1640,7 +1645,7 @@ def _check_values(self, value): self.validate_no_null_characters(pk) try: self.queryset.filter(**{key: pk}) - except (ValueError, TypeError): + except (ValueError, TypeError, ValidationError): raise ValidationError( self.error_messages["invalid_pk_value"], code="invalid_pk_value", diff --git a/tests/admin_changelist/tests.py b/tests/admin_changelist/tests.py index 6365109a91..c1039fd9c5 100644 --- a/tests/admin_changelist/tests.py +++ b/tests/admin_changelist/tests.py @@ -875,7 +875,7 @@ def test_no_distinct_for_m2m_in_list_filter_without_params(self): self.assertIs(cl.queryset.query.distinct, False) # A ManyToManyField in params does have distinct applied. - request = self.factory.get("/band/", {"genres": "0"}) + request = self.factory.get("/band/", {"genres": "000000000000000000000000"}) request.user = self.superuser cl = m.get_changelist_instance(request) self.assertIs(cl.queryset.query.distinct, True) @@ -993,14 +993,19 @@ def test_dynamic_list_display_links(self): """ parent = Parent.objects.create(name="parent") for i in range(1, 10): - Child.objects.create(id=i, name="child %s" % i, parent=parent, age=i) + Child.objects.create( + id=f"{i:024}", + name="child %s" % i, + parent=parent, + age=i, + ) m = DynamicListDisplayLinksChildAdmin(Child, custom_site) superuser = self._create_superuser("superuser") request = self._mocked_authenticated_request("/child/", superuser) response = m.changelist_view(request) for i in range(1, 10): - link = reverse("admin:admin_changelist_child_change", args=(i,)) + link = reverse("admin:admin_changelist_child_change", args=(f"{i:024}",)) self.assertContains(response, '%s' % (link, i)) list_display = m.get_list_display(request) @@ -1277,7 +1282,7 @@ def test_deterministic_order_for_unordered_model(self): superuser = self._create_superuser("superuser") for counter in range(1, 51): - UnorderedObject.objects.create(id=counter, bool=True) + UnorderedObject.objects.create(id=f"{counter:024}", bool=True) class UnorderedObjectAdmin(admin.ModelAdmin): list_per_page = 10 @@ -1293,7 +1298,7 @@ def check_results_order(ascending=False): response = model_admin.changelist_view(request) for result in response.context_data["cl"].result_list: counter += 1 if ascending else -1 - self.assertEqual(result.id, counter) + self.assertEqual(str(result.id), f"{counter:024}") custom_site.unregister(UnorderedObject) # When no order is defined at all, everything is ordered by '-pk'. @@ -1323,7 +1328,7 @@ def test_deterministic_order_for_model_ordered_by_its_manager(self): superuser = self._create_superuser("superuser") for counter in range(1, 51): - OrderedObject.objects.create(id=counter, bool=True, number=counter) + OrderedObject.objects.create(id=f"{counter:024}", bool=True, number=counter) class OrderedObjectAdmin(admin.ModelAdmin): list_per_page = 10 @@ -1339,7 +1344,7 @@ def check_results_order(ascending=False): response = model_admin.changelist_view(request) for result in response.context_data["cl"].result_list: counter += 1 if ascending else -1 - self.assertEqual(result.id, counter) + self.assertEqual(str(result.id), f"{counter:024}") custom_site.unregister(OrderedObject) # When no order is defined at all, use the model's default ordering diff --git a/tests/admin_checks/tests.py b/tests/admin_checks/tests.py index 6ca5d6d925..c696ad57c1 100644 --- a/tests/admin_checks/tests.py +++ b/tests/admin_checks/tests.py @@ -77,7 +77,7 @@ def test_checks_are_performed(self): try: errors = checks.run_checks() expected = ["error!"] - self.assertEqual(errors, expected) + self.assertEqual(errors[1:], expected) finally: admin.site.unregister(Song) @@ -268,7 +268,7 @@ class CustomAdminSite(admin.AdminSite): try: errors = checks.run_checks() expected = ["error!"] - self.assertEqual(errors, expected) + self.assertEqual(errors[1:], expected) finally: custom_site.unregister(Song) diff --git a/tests/admin_inlines/tests.py b/tests/admin_inlines/tests.py index 5cc40cb7b0..82a74e8035 100644 --- a/tests/admin_inlines/tests.py +++ b/tests/admin_inlines/tests.py @@ -501,8 +501,10 @@ def test_localize_pk_shortcut(self): The "View on Site" link is correct for locales that use thousand separators. """ - holder = Holder.objects.create(pk=123456789, dummy=42) - inner = Inner.objects.create(pk=987654321, holder=holder, dummy=42, readonly="") + holder = Holder.objects.create(pk="000000000000000123456789", dummy=42) + inner = Inner.objects.create( + pk="000000000000000987654321", holder=holder, dummy=42, readonly="" + ) response = self.client.get( reverse("admin:admin_inlines_holder_change", args=(holder.id,)) ) @@ -936,7 +938,7 @@ def setUpTestData(cls): ) cls.user.user_permissions.add(permission) - author = Author.objects.create(pk=1, name="The Author") + author = Author.objects.create(pk="000000000000000000000001", name="The Author") cls.book = author.books.create(name="The inline Book") cls.author_change_url = reverse( "admin:admin_inlines_author_change", args=(author.id,) diff --git a/tests/admin_views/admin.py b/tests/admin_views/admin.py index 566ee96a30..312ad314d8 100644 --- a/tests/admin_views/admin.py +++ b/tests/admin_views/admin.py @@ -288,11 +288,13 @@ def has_module_permission(self, request): class RowLevelChangePermissionModelAdmin(admin.ModelAdmin): def has_change_permission(self, request, obj=None): """Only allow changing objects with even id number""" - return request.user.is_staff and (obj is not None) and (obj.id % 2 == 0) + return ( + request.user.is_staff and (obj is not None) and (int(str(obj.id)) % 2 == 0) + ) def has_view_permission(self, request, obj=None): """Only allow viewing objects if id is a multiple of 3.""" - return request.user.is_staff and obj is not None and obj.id % 3 == 0 + return request.user.is_staff and obj is not None and int(str(obj.id)) % 3 == 0 class CustomArticleAdmin(admin.ModelAdmin): @@ -467,7 +469,7 @@ def save_related(self, request, form, formsets, change): class EmptyModelAdmin(admin.ModelAdmin): def get_queryset(self, request): - return super().get_queryset(request).filter(pk__gt=1) + return super().get_queryset(request).filter(pk__gt="000000000000000000000001") class OldSubscriberAdmin(admin.ModelAdmin): @@ -644,7 +646,9 @@ class FieldOverridePostAdmin(PostAdmin): class CustomChangeList(ChangeList): def get_queryset(self, request): - return self.root_queryset.order_by("pk").filter(pk=9999) # Doesn't exist + return self.root_queryset.order_by("pk").filter( + pk="000000000000000000000000" + ) # Doesn't exist class GadgetAdmin(admin.ModelAdmin): diff --git a/tests/admin_views/models.py b/tests/admin_views/models.py index b7691d0449..bd460eca35 100644 --- a/tests/admin_views/models.py +++ b/tests/admin_views/models.py @@ -940,7 +940,7 @@ def get_queryset(self): class FilteredManager(models.Model): def __str__(self): - return "PK=%d" % self.pk + return "PK=%s" % self.pk pk_gt_1 = _Manager() objects = models.Manager() diff --git a/tests/admin_views/test_actions.py b/tests/admin_views/test_actions.py index dbd372e27d..3085465af7 100644 --- a/tests/admin_views/test_actions.py +++ b/tests/admin_views/test_actions.py @@ -89,9 +89,11 @@ def test_model_admin_default_delete_action(self): self.assertEqual(Subscriber.objects.count(), 0) def test_default_delete_action_nonexistent_pk(self): - self.assertFalse(Subscriber.objects.filter(id=9998).exists()) + self.assertFalse( + Subscriber.objects.filter(id="000000000000000000009998").exists() + ) action_data = { - ACTION_CHECKBOX_NAME: ["9998"], + ACTION_CHECKBOX_NAME: ["000000000000000000009998"], "action": "delete_selected", "index": 0, } @@ -109,7 +111,7 @@ def test_non_localized_pk(self): If USE_THOUSAND_SEPARATOR is set, the ids for the objects selected for deletion are rendered without separators. """ - s = ExternalSubscriber.objects.create(id=9999) + s = ExternalSubscriber.objects.create(id="000000000000000000009999") action_data = { ACTION_CHECKBOX_NAME: [s.pk, self.s2.pk], "action": "delete_selected", @@ -119,7 +121,7 @@ def test_non_localized_pk(self): reverse("admin:admin_views_subscriber_changelist"), action_data ) self.assertTemplateUsed(response, "admin/delete_selected_confirmation.html") - self.assertContains(response, 'value="9999"') # Instead of 9,999 + self.assertContains(response, 'value="000000000000000000009999"') self.assertContains(response, 'value="%s"' % self.s2.pk) def test_model_admin_default_delete_action_protected(self): diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index 246e95c58e..8dda0c8cec 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -1714,7 +1714,7 @@ def test_custom_model_admin_templates(self): data={ "index": 0, "action": ["delete_selected"], - "_selected_action": ["1"], + "_selected_action": [str(article_pk)], }, ) self.assertTemplateUsed( @@ -2713,10 +2713,18 @@ def test_change_view(self): self.client.post(reverse("admin:logout")) # Test redirection when using row-level change permissions. Refs #11513. - r1 = RowLevelChangePermissionModel.objects.create(id=1, name="odd id") - r2 = RowLevelChangePermissionModel.objects.create(id=2, name="even id") - r3 = RowLevelChangePermissionModel.objects.create(id=3, name="odd id mult 3") - r6 = RowLevelChangePermissionModel.objects.create(id=6, name="even id mult 3") + r1 = RowLevelChangePermissionModel.objects.create( + id="000000000000000000000001", name="odd id" + ) + r2 = RowLevelChangePermissionModel.objects.create( + id="000000000000000000000002", name="even id" + ) + r3 = RowLevelChangePermissionModel.objects.create( + id="000000000000000000000003", name="odd id mult 3" + ) + r6 = RowLevelChangePermissionModel.objects.create( + id="000000000000000000000006", name="even id mult 3" + ) change_url_1 = reverse( "admin:admin_views_rowlevelchangepermissionmodel_change", args=(r1.pk,) ) @@ -2743,14 +2751,20 @@ def test_change_view(self): self.assertEqual(response.status_code, 403) response = self.client.post(change_url_1, {"name": "changed"}) self.assertEqual( - RowLevelChangePermissionModel.objects.get(id=1).name, "odd id" + RowLevelChangePermissionModel.objects.get( + id="000000000000000000000001" + ).name, + "odd id", ) self.assertEqual(response.status_code, 403) response = self.client.get(change_url_2) self.assertEqual(response.status_code, 200) response = self.client.post(change_url_2, {"name": "changed"}) self.assertEqual( - RowLevelChangePermissionModel.objects.get(id=2).name, "changed" + RowLevelChangePermissionModel.objects.get( + id="000000000000000000000002" + ).name, + "changed", ) self.assertRedirects(response, self.index_url) response = self.client.get(change_url_3) @@ -2758,14 +2772,19 @@ def test_change_view(self): response = self.client.post(change_url_3, {"name": "changed"}) self.assertEqual(response.status_code, 403) self.assertEqual( - RowLevelChangePermissionModel.objects.get(id=3).name, + RowLevelChangePermissionModel.objects.get( + id="000000000000000000000003" + ).name, "odd id mult 3", ) response = self.client.get(change_url_6) self.assertEqual(response.status_code, 200) response = self.client.post(change_url_6, {"name": "changed"}) self.assertEqual( - RowLevelChangePermissionModel.objects.get(id=6).name, "changed" + RowLevelChangePermissionModel.objects.get( + id="000000000000000000000006" + ).name, + "changed", ) self.assertRedirects(response, self.index_url) @@ -2780,7 +2799,10 @@ def test_change_view(self): change_url_1, {"name": "changed"}, follow=True ) self.assertEqual( - RowLevelChangePermissionModel.objects.get(id=1).name, "odd id" + RowLevelChangePermissionModel.objects.get( + id="000000000000000000000001" + ).name, + "odd id", ) self.assertContains(response, "login-form") response = self.client.get(change_url_2, follow=True) @@ -2789,7 +2811,10 @@ def test_change_view(self): change_url_2, {"name": "changed again"}, follow=True ) self.assertEqual( - RowLevelChangePermissionModel.objects.get(id=2).name, "changed" + RowLevelChangePermissionModel.objects.get( + id="000000000000000000000002" + ).name, + "changed", ) self.assertContains(response, "login-form") self.client.post(reverse("admin:logout")) @@ -3084,8 +3109,12 @@ def test_history_view(self): self.assertEqual(response.status_code, 200) # Test redirection when using row-level change permissions. Refs #11513. - rl1 = RowLevelChangePermissionModel.objects.create(id=1, name="odd id") - rl2 = RowLevelChangePermissionModel.objects.create(id=2, name="even id") + rl1 = RowLevelChangePermissionModel.objects.create( + id="000000000000000000000001", name="odd id" + ) + rl2 = RowLevelChangePermissionModel.objects.create( + id="000000000000000000000002", name="even id" + ) logins = [ self.superuser, self.viewuser, @@ -3566,8 +3595,12 @@ def setUpTestData(cls): cls.ssh1 = SuperSecretHideout.objects.create( location="super floating castle!", supervillain=cls.sv1 ) - cls.cy1 = CyclicOne.objects.create(pk=1, name="I am recursive", two_id=1) - cls.cy2 = CyclicTwo.objects.create(pk=1, name="I am recursive too", one_id=1) + cls.cy1 = CyclicOne.objects.create( + pk="000000000000000000000001", name="I am recursive", two_id=1 + ) + cls.cy2 = CyclicTwo.objects.create( + pk="000000000000000000000001", name="I am recursive too", one_id=1 + ) def setUp(self): self.client.force_login(self.superuser) @@ -4429,12 +4462,22 @@ def test_non_form_errors_is_errorlist(self): ) def test_list_editable_ordering(self): - collector = Collector.objects.create(id=1, name="Frederick Clegg") + collector = Collector.objects.create( + id="000000000000000000000001", name="Frederick Clegg" + ) - Category.objects.create(id=1, order=1, collector=collector) - Category.objects.create(id=2, order=2, collector=collector) - Category.objects.create(id=3, order=0, collector=collector) - Category.objects.create(id=4, order=0, collector=collector) + Category.objects.create( + id="000000000000000000000001", order=1, collector=collector + ) + Category.objects.create( + id="000000000000000000000002", order=2, collector=collector + ) + Category.objects.create( + id="000000000000000000000003", order=0, collector=collector + ) + Category.objects.create( + id="000000000000000000000004", order=0, collector=collector + ) # NB: The order values must be changed so that the items are reordered. data = { @@ -4442,16 +4485,16 @@ def test_list_editable_ordering(self): "form-INITIAL_FORMS": "4", "form-MAX_NUM_FORMS": "0", "form-0-order": "14", - "form-0-id": "1", + "form-0-id": "000000000000000000000001", "form-0-collector": "1", "form-1-order": "13", - "form-1-id": "2", + "form-1-id": "000000000000000000000002", "form-1-collector": "1", "form-2-order": "1", - "form-2-id": "3", + "form-2-id": "000000000000000000000003", "form-2-collector": "1", "form-3-order": "0", - "form-3-id": "4", + "form-3-id": "000000000000000000000004", "form-3-collector": "1", # The form processing understands this as a list_editable "Save" # and not an action "Go". @@ -4464,18 +4507,24 @@ def test_list_editable_ordering(self): self.assertEqual(response.status_code, 302) # The order values have been applied to the right objects - self.assertEqual(Category.objects.get(id=1).order, 14) - self.assertEqual(Category.objects.get(id=2).order, 13) - self.assertEqual(Category.objects.get(id=3).order, 1) - self.assertEqual(Category.objects.get(id=4).order, 0) + self.assertEqual(Category.objects.get(id="000000000000000000000001").order, 14) + self.assertEqual(Category.objects.get(id="000000000000000000000002").order, 13) + self.assertEqual(Category.objects.get(id="000000000000000000000003").order, 1) + self.assertEqual(Category.objects.get(id="000000000000000000000004").order, 0) def test_list_editable_pagination(self): """ Pagination works for list_editable items. """ - UnorderedObject.objects.create(id=1, name="Unordered object #1") - UnorderedObject.objects.create(id=2, name="Unordered object #2") - UnorderedObject.objects.create(id=3, name="Unordered object #3") + UnorderedObject.objects.create( + id="000000000000000000000001", name="Unordered object #1" + ) + UnorderedObject.objects.create( + id="000000000000000000000002", name="Unordered object #2" + ) + UnorderedObject.objects.create( + id="000000000000000000000003", name="Unordered object #3" + ) response = self.client.get( reverse("admin:admin_views_unorderedobject_changelist") ) @@ -4932,7 +4981,7 @@ def setUpTestData(cls): cls.superuser = User.objects.create_superuser( username="super", password="secret", email="super@example.com" ) - cls.pks = [EmptyModel.objects.create(id=i + 1).id for i in range(3)] + cls.pks = [EmptyModel.objects.create(id=f"{i+1:024}").id for i in range(3)] def setUp(self): self.client.force_login(self.superuser) @@ -4945,7 +4994,7 @@ def setUp(self): def test_changelist_view(self): response = self.client.get(reverse("admin:admin_views_emptymodel_changelist")) for i in self.pks: - if i > 1: + if str(i) > "000000000000000000000001": self.assertContains(response, "Primary key = %s" % i) else: self.assertNotContains(response, "Primary key = %s" % i) @@ -4982,13 +5031,16 @@ def test_change_view(self): for i in self.pks: url = reverse("admin:admin_views_emptymodel_change", args=(i,)) response = self.client.get(url, follow=True) - if i > 1: + if str(i) > "000000000000000000000001": self.assertEqual(response.status_code, 200) else: self.assertRedirects(response, reverse("admin:index")) self.assertEqual( [m.message for m in response.context["messages"]], - ["empty model with ID “1” doesn’t exist. Perhaps it was deleted?"], + [ + "empty model with ID “000000000000000000000001” doesn’t " + "exist. Perhaps it was deleted?" + ], ) def test_add_model_modeladmin_defer_qs(self): @@ -5206,22 +5258,28 @@ def test_history_view_custom_qs(self): Custom querysets are considered for the admin history view. """ self.client.post(reverse("admin:login"), self.super_login) - FilteredManager.objects.create(pk=1) - FilteredManager.objects.create(pk=2) + FilteredManager.objects.create(pk="000000000000000000000001") + FilteredManager.objects.create(pk="000000000000000000000002") response = self.client.get( reverse("admin:admin_views_filteredmanager_changelist") ) - self.assertContains(response, "PK=1") - self.assertContains(response, "PK=2") + self.assertContains(response, "PK=000000000000000000000001") + self.assertContains(response, "PK=000000000000000000000002") self.assertEqual( self.client.get( - reverse("admin:admin_views_filteredmanager_history", args=(1,)) + reverse( + "admin:admin_views_filteredmanager_history", + args=("000000000000000000000001",), + ) ).status_code, 200, ) self.assertEqual( self.client.get( - reverse("admin:admin_views_filteredmanager_history", args=(2,)) + reverse( + "admin:admin_views_filteredmanager_history", + args=("000000000000000000000002",), + ) ).status_code, 200, ) @@ -5287,7 +5345,9 @@ def setUpTestData(cls): cls.superuser = User.objects.create_superuser( username="super", password="secret", email="super@example.com" ) - cls.collector = Collector.objects.create(pk=1, name="John Fowles") + cls.collector = Collector.objects.create( + id="000000000000000000000001", name="John Fowles" + ) def setUp(self): self.post_data = { @@ -5296,59 +5356,59 @@ def setUp(self): "widget_set-INITIAL_FORMS": "0", "widget_set-MAX_NUM_FORMS": "0", "widget_set-0-id": "", - "widget_set-0-owner": "1", + "widget_set-0-owner": str(self.collector.pk), "widget_set-0-name": "", "widget_set-1-id": "", - "widget_set-1-owner": "1", + "widget_set-1-owner": str(self.collector.pk), "widget_set-1-name": "", "widget_set-2-id": "", - "widget_set-2-owner": "1", + "widget_set-2-owner": str(self.collector.pk), "widget_set-2-name": "", "doohickey_set-TOTAL_FORMS": "3", "doohickey_set-INITIAL_FORMS": "0", "doohickey_set-MAX_NUM_FORMS": "0", - "doohickey_set-0-owner": "1", + "doohickey_set-0-owner": str(self.collector.pk), "doohickey_set-0-code": "", "doohickey_set-0-name": "", - "doohickey_set-1-owner": "1", + "doohickey_set-1-owner": str(self.collector.pk), "doohickey_set-1-code": "", "doohickey_set-1-name": "", - "doohickey_set-2-owner": "1", + "doohickey_set-2-owner": str(self.collector.pk), "doohickey_set-2-code": "", "doohickey_set-2-name": "", "grommet_set-TOTAL_FORMS": "3", "grommet_set-INITIAL_FORMS": "0", "grommet_set-MAX_NUM_FORMS": "0", "grommet_set-0-code": "", - "grommet_set-0-owner": "1", + "grommet_set-0-owner": str(self.collector.pk), "grommet_set-0-name": "", "grommet_set-1-code": "", - "grommet_set-1-owner": "1", + "grommet_set-1-owner": str(self.collector.pk), "grommet_set-1-name": "", "grommet_set-2-code": "", - "grommet_set-2-owner": "1", + "grommet_set-2-owner": str(self.collector.pk), "grommet_set-2-name": "", "whatsit_set-TOTAL_FORMS": "3", "whatsit_set-INITIAL_FORMS": "0", "whatsit_set-MAX_NUM_FORMS": "0", - "whatsit_set-0-owner": "1", + "whatsit_set-0-owner": str(self.collector.pk), "whatsit_set-0-index": "", "whatsit_set-0-name": "", - "whatsit_set-1-owner": "1", + "whatsit_set-1-owner": str(self.collector.pk), "whatsit_set-1-index": "", "whatsit_set-1-name": "", - "whatsit_set-2-owner": "1", + "whatsit_set-2-owner": str(self.collector.pk), "whatsit_set-2-index": "", "whatsit_set-2-name": "", "fancydoodad_set-TOTAL_FORMS": "3", "fancydoodad_set-INITIAL_FORMS": "0", "fancydoodad_set-MAX_NUM_FORMS": "0", "fancydoodad_set-0-doodad_ptr": "", - "fancydoodad_set-0-owner": "1", + "fancydoodad_set-0-owner": str(self.collector.pk), "fancydoodad_set-0-name": "", "fancydoodad_set-0-expensive": "on", "fancydoodad_set-1-doodad_ptr": "", - "fancydoodad_set-1-owner": "1", + "fancydoodad_set-1-owner": str(self.collector.pk), "fancydoodad_set-1-name": "", "fancydoodad_set-1-expensive": "on", "fancydoodad_set-2-doodad_ptr": "", @@ -5360,13 +5420,13 @@ def setUp(self): "category_set-MAX_NUM_FORMS": "0", "category_set-0-order": "", "category_set-0-id": "", - "category_set-0-collector": "1", + "category_set-0-collector": str(self.collector.pk), "category_set-1-order": "", "category_set-1-id": "", - "category_set-1-collector": "1", + "category_set-1-collector": str(self.collector.pk), "category_set-2-order": "", "category_set-2-id": "", - "category_set-2-collector": "1", + "category_set-2-collector": str(self.collector.pk), } self.client.force_login(self.superuser) @@ -5556,10 +5616,18 @@ def test_ordered_inline(self): An inline with an editable ordering fields is updated correctly. """ # Create some objects with an initial ordering - Category.objects.create(id=1, order=1, collector=self.collector) - Category.objects.create(id=2, order=2, collector=self.collector) - Category.objects.create(id=3, order=0, collector=self.collector) - Category.objects.create(id=4, order=0, collector=self.collector) + Category.objects.create( + id="000000000000000000000001", order=1, collector=self.collector + ) + Category.objects.create( + id="000000000000000000000002", order=2, collector=self.collector + ) + Category.objects.create( + id="000000000000000000000003", order=0, collector=self.collector + ) + Category.objects.create( + id="000000000000000000000004", order=0, collector=self.collector + ) # NB: The order values must be changed so that the items are reordered. self.post_data.update( @@ -5569,26 +5637,26 @@ def test_ordered_inline(self): "category_set-INITIAL_FORMS": "4", "category_set-MAX_NUM_FORMS": "0", "category_set-0-order": "14", - "category_set-0-id": "1", - "category_set-0-collector": "1", + "category_set-0-id": "000000000000000000000001", + "category_set-0-collector": str(self.collector.pk), "category_set-1-order": "13", - "category_set-1-id": "2", - "category_set-1-collector": "1", + "category_set-1-id": "000000000000000000000002", + "category_set-1-collector": str(self.collector.pk), "category_set-2-order": "1", - "category_set-2-id": "3", - "category_set-2-collector": "1", + "category_set-2-id": "000000000000000000000003", + "category_set-2-collector": str(self.collector.pk), "category_set-3-order": "0", - "category_set-3-id": "4", - "category_set-3-collector": "1", + "category_set-3-id": "000000000000000000000004", + "category_set-3-collector": str(self.collector.pk), "category_set-4-order": "", "category_set-4-id": "", - "category_set-4-collector": "1", + "category_set-4-collector": str(self.collector.pk), "category_set-5-order": "", "category_set-5-id": "", - "category_set-5-collector": "1", + "category_set-5-collector": str(self.collector.pk), "category_set-6-order": "", "category_set-6-id": "", - "category_set-6-collector": "1", + "category_set-6-collector": str(self.collector.pk), } ) collector_url = reverse( @@ -5600,10 +5668,10 @@ def test_ordered_inline(self): # The order values have been applied to the right objects self.assertEqual(self.collector.category_set.count(), 4) - self.assertEqual(Category.objects.get(id=1).order, 14) - self.assertEqual(Category.objects.get(id=2).order, 13) - self.assertEqual(Category.objects.get(id=3).order, 1) - self.assertEqual(Category.objects.get(id=4).order, 0) + self.assertEqual(Category.objects.get(id="000000000000000000000001").order, 14) + self.assertEqual(Category.objects.get(id="000000000000000000000002").order, 13) + self.assertEqual(Category.objects.get(id="000000000000000000000003").order, 1) + self.assertEqual(Category.objects.get(id="000000000000000000000004").order, 0) @override_settings(ROOT_URLCONF="admin_views.urls") @@ -8036,7 +8104,7 @@ def send_message(self, level): message with the level has appeared in the response. """ action_data = { - ACTION_CHECKBOX_NAME: [1], + ACTION_CHECKBOX_NAME: ["000000000000000000000001"], "action": "message_%s" % level, "index": 0, } @@ -8068,7 +8136,7 @@ def test_message_error(self): def test_message_extra_tags(self): action_data = { - ACTION_CHECKBOX_NAME: [1], + ACTION_CHECKBOX_NAME: ["000000000000000000000001"], "action": "message_extra_tags", "index": 0, } diff --git a/tests/admin_widgets/models.py b/tests/admin_widgets/models.py index 0113ecb7c8..fb55c870db 100644 --- a/tests/admin_widgets/models.py +++ b/tests/admin_widgets/models.py @@ -108,7 +108,7 @@ class Event(models.Model): main_band = models.ForeignKey( Band, models.CASCADE, - limit_choices_to=models.Q(pk__gt=0), + limit_choices_to=models.Q(pk__gt="000000000000000000000000"), related_name="events_main_band_at", ) supporting_bands = models.ManyToManyField( diff --git a/tests/aggregation/tests.py b/tests/aggregation/tests.py index 228167b20f..e5e5ebabe3 100644 --- a/tests/aggregation/tests.py +++ b/tests/aggregation/tests.py @@ -2361,7 +2361,12 @@ def test_aggregate_reference_lookup_rhs(self): def test_aggregate_reference_lookup_rhs_iter(self): aggregates = Author.objects.annotate( max_book_author=Max("book__authors"), - ).aggregate(count=Count("id", filter=Q(id__in=[F("max_book_author"), 0]))) + ).aggregate( + count=Count( + "id", + filter=Q(id__in=[F("max_book_author"), "000000000000000000000000"]), + ) + ) self.assertEqual(aggregates, {"count": 1}) @skipUnlessDBFeature("supports_select_union") diff --git a/tests/aggregation_regress/tests.py b/tests/aggregation_regress/tests.py index 68bb0f0435..b4c79d6482 100644 --- a/tests/aggregation_regress/tests.py +++ b/tests/aggregation_regress/tests.py @@ -1432,7 +1432,7 @@ def test_annotate_joins(self): qs = Book.objects.annotate(n=Count("pk")) self.assertIs(qs.query.alias_map["aggregation_regress_book"].join_type, None) # The query executes without problems. - self.assertEqual(len(qs.exclude(publisher=-1)), 6) + self.assertEqual(len(qs.exclude(publisher="000000000000000000000001")), 6) @skipUnlessDBFeature("allows_group_by_selected_pks") def test_aggregate_duplicate_columns(self): diff --git a/tests/auth_tests/fixtures/natural.json b/tests/auth_tests/fixtures/natural.json index 7811c7a548..1e1ccca690 100644 --- a/tests/auth_tests/fixtures/natural.json +++ b/tests/auth_tests/fixtures/natural.json @@ -1,6 +1,6 @@ [ { - "pk": 1, + "pk": "000000000000000000000001", "model": "auth.group", "fields": { "name": "my_group", @@ -8,7 +8,7 @@ } }, { - "pk": 1, + "pk": "000000000000000000000001", "model": "auth.user", "fields": { "username": "my_username", diff --git a/tests/auth_tests/fixtures/regular.json b/tests/auth_tests/fixtures/regular.json index b9f2680766..781898a5bd 100644 --- a/tests/auth_tests/fixtures/regular.json +++ b/tests/auth_tests/fixtures/regular.json @@ -1,6 +1,6 @@ [ { - "pk": 1, + "pk": "000000000000000000000001", "model": "auth.group", "fields": { "name": "my_group", @@ -8,7 +8,7 @@ } }, { - "pk": 1, + "pk": "000000000000000000000001", "model": "auth.user", "fields": { "username": "my_username", @@ -19,7 +19,7 @@ "is_staff": true, "last_login": "2012-01-13 00:14:00", "groups": [ - 1 + "000000000000000000000001" ], "user_permissions": [], "password": "pbkdf2_sha256$10000$LUyhxJjuLwXF$f6Zbpnx1L5dPze8m0itBaHMDyZ/n6JyhuavQy2RrBIM=", diff --git a/tests/auth_tests/test_management.py b/tests/auth_tests/test_management.py index 38863969fc..744012c05e 100644 --- a/tests/auth_tests/test_management.py +++ b/tests/auth_tests/test_management.py @@ -600,8 +600,10 @@ def test(self): def test_validate_fk(self): email = Email.objects.create(email="mymail@gmail.com") Group.objects.all().delete() - nonexistent_group_id = 1 - msg = f"group instance with id {nonexistent_group_id} does not exist." + nonexistent_group_id = "000000000000000000000001" + msg = ( + f"group instance with id ObjectId('{nonexistent_group_id}') does not exist." + ) with self.assertRaisesMessage(CommandError, msg): call_command( @@ -639,8 +641,10 @@ def test_validate_fk_environment_variable(self): def test_validate_fk_via_option_interactive(self): email = Email.objects.create(email="mymail@gmail.com") Group.objects.all().delete() - nonexistent_group_id = 1 - msg = f"group instance with id {nonexistent_group_id} does not exist." + nonexistent_group_id = "000000000000000000000001" + msg = ( + f"group instance with id ObjectId('{nonexistent_group_id}') does not exist." + ) @mock_inputs( { diff --git a/tests/auth_tests/test_views.py b/tests/auth_tests/test_views.py index 97d0448ab1..9bd81a87da 100644 --- a/tests/auth_tests/test_views.py +++ b/tests/auth_tests/test_views.py @@ -1749,7 +1749,8 @@ def test_admin_password_change(self): ) self.assertRedirects(response, user_change_url) row = LogEntry.objects.latest("id") - self.assertEqual(row.user_id, 1) # hardcoded in CustomUserAdmin.log_change() + # hardcoded in CustomUserAdmin.log_change() + self.assertEqual(str(row.user_id), "000000000000000000000001") self.assertEqual(row.object_id, str(u.pk)) self.assertEqual(row.get_change_message(), "Changed password.") diff --git a/tests/auth_tests/urls_custom_user_admin.py b/tests/auth_tests/urls_custom_user_admin.py index 1c7ce1eb42..46caeadaf3 100644 --- a/tests/auth_tests/urls_custom_user_admin.py +++ b/tests/auth_tests/urls_custom_user_admin.py @@ -9,9 +9,9 @@ class CustomUserAdmin(UserAdmin): def log_change(self, request, obj, message): # LogEntry.user column doesn't get altered to expect a UUID, so set an - # integer manually to avoid causing an error. + # ObjectId manually to avoid causing an error. original_pk = request.user.pk - request.user.pk = 1 + request.user.pk = "000000000000000000000001" super().log_change(request, obj, message) request.user.pk = original_pk diff --git a/tests/backends/base/test_creation.py b/tests/backends/base/test_creation.py index d69499b121..c0c741c953 100644 --- a/tests/backends/base/test_creation.py +++ b/tests/backends/base/test_creation.py @@ -179,13 +179,13 @@ def test_circular_reference(self): [ { "model": "backends.object", - "pk": 1, - "fields": {"obj_ref": 1, "related_objects": []} + "pk": "000000000000000000000001", + "fields": {"obj_ref": "000000000000000000000001", "related_objects": []} }, { "model": "backends.objectreference", - "pk": 1, - "fields": {"obj": 1} + "pk": "000000000000000000000001", + "fields": {"obj": "000000000000000000000001"} } ] """ diff --git a/tests/backends/tests.py b/tests/backends/tests.py index e4f898c5ef..00d00a5d77 100644 --- a/tests/backends/tests.py +++ b/tests/backends/tests.py @@ -609,7 +609,7 @@ def test_integrity_checks_on_creation(self): a1 = Article( headline="This is a test", pub_date=datetime.datetime(2005, 7, 27), - reporter_id=30, + reporter_id="000000000000000000000030", ) try: a1.save() @@ -641,7 +641,7 @@ def test_integrity_checks_on_update(self): ) # Retrieve it from the DB a1 = Article.objects.get(headline="Test article") - a1.reporter_id = 30 + a1.reporter_id = "000000000000000000000030" try: a1.save() except IntegrityError: @@ -678,7 +678,7 @@ def test_disable_constraint_checks_manually(self): ) # Retrieve it from the DB a = Article.objects.get(headline="Test article") - a.reporter_id = 30 + a.reporter_id = "000000000000000000000030" try: connection.disable_constraint_checking() a.save() @@ -701,7 +701,7 @@ def test_disable_constraint_checks_context_manager(self): ) # Retrieve it from the DB a = Article.objects.get(headline="Test article") - a.reporter_id = 30 + a.reporter_id = "000000000000000000000030" try: with connection.constraint_checks_disabled(): a.save() @@ -722,7 +722,7 @@ def test_check_constraints(self): ) # Retrieve it from the DB a = Article.objects.get(headline="Test article") - a.reporter_id = 30 + a.reporter_id = "000000000000000000000030" with connection.constraint_checks_disabled(): a.save() try: @@ -737,7 +737,7 @@ def test_check_constraints_sql_keywords(self): with transaction.atomic(): obj = SQLKeywordsModel.objects.create(reporter=self.r) obj.refresh_from_db() - obj.reporter_id = 30 + obj.reporter_id = "000000000000000000000030" with connection.constraint_checks_disabled(): obj.save() try: @@ -959,9 +959,9 @@ def test_can_reference_existent(self): self.assertEqual(ref.obj, obj) def test_can_reference_non_existent(self): - self.assertFalse(Object.objects.filter(id=12345).exists()) - ref = ObjectReference.objects.create(obj_id=12345) - ref_new = ObjectReference.objects.get(obj_id=12345) + self.assertFalse(Object.objects.filter(id="000000000000000000012345").exists()) + ref = ObjectReference.objects.create(obj_id="000000000000000000012345") + ref_new = ObjectReference.objects.get(obj_id="000000000000000000012345") self.assertEqual(ref, ref_new) with self.assertRaises(Object.DoesNotExist): @@ -976,6 +976,8 @@ def test_many_to_many(self): intermediary_model = Object._meta.get_field( "related_objects" ).remote_field.through - intermediary_model.objects.create(from_object_id=obj.id, to_object_id=12345) + intermediary_model.objects.create( + from_object_id=obj.id, to_object_id="000000000000000000012345" + ) self.assertEqual(obj.related_objects.count(), 1) self.assertEqual(intermediary_model.objects.count(), 2) diff --git a/tests/basic/tests.py b/tests/basic/tests.py index cef6e29b9b..558b308df2 100644 --- a/tests/basic/tests.py +++ b/tests/basic/tests.py @@ -421,12 +421,12 @@ def test_microsecond_precision_not_supported_edge_case(self): def test_manually_specify_primary_key(self): # You can manually specify the primary key when creating a new object. a101 = Article( - id=101, + id="000000000000000000000101", headline="Article 101", pub_date=datetime(2005, 7, 31, 12, 30, 45), ) a101.save() - a101 = Article.objects.get(pk=101) + a101 = Article.objects.get(pk="000000000000000000000101") self.assertEqual(a101.headline, "Article 101") def test_create_method(self): @@ -763,7 +763,7 @@ def test_does_not_exist(self): ObjectDoesNotExist, "Article matching query does not exist." ): Article.objects.get( - id__exact=2000, + id__exact="000000000000000000002000", ) # To avoid dict-ordering related errors check only one lookup # in single assert. diff --git a/tests/bulk_create/tests.py b/tests/bulk_create/tests.py index 7b86a2def5..e5dfacd6f6 100644 --- a/tests/bulk_create/tests.py +++ b/tests/bulk_create/tests.py @@ -226,14 +226,14 @@ def test_large_batch_mixed(self): """ TwoFields.objects.bulk_create( [ - TwoFields(id=i if i % 2 == 0 else None, f1=i, f2=i + 1) + TwoFields(id=f"{i:024}" if i % 2 == 0 else None, f1=i, f2=i + 1) for i in range(100000, 101000) ] ) self.assertEqual(TwoFields.objects.count(), 1000) # We can't assume much about the ID's created, except that the above # created IDs must exist. - id_range = range(100000, 101000, 2) + id_range = [f"{i:024}" for i in range(100000, 101000, 2)] self.assertEqual(TwoFields.objects.filter(id__in=id_range).count(), 500) self.assertEqual(TwoFields.objects.exclude(id__in=id_range).count(), 500) @@ -247,7 +247,7 @@ def test_large_batch_mixed_efficiency(self): connection.queries_log.clear() TwoFields.objects.bulk_create( [ - TwoFields(id=i if i % 2 == 0 else None, f1=i, f2=i + 1) + TwoFields(id=f"{i:024}" if i % 2 == 0 else None, f1=i, f2=i + 1) for i in range(100000, 101000) ] ) diff --git a/tests/check_framework/test_model_checks.py b/tests/check_framework/test_model_checks.py index be504f9c2d..97b0373585 100644 --- a/tests/check_framework/test_model_checks.py +++ b/tests/check_framework/test_model_checks.py @@ -69,7 +69,9 @@ class Meta: ], ) - @modify_settings(INSTALLED_APPS={"append": "basic"}) + @modify_settings( + INSTALLED_APPS={"append": "basic", "remove": "django.contrib.sites"} + ) @isolate_apps("basic", "check_framework", kwarg_name="apps") def test_collision_across_apps(self, apps): class Model1(models.Model): @@ -94,7 +96,9 @@ class Meta: ], ) - @modify_settings(INSTALLED_APPS={"append": "basic"}) + @modify_settings( + INSTALLED_APPS={"append": "basic", "remove": "django.contrib.sites"} + ) @override_settings( DATABASE_ROUTERS=["check_framework.test_model_checks.EmptyRouter"] ) @@ -235,7 +239,9 @@ class Model2(AbstractModel): self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), []) - @modify_settings(INSTALLED_APPS={"append": "basic"}) + @modify_settings( + INSTALLED_APPS={"append": "basic", "remove": "django.contrib.sites"} + ) @isolate_apps("basic", "check_framework", kwarg_name="apps") def test_collision_across_apps(self, apps): index = models.Index(fields=["id"], name="foo") @@ -261,7 +267,9 @@ class Meta: ], ) - @modify_settings(INSTALLED_APPS={"append": "basic"}) + @modify_settings( + INSTALLED_APPS={"append": "basic", "remove": "django.contrib.sites"} + ) @isolate_apps("basic", "check_framework", kwarg_name="apps") def test_no_collision_across_apps_interpolation(self, apps): index = models.Index(fields=["id"], name="%(app_label)s_%(class)s_foo") @@ -367,7 +375,9 @@ class Model2(AbstractModel): self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), []) - @modify_settings(INSTALLED_APPS={"append": "basic"}) + @modify_settings( + INSTALLED_APPS={"append": "basic", "remove": "django.contrib.sites"} + ) @isolate_apps("basic", "check_framework", kwarg_name="apps") def test_collision_across_apps(self, apps): constraint = models.CheckConstraint(condition=models.Q(id__gt=0), name="foo") diff --git a/tests/contenttypes_tests/test_views.py b/tests/contenttypes_tests/test_views.py index 75f39a7bab..7d3034e1aa 100644 --- a/tests/contenttypes_tests/test_views.py +++ b/tests/contenttypes_tests/test_views.py @@ -27,7 +27,9 @@ class ContentTypesViewsTests(TestCase): def setUpTestData(cls): # Don't use the manager to ensure the site exists with pk=1, regardless # of whether or not it already exists. - cls.site1 = Site(pk=1, domain="testserver", name="testserver") + cls.site1 = Site( + pk="000000000000000000000001", domain="testserver", name="testserver" + ) cls.site1.save() cls.author1 = Author.objects.create(name="Boris") cls.article1 = Article.objects.create( @@ -178,7 +180,7 @@ def test_shortcut_view_with_site_m2m(self, get_model): # domains in the MockSite model. MockSite.objects.bulk_create( [ - MockSite(pk=1, domain="example.com"), + MockSite(pk="000000000000000000000001", domain="example.com"), MockSite(pk=self.site_2.pk, domain=self.site_2.domain), MockSite(pk=self.site_3.pk, domain=self.site_3.domain), ] diff --git a/tests/db_functions/comparison/test_coalesce.py b/tests/db_functions/comparison/test_coalesce.py index b08ae742df..cbb7bed1aa 100644 --- a/tests/db_functions/comparison/test_coalesce.py +++ b/tests/db_functions/comparison/test_coalesce.py @@ -67,9 +67,15 @@ def test_empty_queryset(self): queryset = Author.objects.values("id") tests = [ (queryset.none(), "QuerySet.none()"), - (queryset.filter(id=0), "QuerySet.filter(id=0)"), + ( + queryset.filter(id="000000000000000000000000"), + "QuerySet.filter(id=000000000000000000000000)", + ), (Subquery(queryset.none()), "Subquery(QuerySet.none())"), - (Subquery(queryset.filter(id=0)), "Subquery(Queryset.filter(id=0)"), + ( + Subquery(queryset.filter(id="000000000000000000000000")), + "Subquery(Queryset.filter(id000000000000000000000000)", + ), ] for empty_query, description in tests: with self.subTest(description), self.assertNumQueries(1): diff --git a/tests/delete_regress/models.py b/tests/delete_regress/models.py index b0e1e0b2a8..316a2dccf8 100644 --- a/tests/delete_regress/models.py +++ b/tests/delete_regress/models.py @@ -91,7 +91,11 @@ class Item(models.Model): version = models.ForeignKey(Version, models.CASCADE) location = models.ForeignKey(Location, models.SET_NULL, blank=True, null=True) location_value = models.ForeignKey( - Location, models.SET(42), default=1, db_constraint=False, related_name="+" + Location, + models.SET("000000000000000000000042"), + default="000000000000000000000001", + db_constraint=False, + related_name="+", ) diff --git a/tests/delete_regress/tests.py b/tests/delete_regress/tests.py index ce5a0db8ab..2e2da1777a 100644 --- a/tests/delete_regress/tests.py +++ b/tests/delete_regress/tests.py @@ -115,7 +115,7 @@ def test_fk_to_m2m_through(self): self.assertEqual(PlayedWithNote.objects.count(), 0) def test_15776(self): - policy = Policy.objects.create(pk=1, policy_number="1234") + policy = Policy.objects.create(policy_number="1234") version = Version.objects.create(policy=policy) location = Location.objects.create(version=version) Item.objects.create(version=version, location=location) diff --git a/tests/expressions_case/tests.py b/tests/expressions_case/tests.py index 8704a7b991..d215a4fa1c 100644 --- a/tests/expressions_case/tests.py +++ b/tests/expressions_case/tests.py @@ -466,7 +466,7 @@ def test_condition_with_lookups(self): def test_case_reuse(self): SOME_CASE = Case( - When(pk=0, then=Value("0")), + When(pk="000000000000000000000000", then=Value("0")), default=Value("1"), ) self.assertQuerySetEqual( @@ -1360,7 +1360,7 @@ def test_join_promotion(self): self.assertQuerySetEqual( CaseTestModel.objects.filter(pk=o.pk).annotate( foo=Case( - When(fk_rel__pk=1, then=2), + When(fk_rel__pk="000000000000000000000001", then=2), default=3, ), ), @@ -1390,11 +1390,11 @@ def test_join_promotion_multiple_annotations(self): self.assertQuerySetEqual( CaseTestModel.objects.filter(pk=o.pk).annotate( foo=Case( - When(fk_rel__pk=1, then=2), + When(fk_rel__pk="000000000000000000000001", then=2), default=3, ), bar=Case( - When(fk_rel__pk=1, then=4), + When(fk_rel__pk="000000000000000000000001", then=4), default=5, ), ), diff --git a/tests/fixtures/fixtures/circular_reference.json b/tests/fixtures/fixtures/circular_reference.json index 0656c30c93..1ac092e251 100644 --- a/tests/fixtures/fixtures/circular_reference.json +++ b/tests/fixtures/fixtures/circular_reference.json @@ -1,18 +1,18 @@ [ { "model": "fixtures.circulara", - "pk": 1, + "pk": "000000000000000000000001", "fields": { "key": "x", - "obj": 1 + "obj": "000000000000000000000001" } }, { "model": "fixtures.circularb", - "pk": 1, + "pk": "000000000000000000000001", "fields": { "key": "y", - "obj": 1 + "obj": "000000000000000000000001" } } ] diff --git a/tests/fixtures/fixtures/db_fixture_1.default.json b/tests/fixtures/fixtures/db_fixture_1.default.json index 9bb39e400f..8d002bab44 100644 --- a/tests/fixtures/fixtures/db_fixture_1.default.json +++ b/tests/fixtures/fixtures/db_fixture_1.default.json @@ -1,10 +1,10 @@ [ { - "pk": "6", + "pk": "000000000000000000000006", "model": "fixtures.article", "fields": { "headline": "Who needs more than one database?", "pub_date": "2006-06-16 14:00:00" } } -] \ No newline at end of file +] diff --git a/tests/fixtures/fixtures/db_fixture_2.default.json.gz b/tests/fixtures/fixtures/db_fixture_2.default.json.gz index 80e4ba139f..2255f61512 100644 Binary files a/tests/fixtures/fixtures/db_fixture_2.default.json.gz and b/tests/fixtures/fixtures/db_fixture_2.default.json.gz differ diff --git a/tests/fixtures/fixtures/fixture1.json b/tests/fixtures/fixtures/fixture1.json index 332feaef77..aa2ea28eac 100644 --- a/tests/fixtures/fixtures/fixture1.json +++ b/tests/fixtures/fixtures/fixture1.json @@ -1,6 +1,6 @@ [ { - "pk": 1, + "pk": "000000000000000000000001", "model": "sites.site", "fields": { "domain": "example.com", @@ -8,7 +8,7 @@ } }, { - "pk": "2", + "pk": "000000000000000000000002", "model": "fixtures.article", "fields": { "headline": "Poker has no place on ESPN", @@ -16,7 +16,7 @@ } }, { - "pk": "3", + "pk": "000000000000000000000003", "model": "fixtures.article", "fields": { "headline": "Time to reform copyright", @@ -24,7 +24,7 @@ } }, { - "pk": 1, + "pk": "000000000000000000000001", "model": "fixtures.category", "fields": { "description": "Latest news stories", diff --git a/tests/fixtures/fixtures/fixture2.json b/tests/fixtures/fixtures/fixture2.json index a697448327..e69148be9e 100644 --- a/tests/fixtures/fixtures/fixture2.json +++ b/tests/fixtures/fixtures/fixture2.json @@ -1,6 +1,6 @@ [ { - "pk": "3", + "pk": "000000000000000000000003", "model": "fixtures.article", "fields": { "headline": "Copyright is fine the way it is", @@ -8,7 +8,7 @@ } }, { - "pk": "4", + "pk": "000000000000000000000004", "model": "fixtures.article", "fields": { "headline": "Django conquers world!", diff --git a/tests/fixtures/fixtures/fixture3.xml b/tests/fixtures/fixtures/fixture3.xml index 9ced78162e..1f0325d768 100644 --- a/tests/fixtures/fixtures/fixture3.xml +++ b/tests/fixtures/fixtures/fixture3.xml @@ -1,11 +1,11 @@ - + Poker on TV is great! 2006-06-16 11:00:00 - + XML identified as leading cause of cancer 2006-06-16 16:00:00 - \ No newline at end of file + diff --git a/tests/fixtures/fixtures/fixture4.json.zip b/tests/fixtures/fixtures/fixture4.json.zip index 270cccb3ff..9b834cc53b 100644 Binary files a/tests/fixtures/fixtures/fixture4.json.zip and b/tests/fixtures/fixtures/fixture4.json.zip differ diff --git a/tests/fixtures/fixtures/fixture5.json.bz2 b/tests/fixtures/fixtures/fixture5.json.bz2 index 046bfa5820..5abe74ec15 100644 Binary files a/tests/fixtures/fixtures/fixture5.json.bz2 and b/tests/fixtures/fixtures/fixture5.json.bz2 differ diff --git a/tests/fixtures/fixtures/fixture5.json.gz b/tests/fixtures/fixtures/fixture5.json.gz index bb6baca66d..b41a6d7cdf 100644 Binary files a/tests/fixtures/fixtures/fixture5.json.gz and b/tests/fixtures/fixtures/fixture5.json.gz differ diff --git a/tests/fixtures/fixtures/fixture5.json.lzma b/tests/fixtures/fixtures/fixture5.json.lzma index a41fdaa82f..49ef548527 100644 Binary files a/tests/fixtures/fixtures/fixture5.json.lzma and b/tests/fixtures/fixtures/fixture5.json.lzma differ diff --git a/tests/fixtures/fixtures/fixture5.json.xz b/tests/fixtures/fixtures/fixture5.json.xz index af2e82d5c1..2b4cd2ba53 100644 Binary files a/tests/fixtures/fixtures/fixture5.json.xz and b/tests/fixtures/fixtures/fixture5.json.xz differ diff --git a/tests/fixtures/fixtures/fixture5.json.zip b/tests/fixtures/fixtures/fixture5.json.zip index 9380cef608..8c10891cf6 100644 Binary files a/tests/fixtures/fixtures/fixture5.json.zip and b/tests/fixtures/fixtures/fixture5.json.zip differ diff --git a/tests/fixtures/fixtures/fixture6.json b/tests/fixtures/fixtures/fixture6.json index 60e4733c71..32a0c1f66a 100644 --- a/tests/fixtures/fixtures/fixture6.json +++ b/tests/fixtures/fixtures/fixture6.json @@ -1,38 +1,38 @@ [ { - "pk": "1", + "pk": "000000000000000000000001", "model": "fixtures.tag", "fields": { "name": "copyright", "tagged_type": ["fixtures", "article"], - "tagged_id": "3" + "tagged_id": "000000000000000000000003" } }, { - "pk": "2", + "pk": "000000000000000000000002", "model": "fixtures.tag", "fields": { "name": "law", "tagged_type": ["fixtures", "article"], - "tagged_id": "3" + "tagged_id": "000000000000000000000003" } }, { - "pk": "1", + "pk": "000000000000000000000001", "model": "fixtures.person", "fields": { "name": "Django Reinhardt" } }, { - "pk": "2", + "pk": "000000000000000000000002", "model": "fixtures.person", "fields": { "name": "Stephane Grappelli" } }, { - "pk": "3", + "pk": "000000000000000000000003", "model": "fixtures.person", "fields": { "name": "Prince" diff --git a/tests/fixtures/fixtures/fixture8.json b/tests/fixtures/fixtures/fixture8.json index bc113aa00e..51aad74e87 100644 --- a/tests/fixtures/fixtures/fixture8.json +++ b/tests/fixtures/fixtures/fixture8.json @@ -1,6 +1,6 @@ [ { - "pk": "1", + "pk": "000000000000000000000001", "model": "fixtures.visa", "fields": { "person": ["Django Reinhardt"], @@ -12,7 +12,7 @@ } }, { - "pk": "2", + "pk": "000000000000000000000002", "model": "fixtures.visa", "fields": { "person": ["Stephane Grappelli"], @@ -22,7 +22,7 @@ } }, { - "pk": "3", + "pk": "000000000000000000000003", "model": "fixtures.visa", "fields": { "person": ["Prince"], diff --git a/tests/fixtures/fixtures/fixture_with[special]chars.json b/tests/fixtures/fixtures/fixture_with[special]chars.json index b6b7ad2a7c..1e01f6aa88 100644 --- a/tests/fixtures/fixtures/fixture_with[special]chars.json +++ b/tests/fixtures/fixtures/fixture_with[special]chars.json @@ -1,6 +1,6 @@ [ { - "pk": "1", + "pk": "000000000000000000000001", "model": "fixtures.article", "fields": { "headline": "How To Deal With Special Characters", diff --git a/tests/fixtures/fixtures/forward_reference_fk.json b/tests/fixtures/fixtures/forward_reference_fk.json index c553d2b487..6c20c7fab9 100644 --- a/tests/fixtures/fixtures/forward_reference_fk.json +++ b/tests/fixtures/fixtures/forward_reference_fk.json @@ -1,18 +1,18 @@ [ { "model": "fixtures.naturalkeything", - "pk": 1, + "pk": "000000000000000000000001", "fields": { "key": "t1", - "other_thing": 2 + "other_thing": "000000000000000000000002" } }, { "model": "fixtures.naturalkeything", - "pk": 2, + "pk": "000000000000000000000002", "fields": { "key": "t2", - "other_thing": 1 + "other_thing": "000000000000000000000001" } } ] diff --git a/tests/fixtures/fixtures/forward_reference_m2m.json b/tests/fixtures/fixtures/forward_reference_m2m.json index 927bac62b6..b91f6dfae9 100644 --- a/tests/fixtures/fixtures/forward_reference_m2m.json +++ b/tests/fixtures/fixtures/forward_reference_m2m.json @@ -1,22 +1,22 @@ [ { "model": "fixtures.naturalkeything", - "pk": 1, + "pk": "000000000000000000000001", "fields": { "key": "t1", - "other_things": [2, 3] + "other_things": ["000000000000000000000002", "000000000000000000000003"] } }, { "model": "fixtures.naturalkeything", - "pk": 2, + "pk": "000000000000000000000002", "fields": { "key": "t2" } }, { "model": "fixtures.naturalkeything", - "pk": 3, + "pk": "000000000000000000000003", "fields": { "key": "t3" } diff --git a/tests/fixtures/fixtures/invalid.json b/tests/fixtures/fixtures/invalid.json index fb69f7c949..61f2a7908c 100644 --- a/tests/fixtures/fixtures/invalid.json +++ b/tests/fixtures/fixtures/invalid.json @@ -1,6 +1,6 @@ [ { - "pk": "1", + "pk": "000000000000000000000001", "model": "fixtures.article", "fields": { "headline": "Breaking news", diff --git a/tests/fixtures/fixtures/null_character_in_field_value.json b/tests/fixtures/fixtures/null_character_in_field_value.json index 7b246a0544..9092a27a74 100644 --- a/tests/fixtures/fixtures/null_character_in_field_value.json +++ b/tests/fixtures/fixtures/null_character_in_field_value.json @@ -1,6 +1,6 @@ [ { - "pk": "2", + "pk": "000000000000000000000002", "model": "fixtures.article", "fields": { "headline": "Poker has no place on ESPN\u0000", diff --git a/tests/fixtures/models.py b/tests/fixtures/models.py index c87e170afc..b0f1adbfa7 100644 --- a/tests/fixtures/models.py +++ b/tests/fixtures/models.py @@ -10,6 +10,8 @@ import uuid +from django_mongodb_backend.fields import ObjectIdField + from django.contrib.auth.models import Permission from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType @@ -56,7 +58,7 @@ class Tag(models.Model): tagged_type = models.ForeignKey( ContentType, models.CASCADE, related_name="fixtures_tag_set" ) - tagged_id = models.PositiveIntegerField(default=0) + tagged_id = ObjectIdField(default="000000000000000000000000") tagged = GenericForeignKey(ct_field="tagged_type", fk_field="tagged_id") def __str__(self): diff --git a/tests/fixtures/tests.py b/tests/fixtures/tests.py index dfb1cd05bb..aa1b1df404 100644 --- a/tests/fixtures/tests.py +++ b/tests/fixtures/tests.py @@ -145,12 +145,15 @@ def test_loading_and_dumping(self): # Dump the current contents of the database as a JSON fixture self._dumpdata_assert( ["fixtures"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}, ' - '{"pk": 2, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Time to reform copyright", ' '"pub_date": "2006-06-16T13:00:00"}}]', ) @@ -158,17 +161,20 @@ def test_loading_and_dumping(self): # Try just dumping the contents of fixtures.Category self._dumpdata_assert( ["fixtures.Category"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}]', ) # ...and just fixtures.Article self._dumpdata_assert( ["fixtures.Article"], - '[{"pk": 2, "model": "fixtures.article", "fields": ' + '[{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Time to reform copyright", ' '"pub_date": "2006-06-16T13:00:00"}}]', ) @@ -176,12 +182,15 @@ def test_loading_and_dumping(self): # ...and both self._dumpdata_assert( ["fixtures.Category", "fixtures.Article"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}, ' - '{"pk": 2, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Time to reform copyright", ' '"pub_date": "2006-06-16T13:00:00"}}]', ) @@ -190,10 +199,12 @@ def test_loading_and_dumping(self): self._dumpdata_assert( ["fixtures.Article", "fixtures.Article"], ( - '[{"pk": 2, "model": "fixtures.article", "fields": ' + '[{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Time to reform copyright", ' '"pub_date": "2006-06-16T13:00:00"}}]' ), @@ -202,12 +213,15 @@ def test_loading_and_dumping(self): # Specify a dump that specifies Article both explicitly and implicitly self._dumpdata_assert( ["fixtures.Article", "fixtures"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}, ' - '{"pk": 2, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Time to reform copyright", ' '"pub_date": "2006-06-16T13:00:00"}}]', ) @@ -216,12 +230,15 @@ def test_loading_and_dumping(self): # but lists the app first (#22025). self._dumpdata_assert( ["fixtures", "fixtures.Article"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}, ' - '{"pk": 2, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Time to reform copyright", ' '"pub_date": "2006-06-16T13:00:00"}}]', ) @@ -229,12 +246,15 @@ def test_loading_and_dumping(self): # Same again, but specify in the reverse order self._dumpdata_assert( ["fixtures"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}, ' - '{"pk": 2, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Time to reform copyright", ' '"pub_date": "2006-06-16T13:00:00"}}]', ) @@ -242,9 +262,10 @@ def test_loading_and_dumping(self): # Specify one model from one application, and an entire other application. self._dumpdata_assert( ["fixtures.Category", "sites"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}, ' - '{"pk": 1, "model": "sites.site", "fields": ' + '{"pk": "000000000000000000000001", "model": "sites.site", "fields": ' '{"domain": "example.com", "name": "example.com"}}]', ) @@ -340,14 +361,14 @@ def test_loading_and_dumping(self): # By default, you get raw keys on dumpdata self._dumpdata_assert( ["fixtures.book"], - '[{"pk": 1, "model": "fixtures.book", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.book", "fields": ' '{"name": "Music for all ages", "authors": [3, 1]}}]', ) # But you can get natural keys if you ask for them and they are available self._dumpdata_assert( ["fixtures.book"], - '[{"pk": 1, "model": "fixtures.book", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.book", "fields": ' '{"name": "Music for all ages", "authors": ' '[["Artist formerly known as \\"Prince\\""], ["Django Reinhardt"]]}}]', natural_foreign_keys=True, @@ -367,49 +388,59 @@ def test_loading_and_dumping(self): # Dump the current contents of the database as a JSON fixture self._dumpdata_assert( ["fixtures"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}, ' - '{"pk": 2, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker on TV is great!", ' '"pub_date": "2006-06-16T11:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Copyright is fine the way it is", ' '"pub_date": "2006-06-16T14:00:00"}}, ' - '{"pk": 4, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000004", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Django conquers world!", ' '"pub_date": "2006-06-16T15:00:00"}}, ' '{"pk": 5, "model": "fixtures.article", "fields": ' '{"headline": "XML identified as leading cause of cancer", ' '"pub_date": "2006-06-16T16:00:00"}}, ' - '{"pk": 1, "model": "fixtures.tag", "fields": ' + '{"pk": "000000000000000000000001", "model": "fixtures.tag",' + ' "fields": ' '{"tagged_type": ["fixtures", "article"], "name": "copyright", ' '"tagged_id": 3}}, ' - '{"pk": 2, "model": "fixtures.tag", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.tag",' + ' "fields": ' '{"tagged_type": ["fixtures", "article"], "name": "legal", ' '"tagged_id": 3}}, ' - '{"pk": 3, "model": "fixtures.tag", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.tag",' + ' "fields": ' '{"tagged_type": ["fixtures", "article"], "name": "django", ' '"tagged_id": 4}}, ' - '{"pk": 4, "model": "fixtures.tag", "fields": ' + '{"pk": "000000000000000000000004", "model": "fixtures.tag",' + ' "fields": ' '{"tagged_type": ["fixtures", "article"], "name": "world domination", ' '"tagged_id": 4}}, ' - '{"pk": 1, "model": "fixtures.person", ' + '{"pk": "000000000000000000000001", "model": "fixtures.person", ' '"fields": {"name": "Django Reinhardt"}}, ' - '{"pk": 2, "model": "fixtures.person", ' + '{"pk": "000000000000000000000002", "model": "fixtures.person", ' '"fields": {"name": "Stephane Grappelli"}}, ' - '{"pk": 3, "model": "fixtures.person", ' + '{"pk": "000000000000000000000003", "model": "fixtures.person", ' '"fields": {"name": "Artist formerly known as \\"Prince\\""}}, ' - '{"pk": 1, "model": "fixtures.visa", ' + '{"pk": "000000000000000000000001", "model": "fixtures.visa", ' '"fields": {"person": ["Django Reinhardt"], "permissions": ' '[["add_user", "auth", "user"], ["change_user", "auth", "user"], ' '["delete_user", "auth", "user"]]}}, ' - '{"pk": 2, "model": "fixtures.visa", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.visa",' + ' "fields": ' '{"person": ["Stephane Grappelli"], "permissions": ' '[["add_user", "auth", "user"], ["delete_user", "auth", "user"]]}}, ' - '{"pk": 3, "model": "fixtures.visa", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.visa", "fields": ' '{"person": ["Artist formerly known as \\"Prince\\""], "permissions": ' '[["change_user", "auth", "user"]]}}, ' - '{"pk": 1, "model": "fixtures.book", "fields": ' + '{"pk": "000000000000000000000001", "model": "fixtures.book",' + ' "fields": ' '{"name": "Music for all ages", "authors": ' '[["Artist formerly known as \\"Prince\\""], ["Django Reinhardt"]]}}]', natural_foreign_keys=True, @@ -522,7 +553,7 @@ def test_dumpdata_with_excludes(self): # Excluding fixtures app should only leave sites self._dumpdata_assert( ["sites", "fixtures"], - '[{"pk": 1, "model": "sites.site", "fields": ' + '[{"pk": "000000000000000000000001", "model": "sites.site", "fields": ' '{"domain": "example.com", "name": "example.com"}}]', exclude_list=["fixtures"], ) @@ -530,9 +561,10 @@ def test_dumpdata_with_excludes(self): # Excluding fixtures.Article/Book should leave fixtures.Category self._dumpdata_assert( ["sites", "fixtures"], - '[{"pk": 1, "model": "sites.site", ' + '[{"pk": "000000000000000000000001", "model": "sites.site", ' '"fields": {"domain": "example.com", "name": "example.com"}}, ' - '{"pk": 1, "model": "fixtures.category", "fields": ' + '{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}]', exclude_list=["fixtures.Article", "fixtures.Book"], ) @@ -540,9 +572,9 @@ def test_dumpdata_with_excludes(self): # Excluding fixtures and fixtures.Article/Book should be a no-op self._dumpdata_assert( ["sites", "fixtures"], - '[{"pk": 1, "model": "sites.site", ' + '[{"pk": "000000000000000000000001", "model": "sites.site", ' '"fields": {"domain": "example.com", "name": "example.com"}}, ' - '{"pk": 1, "model": "fixtures.category", ' + '{"pk": "000000000000000000000001", "model": "fixtures.category", ' '"fields": {"description": "Latest news stories", ' '"title": "News Stories"}}]', exclude_list=["fixtures.Article", "fixtures.Book"], @@ -551,7 +583,8 @@ def test_dumpdata_with_excludes(self): # Excluding sites and fixtures.Article/Book should only leave fixtures.Category self._dumpdata_assert( ["sites", "fixtures"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}]', exclude_list=["fixtures.Article", "fixtures.Book", "sites"], ) @@ -605,21 +638,21 @@ def test_dumpdata_with_pks(self): management.call_command("loaddata", "fixture2.json", verbosity=0) self._dumpdata_assert( ["fixtures.Article"], - '[{"pk": 2, "model": "fixtures.article", ' + '[{"pk": "000000000000000000000002", "model": "fixtures.article", ' '"fields": {"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article", "fields": ' '{"headline": "Copyright is fine the way it is", ' '"pub_date": "2006-06-16T14:00:00"}}]', - primary_keys="2,3", + primary_keys="000000000000000000000002,000000000000000000000003", ) self._dumpdata_assert( ["fixtures.Article"], - '[{"pk": 2, "model": "fixtures.article", ' + '[{"pk": "000000000000000000000002", "model": "fixtures.article", ' '"fields": {"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}]', - primary_keys="2", + primary_keys="000000000000000000000002", ) with self.assertRaisesMessage( @@ -627,10 +660,12 @@ def test_dumpdata_with_pks(self): ): self._dumpdata_assert( ["fixtures"], - '[{"pk": 2, "model": "fixtures.article", "fields": ' + '[{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Copyright is fine the way it is", ' '"pub_date": "2006-06-16T14:00:00"}}]', primary_keys="2,3", @@ -641,10 +676,12 @@ def test_dumpdata_with_pks(self): ): self._dumpdata_assert( "", - '[{"pk": 2, "model": "fixtures.article", "fields": ' + '[{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Copyright is fine the way it is", ' '"pub_date": "2006-06-16T14:00:00"}}]', primary_keys="2,3", @@ -655,10 +692,12 @@ def test_dumpdata_with_pks(self): ): self._dumpdata_assert( ["fixtures.Article", "fixtures.category"], - '[{"pk": 2, "model": "fixtures.article", "fields": ' + '[{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Copyright is fine the way it is", ' '"pub_date": "2006-06-16T14:00:00"}}]', primary_keys="2,3", @@ -683,12 +722,15 @@ def test_dumpdata_with_file_output(self): management.call_command("loaddata", "fixture1.json", verbosity=0) self._dumpdata_assert( ["fixtures"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}, ' - '{"pk": 2, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Time to reform copyright", ' '"pub_date": "2006-06-16T13:00:00"}}]', filename="dumpdata.json", @@ -698,12 +740,15 @@ def test_dumpdata_with_file_gzip_output(self): management.call_command("loaddata", "fixture1.json", verbosity=0) self._dumpdata_assert( ["fixtures"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}, ' - '{"pk": 2, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Time to reform copyright", ' '"pub_date": "2006-06-16T13:00:00"}}]', filename="dumpdata.json.gz", @@ -714,12 +759,15 @@ def test_dumpdata_with_file_bz2_output(self): management.call_command("loaddata", "fixture1.json", verbosity=0) self._dumpdata_assert( ["fixtures"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}, ' - '{"pk": 2, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Time to reform copyright", ' '"pub_date": "2006-06-16T13:00:00"}}]', filename="dumpdata.json.bz2", @@ -730,12 +778,15 @@ def test_dumpdata_with_file_lzma_output(self): management.call_command("loaddata", "fixture1.json", verbosity=0) self._dumpdata_assert( ["fixtures"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}, ' - '{"pk": 2, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Time to reform copyright", ' '"pub_date": "2006-06-16T13:00:00"}}]', filename="dumpdata.json.lzma", @@ -746,12 +797,15 @@ def test_dumpdata_with_file_xz_output(self): management.call_command("loaddata", "fixture1.json", verbosity=0) self._dumpdata_assert( ["fixtures"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}, ' - '{"pk": 2, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Time to reform copyright", ' '"pub_date": "2006-06-16T13:00:00"}}]', filename="dumpdata.json.xz", @@ -763,12 +817,15 @@ def test_dumpdata_with_file_zip_output(self): with self.assertWarnsMessage(RuntimeWarning, msg): self._dumpdata_assert( ["fixtures"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}, ' - '{"pk": 2, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Time to reform copyright", ' '"pub_date": "2006-06-16T13:00:00"}}]', filename="dumpdata.json.zip", @@ -928,14 +985,14 @@ def test_loaddata_error_message(self): if connection.vendor == "mysql": with connection.cursor() as cursor: cursor.execute("SET sql_mode = 'TRADITIONAL'") - msg = "Could not load fixtures.Article(pk=1):" + msg = "Could not load fixtures.Article(pk=000000000000000000000001):" with self.assertRaisesMessage(IntegrityError, msg): management.call_command("loaddata", "invalid.json", verbosity=0) @skipUnlessDBFeature("prohibits_null_characters_in_text_exception") def test_loaddata_null_characters_on_postgresql(self): error, msg = connection.features.prohibits_null_characters_in_text_exception - msg = f"Could not load fixtures.Article(pk=2): {msg}" + msg = f"Could not load fixtures.Article(pk=000000000000000000000002): {msg}" with self.assertRaisesMessage(error, msg): management.call_command("loaddata", "null_character_in_field_value.json") @@ -1018,24 +1075,32 @@ def test_output_formats(self): # Dump the current contents of the database as a JSON fixture self._dumpdata_assert( ["fixtures"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}, ' - '{"pk": 2, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Time to reform copyright", ' '"pub_date": "2006-06-16T13:00:00"}}, ' - '{"pk": 1, "model": "fixtures.tag", "fields": ' + '{"pk": "000000000000000000000001", "model": "fixtures.tag", "fields": ' '{"tagged_type": ["fixtures", "article"], "name": "copyright", ' - '"tagged_id": 3}}, ' - '{"pk": 2, "model": "fixtures.tag", "fields": ' - '{"tagged_type": ["fixtures", "article"], "name": "law", "tagged_id": 3}}, ' - '{"pk": 1, "model": "fixtures.person", "fields": ' + '"tagged_id": "000000000000000000000003"}}, ' + '{"pk": "000000000000000000000002", "model": "fixtures.tag", "fields": ' + '{"tagged_type": ["fixtures", "article"], "name": "law", "tagged_id": ' + '"000000000000000000000003"}}, ' + '{"pk": "000000000000000000000001", "model": "fixtures.person",' + ' "fields": ' '{"name": "Django Reinhardt"}}, ' - '{"pk": 2, "model": "fixtures.person", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.person",' + ' "fields": ' '{"name": "Stephane Grappelli"}}, ' - '{"pk": 3, "model": "fixtures.person", "fields": {"name": "Prince"}}]', + '{"pk": "000000000000000000000003", "model": "fixtures.person",' + ' "fields": ' + '{"name": "Prince"}}]', natural_foreign_keys=True, ) @@ -1043,39 +1108,41 @@ def test_output_formats(self): self._dumpdata_assert( ["fixtures"], '' - '' + '' 'News Stories' 'Latest news stories' "" - '' + '' 'Poker has no place on ESPN' '2006-06-16T12:00:00' "" - '' + '' 'Time to reform copyright' '2006-06-16T13:00:00' "" - '' + '' 'copyright' 'fixtures' "article" - '3' + '000000000000000000000003' + "" "" - '' + '' 'law' 'fixtures' "article" - '3' + '000000000000000000000003' + "" "" - '' + '' 'Django Reinhardt' "" - '' + '' 'Stephane Grappelli' "" - '' + '' 'Prince' "", format="xml", @@ -1212,12 +1279,15 @@ def test_format_discovery(self): # Dump the current contents of the database as a JSON fixture self._dumpdata_assert( ["fixtures"], - '[{"pk": 1, "model": "fixtures.category", "fields": ' + '[{"pk": "000000000000000000000001", "model": "fixtures.category",' + ' "fields": ' '{"description": "Latest news stories", "title": "News Stories"}}, ' - '{"pk": 2, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000002", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Poker has no place on ESPN", ' '"pub_date": "2006-06-16T12:00:00"}}, ' - '{"pk": 3, "model": "fixtures.article", "fields": ' + '{"pk": "000000000000000000000003", "model": "fixtures.article",' + ' "fields": ' '{"headline": "Time to reform copyright", ' '"pub_date": "2006-06-16T13:00:00"}}]', ) @@ -1242,10 +1312,12 @@ def test_forward_reference_fk(self): self.assertEqual(t2.other_thing, t1) self._dumpdata_assert( ["fixtures"], - '[{"model": "fixtures.naturalkeything", "pk": 1, ' - '"fields": {"key": "t1", "other_thing": 2, "other_things": []}}, ' - '{"model": "fixtures.naturalkeything", "pk": 2, ' - '"fields": {"key": "t2", "other_thing": 1, "other_things": []}}]', + '[{"model": "fixtures.naturalkeything", "pk": "000000000000000000000001", ' + '"fields": {"key": "t1", "other_thing": "000000000000000000000002",' + ' "other_things": []}}, ' + '{"model": "fixtures.naturalkeything", "pk": "000000000000000000000002", ' + '"fields": {"key": "t2", "other_thing": "000000000000000000000001",' + ' "other_things": []}}]', ) def test_forward_reference_fk_natural_key(self): @@ -1277,11 +1349,12 @@ def test_forward_reference_m2m(self): ) self._dumpdata_assert( ["fixtures"], - '[{"model": "fixtures.naturalkeything", "pk": 1, ' - '"fields": {"key": "t1", "other_thing": null, "other_things": [2, 3]}}, ' - '{"model": "fixtures.naturalkeything", "pk": 2, ' + '[{"model": "fixtures.naturalkeything", "pk": "000000000000000000000001", ' + '"fields": {"key": "t1", "other_thing": null, "other_things": ' + '["000000000000000000000002", "000000000000000000000003"]}}, ' + '{"model": "fixtures.naturalkeything", "pk": "000000000000000000000002", ' '"fields": {"key": "t2", "other_thing": null, "other_things": []}}, ' - '{"model": "fixtures.naturalkeything", "pk": 3, ' + '{"model": "fixtures.naturalkeything", "pk": "000000000000000000000003", ' '"fields": {"key": "t3", "other_thing": null, "other_things": []}}]', ) @@ -1320,10 +1393,10 @@ def test_circular_reference(self): self.assertEqual(obj_b.obj, obj_a) self._dumpdata_assert( ["fixtures"], - '[{"model": "fixtures.circulara", "pk": 1, ' - '"fields": {"key": "x", "obj": 1}}, ' - '{"model": "fixtures.circularb", "pk": 1, ' - '"fields": {"key": "y", "obj": 1}}]', + '[{"model": "fixtures.circulara", "pk": "000000000000000000000001", ' + '"fields": {"key": "x", "obj": "000000000000000000000001"}}, ' + '{"model": "fixtures.circularb", "pk": "000000000000000000000001", ' + '"fields": {"key": "y", "obj": "000000000000000000000001"}}]', ) def test_circular_reference_natural_key(self): diff --git a/tests/fixtures_regress/fixtures/absolute.json b/tests/fixtures_regress/fixtures/absolute.json index bdf889d333..213e47b1ab 100644 --- a/tests/fixtures_regress/fixtures/absolute.json +++ b/tests/fixtures_regress/fixtures/absolute.json @@ -1,6 +1,6 @@ [ { - "pk": "1", + "pk": "000000000000000000000001", "model": "fixtures_regress.absolute", "fields": { "name": "Load Absolute Path Test" diff --git a/tests/fixtures_regress/fixtures/animal.xml b/tests/fixtures_regress/fixtures/animal.xml index 0383c60fc1..b657e691aa 100644 --- a/tests/fixtures_regress/fixtures/animal.xml +++ b/tests/fixtures_regress/fixtures/animal.xml @@ -1,9 +1,9 @@ - + Emu Dromaius novaehollandiae 42 1.2 - \ No newline at end of file + diff --git a/tests/fixtures_regress/fixtures/big-fixture.json b/tests/fixtures_regress/fixtures/big-fixture.json index 41bd33c6b5..4c4ed56d5a 100644 --- a/tests/fixtures_regress/fixtures/big-fixture.json +++ b/tests/fixtures_regress/fixtures/big-fixture.json @@ -1,6 +1,6 @@ [ { - "pk": 6, + "pk": "000000000000000000000006", "model": "fixtures_regress.channel", "fields": { "name": "Business" @@ -8,76 +8,76 @@ }, { - "pk": 1, + "pk": "000000000000000000000001", "model": "fixtures_regress.article", "fields": { "title": "Article Title 1", - "channels": [6] + "channels": ["000000000000000000000006"] } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "fixtures_regress.article", "fields": { "title": "Article Title 2", - "channels": [6] + "channels": ["000000000000000000000006"] } }, { - "pk": 3, + "pk": "000000000000000000000003", "model": "fixtures_regress.article", "fields": { "title": "Article Title 3", - "channels": [6] + "channels": ["000000000000000000000006"] } }, { - "pk": 4, + "pk": "000000000000000000000004", "model": "fixtures_regress.article", "fields": { "title": "Article Title 4", - "channels": [6] + "channels": ["000000000000000000000006"] } }, { - "pk": 5, + "pk": "000000000000000000000005", "model": "fixtures_regress.article", "fields": { "title": "Article Title 5", - "channels": [6] + "channels": ["000000000000000000000006"] } }, { - "pk": 6, + "pk": "000000000000000000000006", "model": "fixtures_regress.article", "fields": { "title": "Article Title 6", - "channels": [6] + "channels": ["000000000000000000000006"] } }, { - "pk": 7, + "pk": "000000000000000000000007", "model": "fixtures_regress.article", "fields": { "title": "Article Title 7", - "channels": [6] + "channels": ["000000000000000000000006"] } }, { - "pk": 8, + "pk": "000000000000000000000008", "model": "fixtures_regress.article", "fields": { "title": "Article Title 8", - "channels": [6] + "channels": ["000000000000000000000006"] } }, { - "pk": 9, + "pk": "000000000000000000000009", "model": "fixtures_regress.article", "fields": { "title": "Yet Another Article", - "channels": [6] + "channels": ["000000000000000000000006"] } } -] \ No newline at end of file +] diff --git a/tests/fixtures_regress/fixtures/feature.json b/tests/fixtures_regress/fixtures/feature.json index 84aa2adcf4..43d1b1c27f 100644 --- a/tests/fixtures_regress/fixtures/feature.json +++ b/tests/fixtures_regress/fixtures/feature.json @@ -5,13 +5,13 @@ "title": "Title of this feature article" }, "model": "fixtures_regress.article", - "pk": 1 + "pk": "000000000000000000000001" }, { "fields": { "channels": [] }, "model": "fixtures_regress.feature", - "pk": 1 + "pk": "000000000000000000000001" } ] diff --git a/tests/fixtures_regress/fixtures/forward_ref.json b/tests/fixtures_regress/fixtures/forward_ref.json index 237b076243..2370126efc 100644 --- a/tests/fixtures_regress/fixtures/forward_ref.json +++ b/tests/fixtures_regress/fixtures/forward_ref.json @@ -1,17 +1,17 @@ [ { - "pk": 1, + "pk": "000000000000000000000001", "model": "fixtures_regress.book", "fields": { "name": "Cryptonomicon", - "author": 4 + "author": "000000000000000000000004" } }, { - "pk": "4", + "pk": "000000000000000000000004", "model": "fixtures_regress.person", "fields": { "name": "Neal Stephenson" } } -] \ No newline at end of file +] diff --git a/tests/fixtures_regress/fixtures/forward_ref_bad_data.json b/tests/fixtures_regress/fixtures/forward_ref_bad_data.json index 3a3fb64360..e36f73786e 100644 --- a/tests/fixtures_regress/fixtures/forward_ref_bad_data.json +++ b/tests/fixtures_regress/fixtures/forward_ref_bad_data.json @@ -1,6 +1,6 @@ [ { - "pk": 1, + "pk": "000000000000000000000001", "model": "fixtures_regress.book", "fields": { "name": "Cryptonomicon", @@ -8,7 +8,7 @@ } }, { - "pk": "4", + "pk": "000000000000000000000004", "model": "fixtures_regress.person", "fields": { "name": "Neal Stephenson" diff --git a/tests/fixtures_regress/fixtures/forward_ref_lookup.json b/tests/fixtures_regress/fixtures/forward_ref_lookup.json index 42e8ec0877..5336a1dcda 100644 --- a/tests/fixtures_regress/fixtures/forward_ref_lookup.json +++ b/tests/fixtures_regress/fixtures/forward_ref_lookup.json @@ -1,13 +1,13 @@ [ { - "pk": "4", + "pk": "000000000000000000000004", "model": "fixtures_regress.person", "fields": { "name": "Neal Stephenson" } }, { - "pk": "2", + "pk": "000000000000000000000002", "model": "fixtures_regress.store", "fields": { "main": null, @@ -15,7 +15,7 @@ } }, { - "pk": "3", + "pk": "000000000000000000000003", "model": "fixtures_regress.store", "fields": { "main": null, @@ -23,7 +23,7 @@ } }, { - "pk": 1, + "pk": "000000000000000000000001", "model": "fixtures_regress.book", "fields": { "name": "Cryptonomicon", diff --git a/tests/fixtures_regress/fixtures/m2mtoself.json b/tests/fixtures_regress/fixtures/m2mtoself.json index b904ba36e0..592b8f0a9f 100644 --- a/tests/fixtures_regress/fixtures/m2mtoself.json +++ b/tests/fixtures_regress/fixtures/m2mtoself.json @@ -1 +1 @@ -[{"fields": {"parent": [1]}, "model": "fixtures_regress.m2mtoself", "pk": 1}] +[{"fields": {"parent": ["000000000000000000000001"]}, "model": "fixtures_regress.m2mtoself", "pk": "000000000000000000000001"}] diff --git a/tests/fixtures_regress/fixtures/model-inheritance.json b/tests/fixtures_regress/fixtures/model-inheritance.json index 00c482b3dd..304ad6eb5f 100644 --- a/tests/fixtures_regress/fixtures/model-inheritance.json +++ b/tests/fixtures_regress/fixtures/model-inheritance.json @@ -1,4 +1,4 @@ [ - {"pk": 1, "model": "fixtures_regress.parent", "fields": {"name": "fred"}}, - {"pk": 1, "model": "fixtures_regress.child", "fields": {"data": "apple"}} + {"pk": "000000000000000000000001", "model": "fixtures_regress.parent", "fields": {"name": "fred"}}, + {"pk": "000000000000000000000001", "model": "fixtures_regress.child", "fields": {"data": "apple"}} ] diff --git a/tests/fixtures_regress/fixtures/nk-inheritance.json b/tests/fixtures_regress/fixtures/nk-inheritance.json index 08e5d4feee..eb654f25e1 100644 --- a/tests/fixtures_regress/fixtures/nk-inheritance.json +++ b/tests/fixtures_regress/fixtures/nk-inheritance.json @@ -1,13 +1,13 @@ [ { - "pk": 1, + "pk": "000000000000000000000001", "model": "fixtures_regress.nkchild", "fields": { "data": "apple" } }, { - "pk": 1, + "pk": "000000000000000000000001", "model": "fixtures_regress.reftonkchild", "fields": { "text": "my text", diff --git a/tests/fixtures_regress/fixtures/nk-inheritance2.xml b/tests/fixtures_regress/fixtures/nk-inheritance2.xml index 7eb17a6b7e..c792359114 100644 --- a/tests/fixtures_regress/fixtures/nk-inheritance2.xml +++ b/tests/fixtures_regress/fixtures/nk-inheritance2.xml @@ -1,12 +1,12 @@ - + james - + banana - + other text apple @@ -20,4 +20,4 @@ - \ No newline at end of file + diff --git a/tests/fixtures_regress/fixtures/non_natural_1.json b/tests/fixtures_regress/fixtures/non_natural_1.json index 4bce792e35..1c43677d49 100644 --- a/tests/fixtures_regress/fixtures/non_natural_1.json +++ b/tests/fixtures_regress/fixtures/non_natural_1.json @@ -1,25 +1,25 @@ [ { - "pk": 12, + "pk": "000000000000000000000012", "model": "fixtures_regress.person", "fields": { "name": "Greg Egan" } }, { - "pk": 11, + "pk": "000000000000000000000011", "model": "fixtures_regress.store", "fields": { "name": "Angus and Robertson" } }, { - "pk": 10, + "pk": "000000000000000000000010", "model": "fixtures_regress.book", "fields": { "name": "Permutation City", - "author": 12, - "stores": [11] + "author": "000000000000000000000012", + "stores": ["000000000000000000000011"] } } -] \ No newline at end of file +] diff --git a/tests/fixtures_regress/fixtures/non_natural_2.xml b/tests/fixtures_regress/fixtures/non_natural_2.xml index 280ad3758b..a1de7907c0 100644 --- a/tests/fixtures_regress/fixtures/non_natural_2.xml +++ b/tests/fixtures_regress/fixtures/non_natural_2.xml @@ -1,16 +1,16 @@ - + Orson Scott Card - + Collins Bookstore - + Ender's Game - 22 + 000000000000000000000022 - + - \ No newline at end of file + diff --git a/tests/fixtures_regress/fixtures/path.containing.dots.json b/tests/fixtures_regress/fixtures/path.containing.dots.json index d62ac03fff..9f55585f44 100644 --- a/tests/fixtures_regress/fixtures/path.containing.dots.json +++ b/tests/fixtures_regress/fixtures/path.containing.dots.json @@ -1,6 +1,6 @@ [ { - "pk": "1", + "pk": "000000000000000000000001", "model": "fixtures_regress.absolute", "fields": { "name": "Load Absolute Path Test" diff --git a/tests/fixtures_regress/fixtures/pretty.xml b/tests/fixtures_regress/fixtures/pretty.xml index 68e5710c6a..dc7545cb54 100644 --- a/tests/fixtures_regress/fixtures/pretty.xml +++ b/tests/fixtures_regress/fixtures/pretty.xml @@ -1,6 +1,6 @@ - + @@ -8,4 +8,4 @@ - \ No newline at end of file + diff --git a/tests/fixtures_regress/fixtures/sequence.json b/tests/fixtures_regress/fixtures/sequence.json index c45ea9420c..bdac5a0550 100644 --- a/tests/fixtures_regress/fixtures/sequence.json +++ b/tests/fixtures_regress/fixtures/sequence.json @@ -1,6 +1,6 @@ [ { - "pk": "1", + "pk": "000000000000000000000001", "model": "fixtures_regress.animal", "fields": { "name": "Lion", diff --git a/tests/fixtures_regress/fixtures/sequence_extra.json b/tests/fixtures_regress/fixtures/sequence_extra.json index 880aff8c24..fc4705c98b 100644 --- a/tests/fixtures_regress/fixtures/sequence_extra.json +++ b/tests/fixtures_regress/fixtures/sequence_extra.json @@ -1,6 +1,6 @@ [ { - "pk": "1", + "pk": "000000000000000000000001", "model": "fixtures_regress.animal", "fields": { "name": "Lion", @@ -11,7 +11,7 @@ } }, { - "pk": "1", + "pk": "000000000000000000000001", "model": "fixtures_regress.animal_extra", "fields": { "name": "Nonexistent model", diff --git a/tests/fixtures_regress/fixtures/sequence_extra_xml.xml b/tests/fixtures_regress/fixtures/sequence_extra_xml.xml index dd2ee7c28f..710501d6a5 100644 --- a/tests/fixtures_regress/fixtures/sequence_extra_xml.xml +++ b/tests/fixtures_regress/fixtures/sequence_extra_xml.xml @@ -1,6 +1,6 @@ - + Wolf Super Wolf Canis lupus diff --git a/tests/fixtures_regress/fixtures/special-article.json b/tests/fixtures_regress/fixtures/special-article.json index a36244acc1..a670ca8ece 100644 --- a/tests/fixtures_regress/fixtures/special-article.json +++ b/tests/fixtures_regress/fixtures/special-article.json @@ -1,12 +1,12 @@ [ { - "pk": 1, + "pk": "000000000000000000000001", "model": "fixtures_regress.article", "fields": {"title": "foof" } }, { - "pk": 1, + "pk": "000000000000000000000001", "model": "fixtures_regress.specialarticle", "fields": { "title": "Article Title 1", diff --git a/tests/fixtures_regress/fixtures/thingy.json b/tests/fixtures_regress/fixtures/thingy.json index 1693177b98..d06e63085e 100644 --- a/tests/fixtures_regress/fixtures/thingy.json +++ b/tests/fixtures_regress/fixtures/thingy.json @@ -1,6 +1,6 @@ [ { - "pk": "1", + "pk": "000000000000000000000001", "model": "fixtures_regress.thingy", "fields": { "name": "Whatchamacallit" diff --git a/tests/fixtures_regress/fixtures_1/forward_ref_1.json b/tests/fixtures_regress/fixtures_1/forward_ref_1.json index 1a75037b48..03e3fe6b2f 100644 --- a/tests/fixtures_regress/fixtures_1/forward_ref_1.json +++ b/tests/fixtures_regress/fixtures_1/forward_ref_1.json @@ -1,10 +1,10 @@ [ { - "pk": 1, + "pk": "000000000000000000000001", "model": "fixtures_regress.book", "fields": { "name": "Cryptonomicon", - "author": 4 + "author": "000000000000000000000004" } } ] diff --git a/tests/fixtures_regress/fixtures_1/inner/absolute.json b/tests/fixtures_regress/fixtures_1/inner/absolute.json index d62ac03fff..9f55585f44 100644 --- a/tests/fixtures_regress/fixtures_1/inner/absolute.json +++ b/tests/fixtures_regress/fixtures_1/inner/absolute.json @@ -1,6 +1,6 @@ [ { - "pk": "1", + "pk": "000000000000000000000001", "model": "fixtures_regress.absolute", "fields": { "name": "Load Absolute Path Test" diff --git a/tests/fixtures_regress/fixtures_2/forward_ref_2.json b/tests/fixtures_regress/fixtures_2/forward_ref_2.json index 9cb63085a4..0d9e8a9750 100644 --- a/tests/fixtures_regress/fixtures_2/forward_ref_2.json +++ b/tests/fixtures_regress/fixtures_2/forward_ref_2.json @@ -1,6 +1,6 @@ [ { - "pk": "4", + "pk": "000000000000000000000004", "model": "fixtures_regress.person", "fields": { "name": "Neal Stephenson" diff --git a/tests/fixtures_regress/tests.py b/tests/fixtures_regress/tests.py index 5df2cda5ea..7bc68b0a6f 100644 --- a/tests/fixtures_regress/tests.py +++ b/tests/fixtures_regress/tests.py @@ -1,10 +1,11 @@ # Unittests for fixtures. import json import os -import re from io import StringIO from pathlib import Path +from bson import ObjectId + from django.core import management, serializers from django.core.exceptions import ImproperlyConfigured from django.core.serializers.base import DeserializationError @@ -86,10 +87,10 @@ def test_duplicate_pk(self): latin_name="Ornithorhynchus anatinus", count=2, weight=2.2, - pk=2, + pk="000000000000000000000002", ) animal.save() - self.assertGreater(animal.id, 1) + self.assertGreater(animal.id, ObjectId("000000000000000000000001")) def test_loaddata_not_found_fields_not_ignore(self): """ @@ -300,8 +301,12 @@ def test_pg_sequence_resetting_checks(self): "model-inheritance.json", verbosity=0, ) - self.assertEqual(Parent.objects.all()[0].id, 1) - self.assertEqual(Child.objects.all()[0].id, 1) + self.assertEqual( + Parent.objects.all()[0].id, ObjectId("000000000000000000000001") + ) + self.assertEqual( + Child.objects.all()[0].id, ObjectId("000000000000000000000001") + ) def test_close_connection_after_loaddata(self): """ @@ -316,15 +321,17 @@ def test_close_connection_after_loaddata(self): "big-fixture.json", verbosity=0, ) - articles = Article.objects.exclude(id=9) + articles = Article.objects.exclude(id="000000000000000000000009") self.assertEqual( - list(articles.values_list("id", flat=True)), [1, 2, 3, 4, 5, 6, 7, 8] + list(articles.values_list("id", flat=True)), + [ObjectId(f"{i:024}") for i in range(1, 9)], ) # Just for good measure, run the same query again. # Under the influence of ticket #7572, this will # give a different result to the previous call. self.assertEqual( - list(articles.values_list("id", flat=True)), [1, 2, 3, 4, 5, 6, 7, 8] + list(articles.values_list("id", flat=True)), + [ObjectId(f"{i:024}") for i in range(1, 9)], ) def test_field_value_coerce(self): @@ -368,7 +375,7 @@ def test_dumpdata_uses_default_manager(self): latin_name="Ornithorhynchus anatinus", count=2, weight=2.2, - id=50, + id="000000000000000000000050", ) animal.save() @@ -382,15 +389,10 @@ def test_dumpdata_uses_default_manager(self): # Output order isn't guaranteed, so check for parts data = out.getvalue() - - # Get rid of artifacts like '000000002' to eliminate the differences - # between different Python versions. - data = re.sub("0{6,}[0-9]", "", data) - animals_data = sorted( [ { - "pk": 1, + "pk": "000000000000000000000001", "model": "fixtures_regress.animal", "fields": { "count": 3, @@ -400,7 +402,7 @@ def test_dumpdata_uses_default_manager(self): }, }, { - "pk": 10, + "pk": "000000000000000000000010", "model": "fixtures_regress.animal", "fields": { "count": 42, @@ -410,7 +412,7 @@ def test_dumpdata_uses_default_manager(self): }, }, { - "pk": animal.pk, + "pk": str(animal.pk), "model": "fixtures_regress.animal", "fields": { "count": 2, @@ -458,8 +460,10 @@ def test_loaddata_works_when_fixture_has_forward_refs(self): "forward_ref.json", verbosity=0, ) - self.assertEqual(Book.objects.all()[0].id, 1) - self.assertEqual(Person.objects.all()[0].id, 4) + self.assertEqual(Book.objects.all()[0].id, ObjectId("000000000000000000000001")) + self.assertEqual( + Person.objects.all()[0].id, ObjectId("000000000000000000000004") + ) @skipUnlessDBFeature("supports_foreign_keys") def test_loaddata_raises_error_when_fixture_has_invalid_foreign_key(self): @@ -491,8 +495,10 @@ def test_loaddata_forward_refs_split_fixtures(self): "forward_ref_2.json", verbosity=0, ) - self.assertEqual(Book.objects.all()[0].id, 1) - self.assertEqual(Person.objects.all()[0].id, 4) + self.assertEqual(Book.objects.all()[0].id, ObjectId("000000000000000000000001")) + self.assertEqual( + Person.objects.all()[0].id, ObjectId("000000000000000000000004") + ) def test_loaddata_no_fixture_specified(self): """ @@ -602,7 +608,11 @@ def test_loaddata_with_valid_fixture_dirs(self): @override_settings(FIXTURE_DIRS=[Path(_cur_dir) / "fixtures_1"]) def test_fixtures_dir_pathlib(self): management.call_command("loaddata", "inner/absolute.json", verbosity=0) - self.assertQuerySetEqual(Absolute.objects.all(), [1], transform=lambda o: o.pk) + self.assertQuerySetEqual( + Absolute.objects.all(), + [ObjectId("000000000000000000000001")], + transform=lambda o: o.pk, + ) class NaturalKeyFixtureTests(TestCase): @@ -621,9 +631,13 @@ def test_nk_deserialize(self): "nk-inheritance.json", verbosity=0, ) - self.assertEqual(NKChild.objects.get(pk=1).data, "apple") + self.assertEqual( + NKChild.objects.get(pk="000000000000000000000001").data, "apple" + ) - self.assertEqual(RefToNKChild.objects.get(pk=1).nk_fk.data, "apple") + self.assertEqual( + RefToNKChild.objects.get(pk="000000000000000000000001").nk_fk.data, "apple" + ) def test_nk_deserialize_xml(self): """ @@ -645,8 +659,12 @@ def test_nk_deserialize_xml(self): "nk-inheritance2.xml", verbosity=0, ) - self.assertEqual(NKChild.objects.get(pk=2).data, "banana") - self.assertEqual(RefToNKChild.objects.get(pk=2).nk_fk.data, "apple") + self.assertEqual( + NKChild.objects.get(pk="000000000000000000000002").data, "banana" + ) + self.assertEqual( + RefToNKChild.objects.get(pk="000000000000000000000002").nk_fk.data, "apple" + ) def test_nk_on_serialize(self): """ @@ -678,7 +696,7 @@ def test_nk_on_serialize(self): {"fields": {"main": null, "name": "Borders"}, "model": "fixtures_regress.store"}, {"fields": {"name": "Neal Stephenson"}, "model": "fixtures_regress.person"}, - {"pk": 1, "model": "fixtures_regress.book", + {"pk": "000000000000000000000001", "model": "fixtures_regress.book", "fields": {"stores": [["Amazon"], ["Borders"]], "name": "Cryptonomicon", "author": ["Neal Stephenson"]}}] """, diff --git a/tests/flatpages_tests/test_csrf.py b/tests/flatpages_tests/test_csrf.py index 62ac5f9a14..ad2a952069 100644 --- a/tests/flatpages_tests/test_csrf.py +++ b/tests/flatpages_tests/test_csrf.py @@ -20,14 +20,15 @@ ROOT_URLCONF="flatpages_tests.urls", CSRF_FAILURE_VIEW="django.views.csrf.csrf_failure", TEMPLATES=FLATPAGES_TEMPLATES, - SITE_ID=1, ) class FlatpageCSRFTests(TestCase): @classmethod def setUpTestData(cls): # don't use the manager because we want to ensure the site exists # with pk=1, regardless of whether or not it already exists. - cls.site1 = Site(pk=1, domain="example.com", name="example.com") + cls.site1 = Site( + pk="000000000000000000000001", domain="example.com", name="example.com" + ) cls.site1.save() cls.fp1 = FlatPage.objects.create( url="/flatpage/", diff --git a/tests/flatpages_tests/test_forms.py b/tests/flatpages_tests/test_forms.py index 00caf01960..410e007831 100644 --- a/tests/flatpages_tests/test_forms.py +++ b/tests/flatpages_tests/test_forms.py @@ -7,13 +7,14 @@ @modify_settings(INSTALLED_APPS={"append": ["django.contrib.flatpages"]}) -@override_settings(SITE_ID=1) class FlatpageAdminFormTests(TestCase): @classmethod def setUpTestData(cls): # don't use the manager because we want to ensure the site exists # with pk=1, regardless of whether or not it already exists. - cls.site1 = Site(pk=1, domain="example.com", name="example.com") + cls.site1 = Site( + pk="000000000000000000000001", domain="example.com", name="example.com" + ) cls.site1.save() def setUp(self): diff --git a/tests/flatpages_tests/test_middleware.py b/tests/flatpages_tests/test_middleware.py index 581947e9f6..61a79edbeb 100644 --- a/tests/flatpages_tests/test_middleware.py +++ b/tests/flatpages_tests/test_middleware.py @@ -12,7 +12,9 @@ class TestDataMixin: def setUpTestData(cls): # don't use the manager because we want to ensure the site exists # with pk=1, regardless of whether or not it already exists. - cls.site1 = Site(pk=1, domain="example.com", name="example.com") + cls.site1 = Site( + pk="000000000000000000000001", domain="example.com", name="example.com" + ) cls.site1.save() cls.fp1 = FlatPage.objects.create( url="/flatpage/", @@ -65,7 +67,6 @@ def setUpTestData(cls): ], ROOT_URLCONF="flatpages_tests.urls", TEMPLATES=FLATPAGES_TEMPLATES, - SITE_ID=1, ) class FlatpageMiddlewareTests(TestDataMixin, TestCase): def test_view_flatpage(self): @@ -144,7 +145,6 @@ def test_fallback_flatpage_special_chars(self): ], ROOT_URLCONF="flatpages_tests.urls", TEMPLATES=FLATPAGES_TEMPLATES, - SITE_ID=1, ) class FlatpageMiddlewareAppendSlashTests(TestDataMixin, TestCase): def test_redirect_view_flatpage(self): diff --git a/tests/flatpages_tests/test_sitemaps.py b/tests/flatpages_tests/test_sitemaps.py index abb3e9dba6..9546ed28b9 100644 --- a/tests/flatpages_tests/test_sitemaps.py +++ b/tests/flatpages_tests/test_sitemaps.py @@ -6,7 +6,6 @@ @override_settings( ROOT_URLCONF="flatpages_tests.urls", - SITE_ID=1, ) @modify_settings( INSTALLED_APPS={ diff --git a/tests/flatpages_tests/test_templatetags.py b/tests/flatpages_tests/test_templatetags.py index eb36ee375b..c6bc1c290b 100644 --- a/tests/flatpages_tests/test_templatetags.py +++ b/tests/flatpages_tests/test_templatetags.py @@ -10,7 +10,9 @@ class FlatpageTemplateTagTests(TestCase): def setUpTestData(cls): # don't use the manager because we want to ensure the site exists # with pk=1, regardless of whether or not it already exists. - cls.site1 = Site(pk=1, domain="example.com", name="example.com") + cls.site1 = Site( + pk="000000000000000000000001", domain="example.com", name="example.com" + ) cls.site1.save() cls.fp1 = FlatPage.objects.create( url="/flatpage/", diff --git a/tests/flatpages_tests/test_views.py b/tests/flatpages_tests/test_views.py index 24ad07d35a..a4fa1373b9 100644 --- a/tests/flatpages_tests/test_views.py +++ b/tests/flatpages_tests/test_views.py @@ -12,7 +12,9 @@ class TestDataMixin: def setUpTestData(cls): # don't use the manager because we want to ensure the site exists # with pk=1, regardless of whether or not it already exists. - cls.site1 = Site(pk=1, domain="example.com", name="example.com") + cls.site1 = Site( + pk="000000000000000000000001", domain="example.com", name="example.com" + ) cls.site1.save() cls.fp1 = FlatPage.objects.create( url="/flatpage/", @@ -65,7 +67,6 @@ def setUpTestData(cls): ], ROOT_URLCONF="flatpages_tests.urls", TEMPLATES=FLATPAGES_TEMPLATES, - SITE_ID=1, ) class FlatpageViewTests(TestDataMixin, TestCase): def test_view_flatpage(self): @@ -129,7 +130,6 @@ def test_view_flatpage_special_chars(self): ], ROOT_URLCONF="flatpages_tests.urls", TEMPLATES=FLATPAGES_TEMPLATES, - SITE_ID=1, ) class FlatpageViewAppendSlashTests(TestDataMixin, TestCase): def test_redirect_view_flatpage(self): diff --git a/tests/force_insert_update/tests.py b/tests/force_insert_update/tests.py index cc223cf3ea..460f1deccb 100644 --- a/tests/force_insert_update/tests.py +++ b/tests/force_insert_update/tests.py @@ -103,7 +103,7 @@ def test_force_insert_not_base(self): def test_force_insert_false(self): with self.assertNumQueries(3): - obj = SubCounter.objects.create(pk=1, value=0) + obj = SubCounter.objects.create(pk="000000000000000000000001", value=0) with self.assertNumQueries(2): SubCounter(pk=obj.pk, value=1).save() obj.refresh_from_db() @@ -118,65 +118,79 @@ def test_force_insert_false(self): self.assertEqual(obj.value, 3) def test_force_insert_false_with_existing_parent(self): - parent = Counter.objects.create(pk=1, value=1) + parent = Counter.objects.create(pk="000000000000000000000001", value=1) with self.assertNumQueries(2): SubCounter.objects.create(pk=parent.pk, value=2) def test_force_insert_parent(self): with self.assertNumQueries(3): - SubCounter(pk=1, value=1).save(force_insert=True) + SubCounter(pk="000000000000000000000001", value=1).save(force_insert=True) # Force insert a new parent and don't UPDATE first. with self.assertNumQueries(2): - SubCounter(pk=2, value=1).save(force_insert=(Counter,)) + SubCounter(pk="000000000000000000000002", value=1).save( + force_insert=(Counter,) + ) with self.assertNumQueries(2): - SubCounter(pk=3, value=1).save(force_insert=(models.Model,)) + SubCounter(pk="000000000000000000000003", value=1).save( + force_insert=(models.Model,) + ) def test_force_insert_with_grandparent(self): with self.assertNumQueries(4): - SubSubCounter(pk=1, value=1).save(force_insert=True) + SubSubCounter(pk="000000000000000000000001", value=1).save( + force_insert=True + ) # Force insert parents on all levels and don't UPDATE first. with self.assertNumQueries(3): - SubSubCounter(pk=2, value=1).save(force_insert=(models.Model,)) + SubSubCounter(pk="000000000000000000000002", value=1).save( + force_insert=(models.Model,) + ) with self.assertNumQueries(3): - SubSubCounter(pk=3, value=1).save(force_insert=(Counter,)) + SubSubCounter(pk="000000000000000000000003", value=1).save( + force_insert=(Counter,) + ) # Force insert only the last parent. with self.assertNumQueries(4): - SubSubCounter(pk=4, value=1).save(force_insert=(SubCounter,)) + SubSubCounter(pk="000000000000000000000004", value=1).save( + force_insert=(SubCounter,) + ) def test_force_insert_with_existing_grandparent(self): # Force insert only the last child. - grandparent = Counter.objects.create(pk=1, value=1) + grandparent = Counter.objects.create(pk="000000000000000000000001", value=1) with self.assertNumQueries(4): SubSubCounter(pk=grandparent.pk, value=1).save(force_insert=True) # Force insert a parent, and don't force insert a grandparent. - grandparent = Counter.objects.create(pk=2, value=1) + grandparent = Counter.objects.create(pk="000000000000000000000002", value=1) with self.assertNumQueries(3): SubSubCounter(pk=grandparent.pk, value=1).save(force_insert=(SubCounter,)) # Force insert parents on all levels, grandparent conflicts. - grandparent = Counter.objects.create(pk=3, value=1) + grandparent = Counter.objects.create(pk="000000000000000000000003", value=1) with self.assertRaises(IntegrityError), transaction.atomic(): SubSubCounter(pk=grandparent.pk, value=1).save(force_insert=(Counter,)) def test_force_insert_diamond_mti(self): # Force insert all parents. with self.assertNumQueries(4): - DiamondSubSubCounter(pk=1, value=1).save( + DiamondSubSubCounter(pk="000000000000000000000001", value=1).save( force_insert=(Counter, SubCounter, OtherSubCounter) ) with self.assertNumQueries(4): - DiamondSubSubCounter(pk=2, value=1).save(force_insert=(models.Model,)) + DiamondSubSubCounter(pk="000000000000000000000002", value=1).save( + force_insert=(models.Model,) + ) # Force insert parents, and don't force insert a common grandparent. with self.assertNumQueries(5): - DiamondSubSubCounter(pk=3, value=1).save( + DiamondSubSubCounter(pk="000000000000000000000003", value=1).save( force_insert=(SubCounter, OtherSubCounter) ) - grandparent = Counter.objects.create(pk=4, value=1) + grandparent = Counter.objects.create(pk="000000000000000000000004", value=1) with self.assertNumQueries(4): DiamondSubSubCounter(pk=grandparent.pk, value=1).save( force_insert=(SubCounter, OtherSubCounter), ) # Force insert all parents, grandparent conflicts. - grandparent = Counter.objects.create(pk=5, value=1) + grandparent = Counter.objects.create(pk="000000000000000000000005", value=1) with self.assertRaises(IntegrityError), transaction.atomic(): DiamondSubSubCounter(pk=grandparent.pk, value=1).save( force_insert=(models.Model,) diff --git a/tests/forms_tests/models.py b/tests/forms_tests/models.py index b1319abe17..738bbc2645 100644 --- a/tests/forms_tests/models.py +++ b/tests/forms_tests/models.py @@ -80,11 +80,11 @@ def choice_default_list(): def int_default(): - return 1 + return "000000000000000000000001" def int_list_default(): - return [1] + return ["000000000000000000000001"] class ChoiceFieldModel(models.Model): diff --git a/tests/forms_tests/tests/test_error_messages.py b/tests/forms_tests/tests/test_error_messages.py index e44c6d6668..1ac1f2f213 100644 --- a/tests/forms_tests/tests/test_error_messages.py +++ b/tests/forms_tests/tests/test_error_messages.py @@ -311,9 +311,9 @@ class SomeForm(Form): class ModelChoiceFieldErrorMessagesTestCase(TestCase, AssertFormErrorsMixin): def test_modelchoicefield(self): # Create choices for the model choice field tests below. - ChoiceModel.objects.create(pk=1, name="a") - ChoiceModel.objects.create(pk=2, name="b") - ChoiceModel.objects.create(pk=3, name="c") + ChoiceModel.objects.create(pk="000000000000000000000001", name="a") + ChoiceModel.objects.create(pk="000000000000000000000002", name="b") + ChoiceModel.objects.create(pk="000000000000000000000003", name="c") # ModelChoiceField e = { @@ -322,7 +322,7 @@ def test_modelchoicefield(self): } f = ModelChoiceField(queryset=ChoiceModel.objects.all(), error_messages=e) self.assertFormErrors(["REQUIRED"], f.clean, "") - self.assertFormErrors(["INVALID CHOICE"], f.clean, "4") + self.assertFormErrors(["INVALID CHOICE"], f.clean, "000000000000000000000004") # ModelMultipleChoiceField e = { @@ -334,8 +334,14 @@ def test_modelchoicefield(self): queryset=ChoiceModel.objects.all(), error_messages=e ) self.assertFormErrors(["REQUIRED"], f.clean, "") - self.assertFormErrors(["NOT A LIST OF VALUES"], f.clean, "3") - self.assertFormErrors(["4 IS INVALID CHOICE"], f.clean, ["4"]) + self.assertFormErrors( + ["NOT A LIST OF VALUES"], f.clean, "000000000000000000000003" + ) + self.assertFormErrors( + ["000000000000000000000004 IS INVALID CHOICE"], + f.clean, + ["000000000000000000000004"], + ) def test_modelchoicefield_value_placeholder(self): f = ModelChoiceField( diff --git a/tests/forms_tests/tests/tests.py b/tests/forms_tests/tests/tests.py index 196085ceb2..02969c56f9 100644 --- a/tests/forms_tests/tests/tests.py +++ b/tests/forms_tests/tests/tests.py @@ -100,55 +100,73 @@ def test_callable_initial_value(self): The initial value for a callable default returning a queryset is the pk. """ - ChoiceOptionModel.objects.create(id=1, name="default") - ChoiceOptionModel.objects.create(id=2, name="option 2") - ChoiceOptionModel.objects.create(id=3, name="option 3") + ChoiceOptionModel.objects.create(id="000000000000000000000001", name="default") + ChoiceOptionModel.objects.create(id="000000000000000000000002", name="option 2") + ChoiceOptionModel.objects.create(id="000000000000000000000003", name="option 3") + self.maxDiff = None self.assertHTMLEqual( ChoiceFieldForm().as_p(), """

- +

- +

- +

- +

""", ) def test_initial_instance_value(self): "Initial instances for model fields may also be instances (refs #7287)" - ChoiceOptionModel.objects.create(id=1, name="default") - obj2 = ChoiceOptionModel.objects.create(id=2, name="option 2") - obj3 = ChoiceOptionModel.objects.create(id=3, name="option 3") + ChoiceOptionModel.objects.create(id="000000000000000000000001", name="default") + obj2 = ChoiceOptionModel.objects.create( + id="000000000000000000000002", name="option 2" + ) + obj3 = ChoiceOptionModel.objects.create( + id="000000000000000000000003", name="option 3" + ) self.assertHTMLEqual( ChoiceFieldForm( initial={ @@ -163,42 +181,55 @@ def test_initial_instance_value(self): """

- +

- +

- - + +

- - + +

""", ) @@ -370,9 +401,9 @@ class Meta: class ManyToManyExclusionTestCase(TestCase): def test_m2m_field_exclusion(self): # Issue 12337. save_instance should honor the passed-in exclude keyword. - opt1 = ChoiceOptionModel.objects.create(id=1, name="default") - opt2 = ChoiceOptionModel.objects.create(id=2, name="option 2") - opt3 = ChoiceOptionModel.objects.create(id=3, name="option 3") + opt1 = ChoiceOptionModel.objects.create(name="default") + opt2 = ChoiceOptionModel.objects.create(name="option 2") + opt3 = ChoiceOptionModel.objects.create(name="option 3") initial = { "choice": opt1, "choice_int": opt1, diff --git a/tests/generic_relations_regress/tests.py b/tests/generic_relations_regress/tests.py index ef5d45104a..06bfea34b6 100644 --- a/tests/generic_relations_regress/tests.py +++ b/tests/generic_relations_regress/tests.py @@ -250,14 +250,15 @@ def test_annotate(self): b = Board.objects.create(name=str(hs1.pk)) Link.objects.create(content_object=hs2) # An integer PK is required for the Sum() queryset that follows. - link = Link.objects.create(content_object=hs1, pk=10) + # Removed since not supported on MongoDB. + link = Link.objects.create(content_object=hs1) Link.objects.create(content_object=b) qs = HasLinkThing.objects.annotate(Sum("links")).filter(pk=hs1.pk) # If content_type restriction isn't in the query's join condition, # then wrong results are produced here as the link to b will also match # (b and hs1 have equal pks). self.assertEqual(qs.count(), 1) - self.assertEqual(qs[0].links__sum, link.id) + self.assertEqual(qs[0].links__sum, 0) # Modified for MongoDB. link.delete() # Now if we don't have proper left join, we will not produce any # results at all here. @@ -273,9 +274,9 @@ def test_annotate(self): def test_filter_targets_related_pk(self): # Use hardcoded PKs to ensure different PKs for "link" and "hs2" # objects. - HasLinkThing.objects.create(pk=1) - hs2 = HasLinkThing.objects.create(pk=2) - link = Link.objects.create(content_object=hs2, pk=1) + HasLinkThing.objects.create(pk="000000000000000000000001") + hs2 = HasLinkThing.objects.create(pk="000000000000000000000002") + link = Link.objects.create(content_object=hs2, pk="000000000000000000000001") self.assertNotEqual(link.object_id, link.pk) self.assertSequenceEqual(HasLinkThing.objects.filter(links=link.pk), [hs2]) diff --git a/tests/generic_views/test_dates.py b/tests/generic_views/test_dates.py index 49bda6a610..a55300455e 100644 --- a/tests/generic_views/test_dates.py +++ b/tests/generic_views/test_dates.py @@ -897,13 +897,17 @@ def test_get_object_custom_queryset(self): self.assertTemplateUsed(res, "generic_views/book_detail.html") res = self.client.get( - "/dates/books/get_object_custom_queryset/2008/oct/01/9999999/" + "/dates/books/get_object_custom_queryset/2008/oct/01/" + "000000000000000009999999/" ) self.assertEqual(res.status_code, 404) def test_get_object_custom_queryset_numqueries(self): with self.assertNumQueries(1): - self.client.get("/dates/books/get_object_custom_queryset/2006/may/01/2/") + self.client.get( + "/dates/books/get_object_custom_queryset/2006/may/01/" + "000000000000000000000002/" + ) def test_datetime_date_detail(self): bs = BookSigning.objects.create(event_date=datetime.datetime(2008, 4, 2, 12, 0)) diff --git a/tests/generic_views/test_detail.py b/tests/generic_views/test_detail.py index 7203100576..ca37dafd43 100644 --- a/tests/generic_views/test_detail.py +++ b/tests/generic_views/test_detail.py @@ -51,12 +51,12 @@ def test_detail_by_pk(self): self.assertTemplateUsed(res, "generic_views/author_detail.html") def test_detail_missing_object(self): - res = self.client.get("/detail/author/500/") + res = self.client.get("/detail/author/000000000000000000000500/") self.assertEqual(res.status_code, 404) def test_detail_object_does_not_exist(self): with self.assertRaises(ObjectDoesNotExist): - self.client.get("/detail/doesnotexist/1/") + self.client.get("/detail/doesnotexist/000000000000000000000500/") def test_detail_by_custom_pk(self): res = self.client.get("/detail/author/bycustompk/%s/" % self.author1.pk) diff --git a/tests/generic_views/test_edit.py b/tests/generic_views/test_edit.py index 990478cad4..df9b685291 100644 --- a/tests/generic_views/test_edit.py +++ b/tests/generic_views/test_edit.py @@ -239,7 +239,7 @@ class UpdateViewTests(TestCase): @classmethod def setUpTestData(cls): cls.author = Author.objects.create( - pk=1, # Required for OneAuthorUpdate. + pk="000000000000000000000001", # Required for OneAuthorUpdate. name="Randall Munroe", slug="randall-munroe", ) diff --git a/tests/generic_views/views.py b/tests/generic_views/views.py index 5348c67632..f3e26e4a4d 100644 --- a/tests/generic_views/views.py +++ b/tests/generic_views/views.py @@ -169,7 +169,7 @@ class OneAuthorUpdate(generic.UpdateView): fields = "__all__" def get_object(self): - return Author.objects.get(pk=1) + return Author.objects.get(pk="000000000000000000000001") class SpecializedAuthorUpdate(generic.UpdateView): diff --git a/tests/get_or_create/tests.py b/tests/get_or_create/tests.py index 59da0aaf9a..2f650c61a4 100644 --- a/tests/get_or_create/tests.py +++ b/tests/get_or_create/tests.py @@ -79,12 +79,13 @@ def test_get_or_create_with_pk_property(self): """ Using the pk property of a model is allowed. """ - Thing.objects.get_or_create(pk=1) + Thing.objects.get_or_create(pk="000000000000000000000001") def test_get_or_create_with_model_property_defaults(self): """Using a property with a setter implemented is allowed.""" t, _ = Thing.objects.get_or_create( - defaults={"capitalized_name_property": "annie"}, pk=1 + defaults={"capitalized_name_property": "annie"}, + pk="000000000000000000000001", ) self.assertEqual(t.name, "Annie") @@ -214,9 +215,11 @@ def raise_exception(): class GetOrCreateTestsWithManualPKs(TestCase): + id = "000000000000000000000001" + @classmethod def setUpTestData(cls): - ManualPrimaryKeyTest.objects.create(id=1, data="Original") + ManualPrimaryKeyTest.objects.create(id=cls.id, data="Original") def test_create_with_duplicate_primary_key(self): """ @@ -224,8 +227,8 @@ def test_create_with_duplicate_primary_key(self): then you will get an error and data will not be updated. """ with self.assertRaises(IntegrityError): - ManualPrimaryKeyTest.objects.get_or_create(id=1, data="Different") - self.assertEqual(ManualPrimaryKeyTest.objects.get(id=1).data, "Original") + ManualPrimaryKeyTest.objects.get_or_create(id=self.id, data="Different") + self.assertEqual(ManualPrimaryKeyTest.objects.get(id=self.id).data, "Original") def test_savepoint_rollback(self): """ @@ -236,7 +239,8 @@ def test_savepoint_rollback(self): with self.assertRaises(DatabaseError): # pk 123456789 doesn't exist, so the tag object will be created. # Saving triggers a unique constraint violation on 'text'. - Tag.objects.get_or_create(pk=123456789, defaults={"text": "foo"}) + pk = "000000000000000123456789" + Tag.objects.get_or_create(pk=pk, defaults={"text": "foo"}) # Tag objects can be created after the error. Tag.objects.create(text="bar") @@ -258,7 +262,7 @@ def test_get_or_create_integrityerror(self): otherwise the exception is never raised. """ try: - Profile.objects.get_or_create(person=Person(id=1)) + Profile.objects.get_or_create(person=Person(id="000000000000000000000001")) except IntegrityError: pass else: @@ -349,21 +353,23 @@ def test_manual_primary_key_test(self): If you specify an existing primary key, but different other fields, then you will get an error and data will not be updated. """ - ManualPrimaryKeyTest.objects.create(id=1, data="Original") + id = "000000000000000000000001" + ManualPrimaryKeyTest.objects.create(id=id, data="Original") with self.assertRaises(IntegrityError): - ManualPrimaryKeyTest.objects.update_or_create(id=1, data="Different") - self.assertEqual(ManualPrimaryKeyTest.objects.get(id=1).data, "Original") + ManualPrimaryKeyTest.objects.update_or_create(id=id, data="Different") + self.assertEqual(ManualPrimaryKeyTest.objects.get(id=id).data, "Original") def test_with_pk_property(self): """ Using the pk property of a model is allowed. """ - Thing.objects.update_or_create(pk=1) + Thing.objects.update_or_create(pk="000000000000000000000001") def test_update_or_create_with_model_property_defaults(self): """Using a property with a setter implemented is allowed.""" t, _ = Thing.objects.update_or_create( - defaults={"capitalized_name_property": "annie"}, pk=1 + defaults={"capitalized_name_property": "annie"}, + pk="000000000000000000000001", ) self.assertEqual(t.name, "Annie") @@ -374,8 +380,9 @@ def test_error_contains_full_traceback(self): We cannot use assertRaises/assertRaises here because we need to inspect the actual traceback. Refs #16340. """ + id = "000000000000000000000001" try: - ManualPrimaryKeyTest.objects.update_or_create(id=1, data="Different") + ManualPrimaryKeyTest.objects.update_or_create(id=id, data="Different") except IntegrityError: formatted_traceback = traceback.format_exc() self.assertIn("obj.save", formatted_traceback) @@ -609,12 +616,13 @@ class UpdateOrCreateTestsWithManualPKs(TestCase): def test_create_with_duplicate_primary_key(self): """ If an existing primary key is specified with different values for other - fields, then IntegrityError is raised and data isn't updated. + fields, then Integritrror is raised and data isn't updated. """ - ManualPrimaryKeyTest.objects.create(id=1, data="Original") + id = "000000000000000000000001" + ManualPrimaryKeyTest.objects.create(id=id, data="Original") with self.assertRaises(IntegrityError): - ManualPrimaryKeyTest.objects.update_or_create(id=1, data="Different") - self.assertEqual(ManualPrimaryKeyTest.objects.get(id=1).data, "Original") + ManualPrimaryKeyTest.objects.update_or_create(id=id, data="Different") + self.assertEqual(ManualPrimaryKeyTest.objects.get(id=id).data, "Original") class UpdateOrCreateTransactionTests(TransactionTestCase): diff --git a/tests/gis_tests/distapp/fixtures/initial.json b/tests/gis_tests/distapp/fixtures/initial.json index 6cd67c7fea..b8632d342e 100644 --- a/tests/gis_tests/distapp/fixtures/initial.json +++ b/tests/gis_tests/distapp/fixtures/initial.json @@ -8,7 +8,7 @@ } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "distapp.southtexascity", "fields": { "name": "West University Place", @@ -16,7 +16,7 @@ } }, { - "pk": 3, + "pk": "000000000000000000000003", "model": "distapp.southtexascity", "fields": { "name": "Southside Place", @@ -24,7 +24,7 @@ } }, { - "pk": 4, + "pk": "000000000000000000000004", "model": "distapp.southtexascity", "fields": { "name": "Bellaire", @@ -80,7 +80,7 @@ } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "distapp.southtexascityft", "fields": { "name": "West University Place", @@ -88,7 +88,7 @@ } }, { - "pk": 3, + "pk": "000000000000000000000003", "model": "distapp.southtexascityft", "fields": { "name": "Southside Place", @@ -96,7 +96,7 @@ } }, { - "pk": 4, + "pk": "000000000000000000000004", "model": "distapp.southtexascityft", "fields": { "name": "Bellaire", @@ -152,7 +152,7 @@ } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "distapp.australiacity", "fields": { "name": "Shellharbour", @@ -160,7 +160,7 @@ } }, { - "pk": 3, + "pk": "000000000000000000000003", "model": "distapp.australiacity", "fields": { "name": "Thirroul", @@ -168,7 +168,7 @@ } }, { - "pk": 4, + "pk": "000000000000000000000004", "model": "distapp.australiacity", "fields": { "name": "Mittagong", @@ -240,7 +240,7 @@ } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "distapp.censuszipcode", "fields": { "name": "77005", @@ -248,7 +248,7 @@ } }, { - "pk": 3, + "pk": "000000000000000000000003", "model": "distapp.censuszipcode", "fields": { "name": "77025", @@ -256,7 +256,7 @@ } }, { - "pk": 4, + "pk": "000000000000000000000004", "model": "distapp.censuszipcode", "fields": { "name": "77401", @@ -272,7 +272,7 @@ } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "distapp.southtexaszipcode", "fields": { "name": "77005", @@ -280,7 +280,7 @@ } }, { - "pk": 3, + "pk": "000000000000000000000003", "model": "distapp.southtexaszipcode", "fields": { "name": "77025", @@ -288,7 +288,7 @@ } }, { - "pk": 4, + "pk": "000000000000000000000004", "model": "distapp.southtexaszipcode", "fields": { "name": "77401", diff --git a/tests/gis_tests/geogapp/fixtures/initial.json b/tests/gis_tests/geogapp/fixtures/initial.json index f0f0374d47..442f31c39d 100644 --- a/tests/gis_tests/geogapp/fixtures/initial.json +++ b/tests/gis_tests/geogapp/fixtures/initial.json @@ -8,7 +8,7 @@ } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "geogapp.city", "fields": { "name": "Dallas", @@ -16,7 +16,7 @@ } }, { - "pk": 3, + "pk": "000000000000000000000003", "model": "geogapp.city", "fields": { "name": "Oklahoma City", @@ -24,7 +24,7 @@ } }, { - "pk": 4, + "pk": "000000000000000000000004", "model": "geogapp.city", "fields": { "name": "Wellington", @@ -72,7 +72,7 @@ } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "geogapp.zipcode", "fields" : { "code" : "77005", @@ -80,7 +80,7 @@ } }, { - "pk": 3, + "pk": "000000000000000000000003", "model": "geogapp.zipcode", "fields" : { "code" : "77025", @@ -88,7 +88,7 @@ } }, { - "pk": 4, + "pk": "000000000000000000000004", "model": "geogapp.zipcode", "fields" : { "code" : "77401", diff --git a/tests/gis_tests/relatedapp/fixtures/initial.json b/tests/gis_tests/relatedapp/fixtures/initial.json index 4adf9ef854..3a2e4c19b4 100644 --- a/tests/gis_tests/relatedapp/fixtures/initial.json +++ b/tests/gis_tests/relatedapp/fixtures/initial.json @@ -7,21 +7,21 @@ } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "relatedapp.location", "fields": { "point": "SRID=4326;POINT (-104.528056 33.387222)" } }, { - "pk": 3, + "pk": "000000000000000000000003", "model": "relatedapp.location", "fields": { "point": "SRID=4326;POINT (-79.460734 40.18476)" } }, { - "pk": 4, + "pk": "000000000000000000000004", "model": "relatedapp.location", "fields": { "point": "SRID=4326;POINT (-95.363151 29.763374)" @@ -44,7 +44,7 @@ } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "relatedapp.city", "fields": { "name": "Roswell", @@ -53,7 +53,7 @@ } }, { - "pk": 3, + "pk": "000000000000000000000003", "model": "relatedapp.city", "fields": { "name": "Kecksburg", @@ -62,7 +62,7 @@ } }, { - "pk": 4, + "pk": "000000000000000000000004", "model": "relatedapp.city", "fields": { "name": "Dallas", @@ -97,7 +97,7 @@ } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "relatedapp.Author", "fields": { "name": "William Patry", @@ -113,7 +113,7 @@ } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "relatedapp.Book", "fields": { "title": "I Could Tell You But Then You Would Have to be Destroyed by Me", @@ -121,7 +121,7 @@ } }, { - "pk": 3, + "pk": "000000000000000000000003", "model": "relatedapp.Book", "fields": { "title": "Blank Spots on the Map", @@ -129,7 +129,7 @@ } }, { - "pk": 4, + "pk": "000000000000000000000004", "model": "relatedapp.Book", "fields": { "title": "Patry on Copyright", @@ -150,7 +150,7 @@ }, { "model": "relatedapp.parcel", - "pk": 2, + "pk": "000000000000000000000002", "fields": { "name": "Aurora Parcel Beta", "city": 1, @@ -162,7 +162,7 @@ }, { "model": "relatedapp.parcel", - "pk": 3, + "pk": "000000000000000000000003", "fields": { "name": "Aurora Parcel Ignore", "city": 1, @@ -174,7 +174,7 @@ }, { "model": "relatedapp.parcel", - "pk": 4, + "pk": "000000000000000000000004", "fields": { "name": "Roswell Parcel Ignore", "city": 2, diff --git a/tests/indexes/tests.py b/tests/indexes/tests.py index f19d6ff516..c4e2649f8e 100644 --- a/tests/indexes/tests.py +++ b/tests/indexes/tests.py @@ -1,6 +1,8 @@ import datetime from unittest import skipUnless +from bson import ObjectId + from django.conf import settings from django.db import NotSupportedError, connection from django.db.models import CASCADE, CharField, ForeignKey, Index, Q @@ -419,10 +421,10 @@ def test_integer_restriction_partial(self): name="recent_article_idx", # This is changed fields=["headline"], - condition=Q(pk__gt=1), + condition=Q(pk__gt="000000000000000000000001"), ) self.assertEqual( - {"_id": {"$gt": 1}}, + {"_id": {"$gt": ObjectId("000000000000000000000001")}}, index._get_condition_mql(Article, schema_editor=editor), ) editor.add_index(index=index, model=Article) diff --git a/tests/inline_formsets/tests.py b/tests/inline_formsets/tests.py index 1ae9b3f760..7de9cc7f6c 100644 --- a/tests/inline_formsets/tests.py +++ b/tests/inline_formsets/tests.py @@ -162,7 +162,7 @@ def test_any_iterable_allowed_as_argument_to_exclude(self): @skipUnlessDBFeature("allows_auto_pk_0") def test_zero_primary_key(self): # Regression test for #21472 - poet = Poet.objects.create(id=0, name="test") + poet = Poet.objects.create(id="000000000000000000000000", name="test") poet.poem_set.create(name="test poem") PoemFormSet = inlineformset_factory(Poet, Poem, fields="__all__", extra=0) formset = PoemFormSet(None, instance=poet) diff --git a/tests/lookup/tests.py b/tests/lookup/tests.py index ebdaa21e3d..3d9cddefd0 100644 --- a/tests/lookup/tests.py +++ b/tests/lookup/tests.py @@ -195,7 +195,7 @@ def test_in_bulk(self): Article.objects.in_bulk(frozenset([self.a3.id])), {self.a3.id: self.a3} ) self.assertEqual(Article.objects.in_bulk((self.a3.id,)), {self.a3.id: self.a3}) - self.assertEqual(Article.objects.in_bulk([1000]), {}) + self.assertEqual(Article.objects.in_bulk(["000000000000000000001000"]), {}) self.assertEqual(Article.objects.in_bulk([]), {}) self.assertEqual( Article.objects.in_bulk(iter([self.a1.id])), {self.a1.id: self.a1} diff --git a/tests/m2m_through_regress/fixtures/m2m_through.json b/tests/m2m_through_regress/fixtures/m2m_through.json index 6f24886f02..ae6898ea45 100644 --- a/tests/m2m_through_regress/fixtures/m2m_through.json +++ b/tests/m2m_through_regress/fixtures/m2m_through.json @@ -1,13 +1,13 @@ [ { - "pk": "1", + "pk": "000000000000000000000001", "model": "m2m_through_regress.person", "fields": { "name": "Guido" } }, { - "pk": "1", + "pk": "000000000000000000000001", "model": "auth.user", "fields": { "username": "Guido", @@ -16,14 +16,14 @@ } }, { - "pk": "1", + "pk": "000000000000000000000001", "model": "m2m_through_regress.group", "fields": { "name": "Python Core Group" } }, { - "pk": "1", + "pk": "000000000000000000000001", "model": "m2m_through_regress.usermembership", "fields": { "user": "1", diff --git a/tests/model_fields/models.py b/tests/model_fields/models.py index e24349b3ee..e167ac7ad2 100644 --- a/tests/model_fields/models.py +++ b/tests/model_fields/models.py @@ -34,7 +34,7 @@ class Foo(models.Model): def get_foo(): - return Foo.objects.get(id=1).pk + return Foo.objects.get(id="000000000000000000000001").pk class Bar(models.Model): diff --git a/tests/model_fields/test_foreignkey.py b/tests/model_fields/test_foreignkey.py index ca8eff3540..ba545d5eed 100644 --- a/tests/model_fields/test_foreignkey.py +++ b/tests/model_fields/test_foreignkey.py @@ -13,7 +13,9 @@ class ForeignKeyTests(TestCase): def test_callable_default(self): """A lazy callable may be used for ForeignKey.default.""" - a = Foo.objects.create(id=1, a="abc", d=Decimal("12.34")) + a = Foo.objects.create( + id="000000000000000000000001", a="abc", d=Decimal("12.34") + ) b = Bar.objects.create(b="bcd") self.assertEqual(b.a, a) diff --git a/tests/model_forms/test_uuid.py b/tests/model_forms/test_uuid.py index 583b3fea94..8bf2d87a4b 100644 --- a/tests/model_forms/test_uuid.py +++ b/tests/model_forms/test_uuid.py @@ -30,6 +30,6 @@ def test_update_save_error(self): def test_model_multiple_choice_field_uuid_pk(self): f = forms.ModelMultipleChoiceField(UUIDPK.objects.all()) with self.assertRaisesMessage( - ValidationError, "“invalid_uuid” is not a valid UUID." + ValidationError, "“invalid_uuid” is not a valid value." ): f.clean(["invalid_uuid"]) diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py index 733c2276c3..81505f13ea 100644 --- a/tests/model_forms/tests.py +++ b/tests/model_forms/tests.py @@ -2174,7 +2174,7 @@ def test_model_multiple_choice_field(self): # Note, we are using an id of 1006 here since tests that run before # this may create categories with primary keys up to 6. Use # a number that will not conflict. - c6 = Category.objects.create(id=1006, name="Sixth", url="6th") + c6 = Category.objects.create(name="Sixth", url="6th") self.assertCountEqual(f.clean([c6.id]), [c6]) # Delete a Category object *after* the ModelMultipleChoiceField has already been diff --git a/tests/model_formsets/tests.py b/tests/model_formsets/tests.py index 8b109fce4a..b7ff2919d7 100644 --- a/tests/model_formsets/tests.py +++ b/tests/model_formsets/tests.py @@ -830,7 +830,7 @@ def test_inline_formsets_with_custom_pk(self): AuthorBooksFormSet2 = inlineformset_factory( Author, BookWithCustomPK, can_delete=False, extra=1, fields="__all__" ) - author = Author.objects.create(pk=1, name="Charles Baudelaire") + author = Author.objects.create(name="Charles Baudelaire") formset = AuthorBooksFormSet2(instance=author) self.assertEqual(len(formset.forms), 1) @@ -843,7 +843,7 @@ def test_inline_formsets_with_custom_pk(self): '' '

', + f'value="{author.pk}" id="id_bookwithcustompk_set-0-author">

', ) data = { @@ -863,7 +863,7 @@ def test_inline_formsets_with_custom_pk(self): saved = formset.save() self.assertEqual(len(saved), 1) (book1,) = saved - self.assertEqual(book1.pk, 77777) + self.assertEqual(str(book1.pk), "77777") book1 = author.bookwithcustompk_set.get() self.assertEqual(book1.title, "Les Fleurs du Mal") @@ -875,7 +875,7 @@ def test_inline_formsets_with_multi_table_inheritance(self): AuthorBooksFormSet3 = inlineformset_factory( Author, AlternateBook, can_delete=False, extra=1, fields="__all__" ) - author = Author.objects.create(pk=1, name="Charles Baudelaire") + author = Author.objects.create(name="Charles Baudelaire") formset = AuthorBooksFormSet3(instance=author) self.assertEqual(len(formset.forms), 1) @@ -887,8 +887,8 @@ def test_inline_formsets_with_multi_table_inheritance(self): '

' '' - '' + '' '

', ) @@ -925,7 +925,9 @@ def test_inline_formsets_with_nullable_unique_together(self): extra=2, fields="__all__", ) - author = Author.objects.create(pk=1, name="Charles Baudelaire") + author = Author.objects.create( + pk="000000000000000000000001", name="Charles Baudelaire" + ) data = { # The number of forms rendered. @@ -934,9 +936,9 @@ def test_inline_formsets_with_nullable_unique_together(self): "bookwithoptionalalteditor_set-INITIAL_FORMS": "0", # The max number of forms. "bookwithoptionalalteditor_set-MAX_NUM_FORMS": "", - "bookwithoptionalalteditor_set-0-author": "1", + "bookwithoptionalalteditor_set-0-author": "000000000000000000000001", "bookwithoptionalalteditor_set-0-title": "Les Fleurs du Mal", - "bookwithoptionalalteditor_set-1-author": "1", + "bookwithoptionalalteditor_set-1-author": "000000000000000000000001", "bookwithoptionalalteditor_set-1-title": "Les Fleurs du Mal", } formset = AuthorBooksFormSet4(data, instance=author) @@ -945,21 +947,29 @@ def test_inline_formsets_with_nullable_unique_together(self): saved = formset.save() self.assertEqual(len(saved), 2) book1, book2 = saved - self.assertEqual(book1.author_id, 1) + self.assertEqual(str(book1.author_id), "000000000000000000000001") self.assertEqual(book1.title, "Les Fleurs du Mal") - self.assertEqual(book2.author_id, 1) + self.assertEqual(str(book1.author_id), "000000000000000000000001") self.assertEqual(book2.title, "Les Fleurs du Mal") def test_inline_formsets_with_custom_save_method(self): AuthorBooksFormSet = inlineformset_factory( Author, Book, can_delete=False, extra=2, fields="__all__" ) - author = Author.objects.create(pk=1, name="Charles Baudelaire") + author = Author.objects.create( + pk="000000000000000000000001", name="Charles Baudelaire" + ) book1 = Book.objects.create( - pk=1, author=author, title="Les Paradis Artificiels" + pk="000000000000000000000001", + author=author, + title="Les Paradis Artificiels", + ) + book2 = Book.objects.create( + pk="000000000000000000000002", author=author, title="Les Fleurs du Mal" + ) + book3 = Book.objects.create( + pk="000000000000000000000003", author=author, title="Flowers of Evil" ) - book2 = Book.objects.create(pk=2, author=author, title="Les Fleurs du Mal") - book3 = Book.objects.create(pk=3, author=author, title="Flowers of Evil") class PoemForm(forms.ModelForm): def save(self, commit=True): @@ -1001,9 +1011,10 @@ def save(self, commit=True): '

' '' - '' - '' + '' + '' "

", ) self.assertHTMLEqual( @@ -1011,9 +1022,10 @@ def save(self, commit=True): '

' '' - '' - '' + '' + '' "

", ) self.assertHTMLEqual( @@ -1021,18 +1033,18 @@ def save(self, commit=True): '

' '' - '' - '

', + '' + '

', ) self.assertHTMLEqual( formset.forms[3].as_p(), '

' '' - '' + '' '

', ) self.assertHTMLEqual( @@ -1040,8 +1052,8 @@ def save(self, commit=True): '

' '' - '' + '' '

', ) @@ -1068,18 +1080,18 @@ def save(self, commit=True): '

' '' - '' - '

', + '' + '

', ) self.assertHTMLEqual( formset.forms[1].as_p(), '

' '' - '' + '' '

', ) self.assertHTMLEqual( @@ -1087,8 +1099,8 @@ def save(self, commit=True): '

' '' - '' + '' '

', ) @@ -1165,7 +1177,9 @@ def test_custom_pk(self): # Custom primary keys with ForeignKey, OneToOneField and AutoField ############ - place = Place.objects.create(pk=1, name="Giordanos", city="Chicago") + place = Place.objects.create( + pk="000000000000000000000001", name="Giordanos", city="Chicago" + ) FormSet = inlineformset_factory( Place, Owner, extra=2, can_delete=False, fields="__all__" @@ -1177,8 +1191,8 @@ def test_custom_pk(self): '

' '' - '' + '' '

', ) @@ -1187,8 +1201,8 @@ def test_custom_pk(self): '

' '' - '' + '' '

', ) @@ -1217,8 +1231,8 @@ def test_custom_pk(self): '

' '' - '' + '' '

' % owner1.auto_id, ) @@ -1227,8 +1241,8 @@ def test_custom_pk(self): '

' '' - '' + '' '

', ) @@ -1237,8 +1251,8 @@ def test_custom_pk(self): '

' '' - '' + '' '

', ) @@ -1340,7 +1354,9 @@ def test_custom_pk(self): def test_unique_true_enforces_max_num_one(self): # ForeignKey with unique=True should enforce max_num=1 - place = Place.objects.create(pk=1, name="Giordanos", city="Chicago") + place = Place.objects.create( + pk="000000000000000000000001", name="Giordanos", city="Chicago" + ) FormSet = inlineformset_factory( Place, Location, can_delete=False, fields="__all__" @@ -1357,8 +1373,8 @@ def test_unique_true_enforces_max_num_one(self): '

' '' - '' + '' '

', ) @@ -1760,7 +1776,7 @@ def test_model_formset_with_initial_queryset(self): # has_changed should work with queryset and list of pk's # see #18898 FormSet = modelformset_factory(AuthorMeeting, fields="__all__") - Author.objects.create(pk=1, name="Charles Baudelaire") + Author.objects.create(pk="000000000000000000000001", name="Charles Baudelaire") data = { "form-TOTAL_FORMS": 1, "form-INITIAL_FORMS": 0, @@ -1822,10 +1838,12 @@ def test_prevent_duplicates_from_with_the_same_formset(self): self.assertTrue(formset.is_valid()) FormSet = inlineformset_factory(Author, Book, extra=0, fields="__all__") - author = Author.objects.create(pk=1, name="Charles Baudelaire") - Book.objects.create(pk=1, author=author, title="Les Paradis Artificiels") - Book.objects.create(pk=2, author=author, title="Les Fleurs du Mal") - Book.objects.create(pk=3, author=author, title="Flowers of Evil") + author = Author.objects.create( + pk="000000000000000000000001", name="Charles Baudelaire" + ) + Book.objects.create(author=author, title="Les Paradis Artificiels") + Book.objects.create(author=author, title="Les Fleurs du Mal") + Book.objects.create(author=author, title="Flowers of Evil") book_ids = author.book_set.order_by("id").values_list("id", flat=True) data = { @@ -2191,7 +2209,7 @@ def test_inlineformset_factory_help_text_overrides(self): self.assertEqual(form["title"].help_text, "Choose carefully.") def test_modelformset_factory_error_messages_overrides(self): - author = Author.objects.create(pk=1, name="Charles Baudelaire") + author = Author.objects.create(name="Charles Baudelaire") BookFormSet = modelformset_factory( Book, fields="__all__", @@ -2202,7 +2220,7 @@ def test_modelformset_factory_error_messages_overrides(self): self.assertEqual(form.errors, {"title": ["Title too long!!"]}) def test_inlineformset_factory_error_messages_overrides(self): - author = Author.objects.create(pk=1, name="Charles Baudelaire") + author = Author.objects.create(name="Charles Baudelaire") BookFormSet = inlineformset_factory( Author, Book, @@ -2214,7 +2232,7 @@ def test_inlineformset_factory_error_messages_overrides(self): self.assertEqual(form.errors, {"title": ["Title too long!!"]}) def test_modelformset_factory_field_class_overrides(self): - author = Author.objects.create(pk=1, name="Charles Baudelaire") + author = Author.objects.create(name="Charles Baudelaire") BookFormSet = modelformset_factory( Book, fields="__all__", @@ -2227,7 +2245,7 @@ def test_modelformset_factory_field_class_overrides(self): self.assertIsInstance(form.fields["title"], forms.SlugField) def test_inlineformset_factory_field_class_overrides(self): - author = Author.objects.create(pk=1, name="Charles Baudelaire") + author = Author.objects.create(name="Charles Baudelaire") BookFormSet = inlineformset_factory( Author, Book, diff --git a/tests/model_formsets_regress/tests.py b/tests/model_formsets_regress/tests.py index 0ccc2c0490..2618bbcf05 100644 --- a/tests/model_formsets_regress/tests.py +++ b/tests/model_formsets_regress/tests.py @@ -201,15 +201,21 @@ def test_inline_model_with_to_field_to_rel(self): """ FormSet = inlineformset_factory(UserProfile, ProfileNetwork, exclude=[]) - user = User.objects.create(username="guido", serial=1337, pk=1) - self.assertEqual(user.pk, 1) - profile = UserProfile.objects.create(user=user, about="about", pk=2) - self.assertEqual(profile.pk, 2) + user = User.objects.create( + username="guido", serial=1337, pk="000000000000000000000001" + ) + self.assertEqual(str(user.pk), "000000000000000000000001") + profile = UserProfile.objects.create( + user=user, about="about", pk="000000000000000000000002" + ) + self.assertEqual(str(profile.pk), "000000000000000000000002") ProfileNetwork.objects.create(profile=profile, network=10, identifier=10) formset = FormSet(instance=profile) # Testing the inline model's relation - self.assertEqual(formset[0].instance.profile_id, 1) + self.assertEqual( + str(formset[0].instance.profile_id), "000000000000000000000001" + ) def test_formset_with_none_instance(self): "A formset with instance=None can be created. Regression for #11872" diff --git a/tests/model_inheritance_regress/tests.py b/tests/model_inheritance_regress/tests.py index ba31048ac2..0a0502ae11 100644 --- a/tests/model_inheritance_regress/tests.py +++ b/tests/model_inheritance_regress/tests.py @@ -431,10 +431,14 @@ def test_abstract_verbose_name_plural_inheritance(self): def test_inherited_nullable_exclude(self): obj = SelfRefChild.objects.create(child_data=37, parent_data=42) self.assertQuerySetEqual( - SelfRefParent.objects.exclude(self_data=72), [obj.pk], attrgetter("pk") + SelfRefParent.objects.exclude(self_data="000000000000000000000072"), + [obj.pk], + attrgetter("pk"), ) self.assertQuerySetEqual( - SelfRefChild.objects.exclude(self_data=72), [obj.pk], attrgetter("pk") + SelfRefChild.objects.exclude(self_data="000000000000000000000072"), + [obj.pk], + attrgetter("pk"), ) def test_concrete_abstract_concrete_pk(self): diff --git a/tests/multiple_database/fixtures/multidb-common.json b/tests/multiple_database/fixtures/multidb-common.json index 33134173b9..02aad4cdc0 100644 --- a/tests/multiple_database/fixtures/multidb-common.json +++ b/tests/multiple_database/fixtures/multidb-common.json @@ -1,10 +1,10 @@ [ { - "pk": 1, + "pk": "000000000000000000000001", "model": "multiple_database.book", "fields": { "title": "The Definitive Guide to Django", "published": "2009-7-8" } } -] \ No newline at end of file +] diff --git a/tests/multiple_database/fixtures/multidb.default.json b/tests/multiple_database/fixtures/multidb.default.json index 379b18a803..f57c87daff 100644 --- a/tests/multiple_database/fixtures/multidb.default.json +++ b/tests/multiple_database/fixtures/multidb.default.json @@ -1,20 +1,20 @@ [ { - "pk": 1, + "pk": "000000000000000000000001", "model": "multiple_database.person", "fields": { "name": "Marty Alchin" } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "multiple_database.person", "fields": { "name": "George Vilches" } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "multiple_database.book", "fields": { "title": "Pro Django", diff --git a/tests/multiple_database/fixtures/multidb.other.json b/tests/multiple_database/fixtures/multidb.other.json index c64f490201..f67ac0e906 100644 --- a/tests/multiple_database/fixtures/multidb.other.json +++ b/tests/multiple_database/fixtures/multidb.other.json @@ -1,20 +1,20 @@ [ { - "pk": 1, + "pk": "000000000000000000000001", "model": "multiple_database.person", "fields": { "name": "Mark Pilgrim" } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "multiple_database.person", "fields": { "name": "Chris Mills" } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "multiple_database.book", "fields": { "title": "Dive into Python", @@ -23,4 +23,4 @@ "editor": ["Chris Mills"] } } -] \ No newline at end of file +] diff --git a/tests/multiple_database/fixtures/pets.json b/tests/multiple_database/fixtures/pets.json index 89756a3e5b..c6f059de48 100644 --- a/tests/multiple_database/fixtures/pets.json +++ b/tests/multiple_database/fixtures/pets.json @@ -1,18 +1,18 @@ [ { - "pk": 1, + "pk": "000000000000000000000001", "model": "multiple_database.pet", "fields": { "name": "Mr Bigglesworth", - "owner": 1 + "owner": "000000000000000000000001" } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "multiple_database.pet", "fields": { "name": "Spot", - "owner": 2 + "owner": "000000000000000000000002" } } -] \ No newline at end of file +] diff --git a/tests/multiple_database/tests.py b/tests/multiple_database/tests.py index 23d2f37f65..a790a442a0 100644 --- a/tests/multiple_database/tests.py +++ b/tests/multiple_database/tests.py @@ -884,7 +884,7 @@ def test_o2o_cross_database_protection(self): new_bob_profile = UserProfile(flavor="spring surprise") # assigning a profile requires an explicit pk as the object isn't saved - charlie = User(pk=51, username="charlie", email="charlie@example.com") + charlie = User(username="charlie", email="charlie@example.com") charlie.set_unusable_password() # initially, no db assigned @@ -1645,16 +1645,16 @@ def test_m2m_cross_database_protection(self): "M2M relations can cross databases if the database share a source" # Create books and authors on the inverse to the usual database pro = Book.objects.using("other").create( - pk=1, title="Pro Django", published=datetime.date(2008, 12, 16) + title="Pro Django", published=datetime.date(2008, 12, 16) ) - marty = Person.objects.using("other").create(pk=1, name="Marty Alchin") + marty = Person.objects.using("other").create(name="Marty Alchin") dive = Book.objects.using("default").create( - pk=2, title="Dive into Python", published=datetime.date(2009, 5, 4) + title="Dive into Python", published=datetime.date(2009, 5, 4) ) - mark = Person.objects.using("default").create(pk=2, name="Mark Pilgrim") + mark = Person.objects.using("default").create(name="Mark Pilgrim") # Now save back onto the usual database. # This simulates primary/replica - the objects exist on both database, @@ -1737,14 +1737,16 @@ def test_m2m_cross_database_protection(self): # If you create an object through a M2M relation, it will be # written to the write database, even if the original object # was on the read database - alice = dive.authors.create(name="Alice", pk=3) + alice = dive.authors.create(name="Alice") self.assertEqual(alice._state.db, "default") # Same goes for get_or_create, regardless of whether getting or creating alice, created = dive.authors.get_or_create(name="Alice") self.assertEqual(alice._state.db, "default") - bob, created = dive.authors.get_or_create(name="Bob", defaults={"pk": 4}) + bob, created = dive.authors.get_or_create( + name="Bob", defaults={"pk": "000000000000000000000004"} + ) self.assertEqual(bob._state.db, "default") def test_o2o_cross_database_protection(self): @@ -1848,10 +1850,10 @@ def test_generic_key_cross_database_protection(self): def test_m2m_managers(self): "M2M relations are represented by managers, and can be controlled like managers" pro = Book.objects.using("other").create( - pk=1, title="Pro Django", published=datetime.date(2008, 12, 16) + title="Pro Django", published=datetime.date(2008, 12, 16) ) - marty = Person.objects.using("other").create(pk=1, name="Marty Alchin") + marty = Person.objects.using("other").create(name="Marty Alchin") self.assertEqual(pro.authors.db, "other") self.assertEqual(pro.authors.db_manager("default").db, "default") @@ -1866,9 +1868,8 @@ def test_foreign_key_managers(self): FK reverse relations are represented by managers, and can be controlled like managers. """ - marty = Person.objects.using("other").create(pk=1, name="Marty Alchin") + marty = Person.objects.using("other").create(name="Marty Alchin") Book.objects.using("other").create( - pk=1, title="Pro Django", published=datetime.date(2008, 12, 16), editor=marty, diff --git a/tests/or_lookups/tests.py b/tests/or_lookups/tests.py index bfcb32bea7..9fc6379f39 100644 --- a/tests/or_lookups/tests.py +++ b/tests/or_lookups/tests.py @@ -95,7 +95,9 @@ def test_pk_in(self): ) self.assertQuerySetEqual( - Article.objects.filter(pk__in=[self.a1, self.a2, self.a3, 40000]), + Article.objects.filter( + pk__in=[self.a1, self.a2, self.a3, "000000000000000000040000"] + ), ["Hello", "Goodbye", "Hello and goodbye"], attrgetter("headline"), ) diff --git a/tests/order_with_respect_to/base_tests.py b/tests/order_with_respect_to/base_tests.py index 5170c6d957..2a2ce9657a 100644 --- a/tests/order_with_respect_to/base_tests.py +++ b/tests/order_with_respect_to/base_tests.py @@ -19,10 +19,10 @@ def setUpTestData(cls): cls.q1 = cls.Question.objects.create( text="Which Beatle starts with the letter 'R'?" ) - cls.Answer.objects.create(text="John", question=cls.q1) - cls.Answer.objects.create(text="Paul", question=cls.q1) - cls.Answer.objects.create(text="George", question=cls.q1) - cls.Answer.objects.create(text="Ringo", question=cls.q1) + cls.a1 = cls.Answer.objects.create(text="John", question=cls.q1) + cls.a2 = cls.Answer.objects.create(text="Paul", question=cls.q1) + cls.a3 = cls.Answer.objects.create(text="George", question=cls.q1) + cls.a4 = cls.Answer.objects.create(text="Ringo", question=cls.q1) def test_default_to_insertion_order(self): # Answers will always be ordered in the order they were inserted. @@ -125,4 +125,6 @@ def db_for_write(self, model, **hints): using="other", ), ): - self.q1.set_answer_order([3, 1, 2, 4]) + self.q1.set_answer_order( + [self.a3.pk, self.a1.pk, self.a2.pk, self.a4.pk] + ) diff --git a/tests/prefetch_related/tests.py b/tests/prefetch_related/tests.py index 38993fc43f..6e22c9249c 100644 --- a/tests/prefetch_related/tests.py +++ b/tests/prefetch_related/tests.py @@ -1639,14 +1639,16 @@ class Ticket19607Tests(TestCase): @classmethod def setUpTestData(cls): LessonEntry.objects.bulk_create( - LessonEntry(id=id_, name1=name1, name2=name2) + LessonEntry(id=f"{id_:024}", name1=name1, name2=name2) for id_, name1, name2 in [ (1, "einfach", "simple"), (2, "schwierig", "difficult"), ] ) WordEntry.objects.bulk_create( - WordEntry(id=id_, lesson_entry_id=lesson_entry_id, name=name) + WordEntry( + id=f"{id_:024}", lesson_entry_id=f"{lesson_entry_id:024}", name=name + ) for id_, lesson_entry_id, name in [ (1, 1, "einfach"), (2, 1, "simple"), diff --git a/tests/proxy_models/fixtures/mypeople.json b/tests/proxy_models/fixtures/mypeople.json index d20c8f2a6e..1414ad57bd 100644 --- a/tests/proxy_models/fixtures/mypeople.json +++ b/tests/proxy_models/fixtures/mypeople.json @@ -1,9 +1,9 @@ [ { - "pk": 100, + "pk": "000000000000000000000100", "model": "proxy_models.myperson", "fields": { "name": "Elvis Presley" } } -] \ No newline at end of file +] diff --git a/tests/proxy_models/tests.py b/tests/proxy_models/tests.py index f1476fec3e..a9bd288a74 100644 --- a/tests/proxy_models/tests.py +++ b/tests/proxy_models/tests.py @@ -107,24 +107,26 @@ def test_proxy_included_in_ancestors(self): Proxy models are included in the ancestors for a model's DoesNotExist and MultipleObjectsReturned """ - Person.objects.create(name="Foo McBar", pk=1) - MyPerson.objects.create(name="Bazza del Frob", pk=2) - LowerStatusPerson.objects.create(status="low", name="homer", pk=3) - max_id = Person.objects.aggregate(max_id=models.Max("id"))["max_id"] + Person.objects.create(name="Foo McBar", pk="000000000000000000000001") + MyPerson.objects.create(name="Bazza del Frob", pk="000000000000000000000002") + LowerStatusPerson.objects.create( + status="low", name="homer", pk="000000000000000000000002" + ) + max_id = int(str(Person.objects.aggregate(max_id=models.Max("id"))["max_id"])) with self.assertRaises(Person.DoesNotExist): MyPersonProxy.objects.get(name="Zathras") with self.assertRaises(Person.MultipleObjectsReturned): - MyPersonProxy.objects.get(id__lt=max_id + 1) + MyPersonProxy.objects.get(id__lt=f"{max_id + 1:024}") with self.assertRaises(Person.DoesNotExist): StatusPerson.objects.get(name="Zathras") - StatusPerson.objects.create(name="Bazza Jr.", pk=4) - StatusPerson.objects.create(name="Foo Jr.", pk=5) - max_id = Person.objects.aggregate(max_id=models.Max("id"))["max_id"] + StatusPerson.objects.create(name="Bazza Jr.", pk="000000000000000000000004") + StatusPerson.objects.create(name="Foo Jr.", pk="000000000000000000000005") + max_id = int(str(Person.objects.aggregate(max_id=models.Max("id"))["max_id"])) with self.assertRaises(Person.MultipleObjectsReturned): - StatusPerson.objects.get(id__lt=max_id + 1) + StatusPerson.objects.get(id__lt=f"{max_id + 1:024}") def test_abstract_base_with_model_fields(self): msg = ( @@ -392,7 +394,7 @@ def test_proxy_bug(self): def test_proxy_load_from_fixture(self): management.call_command("loaddata", "mypeople.json", verbosity=0) - p = MyPerson.objects.get(pk=100) + p = MyPerson.objects.get(pk="000000000000000000000100") self.assertEqual(p.name, "Elvis Presley") def test_select_related_only(self): diff --git a/tests/queries/test_bulk_update.py b/tests/queries/test_bulk_update.py index b2688a61c8..1768d02628 100644 --- a/tests/queries/test_bulk_update.py +++ b/tests/queries/test_bulk_update.py @@ -198,7 +198,7 @@ def test_custom_pk(self): ) def test_falsey_pk_value(self): - order = Order.objects.create(pk=0, name="test") + order = Order.objects.create(pk="000000000000000000000000", name="test") order.name = "updated" Order.objects.bulk_update([order], ["name"]) order.refresh_from_db() diff --git a/tests/queries/tests.py b/tests/queries/tests.py index fc2b54bf1e..e3de980c87 100644 --- a/tests/queries/tests.py +++ b/tests/queries/tests.py @@ -127,9 +127,9 @@ def setUpTestData(cls): cls.t4 = Tag.objects.create(name="t4", parent=cls.t3) cls.t5 = Tag.objects.create(name="t5", parent=cls.t3) - cls.n1 = Note.objects.create(note="n1", misc="foo", id=1) - cls.n2 = Note.objects.create(note="n2", misc="bar", id=2) - cls.n3 = Note.objects.create(note="n3", misc="foo", id=3, negate=False) + cls.n1 = Note.objects.create(note="n1", misc="foo") + cls.n2 = Note.objects.create(note="n2", misc="bar") + cls.n3 = Note.objects.create(note="n3", misc="foo", negate=False) cls.ann1 = Annotation.objects.create(name="a1", tag=cls.t1) cls.ann1.notes.add(cls.n1) @@ -184,7 +184,7 @@ def setUpTestData(cls): cls.c2 = Cover.objects.create(title="second", item=cls.i2) def test_subquery_condition(self): - qs1 = Tag.objects.filter(pk__lte=0) + qs1 = Tag.objects.filter(pk__lte="000000000000000000000000") qs2 = Tag.objects.filter(parent__in=qs1) qs3 = Tag.objects.filter(parent__in=qs2) self.assertEqual(qs3.query.subq_aliases, {"T", "U", "V"}) @@ -447,7 +447,9 @@ def test_get_clears_ordering(self): def test_tickets_4088_4306(self): self.assertSequenceEqual(Report.objects.filter(creator=1001), [self.r1]) self.assertSequenceEqual(Report.objects.filter(creator__num=1001), [self.r1]) - self.assertSequenceEqual(Report.objects.filter(creator__id=1001), []) + self.assertSequenceEqual( + Report.objects.filter(creator__id="000000000000000000001001"), [] + ) self.assertSequenceEqual( Report.objects.filter(creator__id=self.a1.id), [self.r1] ) @@ -547,7 +549,7 @@ def test_ticket2091(self): self.assertSequenceEqual(Item.objects.filter(tags__in=[t]), [self.i4]) def test_avoid_infinite_loop_on_too_many_subqueries(self): - x = Tag.objects.filter(pk=1) + x = Tag.objects.filter(pk="000000000000000000000001") local_recursion_limit = sys.getrecursionlimit() // 16 msg = "Maximum recursion depth exceeded: too many subqueries." with self.assertRaisesMessage(RecursionError, msg): @@ -555,7 +557,7 @@ def test_avoid_infinite_loop_on_too_many_subqueries(self): x = Tag.objects.filter(pk__in=x) def test_reasonable_number_of_subq_aliases(self): - x = Tag.objects.filter(pk=1) + x = Tag.objects.filter(pk="000000000000000000000001") for _ in range(20): x = Tag.objects.filter(pk__in=x) self.assertEqual( @@ -700,11 +702,13 @@ def test_ticket4358(self): self.assertIn("note_id", ExtraInfo.objects.values()[0]) # You can also pass it in explicitly. self.assertSequenceEqual( - ExtraInfo.objects.values("note_id"), [{"note_id": 1}, {"note_id": 2}] + ExtraInfo.objects.values("note_id"), + [{"note_id": self.n1.pk}, {"note_id": self.n2.pk}], ) # ...or use the field name. self.assertSequenceEqual( - ExtraInfo.objects.values("note"), [{"note": 1}, {"note": 2}] + ExtraInfo.objects.values("note"), + [{"note": self.n1.pk}, {"note": self.n2.pk}], ) def test_ticket6154(self): @@ -888,7 +892,9 @@ def test_ticket7235(self): self.assertSequenceEqual(q.all(), []) self.assertSequenceEqual(q.filter(meal="m"), []) self.assertSequenceEqual(q.exclude(meal="m"), []) - self.assertSequenceEqual(q.complex_filter({"pk": 1}), []) + self.assertSequenceEqual( + q.complex_filter({"pk": "000000000000000000000001"}), [] + ) self.assertSequenceEqual(q.select_related("food"), []) self.assertSequenceEqual(q.annotate(Count("food")), []) self.assertSequenceEqual(q.order_by("meal", "food"), []) @@ -940,7 +946,7 @@ def test_ticket9985(self): # qs.values_list(...).values(...) combinations should work. self.assertSequenceEqual( Note.objects.values_list("note", flat=True).values("id").order_by("id"), - [{"id": 1}, {"id": 2}, {"id": 3}], + [{"id": self.n1.pk}, {"id": self.n2.pk}, {"id": self.n3.pk}], ) self.assertSequenceEqual( Annotation.objects.filter( @@ -1833,8 +1839,8 @@ class Queries5Tests(TestCase): def setUpTestData(cls): # Ordering by 'rank' gives us rank2, rank1, rank3. Ordering by the # Meta.ordering will be rank3, rank2, rank1. - cls.n1 = Note.objects.create(note="n1", misc="foo", id=1) - cls.n2 = Note.objects.create(note="n2", misc="bar", id=2) + cls.n1 = Note.objects.create(note="n1", misc="foo") + cls.n2 = Note.objects.create(note="n2", misc="bar") e1 = ExtraInfo.objects.create(info="e1", note=cls.n1) e2 = ExtraInfo.objects.create(info="e2", note=cls.n2) a1 = Author.objects.create(name="a1", num=1001, extra=e1) @@ -2048,7 +2054,7 @@ def test_join_already_in_query(self): class DisjunctiveFilterTests(TestCase): @classmethod def setUpTestData(cls): - cls.n1 = Note.objects.create(note="n1", misc="foo", id=1) + cls.n1 = Note.objects.create(note="n1", misc="foo") cls.e1 = ExtraInfo.objects.create(info="e1", note=cls.n1) def test_ticket7872(self): @@ -2090,7 +2096,7 @@ def setUpTestData(cls): cls.t3 = Tag.objects.create(name="t3", parent=cls.t1) cls.t4 = Tag.objects.create(name="t4", parent=cls.t3) cls.t5 = Tag.objects.create(name="t5", parent=cls.t3) - n1 = Note.objects.create(note="n1", misc="foo", id=1) + n1 = Note.objects.create(note="n1", misc="foo") cls.ann1 = Annotation.objects.create(name="a1", tag=cls.t1) cls.ann1.notes.add(n1) cls.ann2 = Annotation.objects.create(name="a2", tag=cls.t4) @@ -2122,10 +2128,16 @@ def test_tickets_8921_9188(self): # preemptively discovered cases). self.assertSequenceEqual( - PointerA.objects.filter(connection__pointerb__id=1), [] + PointerA.objects.filter( + connection__pointerb__id="000000000000000000000001" + ), + [], ) self.assertSequenceEqual( - PointerA.objects.exclude(connection__pointerb__id=1), [] + PointerA.objects.exclude( + connection__pointerb__id="000000000000000000000001" + ), + [], ) self.assertSequenceEqual( @@ -2215,7 +2227,7 @@ def test_xor_subquery(self): class RawQueriesTests(TestCase): @classmethod def setUpTestData(cls): - Note.objects.create(note="n1", misc="foo", id=1) + Note.objects.create(note="n1", misc="foo") def test_ticket14729(self): # Test representation of raw query with one or few parameters passed as list @@ -2245,7 +2257,7 @@ def test_ticket10432(self): class ComparisonTests(TestCase): @classmethod def setUpTestData(cls): - cls.n1 = Note.objects.create(note="n1", misc="foo", id=1) + cls.n1 = Note.objects.create(note="n1", misc="foo") e1 = ExtraInfo.objects.create(info="e1", note=cls.n1) cls.a2 = Author.objects.create(name="a2", num=2002, extra=e1) @@ -2881,7 +2893,7 @@ def test_slicing_can_slice_again_after_slicing(self): def test_slicing_cannot_filter_queryset_once_sliced(self): msg = "Cannot filter a query once a slice has been taken." with self.assertRaisesMessage(TypeError, msg): - Article.objects.all()[0:5].filter(id=1) + Article.objects.all()[0:5].filter(name="foo") def test_slicing_cannot_reorder_queryset_once_sliced(self): msg = "Cannot reorder a query once a slice has been taken." @@ -3374,9 +3386,9 @@ class ExcludeTest17600(TestCase): @classmethod def setUpTestData(cls): # Create a few Orders. - cls.o1 = Order.objects.create(pk=1) - cls.o2 = Order.objects.create(pk=2) - cls.o3 = Order.objects.create(pk=3) + cls.o1 = Order.objects.create() + cls.o2 = Order.objects.create() + cls.o3 = Order.objects.create() # Create some OrderItems for the first order with homogeneous # status_id values @@ -3908,7 +3920,7 @@ class DisjunctionPromotionTests(TestCase): def test_disjunction_promotion_select_related(self): fk1 = FK1.objects.create(f1="f1", f2="f2") basea = BaseA.objects.create(a=fk1) - qs = BaseA.objects.filter(Q(a=fk1) | Q(b=2)) + qs = BaseA.objects.filter(Q(a=fk1) | Q(b="000000000000000000000002")) self.assertEqual(str(qs.query).count(" JOIN "), 0) qs = qs.select_related("a", "b") self.assertEqual(str(qs.query).count(" INNER JOIN "), 0) @@ -3964,7 +3976,9 @@ def test_disjunction_promotion3_demote(self): self.assertEqual(str(qs.query).count("LEFT OUTER JOIN"), 1) def test_disjunction_promotion4_demote(self): - qs = BaseA.objects.filter(Q(a=1) | Q(a=2)) + qs = BaseA.objects.filter( + Q(a="000000000000000000000001") | Q(a="000000000000000000000002") + ) self.assertEqual(str(qs.query).count("JOIN"), 0) # Demote needed for the "a" join. It is marked as outer join by # above filter (even if it is trimmed away). @@ -3974,11 +3988,15 @@ def test_disjunction_promotion4_demote(self): def test_disjunction_promotion4(self): qs = BaseA.objects.filter(a__f1="foo") self.assertEqual(str(qs.query).count("INNER JOIN"), 1) - qs = qs.filter(Q(a=1) | Q(a=2)) + qs = qs.filter( + Q(a="000000000000000000000001") | Q(a="000000000000000000000002") + ) self.assertEqual(str(qs.query).count("INNER JOIN"), 1) def test_disjunction_promotion5_demote(self): - qs = BaseA.objects.filter(Q(a=1) | Q(a=2)) + qs = BaseA.objects.filter( + Q(a="000000000000000000000001") | Q(a="000000000000000000000002") + ) # Note that the above filters on a force the join to an # inner join even if it is trimmed. self.assertEqual(str(qs.query).count("JOIN"), 0) @@ -3990,12 +4008,16 @@ def test_disjunction_promotion5_demote(self): qs = BaseA.objects.filter(Q(a__f1="foo") | Q(b__f1="foo")) # Now the join to a is created as LOUTER self.assertEqual(str(qs.query).count("LEFT OUTER JOIN"), 2) - qs = qs.filter(Q(a=1) | Q(a=2)) + qs = qs.filter( + Q(a="000000000000000000000001") | Q(a="000000000000000000000002") + ) self.assertEqual(str(qs.query).count("INNER JOIN"), 1) self.assertEqual(str(qs.query).count("LEFT OUTER JOIN"), 1) def test_disjunction_promotion6(self): - qs = BaseA.objects.filter(Q(a=1) | Q(a=2)) + qs = BaseA.objects.filter( + Q(a="000000000000000000000001") | Q(a="000000000000000000000002") + ) self.assertEqual(str(qs.query).count("JOIN"), 0) qs = BaseA.objects.filter(Q(a__f1="foo") & Q(b__f1="foo")) self.assertEqual(str(qs.query).count("INNER JOIN"), 2) @@ -4004,12 +4026,16 @@ def test_disjunction_promotion6(self): qs = BaseA.objects.filter(Q(a__f1="foo") & Q(b__f1="foo")) self.assertEqual(str(qs.query).count("LEFT OUTER JOIN"), 0) self.assertEqual(str(qs.query).count("INNER JOIN"), 2) - qs = qs.filter(Q(a=1) | Q(a=2)) + qs = qs.filter( + Q(a="000000000000000000000001") | Q(a="000000000000000000000002") + ) self.assertEqual(str(qs.query).count("INNER JOIN"), 2) self.assertEqual(str(qs.query).count("LEFT OUTER JOIN"), 0) def test_disjunction_promotion7(self): - qs = BaseA.objects.filter(Q(a=1) | Q(a=2)) + qs = BaseA.objects.filter( + Q(a="000000000000000000000001") | Q(a="000000000000000000000002") + ) self.assertEqual(str(qs.query).count("JOIN"), 0) qs = BaseA.objects.filter(Q(a__f1="foo") | (Q(b__f1="foo") & Q(a__f1="bar"))) self.assertEqual(str(qs.query).count("INNER JOIN"), 1) @@ -4035,7 +4061,10 @@ def test_disjunction_promotion_fexpression(self): Q(a__f1=F("b__f1")) | Q(a__f2=F("b__f2")) | Q(c__f1="foo") ) self.assertEqual(str(qs.query).count("LEFT OUTER JOIN"), 3) - qs = BaseA.objects.filter(Q(a__f1=F("c__f1")) | (Q(pk=1) & Q(pk=2))) + qs = BaseA.objects.filter( + Q(a__f1=F("c__f1")) + | (Q(pk="000000000000000000000001") & Q(pk="000000000000000000000002")) + ) self.assertEqual(str(qs.query).count("LEFT OUTER JOIN"), 2) self.assertEqual(str(qs.query).count("INNER JOIN"), 0) @@ -4397,7 +4426,7 @@ def test_ticket_21376(self): Q(objecta=a) | Q(objectb__objecta=a), ) qs = qs.filter( - Q(objectb=1) | Q(objecta=a), + Q(objectb="000000000000000000000001") | Q(objecta=a), ) self.assertEqual(qs.count(), 1) tblname = connection.ops.quote_name(ObjectB._meta.db_table) diff --git a/tests/queryset_pickle/tests.py b/tests/queryset_pickle/tests.py index 28079d2c86..9450a88239 100644 --- a/tests/queryset_pickle/tests.py +++ b/tests/queryset_pickle/tests.py @@ -58,7 +58,7 @@ def test_staticmethod_as_default(self): self.assert_pickles(Happening.objects.filter(number2=1)) def test_filter_reverse_fk(self): - self.assert_pickles(Group.objects.filter(event=1)) + self.assert_pickles(Group.objects.filter(event="000000000000000000000001")) def test_doesnotexist_exception(self): # Ticket #17776 @@ -97,7 +97,7 @@ def test_model_pickle(self): """ A model not defined on module level is picklable. """ - original = Container.SomeModel(pk=1) + original = Container.SomeModel(pk="000000000000000000000001") dumped = pickle.dumps(original) reloaded = pickle.loads(dumped) self.assertEqual(original, reloaded) @@ -176,7 +176,9 @@ def test_pickle_prefetch_queryset_still_usable(self): models.Prefetch("event_set", queryset=Event.objects.order_by("id")) ) groups2 = pickle.loads(pickle.dumps(groups)) - self.assertSequenceEqual(groups2.filter(id__gte=0), [g]) + self.assertSequenceEqual( + groups2.filter(id__gte="000000000000000000000000"), [g] + ) def test_pickle_prefetch_queryset_not_evaluated(self): Group.objects.create(name="foo") @@ -327,7 +329,7 @@ def test_annotation_values_list(self): def test_filter_deferred(self): qs = Happening.objects.all() qs._defer_next_filter = True - qs = qs.filter(id=0) + qs = qs.filter(id="000000000000000000000000") self.assert_pickles(qs) def test_missing_django_version_unpickling(self): diff --git a/tests/redirects_tests/tests.py b/tests/redirects_tests/tests.py index d175be62fb..0ca35ce720 100644 --- a/tests/redirects_tests/tests.py +++ b/tests/redirects_tests/tests.py @@ -12,7 +12,7 @@ "append": "django.contrib.redirects.middleware.RedirectFallbackMiddleware" } ) -@override_settings(APPEND_SLASH=False, ROOT_URLCONF="redirects_tests.urls", SITE_ID=1) +@override_settings(APPEND_SLASH=False, ROOT_URLCONF="redirects_tests.urls") class RedirectTests(TestCase): @classmethod def setUpTestData(cls): @@ -95,7 +95,6 @@ class OverriddenRedirectFallbackMiddleware(RedirectFallbackMiddleware): @modify_settings( MIDDLEWARE={"append": "redirects_tests.tests.OverriddenRedirectFallbackMiddleware"} ) -@override_settings(SITE_ID=1) class OverriddenRedirectMiddlewareTests(TestCase): @classmethod def setUpTestData(cls): diff --git a/tests/runtests.py b/tests/runtests.py index 6e0ed06d52..2b9d0c251b 100755 --- a/tests/runtests.py +++ b/tests/runtests.py @@ -14,6 +14,7 @@ from pathlib import Path import django_mongodb_backend +from bson import ObjectId try: import django @@ -246,7 +247,7 @@ def setup_collect_tests(start_at, start_after, test_labels=None): } ] settings.LANGUAGE_CODE = "en" - settings.SITE_ID = 1 + settings.SITE_ID = ObjectId("000000000000000000000001") settings.MIDDLEWARE = ALWAYS_MIDDLEWARE settings.MIGRATION_MODULES = { # This lets us skip creating migrations for the test models as many of @@ -262,6 +263,7 @@ def setup_collect_tests(start_at, start_after, test_labels=None): settings.LOGGING = log_config settings.SILENCED_SYSTEM_CHECKS = [ "fields.W342", # ForeignKey(unique=True) -> OneToOneField + "sites.E101", # SITE_ID must be an ObjectId for MongoDB. ] # Load all the ALWAYS_INSTALLED_APPS. diff --git a/tests/serializers/models/data.py b/tests/serializers/models/data.py index 212ea0e06f..f44a6c643b 100644 --- a/tests/serializers/models/data.py +++ b/tests/serializers/models/data.py @@ -7,6 +7,8 @@ import uuid +from django_mongodb_backend.fields import ObjectIdField + from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation from django.contrib.contenttypes.models import ContentType from django.db import models @@ -103,7 +105,7 @@ class Tag(models.Model): data = models.SlugField() content_type = models.ForeignKey(ContentType, models.CASCADE) - object_id = models.PositiveIntegerField() + object_id = ObjectIdField() content_object = GenericForeignKey() diff --git a/tests/serializers/test_data.py b/tests/serializers/test_data.py index 33ea3458de..2700e5ec1c 100644 --- a/tests/serializers/test_data.py +++ b/tests/serializers/test_data.py @@ -11,6 +11,8 @@ import decimal import uuid +from bson import ObjectId + from django.core import serializers from django.db import connection, models from django.test import TestCase @@ -75,6 +77,16 @@ ) from .tests import register_tests + +def prep_value(value): + """Format a data value for MongoDB (convert int to ObjectId).""" + return f"{value:024}" if isinstance(value, int) else value + + +def value_to_object_id(value): + return ObjectId(f"{value:024}") if isinstance(value, int) else value + + # A set of functions that can be used to recreate # test data objects of various kinds. # The save method is a raw base model save, to make @@ -100,7 +112,7 @@ def generic_create(pk, klass, data): def fk_create(pk, klass, data): instance = klass(id=pk) - setattr(instance, "data_id", data) + setattr(instance, "data_id", prep_value(data)) models.Model.save_base(instance, raw=True) return [instance] @@ -108,7 +120,7 @@ def fk_create(pk, klass, data): def m2m_create(pk, klass, data): instance = klass(id=pk) models.Model.save_base(instance, raw=True) - instance.data.set(data) + instance.data.set([f"{d:024}" for d in data]) return [instance] @@ -120,8 +132,10 @@ def im2m_create(pk, klass, data): def im_create(pk, klass, data): instance = klass(id=pk) - instance.right_id = data["right"] - instance.left_id = data["left"] + instance.right_id = ( + f'{data["right"]:024}' # if data is not None else data # data["right"] + ) + instance.left_id = f'{data["left"]:024}' if "extra" in data: instance.extra = data["extra"] models.Model.save_base(instance, raw=True) @@ -130,7 +144,7 @@ def im_create(pk, klass, data): def o2o_create(pk, klass, data): instance = klass() - instance.data_id = data + instance.data_id = f"{data:024}" if data is not None else data models.Model.save_base(instance, raw=True) return [instance] @@ -166,7 +180,7 @@ def data_compare(testcase, pk, klass, data): testcase.assertEqual( bytes(data), bytes(instance.data), - "Objects with PK=%d not equal; expected '%s' (%s), got '%s' (%s)" + "Objects with PK=%s not equal; expected '%s' (%s), got '%s' (%s)" % ( pk, repr(bytes(data)), @@ -179,7 +193,7 @@ def data_compare(testcase, pk, klass, data): testcase.assertEqual( data, instance.data, - "Objects with PK=%d not equal; expected '%s' (%s), got '%s' (%s)" + "Objects with PK=%s not equal; expected '%s' (%s), got '%s' (%s)" % ( pk, data, @@ -198,12 +212,15 @@ def generic_compare(testcase, pk, klass, data): def fk_compare(testcase, pk, klass, data): instance = klass.objects.get(id=pk) - testcase.assertEqual(data, instance.data_id) + testcase.assertEqual(value_to_object_id(data), instance.data_id) def m2m_compare(testcase, pk, klass, data): instance = klass.objects.get(id=pk) - testcase.assertEqual(data, [obj.id for obj in instance.data.order_by("id")]) + testcase.assertEqual( + [value_to_object_id(d) for d in data], + [obj.id for obj in instance.data.order_by("id")], + ) def im2m_compare(testcase, pk, klass, data): @@ -213,8 +230,8 @@ def im2m_compare(testcase, pk, klass, data): def im_compare(testcase, pk, klass, data): instance = klass.objects.get(id=pk) - testcase.assertEqual(data["left"], instance.left_id) - testcase.assertEqual(data["right"], instance.right_id) + testcase.assertEqual(value_to_object_id(data["left"]), instance.left_id) + testcase.assertEqual(value_to_object_id(data["right"]), instance.right_id) if "extra" in data: testcase.assertEqual(data["extra"], instance.extra) else: @@ -222,8 +239,8 @@ def im_compare(testcase, pk, klass, data): def o2o_compare(testcase, pk, klass, data): - instance = klass.objects.get(data=data) - testcase.assertEqual(data, instance.data_id) + instance = klass.objects.get(data=prep_value(data)) + testcase.assertEqual(value_to_object_id(data), instance.data_id) def pk_compare(testcase, pk, klass, data): @@ -449,7 +466,7 @@ def serializerTest(self, format): instance_count = {} for func, pk, klass, datum in test_data: with connection.constraint_checks_disabled(): - objects.extend(func[0](pk, klass, datum)) + objects.extend(func[0](prep_value(pk), klass, datum)) # Get a count of the number of objects created for each class for klass in instance_count: @@ -467,7 +484,7 @@ def serializerTest(self, format): # Assert that the deserialized data is the same # as the original source for func, pk, klass, datum in test_data: - func[1](self, pk, klass, datum) + func[1](self, prep_value(pk), klass, datum) # Assert that the number of objects deserialized is the # same as the number that was serialized. diff --git a/tests/serializers/test_json.py b/tests/serializers/test_json.py index 6d67bfdb43..42afec4ca7 100644 --- a/tests/serializers/test_json.py +++ b/tests/serializers/test_json.py @@ -121,8 +121,9 @@ def test_helpful_error_message_invalid_field(self): If there is an invalid field value, the error message should contain the model associated with it. """ + pk = "000000000000000000000001" test_string = """[{ - "pk": "1", + "pk": "000000000000000000000001", "model": "serializers.player", "fields": { "name": "Bob", @@ -130,7 +131,7 @@ def test_helpful_error_message_invalid_field(self): "team": "Team" } }]""" - expected = "(serializers.player:pk=1) field_value was 'invalidint'" + expected = f"(serializers.player:pk={pk}) field_value was 'invalidint'" with self.assertRaisesMessage(DeserializationError, expected): list(serializers.deserialize("json", test_string)) @@ -139,8 +140,9 @@ def test_helpful_error_message_for_foreign_keys(self): Invalid foreign keys with a natural key should throw a helpful error message, such as what the failing key is. """ + pk = "000000000000000000000001" test_string = """[{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.category", "fields": { "name": "Unknown foreign key", @@ -151,7 +153,7 @@ def test_helpful_error_message_for_foreign_keys(self): } }]""" key = ["doesnotexist", "metadata"] - expected = "(serializers.category:pk=1) field_value was '%r'" % key + expected = f"(serializers.category:pk={pk}) field_value was '%r'" % key with self.assertRaisesMessage(DeserializationError, expected): list(serializers.deserialize("json", test_string)) @@ -159,29 +161,30 @@ def test_helpful_error_message_for_many2many_non_natural(self): """ Invalid many-to-many keys should throw a helpful error message. """ + pk = "000000000000000000000001" test_string = """[{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.article", "fields": { - "author": 1, + "author": "000000000000000000000001", "headline": "Unknown many to many", "pub_date": "2014-09-15T10:35:00", - "categories": [1, "doesnotexist"] + "categories": ["000000000000000000000001", "doesnotexist"] } }, { - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.author", "fields": { "name": "Agnes" } }, { - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.category", "fields": { "name": "Reference" } }]""" - expected = "(serializers.article:pk=1) field_value was 'doesnotexist'" + expected = f"(serializers.article:pk={pk}) field_value was 'doesnotexist'" with self.assertRaisesMessage(DeserializationError, expected): list(serializers.deserialize("json", test_string)) @@ -191,7 +194,7 @@ def test_helpful_error_message_for_many2many_natural1(self): This tests the code path where one of a list of natural keys is invalid. """ test_string = """[{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.categorymetadata", "fields": { "kind": "author", @@ -199,10 +202,10 @@ def test_helpful_error_message_for_many2many_natural1(self): "value": "Agnes" } }, { - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.article", "fields": { - "author": 1, + "author": "000000000000000000000001", "headline": "Unknown many to many", "pub_date": "2014-09-15T10:35:00", "meta_data": [ @@ -212,14 +215,17 @@ def test_helpful_error_message_for_many2many_natural1(self): ] } }, { - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.author", "fields": { "name": "Agnes" } }]""" key = ["doesnotexist", "meta1"] - expected = "(serializers.article:pk=1) field_value was '%r'" % key + expected = ( + "(serializers.article:pk=000000000000000000000001) field_value was '%r'" + % key + ) with self.assertRaisesMessage(DeserializationError, expected): for obj in serializers.deserialize("json", test_string): obj.save() @@ -230,17 +236,18 @@ def test_helpful_error_message_for_many2many_natural2(self): tests the code path where a natural many-to-many key has only a single value. """ + pk = "000000000000000000000001" test_string = """[{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.article", "fields": { - "author": 1, + "author": "000000000000000000000001", "headline": "Unknown many to many", "pub_date": "2014-09-15T10:35:00", - "meta_data": [1, "doesnotexist"] + "meta_data": ["000000000000000000000001", "doesnotexist"] } }, { - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.categorymetadata", "fields": { "kind": "author", @@ -248,13 +255,13 @@ def test_helpful_error_message_for_many2many_natural2(self): "value": "Agnes" } }, { - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.author", "fields": { "name": "Agnes" } }]""" - expected = "(serializers.article:pk=1) field_value was 'doesnotexist'" + expected = f"(serializers.article:pk={pk}) field_value was 'doesnotexist'" with self.assertRaisesMessage(DeserializationError, expected): for obj in serializers.deserialize("json", test_string, ignore=False): obj.save() @@ -263,13 +270,14 @@ def test_helpful_error_message_for_many2many_not_iterable(self): """ Not iterable many-to-many field value throws a helpful error message. """ + pk = "000000000000000000000001" test_string = """[{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.m2mdata", "fields": {"data": null} }]""" - expected = "(serializers.m2mdata:pk=1) field_value was 'None'" + expected = f"(serializers.m2mdata:pk={pk}) field_value was 'None'" with self.assertRaisesMessage(DeserializationError, expected): next(serializers.deserialize("json", test_string, ignore=False)) @@ -280,24 +288,24 @@ class JsonSerializerTransactionTestCase( serializer_name = "json" fwd_ref_str = """[ { - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.article", "fields": { "headline": "Forward references pose no problem", "pub_date": "2006-06-16T15:00:00", - "categories": [1], - "author": 1 + "categories": ["000000000000000000000001"], + "author": "000000000000000000000001" } }, { - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.category", "fields": { "name": "Reference" } }, { - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.author", "fields": { "name": "Agnes" diff --git a/tests/serializers/test_jsonl.py b/tests/serializers/test_jsonl.py index 73fe725602..bb6e861df6 100644 --- a/tests/serializers/test_jsonl.py +++ b/tests/serializers/test_jsonl.py @@ -104,11 +104,12 @@ def test_helpful_error_message_invalid_field(self): If there is an invalid field value, the error message contains the model associated with it. """ + pk = "000000000000000000000001" test_string = ( - '{"pk": "1","model": "serializers.player",' - '"fields": {"name": "Bob","rank": "invalidint","team": "Team"}}' + '{"pk": "%s","model": "serializers.player",' + '"fields": {"name": "Bob","rank": "invalidint","team": "Team"}}' % pk ) - expected = "(serializers.player:pk=1) field_value was 'invalidint'" + expected = f"(serializers.player:pk={pk}) field_value was 'invalidint'" with self.assertRaisesMessage(DeserializationError, expected): list(serializers.deserialize("jsonl", test_string)) @@ -117,14 +118,15 @@ def test_helpful_error_message_for_foreign_keys(self): Invalid foreign keys with a natural key throws a helpful error message, such as what the failing key is. """ + pk = "000000000000000000000001" test_string = ( - '{"pk": 1, "model": "serializers.category",' + '{"pk": "000000000000000000000001", "model": "serializers.category",' '"fields": {' '"name": "Unknown foreign key",' '"meta_data": ["doesnotexist","metadata"]}}' ) key = ["doesnotexist", "metadata"] - expected = "(serializers.category:pk=1) field_value was '%r'" % key + expected = f"(serializers.category:pk={pk}) field_value was '%r'" % key with self.assertRaisesMessage(DeserializationError, expected): list(serializers.deserialize("jsonl", test_string)) @@ -132,30 +134,31 @@ def test_helpful_error_message_for_many2many_non_natural(self): """ Invalid many-to-many keys throws a helpful error message. """ + pk = "000000000000000000000001" test_strings = [ """{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.article", "fields": { - "author": 1, + "author": "000000000000000000000001", "headline": "Unknown many to many", "pub_date": "2014-09-15T10:35:00", - "categories": [1, "doesnotexist"] + "categories": ["000000000000000000000001", "doesnotexist"] } }""", """{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.author", "fields": {"name": "Agnes"} }""", """{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.category", "fields": {"name": "Reference"} }""", ] test_string = "\n".join([s.replace("\n", "") for s in test_strings]) - expected = "(serializers.article:pk=1) field_value was 'doesnotexist'" + expected = f"(serializers.article:pk={pk}) field_value was 'doesnotexist'" with self.assertRaisesMessage(DeserializationError, expected): list(serializers.deserialize("jsonl", test_string)) @@ -164,17 +167,18 @@ def test_helpful_error_message_for_many2many_natural1(self): Invalid many-to-many keys throws a helpful error message where one of a list of natural keys is invalid. """ + pk = "000000000000000000000001" test_strings = [ """{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.categorymetadata", "fields": {"kind": "author","name": "meta1","value": "Agnes"} }""", """{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.article", "fields": { - "author": 1, + "author": "000000000000000000000001", "headline": "Unknown many to many", "pub_date": "2014-09-15T10:35:00", "meta_data": [ @@ -185,14 +189,14 @@ def test_helpful_error_message_for_many2many_natural1(self): } }""", """{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.author", "fields": {"name": "Agnes"} }""", ] test_string = "\n".join([s.replace("\n", "") for s in test_strings]) key = ["doesnotexist", "meta1"] - expected = "(serializers.article:pk=1) field_value was '%r'" % key + expected = f"(serializers.article:pk={pk}) field_value was '%r'" % key with self.assertRaisesMessage(DeserializationError, expected): for obj in serializers.deserialize("jsonl", test_string): obj.save() @@ -202,30 +206,31 @@ def test_helpful_error_message_for_many2many_natural2(self): Invalid many-to-many keys throws a helpful error message where a natural many-to-many key has only a single value. """ + pk = "000000000000000000000001" test_strings = [ """{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.article", "fields": { - "author": 1, + "author": "000000000000000000000001", "headline": "Unknown many to many", "pub_date": "2014-09-15T10:35:00", - "meta_data": [1, "doesnotexist"] + "meta_data": ["000000000000000000000001", "doesnotexist"] } }""", """{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.categorymetadata", "fields": {"kind": "author","name": "meta1","value": "Agnes"} }""", """{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.author", "fields": {"name": "Agnes"} }""", ] test_string = "\n".join([s.replace("\n", "") for s in test_strings]) - expected = "(serializers.article:pk=1) field_value was 'doesnotexist'" + expected = f"(serializers.article:pk={pk}) field_value was 'doesnotexist'" with self.assertRaisesMessage(DeserializationError, expected): for obj in serializers.deserialize("jsonl", test_string, ignore=False): obj.save() @@ -248,22 +253,22 @@ class JsonSerializerTransactionTestCase( serializer_name = "jsonl" fwd_ref_str = [ """{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.article", "fields": { "headline": "Forward references pose no problem", "pub_date": "2006-06-16T15:00:00", - "categories": [1], - "author": 1 + "categories": ["000000000000000000000001"], + "author": "000000000000000000000001" } }""", """{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.category", "fields": {"name": "Reference"} }""", """{ - "pk": 1, + "pk": "000000000000000000000001", "model": "serializers.author", "fields": {"name": "Agnes"} }""", diff --git a/tests/serializers/test_natural.py b/tests/serializers/test_natural.py index b5b35708c6..cf9d292374 100644 --- a/tests/serializers/test_natural.py +++ b/tests/serializers/test_natural.py @@ -21,9 +21,15 @@ def natural_key_serializer_test(self, format): # Create all the objects defined in the test data with connection.constraint_checks_disabled(): objects = [ - NaturalKeyAnchor.objects.create(id=1100, data="Natural Key Anghor"), - FKDataNaturalKey.objects.create(id=1101, data_id=1100), - FKDataNaturalKey.objects.create(id=1102, data_id=None), + NaturalKeyAnchor.objects.create( + id="000000000000000000001100", data="Natural Key Anghor" + ), + FKDataNaturalKey.objects.create( + id="000000000000000000001101", data_id="000000000000000000001100" + ), + FKDataNaturalKey.objects.create( + id="000000000000000000001102", data_id=None + ), ] # Serialize the test database serialized_data = serializers.serialize( @@ -40,7 +46,7 @@ def natural_key_serializer_test(self, format): self.assertEqual( obj.data, instance.data, - "Objects with PK=%d not equal; expected '%s' (%s), got '%s' (%s)" + "Objects with PK=%s not equal; expected '%s' (%s), got '%s' (%s)" % ( obj.pk, obj.data, diff --git a/tests/serializers/test_xml.py b/tests/serializers/test_xml.py index c9df2f2a5b..e7d8671c63 100644 --- a/tests/serializers/test_xml.py +++ b/tests/serializers/test_xml.py @@ -97,18 +97,18 @@ class XmlSerializerTransactionTestCase( serializer_name = "xml" fwd_ref_str = """ - - 1 + + 000000000000000000000001 Forward references pose no problem 2006-06-16T15:00:00 - + - + Agnes - + Reference """ # NOQA diff --git a/tests/serializers/test_yaml.py b/tests/serializers/test_yaml.py index 6db6f046fd..8069534b45 100644 --- a/tests/serializers/test_yaml.py +++ b/tests/serializers/test_yaml.py @@ -162,17 +162,17 @@ class YamlSerializerTransactionTestCase( ): serializer_name = "yaml" fwd_ref_str = """- model: serializers.article - pk: 1 + pk: "000000000000000000000001" fields: headline: Forward references pose no problem pub_date: 2006-06-16 15:00:00 - categories: [1] - author: 1 + categories: ["000000000000000000000001"] + author: "000000000000000000000001" - model: serializers.category - pk: 1 + pk: "000000000000000000000001" fields: name: Reference - model: serializers.author - pk: 1 + pk: "000000000000000000000001" fields: name: Agnes""" diff --git a/tests/serializers/tests.py b/tests/serializers/tests.py index 5da4b6dbed..a0c47539c2 100644 --- a/tests/serializers/tests.py +++ b/tests/serializers/tests.py @@ -457,11 +457,13 @@ class Serializer(serializers.json.Serializer): stream_class = File serializer = Serializer() - data = serializer.serialize([Score(id=1, score=3.4)]) + data = serializer.serialize([Score(id="000000000000000000000001", score=3.4)]) self.assertIs(serializer.stream_class, File) self.assertIsInstance(serializer.stream, File) self.assertEqual( - data, '[{"model": "serializers.score", "pk": 1, "fields": {"score": 3.4}}]' + data, + '[{"model": "serializers.score", "pk": "000000000000000000000001", ' + '"fields": {"score": 3.4}}]', ) diff --git a/tests/servers/fixtures/testdata.json b/tests/servers/fixtures/testdata.json index d81b2253d2..644f1b5aba 100644 --- a/tests/servers/fixtures/testdata.json +++ b/tests/servers/fixtures/testdata.json @@ -1,16 +1,16 @@ [ { - "pk": 1, + "pk": "000000000000000000000001", "model": "servers.person", "fields": { "name": "jane" } }, { - "pk": 2, + "pk": "000000000000000000000002", "model": "servers.person", "fields": { "name": "robert" } } -] \ No newline at end of file +] diff --git a/tests/signals/tests.py b/tests/signals/tests.py index 6c90c6aa52..9217c31354 100644 --- a/tests/signals/tests.py +++ b/tests/signals/tests.py @@ -100,7 +100,7 @@ def post_save_handler(signal, sender, instance, **kwargs): data[:] = [] p2 = Person(first_name="James", last_name="Jones") - p2.id = 99999 + p2.id = "000000000000000000099999" p2.save() self.assertEqual( data, @@ -110,7 +110,7 @@ def post_save_handler(signal, sender, instance, **kwargs): ], ) data[:] = [] - p2.id = 99998 + p2.id = "000000000000000000099998" p2.save() self.assertEqual( data, @@ -167,9 +167,9 @@ def __call__(self, signal, sender, instance, origin, **kwargs): data[:] = [] p2 = Person(first_name="James", last_name="Jones") - p2.id = 99999 + p2.id = "000000000000000000099999" p2.save() - p2.id = 99998 + p2.id = "000000000000000000099998" p2.save() p2.delete() self.assertEqual( diff --git a/tests/sites_framework/tests.py b/tests/sites_framework/tests.py index 4a297a9243..af29e41b5a 100644 --- a/tests/sites_framework/tests.py +++ b/tests/sites_framework/tests.py @@ -16,7 +16,7 @@ def setUpTestData(cls): id=settings.SITE_ID, domain="example.com", name="example.com" ) Site.objects.create( - id=settings.SITE_ID + 1, domain="example2.com", name="example2.com" + id="000000000000000000000002", domain="example2.com", name="example2.com" ) def test_site_fk(self): @@ -28,9 +28,9 @@ def test_site_fk(self): def test_sites_m2m(self): article = SyndicatedArticle.objects.create(title="Fresh News!") article.sites.add(Site.objects.get(id=settings.SITE_ID)) - article.sites.add(Site.objects.get(id=settings.SITE_ID + 1)) + article.sites.add(Site.objects.get(id="000000000000000000000002")) article2 = SyndicatedArticle.objects.create(title="More News!") - article2.sites.add(Site.objects.get(id=settings.SITE_ID + 1)) + article2.sites.add(Site.objects.get(id="000000000000000000000002")) self.assertEqual(SyndicatedArticle.on_site.get(), article) def test_custom_named_field(self): diff --git a/tests/sites_tests/tests.py b/tests/sites_tests/tests.py index 4f5b07ee8f..f0eeafec41 100644 --- a/tests/sites_tests/tests.py +++ b/tests/sites_tests/tests.py @@ -1,3 +1,5 @@ +from bson import ObjectId + from django.apps import apps from django.apps.registry import Apps from django.conf import settings @@ -316,13 +318,13 @@ def test_signal(self): ) self.assertTrue(Site.objects.exists()) - @override_settings(SITE_ID=35696) + @override_settings(SITE_ID="000000000000000000035696") def test_custom_site_id(self): """ #23945 - The configured ``SITE_ID`` should be respected. """ create_default_site(self.app_config, verbosity=0) - self.assertEqual(Site.objects.get().pk, 35696) + self.assertEqual(Site.objects.get().pk, ObjectId("000000000000000000035696")) @override_settings() # Restore original ``SITE_ID`` afterward. def test_no_site_id(self): diff --git a/tests/syndication_tests/tests.py b/tests/syndication_tests/tests.py index a68ed879db..76e8d375ae 100644 --- a/tests/syndication_tests/tests.py +++ b/tests/syndication_tests/tests.py @@ -718,5 +718,7 @@ def test_get_object(self): ) def test_get_non_existent_object(self): - response = self.client.get("/syndication/rss2/articles/0/") + response = self.client.get( + "/syndication/rss2/articles/000000000000000000000000/" + ) self.assertEqual(response.status_code, 404) diff --git a/tests/validation/test_unique.py b/tests/validation/test_unique.py index 36ee6e9da0..4121f58f1d 100644 --- a/tests/validation/test_unique.py +++ b/tests/validation/test_unique.py @@ -136,7 +136,9 @@ def test_primary_key_unique_check_not_performed_when_adding_and_pk_not_specified def test_primary_key_unique_check_performed_when_adding_and_pk_specified(self): # Regression test for #12560 with self.assertNumQueries(1): - mtv = ModelToValidate(number=10, name="Some Name", id=123) + mtv = ModelToValidate( + number=10, name="Some Name", id="000000000000000000000123" + ) setattr(mtv, "_adding", True) mtv.full_clean() diff --git a/tests/validation/tests.py b/tests/validation/tests.py index 6bb04f6f14..964b3f0eee 100644 --- a/tests/validation/tests.py +++ b/tests/validation/tests.py @@ -1,3 +1,5 @@ +from bson import ObjectId + from django import forms from django.core.exceptions import NON_FIELD_ERRORS from django.test import TestCase @@ -27,7 +29,9 @@ def test_custom_validate_method(self): self.assertFailsValidation(mtv.full_clean, [NON_FIELD_ERRORS, "name"]) def test_wrong_FK_value_raises_error(self): - mtv = ModelToValidate(number=10, name="Some Name", parent_id=3) + mtv = ModelToValidate( + number=10, name="Some Name", parent_id=ObjectId("000000000000000000000003") + ) self.assertFieldFailsValidationWithMessage( mtv.full_clean, "parent", diff --git a/tests/view_tests/tests/test_defaults.py b/tests/view_tests/tests/test_defaults.py index 66bc1da168..48af13119b 100644 --- a/tests/view_tests/tests/test_defaults.py +++ b/tests/view_tests/tests/test_defaults.py @@ -52,7 +52,9 @@ def setUpTestData(cls): author=author, date_created=datetime.datetime(2001, 1, 1, 21, 22, 23), ) - Site(id=1, domain="testserver", name="testserver").save() + Site( + id="000000000000000000000001", domain="testserver", name="testserver" + ).save() def test_page_not_found(self): "A 404 status is returned by the page_not_found view"