def test_revert_call_gc_hook(self): textfile = VersionedTextFile(data=SAMPLE_TEXT) textfile.save() textfile_ids = [textfile.id] for _ in range(10): textfile = textfile.update(factory.make_string()) textfile_ids.append(textfile.id) # gc_hook only runs when there is something to revert to so # make sure we're actually reverting revert_to = random.choice(textfile_ids[:-1]) reverted_ids = [] remaining_ids = [] reverted_or_remaining = remaining_ids for i in textfile_ids: reverted_or_remaining.append(i) if i == revert_to: reverted_or_remaining = reverted_ids gc_hook = Mock() textfile = textfile.revert(revert_to, gc_hook=gc_hook) for i in reverted_ids: self.assertRaises( VersionedTextFile.DoesNotExist, VersionedTextFile.objects.get, id=i, ) for i in remaining_ids: self.assertIsNotNone(VersionedTextFile.objects.get(id=i)) self.assertThat(gc_hook, MockCalledOnceWith(textfile))
def test_revert_by_id_with_garbage_collection(self): textfile = VersionedTextFile(data=SAMPLE_TEXT) textfile.save() textfile_ids = [textfile.id] for _ in range(10): textfile = textfile.update(factory.make_string()) textfile_ids.append(textfile.id) revert_to = random.choice(textfile_ids) reverted_ids = [] remaining_ids = [] reverted_or_remaining = remaining_ids for i in textfile_ids: reverted_or_remaining.append(i) if i == revert_to: reverted_or_remaining = reverted_ids self.assertEquals( VersionedTextFile.objects.get(id=revert_to), textfile.revert(revert_to), ) for i in reverted_ids: self.assertRaises( VersionedTextFile.DoesNotExist, VersionedTextFile.objects.get, id=i, ) for i in remaining_ids: self.assertIsNotNone(VersionedTextFile.objects.get(id=i))
def test_revert_zero_does_nothing(self): textfile = VersionedTextFile(data=SAMPLE_TEXT) textfile.save() textfile_ids = [textfile.id] for _ in range(10): textfile = textfile.update(factory.make_string()) textfile_ids.append(textfile.id) self.assertEquals(textfile, textfile.revert(0)) self.assertItemsEqual(textfile_ids, [f.id for f in textfile.previous_versions()])
def test_revert_by_negative_without_garbage_collection(self): textfile = VersionedTextFile(data=SAMPLE_TEXT) textfile.save() textfile_ids = [textfile.id] for _ in range(10): textfile = textfile.update(factory.make_string()) textfile_ids.append(textfile.id) revert_to = random.randint(-10, -1) self.assertEquals(textfile_ids[revert_to - 1], textfile.revert(revert_to, False).id) for i in textfile_ids: self.assertIsNotNone(VersionedTextFile.objects.get(id=i))
def test_revert_by_negative_with_garbage_collection(self): textfile = VersionedTextFile(data=SAMPLE_TEXT) textfile.save() textfile_ids = [textfile.id] for _ in range(10): textfile = textfile.update(factory.make_string()) textfile_ids.append(textfile.id) revert_to = random.randint(-10, -1) reverted_ids = textfile_ids[revert_to:] remaining_ids = textfile_ids[:revert_to] self.assertEquals(textfile_ids[revert_to - 1], textfile.revert(revert_to).id) for i in reverted_ids: self.assertRaises(VersionedTextFile.DoesNotExist, VersionedTextFile.objects.get, id=i) for i in remaining_ids: self.assertIsNotNone(VersionedTextFile.objects.get(id=i))