def testCanGetForObjectReference(self): # Can get version for proxy model proxy_versions = get_for_object_reference(ReversionTestModel1Proxy, self.proxy.id) self.assertEqual(len(proxy_versions), 2) self.assertEqual(proxy_versions[0].field_dict["name"], self.proxy.name) self.assertEqual(proxy_versions[1].field_dict["name"], self.concrete.name) # Can get the same version for concrete model concrete_versions = get_for_object_reference(ReversionTestModel1, self.concrete.id) self.assertEqual(list(concrete_versions), list(proxy_versions))
def testCanGetForObjectReference(self): # Test a model with an int pk. versions = get_for_object_reference(ReversionTestModel1, self.test11.pk) self.assertEqual(len(versions), 2) self.assertEqual(versions[0].field_dict["name"], "model1 instance1 version2") self.assertEqual(versions[1].field_dict["name"], "model1 instance1 version1") # Test a model with a str pk. versions = get_for_object_reference(ReversionTestModel2, self.test21.pk) self.assertEqual(len(versions), 2) self.assertEqual(versions[0].field_dict["name"], "model2 instance1 version2") self.assertEqual(versions[1].field_dict["name"], "model2 instance1 version1")
def testCanGetForObjectReference(self): # Can get version for proxy model proxy_versions = get_for_object_reference(ReversionTestModel1Proxy, self.proxy.id) self.assertEqual(len(proxy_versions), 2) self.assertEqual(proxy_versions[0].field_dict["name"], self.proxy.name) self.assertEqual(proxy_versions[1].field_dict["name"], self.concrete.name) # Can get the same version for concrete model concrete_versions = get_for_object_reference(ReversionTestModel1, self.concrete.id) self.assertEqual(list(concrete_versions), list(proxy_versions))
def testInlineAdmin(self): self.assertTrue(is_registered(InlineTestParentModel)) # make sure model is following the child FK self.assertTrue( 'children' in get_adapter(InlineTestParentModel).follow) parent_pk = self.createInlineObjects() # Check that the current version includes the inlines. versions = list( get_for_object_reference(InlineTestParentModel, parent_pk)) response = self.client.get( reverse("admin:test_reversion_inlinetestparentmodel_revision", args=(parent_pk, versions[0].pk))) self.assertContains(response, "parent version2") # Check parent model. self.assertContains( response, "non-generic child version 1") # Check inline child model. self.assertContains( response, "generic child version 1") # Check inline generic child model. # Check that the first version does not include the inlines. response = self.client.get( reverse("admin:test_reversion_inlinetestparentmodel_revision", args=(parent_pk, versions[1].pk))) self.assertContains(response, "parent version1") # Check parent model. self.assertNotContains( response, "non-generic child version 1") # Check inline child model. self.assertNotContains( response, "generic child version 1") # Check inline generic child model.
def testCanGetForObjectReference(self): # Test a model with an int pk. versions = get_for_object_reference(ReversionTestModel1, self.test11.pk) self.assertEqual(len(versions), 2) self.assertEqual(versions[0].field_dict["name"], "model1 instance1 version2") self.assertEqual(versions[1].field_dict["name"], "model1 instance1 version1") # Test a model with a str pk. versions = get_for_object_reference(ReversionTestModel2, self.test21.pk) self.assertEqual(len(versions), 2) self.assertEqual(versions[0].field_dict["name"], "model2 instance1 version2") self.assertEqual(versions[1].field_dict["name"], "model2 instance1 version1")
def testInlineProxyAdmin(self): self.assertTrue(is_registered(InlineTestParentModelProxy)) # make sure model is following the child FK self.assertTrue('children' in get_adapter(InlineTestParentModelProxy).follow) parent_pk = self.createInlineProxyObjects() # Check that the current version includes the inlines. versions = list(get_for_object_reference(InlineTestParentModelProxy, parent_pk)) response = self.client.get(reverse("admin:test_reversion_inlinetestparentmodelproxy_revision", args=(parent_pk, versions[0].pk))) self.assertContains(response, "parent version2") # Check parent model. self.assertContains(response, "non-generic child version 1") # Check inline child model. # Check that the first version does not include the inlines. response = self.client.get(reverse("admin:test_reversion_inlinetestparentmodelproxy_revision", args=(parent_pk, versions[1].pk))) self.assertContains(response, "parent version1") # Check parent model. self.assertNotContains(response, "non-generic child version 1") # Check inline child model.
def testRevisionSavedOnPost(self): self.assertEqual(ChildTestAdminModel.objects.count(), 0) # Create an instance via the admin. response = self.client.post("/admin/test_reversion/childtestadminmodel/add/", { "parent_name": "parent instance1 version1", "child_name": "child instance1 version1", "_continue": 1, }) self.assertEqual(response.status_code, 302) obj_pk = resolve(response["Location"].replace("http://testserver", "")).args[0] obj = ChildTestAdminModel.objects.get(id=obj_pk) # Check that a version is created. versions = get_for_object(obj) self.assertEqual(versions.count(), 1) self.assertEqual(versions[0].field_dict["parent_name"], "parent instance1 version1") self.assertEqual(versions[0].field_dict["child_name"], "child instance1 version1") # Save a new version. response = self.client.post(reverse("admin:test_reversion_childtestadminmodel_change", args=(obj_pk,)), { "parent_name": "parent instance1 version2", "child_name": "child instance1 version2", "_continue": 1, }) self.assertEqual(response.status_code, 302) # Check that a version is created. versions = get_for_object(obj) self.assertEqual(versions.count(), 2) self.assertEqual(versions[0].field_dict["parent_name"], "parent instance1 version2") self.assertEqual(versions[0].field_dict["child_name"], "child instance1 version2") # Check that the versions can be listed. response = self.client.get(reverse("admin:test_reversion_childtestadminmodel_history", args=(obj_pk,))) self.assertContains(response, "child instance1 version2") self.assertContains(response, "child instance1 version1") # Check that version data can be loaded. response = self.client.get(reverse("admin:test_reversion_childtestadminmodel_revision", args=(obj_pk, versions[1].pk))) self.assertContains(response, "parent instance1 version1") self.assertContains(response, "child instance1 version1") # Check that loading the version data didn't roll it back! obj = ChildTestAdminModel.objects.get(pk=obj.pk) self.assertEqual(obj.child_name, "child instance1 version2") self.assertEqual(obj.parent_name, "parent instance1 version2") self.assertEqual(get_for_object(obj).count(), 2) # Check that a version can be rolled back. response = self.client.post(reverse("admin:test_reversion_childtestadminmodel_revision", args=(obj_pk, versions[1].pk)), { "parent_name": "parent instance1 version3", "child_name": "child instance1 version3", }) self.assertEqual(response.status_code, 302) # Check that the models were rolled back. obj = ChildTestAdminModel.objects.get(pk=obj.pk) self.assertEqual(obj.child_name, "child instance1 version3") self.assertEqual(obj.parent_name, "parent instance1 version3") # Check that a version is created. versions = get_for_object(obj) self.assertEqual(versions.count(), 3) self.assertEqual(versions[0].field_dict["child_name"], "child instance1 version3") self.assertEqual(versions[0].field_dict["parent_name"], "parent instance1 version3") # Check that a deleted version can be viewed in the list. obj.delete() response = self.client.get("/admin/test_reversion/childtestadminmodel/recover/") self.assertContains(response, "child instance1 version3") # Check that a delete version can be viewed in detail. response = self.client.get(reverse("admin:test_reversion_childtestadminmodel_recover", args=(versions[0].pk,))) self.assertContains(response, "parent instance1 version3") self.assertContains(response, "child instance1 version3") # Check that a deleted version can be recovered. response = self.client.post(reverse("admin:test_reversion_childtestadminmodel_recover", args=(versions[0].pk,)), { "parent_name": "parent instance1 version4", "child_name": "child instance1 version4", }) # Check that the models were rolled back. obj = ChildTestAdminModel.objects.get(pk=obj_pk) self.assertEqual(obj.child_name, "child instance1 version4") self.assertEqual(obj.parent_name, "parent instance1 version4") # Check that a version is created. versions = get_for_object_reference(ChildTestAdminModel, obj_pk) self.assertEqual(versions.count(), 4) self.assertEqual(versions[0].field_dict["parent_name"], "parent instance1 version4") self.assertEqual(versions[0].field_dict["child_name"], "child instance1 version4")
def testRevisionSavedOnPost(self): self.assertEqual(ChildTestAdminModel.objects.count(), 0) # Create an instance via the admin. response = self.client.post( "/admin/test_reversion/childtestadminmodel/add/", { "parent_name": "parent instance1 version1", "child_name": "child instance1 version1", "_continue": 1, }) self.assertEqual(response.status_code, 302) obj_pk = resolve(response["Location"].replace("http://testserver", "")).args[0] obj = ChildTestAdminModel.objects.get(id=obj_pk) # Check that a version is created. versions = get_for_object(obj) self.assertEqual(versions.count(), 1) self.assertEqual(versions[0].field_dict["parent_name"], "parent instance1 version1") self.assertEqual(versions[0].field_dict["child_name"], "child instance1 version1") # Save a new version. response = self.client.post( reverse("admin:test_reversion_childtestadminmodel_change", args=(obj_pk, )), { "parent_name": "parent instance1 version2", "child_name": "child instance1 version2", "_continue": 1, }) self.assertEqual(response.status_code, 302) # Check that a version is created. versions = get_for_object(obj) self.assertEqual(versions.count(), 2) self.assertEqual(versions[0].field_dict["parent_name"], "parent instance1 version2") self.assertEqual(versions[0].field_dict["child_name"], "child instance1 version2") # Check that the versions can be listed. response = self.client.get( reverse("admin:test_reversion_childtestadminmodel_history", args=(obj_pk, ))) self.assertContains(response, "child instance1 version2") self.assertContains(response, "child instance1 version1") # Check that version data can be loaded. response = self.client.get( reverse("admin:test_reversion_childtestadminmodel_revision", args=(obj_pk, versions[1].pk))) self.assertContains(response, "parent instance1 version1") self.assertContains(response, "child instance1 version1") # Check that loading the version data didn't roll it back! obj = ChildTestAdminModel.objects.get(pk=obj.pk) self.assertEqual(obj.child_name, "child instance1 version2") self.assertEqual(obj.parent_name, "parent instance1 version2") self.assertEqual(get_for_object(obj).count(), 2) # Check that a version can be rolled back. response = self.client.post( reverse("admin:test_reversion_childtestadminmodel_revision", args=(obj_pk, versions[1].pk)), { "parent_name": "parent instance1 version3", "child_name": "child instance1 version3", }) self.assertEqual(response.status_code, 302) # Check that the models were rolled back. obj = ChildTestAdminModel.objects.get(pk=obj.pk) self.assertEqual(obj.child_name, "child instance1 version3") self.assertEqual(obj.parent_name, "parent instance1 version3") # Check that a version is created. versions = get_for_object(obj) self.assertEqual(versions.count(), 3) self.assertEqual(versions[0].field_dict["child_name"], "child instance1 version3") self.assertEqual(versions[0].field_dict["parent_name"], "parent instance1 version3") # Check that a deleted version can be viewed in the list. obj.delete() response = self.client.get( "/admin/test_reversion/childtestadminmodel/recover/") self.assertContains(response, "child instance1 version3") # Check that a delete version can be viewed in detail. response = self.client.get( reverse("admin:test_reversion_childtestadminmodel_recover", args=(versions[0].pk, ))) self.assertContains(response, "parent instance1 version3") self.assertContains(response, "child instance1 version3") # Check that a deleted version can be recovered. response = self.client.post( reverse("admin:test_reversion_childtestadminmodel_recover", args=(versions[0].pk, )), { "parent_name": "parent instance1 version4", "child_name": "child instance1 version4", }) # Check that the models were rolled back. obj = ChildTestAdminModel.objects.get(pk=obj_pk) self.assertEqual(obj.child_name, "child instance1 version4") self.assertEqual(obj.parent_name, "parent instance1 version4") # Check that a version is created. versions = get_for_object_reference(ChildTestAdminModel, obj_pk) self.assertEqual(versions.count(), 4) self.assertEqual(versions[0].field_dict["parent_name"], "parent instance1 version4") self.assertEqual(versions[0].field_dict["child_name"], "child instance1 version4")