X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/d6c4fb901ad64f828287556a26daab52449dab32..404bfe407798a8a83fa02dc1742a315400b7c00b:/lib/test_vstorage.py?ds=inline diff --git a/lib/test_vstorage.py b/lib/test_vstorage.py index 87b9a949..23375f06 100644 --- a/lib/test_vstorage.py +++ b/lib/test_vstorage.py @@ -1,5 +1,9 @@ #!/usr/bin/python # -*- coding: utf-8 -*- +# +# This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# import os import tempfile @@ -8,6 +12,8 @@ from nose.core import runmodule import vstorage +NULL_PARENT = -1 + def clear_directory(top): for root, dirs, files in os.walk(top, topdown=False): @@ -25,50 +31,54 @@ class TestVersionedStorage(object): def setUp(self): self.repo_path = tempfile.mkdtemp() self.repo = vstorage.VersionedStorage(self.repo_path) - + def tearDown(self): clear_directory(self.repo_path) - + def test_save_text(self): text = u"test text" title = u"test title" author = u"test author" comment = u"test comment" - - self.repo.save_text(title = title, - text = text, author = author, - comment = comment, parent=-1) - + + self.repo.save_text( + title=title, + text=text, + author=author, + comment=comment, + parent=NULL_PARENT, + ) + saved = self.repo.open_page(title).read() - assert saved == text + assert_equal(saved, text) def test_save_text_noparent(self): text = u"test text" title = u"test title" author = u"test author" comment = u"test comment" - - self.repo.save_text(title = title, - text = text, author = author, - comment = comment, parent=None) - + + self.repo.save_text(title=title, + text=text, author=author, + comment=comment, parent=None) + saved = self.repo.open_page(title).read() - assert saved == text + assert_equal(saved, text) def test_save_merge_no_conflict(self): text = u"test\ntext" title = u"test title" author = u"test author" comment = u"test comment" - self.repo.save_text(title = title, - text = text, author = author, - comment = comment, parent=-1) - self.repo.save_text(title = title, - text = text, author = author, - comment = comment, parent=-1) + self.repo.save_text(title=title, + text=text, author=author, + comment=comment, parent=NULL_PARENT) + self.repo.save_text(title=title, + text=text, author=author, + comment=comment, parent=NULL_PARENT) saved = self.repo.open_page(title).read() - assert saved == text - + assert_equal(saved, text) + def test_save_merge_line_conflict(self): text = u"test\ntest\n" text1 = u"test\ntext\n" @@ -76,21 +86,21 @@ class TestVersionedStorage(object): title = u"test title" author = u"test author" comment = u"test comment" - - self.repo.save_text(title = title, - text = text, author = author, - comment = comment, parent=-1) - - self.repo.save_text(title = title, - text = text1, author = author, - comment = comment, parent=0) - - self.repo.save_text(title = title, - text = text2, author = author, - comment = comment, parent=0) - + + self.repo.save_text(title=title, + text=text, author=author, + comment=comment, parent=NULL_PARENT) + + self.repo.save_text(title=title, + text=text1, author=author, + comment=comment, parent=0) + + self.repo.save_text(title=title, + text=text2, author=author, + comment=comment, parent=0) + saved = self.repo.open_page(title).read() - + # Other conflict markers placement can also be correct assert_equal(saved, u'''\ text @@ -101,20 +111,19 @@ text >>>>>>> other ''') - def test_delete(self): text = u"text test" title = u"test title" author = u"test author" comment = u"test comment" - self.repo.save_text(title = title, - text = text, author = author, - comment = comment, parent=-1) - + self.repo.save_text(title=title, + text=text, author=author, + comment=comment, parent=NULL_PARENT) + assert title in self.repo - + self.repo.delete_page(title, author, comment) - + assert title not in self.repo @raises(vstorage.DocumentNotFound) @@ -122,11 +131,88 @@ text self.repo.open_page(u'unknown entity') def test_open_existing_repository(self): - self.repo.save_text(title = u'Python!', text = u'ham and spam') + self.repo.save_text(title=u'Python!', text=u'ham and spam') current_repo_revision = self.repo.repo_revision() same_repo = vstorage.VersionedStorage(self.repo_path) - assert same_repo.repo_revision() == current_repo_revision + assert_equal(same_repo.repo_revision(), current_repo_revision) + + def test_history(self): + COMMITS = [ + {"author": "bunny", "text":"1", "comment": "Oh yeah!"}, + {"author": "frank", "text":"2", "comment": "Second is the best!"}, + {"text":"3", "comment": "Third"}, + {"author": "welma", "text":"4", "comment": "Fourth"}, + ] + + for commit in COMMITS: + self.repo.save_text(title=u"Sample", **commit) + + for n, entry in enumerate(reversed(list(self.repo.page_history(u"Sample")))): + assert_equal(entry["version"], n) + assert_equal(entry["author"], COMMITS[n].get("author", "anonymous")) + assert_equal(entry["description"], COMMITS[n]["comment"]) + assert_equal(entry["tag"], []) + + +class TestVSTags(object): + + TITLE_1 = "Sample" + + COMMITS = [ + {"author": "bunny", "text":"1", "comment": "Oh yeah!"}, + {"author": "frank", "text":"2", "comment": "Second is the best!"}, + {"text":"3", "comment": "Third"}, + {"author": "welma", "text":"4", "comment": "Fourth"}, + ] + + def setUp(self): + self.repo_path = tempfile.mkdtemp() + self.repo = vstorage.VersionedStorage(self.repo_path) + + # generate some history + for commit in self.COMMITS: + self.repo.save_text(title=u"Sample", **commit) + + # verify + for n, entry in enumerate(reversed(list(self.repo.page_history(self.TITLE_1)))): + assert_equal(entry["tag"], []) + + def tearDown(self): + clear_directory(self.repo_path) + + def test_add_tag(self): + TAG_USER = "mike_the_tagger" + TAG_NAME = "production" + TAG_VERSION = 2 + + # Add tag + self.repo.add_page_tag(self.TITLE_1, TAG_VERSION, TAG_NAME, TAG_USER) + + # check history again + history = list(self.repo.page_history(self.TITLE_1)) + for entry in reversed(history): + if entry["version"] == TAG_VERSION: + assert_equal(entry["tag"], [TAG_NAME]) + else: + assert_equal(entry["tag"], []) + + def test_add_many_tags(self): + TAG_USER = "mike_the_tagger" + tags = [ + (2, "production", "mike"), + (2, "finished", "jeremy"), + (0, "original", "jeremy"), + ] + + for rev, name, user in tags: + self.repo.add_page_tag(self.TITLE_1, rev, name, user) + + # check history again + history = list(self.repo.page_history(self.TITLE_1)) + for entry in reversed(history): + expected = [tag[1] for tag in tags if tag[0] == entry["version"]] + assert_equal(set(entry["tag"]), set(expected)) if __name__ == '__main__': - runmodule() \ No newline at end of file + runmodule()