fix overwriting of saved state.
[redakcja.git] / lib / vstorage / tests.py
index 23375f0..25e2b06 100644 (file)
@@ -12,9 +12,6 @@ from nose.core import runmodule
 
 import vstorage
 
-NULL_PARENT = -1
-
-
 def clear_directory(top):
     for root, dirs, files in os.walk(top, topdown=False):
         for name in files:
@@ -46,11 +43,12 @@ class TestVersionedStorage(object):
             text=text,
             author=author,
             comment=comment,
-            parent=NULL_PARENT,
+            parent=None,
         )
 
-        saved = self.repo.open_page(title).read()
-        assert_equal(saved, text)
+        saved_text, rev = self.repo.page_text(title)
+        assert_equal(saved_text, text)
+        assert_equal(rev, 0)
 
     def test_save_text_noparent(self):
         text = u"test text"
@@ -62,8 +60,10 @@ class TestVersionedStorage(object):
                     text=text, author=author,
                     comment=comment, parent=None)
 
-        saved = self.repo.open_page(title).read()
-        assert_equal(saved, text)
+
+        saved_text, rev = self.repo.page_text(title)
+        assert_equal(saved_text, text)
+        assert_equal(rev, 0)
 
     def test_save_merge_no_conflict(self):
         text = u"test\ntext"
@@ -72,12 +72,14 @@ class TestVersionedStorage(object):
         comment = u"test comment"
         self.repo.save_text(title=title,
                     text=text, author=author,
-                    comment=comment, parent=NULL_PARENT)
+                    comment=comment, parent=None)
         self.repo.save_text(title=title,
                     text=text, author=author,
-                    comment=comment, parent=NULL_PARENT)
-        saved = self.repo.open_page(title).read()
-        assert_equal(saved, text)
+                    comment=comment, parent=None)
+
+        saved_text, rev = self.repo.page_text(title)
+        assert_equal(saved_text, text)
+        assert_equal(rev, 0)
 
     def test_save_merge_line_conflict(self):
         text = u"test\ntest\n"
@@ -89,20 +91,27 @@ class TestVersionedStorage(object):
 
         self.repo.save_text(title=title,
                     text=text, author=author,
-                    comment=comment, parent=NULL_PARENT)
+                    comment=comment, parent=None)
+
+        saved_text, rev = self.repo.page_text(title)
+        assert_equal(saved_text, text)
+        assert_equal(rev, 0)
 
         self.repo.save_text(title=title,
                     text=text1, author=author,
                     comment=comment, parent=0)
 
+        saved_text, rev = self.repo.page_text(title)
+        assert_equal(saved_text, text1)
+        assert_equal(rev, 1)
+
         self.repo.save_text(title=title,
                     text=text2, author=author,
                     comment=comment, parent=0)
 
-        saved = self.repo.open_page(title).read()
-
+        saved_text, rev = self.repo.page_text(title)
         # Other conflict markers placement can also be correct
-        assert_equal(saved, u'''\
+        assert_equal(saved_text, u'''\
 text
 test
 <<<<<<< local
@@ -118,17 +127,17 @@ text
         comment = u"test comment"
         self.repo.save_text(title=title,
                     text=text, author=author,
-                    comment=comment, parent=NULL_PARENT)
+                    comment=comment, parent=None)
 
-        assert title in self.repo
+        ok_(title in self.repo, "Document not in repository.")
 
         self.repo.delete_page(title, author, comment)
 
-        assert title not in self.repo
+        ok_(title not in self.repo, "Document in repository after delete")
 
     @raises(vstorage.DocumentNotFound)
     def test_document_not_found(self):
-        self.repo.open_page(u'unknown entity')
+        self.repo.page_text(u'unknown entity')
 
     def test_open_existing_repository(self):
         self.repo.save_text(title=u'Python!', text=u'ham and spam')
@@ -153,6 +162,24 @@ text
             assert_equal(entry["description"], COMMITS[n]["comment"])
             assert_equal(entry["tag"], [])
 
+    def test_data_revert(self):
+        COMMITS = [
+            {u"title": u"one", "author": "bunny", "text":"1.1", "comment": "1"},
+            {u"title": u"one", "author": "frank", "text":"1.2", "comment": "2"},
+            {u"title": u"two", "author": "bunny", "text":"2.1", "comment": "3"},
+            {u"title": u"one", "author": "frank", "text":"1.3", "comment": "4"},
+        ]
+
+        for commit in COMMITS:
+            self.repo.save_text(**commit)
+
+        # now revert last change on one
+        self.repo.revert(u"one", 0)
+        assert_equal(self.repo.page_text(u"one"), (u"1.1", 3))
+        assert_equal(self.repo.page_text(u"two"), (u"2.1", 0))
+
+        self.repo.revert(u"one", 2)
+        assert_equal(self.repo.page_text(u"one"), (u"1.3", 4))
 
 class TestVSTags(object):
 
@@ -212,7 +239,3 @@ class TestVSTags(object):
         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()