Dodanie biblioteki vstorage (pierwszy commit zmierzajÄ…cy do uliniowienia historii...
[redakcja.git] / lib / tests / test_vstorage.py
diff --git a/lib/tests/test_vstorage.py b/lib/tests/test_vstorage.py
new file mode 100644 (file)
index 0000000..bcaf916
--- /dev/null
@@ -0,0 +1,94 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import os
+import tempfile
+from nose.tools import *
+
+import vstorage
+
+
+def clear_directory(top):
+    for root, dirs, files in os.walk(top, topdown=False):
+        for name in files:
+            os.remove(os.path.join(root, name))
+        for name in dirs:
+            os.rmdir(os.path.join(root, name))
+    try:
+        os.removedirs(top)
+    except OSError:
+        pass
+
+
+class TestMercurialStorage(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, text, author, comment, parent=-1)
+        saved = self.repo.open_page(title).read()
+        assert 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, text, author, comment, parent=None)
+        saved = self.repo.open_page(title).read()
+        assert 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, text, author, comment, parent=-1)
+        self.repo.save_text(title, text, author, comment, parent=-1)
+        saved = self.repo.open_page(title).read()
+        assert saved == text
+
+    def test_save_merge_line_conflict(self):
+        text = u"test\ntest\n"
+        text1 = u"test\ntext\n"
+        text2 = u"text\ntest\n"
+        title = u"test title"
+        author = u"test author"
+        comment = u"test comment"
+        self.repo.save_text(title, text, author, comment, parent=-1)
+        self.repo.save_text(title, text1, author, comment, parent=0)
+        self.repo.save_text(title, text2, author, comment, parent=0)
+        saved = self.repo.open_page(title).read()
+        # Other conflict markers placement can also be correct
+        assert_equal(saved, u'''\
+text
+test
+<<<<<<< local
+=======
+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, text, author, comment, parent=-1)
+        assert title in self.repo
+        self.repo.delete_page(title, author, comment)
+        assert title not in self.repo
+
+    @raises(vstorage.DocumentNotFound)
+    def test_document_not_found(self):
+        self.repo.open_page(u'unknown entity')
+
+