def test_add_m2m(self): with reversion_api.create_revision(): new_pet = Pet.objects.create(name="added pet") self.person.pets.add(new_pet) self.person.save() reversion_api.set_comment("version 3: add a pet") self.assertEqual(reversion_api.Revision.objects.all().count(), 3) self.assertEqual(reversion_api.Version.objects.all().count(), 12) queryset = reversion_api.get_for_object(self.person) version_ids = queryset.values_list("pk", flat=True) self.assertEqual(len(version_ids), 3) response = self.client.get("/admin/tests/person/%s/history/" % self.person.pk) # debug_response(response) # from django-tools self.assertContainsHtml( response, '<input type="submit" value="compare">', '<input type="radio" name="version_id1" value="%i" style="visibility:hidden" />' % version_ids[0], '<input type="radio" name="version_id2" value="%i" checked="checked" />' % version_ids[0], '<input type="radio" name="version_id1" value="%i" checked="checked" />' % version_ids[1], '<input type="radio" name="version_id2" value="%i" />' % version_ids[1], '<input type="radio" name="version_id2" value="%i" />' % version_ids[2], '<input type="radio" name="version_id2" value="%i" />' % version_ids[2], ) response = self.client.get("/admin/tests/person/%s/history/compare/" % self.person.pk, data={ "version_id2": version_ids[0], "version_id1": version_ids[1] }) # debug_response(response) # from django-tools self.assertContainsHtml( response, """ <p class="highlight"> <ins>+ added pet</ins><br /> Is changed pet<br /> always the same pet<br /> </p> """, "<blockquote>version 3: add a pet</blockquote>", # edit comment ) self.assertNotContainsHtml( response, "<h3>name</h3>", # person name doesn't changed 'class="follow"' # All fields are under reversion control )
def test_m2m_not_changed(self): with reversion_api.create_revision(): self.person.name = "David" self.person.save() reversion_api.set_comment("version 3: change the name") self.assertEqual(reversion_api.Revision.objects.all().count(), 3) self.assertEqual(reversion_api.Version.objects.all().count(), 11) queryset = reversion_api.get_for_object(self.person) version_ids = queryset.values_list("pk", flat=True) self.assertEqual(len(version_ids), 3) response = self.client.get("/admin/tests/person/%s/history/" % self.person.pk) # debug_response(response) # from django-tools self.assertContainsHtml( response, '<input type="submit" value="compare">', '<input type="radio" name="version_id1" value="%i" style="visibility:hidden" />' % version_ids[0], '<input type="radio" name="version_id2" value="%i" checked="checked" />' % version_ids[0], '<input type="radio" name="version_id1" value="%i" checked="checked" />' % version_ids[1], '<input type="radio" name="version_id2" value="%i" />' % version_ids[1], '<input type="radio" name="version_id2" value="%i" />' % version_ids[2], '<input type="radio" name="version_id2" value="%i" />' % version_ids[2], ) response = self.client.get("/admin/tests/person/%s/history/compare/" % self.person.pk, data={ "version_id2": version_ids[0], "version_id1": version_ids[1] }) # debug_response(response) # from django-tools self.assertContainsHtml( response, ''' <p><pre class="highlight"> <del>- Dave</del> <ins>+ David</ins> </pre></p> ''', "<blockquote>version 3: change the name</blockquote>", # edit comment ) self.assertNotContainsHtml( response, "pet", 'class="follow"' # All fields are under reversion control )
def create_PersonIdentity_data(self): with reversion_api.create_revision(): person = Person.objects.create(name="Dave") identity = Identity.objects.create(id_numer="1234", person=person) if self.verbose: print("version 1:", person, identity) with reversion_api.create_revision(): person.name = "John" person.save() reversion_api.set_comment("version 2: change person name.") return person, identity
def test_add_m2m(self): with reversion_api.create_revision(): new_pet = Pet.objects.create(name="added pet") self.person.pets.add(new_pet) self.person.save() reversion_api.set_comment("version 3: add a pet") self.assertEqual(reversion_api.Revision.objects.all().count(), 3) self.assertEqual(reversion_api.Version.objects.all().count(), 12) queryset = reversion_api.get_for_object(self.person) version_ids = queryset.values_list("pk", flat=True) self.assertEqual(len(version_ids), 3) response = self.client.get("/admin/tests/person/%s/history/" % self.person.pk) # debug_response(response) # from django-tools self.assertContainsHtml(response, '<input type="submit" value="compare">', '<input type="radio" name="version_id1" value="%i" style="visibility:hidden" />' % version_ids[0], '<input type="radio" name="version_id2" value="%i" checked="checked" />' % version_ids[0], '<input type="radio" name="version_id1" value="%i" checked="checked" />' % version_ids[1], '<input type="radio" name="version_id2" value="%i" />' % version_ids[1], '<input type="radio" name="version_id2" value="%i" />' % version_ids[2], '<input type="radio" name="version_id2" value="%i" />' % version_ids[2], ) response = self.client.get( "/admin/tests/person/%s/history/compare/" % self.person.pk, data={"version_id2":version_ids[0], "version_id1":version_ids[1]} ) # debug_response(response) # from django-tools self.assertContainsHtml(response, """ <p class="highlight"> <ins>+ added pet</ins><br /> Is changed pet<br /> always the same pet<br /> </p> """, "<blockquote>version 3: add a pet</blockquote>", # edit comment ) self.assertNotContainsHtml(response, "<h3>name</h3>", # person name doesn't changed 'class="follow"'# All fields are under reversion control )
def test_m2m_not_changed(self): with reversion_api.create_revision(): self.person.name = "David" self.person.save() reversion_api.set_comment("version 3: change the name") self.assertEqual(reversion_api.Revision.objects.all().count(), 3) self.assertEqual(reversion_api.Version.objects.all().count(), 11) queryset = reversion_api.get_for_object(self.person) version_ids = queryset.values_list("pk", flat=True) self.assertEqual(len(version_ids), 3) response = self.client.get("/admin/tests/person/%s/history/" % self.person.pk) # debug_response(response) # from django-tools self.assertContainsHtml(response, '<input type="submit" value="compare">', '<input type="radio" name="version_id1" value="%i" style="visibility:hidden" />' % version_ids[0], '<input type="radio" name="version_id2" value="%i" checked="checked" />' % version_ids[0], '<input type="radio" name="version_id1" value="%i" checked="checked" />' % version_ids[1], '<input type="radio" name="version_id2" value="%i" />' % version_ids[1], '<input type="radio" name="version_id2" value="%i" />' % version_ids[2], '<input type="radio" name="version_id2" value="%i" />' % version_ids[2], ) response = self.client.get( "/admin/tests/person/%s/history/compare/" % self.person.pk, data={"version_id2":version_ids[0], "version_id1":version_ids[1]} ) # debug_response(response) # from django-tools self.assertContainsHtml(response, ''' <p><pre class="highlight"> <del>- Dave</del> <ins>+ David</ins> </pre></p> ''', "<blockquote>version 3: change the name</blockquote>", # edit comment ) self.assertNotContainsHtml(response, "pet", 'class="follow"'# All fields are under reversion control )
def create_Simple_data(self): with reversion_api.create_revision(): item1 = SimpleModel.objects.create(text="version one") if self.verbose: print("version 1:", item1) with reversion_api.create_revision(): item1.text = "version two" item1.save() reversion_api.set_comment("simply change the CharField text.") if self.verbose: print("version 2:", item1) for no in range(5): with reversion_api.create_revision(): if no==0: item2 = SimpleModel.objects.create(text="v0") reversion_api.set_comment("create v%i" % no) else: item2.text = "v%i" % no item2.save() reversion_api.set_comment("change to v%i" % no) return item1, item2
def create_Simple_data(self): with reversion_api.create_revision(): item1 = SimpleModel.objects.create(text="version one") if self.verbose: print("version 1:", item1) with reversion_api.create_revision(): item1.text = "version two" item1.save() reversion_api.set_comment("simply change the CharField text.") if self.verbose: print("version 2:", item1) for no in range(5): with reversion_api.create_revision(): if no == 0: item2 = SimpleModel.objects.create(text="v0") reversion_api.set_comment("create v%i" % no) else: item2.text = "v%i" % no item2.save() reversion_api.set_comment("change to v%i" % no) return item1, item2
def create_PersonPet_data(self): with reversion_api.create_revision(): pet1 = Pet.objects.create(name="would be changed pet") pet2 = Pet.objects.create(name="would be deleted pet") pet3 = Pet.objects.create(name="would be removed pet") pet4 = Pet.objects.create(name="always the same pet") person = Person.objects.create(name="Dave") person.pets.add(pet1, pet2, pet3, pet4) person.save() reversion_api.set_comment("initial version 1") if self.verbose: print("version 1:", person, person.pets.all()) # Dave [<Pet: would be changed pet>, <Pet: would be deleted pet>, <Pet: would be removed pet>, <Pet: always the same pet>] """ 1 to 2 diff: "pets" ManyToManyField: would be changed pet -> Is changed pet - would be removed pet - would be deleted pet = always the same pet """ with reversion_api.create_revision(): pet1.name = "Is changed pet" pet1.save() pet2.delete() person.pets.remove(pet3) person.save() reversion_api.set_comment("version 2: change follow related pets.") if self.verbose: print("version 2:", person, person.pets.all()) # Dave [<Pet: Is changed pet>, <Pet: always the same pet>] return pet1, pet2, person
def create_VariantModel_data(self): with reversion_api.create_revision(): item = VariantModel.objects.create( boolean = False, null_boolean = None, char = "a", text = "Foo 'one'", # skip: models.SlugField() integer = 0, integers = "1,2,3", # CommaSeparatedIntegerField positive_integer = 1, big_integer = (-BigIntegerField.MAX_BIGINT - 1), # skip: # models.PositiveSmallIntegerField() # models.SmallIntegerField() time = datetime.time(hour=20, minute=15), date = datetime.date(year=1941, month=5, day=12), # Z3 was presented in germany ;) # PyLucid v0.0.1 release date: datetime = datetime.datetime(year=2005, month=8, day=19, hour=8, minute=13, second=24), decimal = Decimal('1.23456789'), float = 2.345, email = "*****@*****.**", url = "http://www.pylucid.org/", filepath = os.path.join(settings.UNITTEST_TEMP_PATH, "foo"), ip_address = "192.168.0.1", # skip: models.GenericIPAddressField() ) reversion_api.set_comment("initial version") test_data = ( ("boolean", True), ("null_boolean", True), ("null_boolean", False), ("char", "B"), ("text", "Bar 'two'"), # skip: models.SlugField() ("integer", -1), ("integers", "2,3,4"), # CommaSeparatedIntegerField ("positive_integer", 3), ("big_integer", BigIntegerField.MAX_BIGINT), # models.PositiveSmallIntegerField() # models.SmallIntegerField() ("time", datetime.time(hour=19, minute=30)), ("date", datetime.date(year=2099, month=12, day=31)), ("datetime", datetime.datetime(year=2000, month=1, day=1, hour=0, minute=0, second=1)), ("decimal", Decimal('3.1415926535')), ("float", 3.1415), ("email", "*****@*****.**"), ("url", "https://github.com/jedie/"), ("filepath", os.path.join(settings.UNITTEST_TEMP_PATH, "bar")), ("ip_address", "10.0.0.0"), ) for no, (field_name, value) in enumerate(test_data): with reversion_api.create_revision(): setattr(item, field_name, value) item.save() reversion_api.set_comment("%i change: %r field." % (no, field_name)) return item, test_data
def create_Factory_reverse_relation_data(self): from django.db import transaction with transaction.atomic(), reversion_api.create_revision(): manufacturer = Factory.objects.create(name="factory one", address="1 Fake Plaza") different_manufacturer = Factory.objects.create(name="factory two", address="1 Fake Plaza") car1 = Car.objects.create( name="motor-car one", manufacturer=manufacturer ) car2 = Car.objects.create( name="motor-car two", manufacturer=manufacturer ) car3 = Car.objects.create( name="motor-car three", manufacturer=manufacturer ) car1.save() car2.save() car3.save() manufacturer.save() reversion_api.set_comment("initial version 1") if self.verbose: print("version 1:", manufacturer) # Factory One """ 1 to 2 diff: "manufacture" ForeignKey: "factory one" -> "factory I" "supplier" ManyToManyField: + new, would be renamed supplier - would be deleted supplier - would be removed supplier = always the same supplier """ with transaction.atomic(), reversion_api.create_revision(): car3.delete() car4 = Car.objects.create( name="motor-car four", manufacturer=manufacturer ) car4.save() worker1 = Person.objects.create( name="Bob Bobertson", workplace=manufacturer ) manufacturer.save() reversion_api.set_comment("version 2: discontinued car-three, add car-four, add Bob the worker") if self.verbose: print("version 2:", manufacturer) # motor-car one from factory I supplier(s): always the same supplier, new, would be renamed supplier """ 2 to 3 diff: "name" CharField: "motor-car one" -> "motor-car II" "manufacture" ForeignKey: "factory I" -> "factory II" "supplier" ManyToManyField: new, would be renamed supplier -> not new anymore supplier = always the same supplier """ with transaction.atomic(), reversion_api.create_revision(): car2.manufacturer = different_manufacturer car2.save() manufacturer.save() reversion_api.set_comment("version 3: car2 now built by someone else.") if self.verbose: print("version 3:", manufacturer) # version 3: motor-car II from factory II supplier(s): always the same supplier, not new anymore supplier return manufacturer
def create_FactoryCar_data(self): with reversion_api.create_revision(): manufacture = Factory.objects.create(name="factory one", address="1 Fake Plaza") supplier1 = Factory.objects.create(name="always the same supplier", address="1 Fake Plaza") supplier2 = Factory.objects.create(name="would be deleted supplier", address="1 Fake Plaza") supplier3 = Factory.objects.create(name="would be removed supplier", address="1 Fake Plaza") car = Car.objects.create( name="motor-car one", manufacturer=manufacture ) car.supplier.add(supplier1, supplier2, supplier3) car.save() reversion_api.set_comment("initial version 1") if self.verbose: print("version 1:", car) # motor-car one from factory one supplier(s): always the same supplier, would be deleted supplier, would be removed supplier """ 1 to 2 diff: "manufacture" ForeignKey: "factory one" -> "factory I" "supplier" ManyToManyField: + new, would be renamed supplier - would be deleted supplier - would be removed supplier = always the same supplier """ with reversion_api.create_revision(): manufacture.name = "factory I" manufacture.save() supplier2.delete() # - would be deleted supplier supplier4 = Factory.objects.create(name="new, would be renamed supplier", address="1 Fake Plaza") car.supplier.add(supplier4) # + new, would be renamed supplier car.supplier.remove(supplier3) # - would be removed supplier car.save() reversion_api.set_comment("version 2: change ForeignKey and ManyToManyField.") if self.verbose: print("version 2:", car) # motor-car one from factory I supplier(s): always the same supplier, new, would be renamed supplier """ 2 to 3 diff: "name" CharField: "motor-car one" -> "motor-car II" "manufacture" ForeignKey: "factory I" -> "factory II" "supplier" ManyToManyField: new, would be renamed supplier -> not new anymore supplier = always the same supplier """ with reversion_api.create_revision(): car.name = "motor-car II" manufacture.name = "factory II" supplier4.name = "not new anymore supplier" supplier4.save() car.save() reversion_api.set_comment("version 3: change CharField, ForeignKey and ManyToManyField.") if self.verbose: print("version 3:", car) # version 3: motor-car II from factory II supplier(s): always the same supplier, not new anymore supplier return car
def create_VariantModel_data(self): with reversion_api.create_revision(): item = VariantModel.objects.create( boolean=False, null_boolean=None, char="a", text="Foo 'one'", # skip: models.SlugField() integer=0, integers="1,2,3", # CommaSeparatedIntegerField positive_integer=1, big_integer=(-BigIntegerField.MAX_BIGINT - 1), # skip: # models.PositiveSmallIntegerField() # models.SmallIntegerField() time=datetime.time(hour=20, minute=15), date=datetime.date(year=1941, month=5, day=12), # Z3 was presented in germany ;) # PyLucid v0.0.1 release date: datetime=datetime.datetime(year=2005, month=8, day=19, hour=8, minute=13, second=24), decimal=Decimal('1.23456789'), float=2.345, email="*****@*****.**", url="http://www.pylucid.org/", filepath=os.path.join(settings.UNITTEST_TEMP_PATH, "foo"), ip_address="192.168.0.1", # skip: models.GenericIPAddressField() ) reversion_api.set_comment("initial version") test_data = ( ("boolean", True), ("null_boolean", True), ("null_boolean", False), ("char", "B"), ("text", "Bar 'two'"), # skip: models.SlugField() ("integer", -1), ("integers", "2,3,4"), # CommaSeparatedIntegerField ("positive_integer", 3), ("big_integer", BigIntegerField.MAX_BIGINT), # models.PositiveSmallIntegerField() # models.SmallIntegerField() ("time", datetime.time(hour=19, minute=30)), ("date", datetime.date(year=2099, month=12, day=31)), ("datetime", datetime.datetime(year=2000, month=1, day=1, hour=0, minute=0, second=1)), ("decimal", Decimal('3.1415926535')), ("float", 3.1415), ("email", "*****@*****.**"), ("url", "https://github.com/jedie/"), ("filepath", os.path.join(settings.UNITTEST_TEMP_PATH, "bar")), ("ip_address", "10.0.0.0"), ) for no, (field_name, value) in enumerate(test_data): with reversion_api.create_revision(): setattr(item, field_name, value) item.save() reversion_api.set_comment("%i change: %r field." % (no, field_name)) return item, test_data
def create_Factory_reverse_relation_data(self): from django.db import transaction with transaction.atomic(), reversion_api.create_revision(): manufacturer = Factory.objects.create(name="factory one", address="1 Fake Plaza") different_manufacturer = Factory.objects.create( name="factory two", address="1 Fake Plaza") car1 = Car.objects.create(name="motor-car one", manufacturer=manufacturer) car2 = Car.objects.create(name="motor-car two", manufacturer=manufacturer) car3 = Car.objects.create(name="motor-car three", manufacturer=manufacturer) car1.save() car2.save() car3.save() manufacturer.save() reversion_api.set_comment("initial version 1") if self.verbose: print("version 1:", manufacturer) # Factory One """ 1 to 2 diff: "manufacture" ForeignKey: "factory one" -> "factory I" "supplier" ManyToManyField: + new, would be renamed supplier - would be deleted supplier - would be removed supplier = always the same supplier """ with transaction.atomic(), reversion_api.create_revision(): car3.delete() car4 = Car.objects.create(name="motor-car four", manufacturer=manufacturer) car4.save() worker1 = Person.objects.create(name="Bob Bobertson", workplace=manufacturer) manufacturer.save() reversion_api.set_comment( "version 2: discontinued car-three, add car-four, add Bob the worker" ) if self.verbose: print("version 2:", manufacturer) # motor-car one from factory I supplier(s): always the same supplier, new, would be renamed supplier """ 2 to 3 diff: "name" CharField: "motor-car one" -> "motor-car II" "manufacture" ForeignKey: "factory I" -> "factory II" "supplier" ManyToManyField: new, would be renamed supplier -> not new anymore supplier = always the same supplier """ with transaction.atomic(), reversion_api.create_revision(): car2.manufacturer = different_manufacturer car2.save() manufacturer.save() reversion_api.set_comment( "version 3: car2 now built by someone else.") if self.verbose: print("version 3:", manufacturer) # version 3: motor-car II from factory II supplier(s): always the same supplier, not new anymore supplier return manufacturer
def create_FactoryCar_data(self): with reversion_api.create_revision(): manufacture = Factory.objects.create(name="factory one", address="1 Fake Plaza") supplier1 = Factory.objects.create(name="always the same supplier", address="1 Fake Plaza") supplier2 = Factory.objects.create( name="would be deleted supplier", address="1 Fake Plaza") supplier3 = Factory.objects.create( name="would be removed supplier", address="1 Fake Plaza") car = Car.objects.create(name="motor-car one", manufacturer=manufacture) car.supplier.add(supplier1, supplier2, supplier3) car.save() reversion_api.set_comment("initial version 1") if self.verbose: print("version 1:", car) # motor-car one from factory one supplier(s): always the same supplier, would be deleted supplier, would be removed supplier """ 1 to 2 diff: "manufacture" ForeignKey: "factory one" -> "factory I" "supplier" ManyToManyField: + new, would be renamed supplier - would be deleted supplier - would be removed supplier = always the same supplier """ with reversion_api.create_revision(): manufacture.name = "factory I" manufacture.save() supplier2.delete() # - would be deleted supplier supplier4 = Factory.objects.create( name="new, would be renamed supplier", address="1 Fake Plaza") car.supplier.add(supplier4) # + new, would be renamed supplier car.supplier.remove(supplier3) # - would be removed supplier car.save() reversion_api.set_comment( "version 2: change ForeignKey and ManyToManyField.") if self.verbose: print("version 2:", car) # motor-car one from factory I supplier(s): always the same supplier, new, would be renamed supplier """ 2 to 3 diff: "name" CharField: "motor-car one" -> "motor-car II" "manufacture" ForeignKey: "factory I" -> "factory II" "supplier" ManyToManyField: new, would be renamed supplier -> not new anymore supplier = always the same supplier """ with reversion_api.create_revision(): car.name = "motor-car II" manufacture.name = "factory II" supplier4.name = "not new anymore supplier" supplier4.save() car.save() reversion_api.set_comment( "version 3: change CharField, ForeignKey and ManyToManyField.") if self.verbose: print("version 3:", car) # version 3: motor-car II from factory II supplier(s): always the same supplier, not new anymore supplier return car