Added DVCS application - mercurial on database.
[redakcja.git] / apps / dvcs / tests.py
1 from django.test import TestCase
2 from dvcs.models import Change, Document
3
4 class DocumentModelTests(TestCase):
5
6     def assertTextEqual(self, given, expected):
7         return self.assertEqual(given, expected,
8             "Expected '''%s'''\n differs from text: '''%s'''" % (expected, given)
9         )
10
11     def test_empty_file(self):
12         doc = Document.objects.create(name=u"Sample Document")
13         self.assert_(doc.head is not None)
14         self.assertEqual(doc.materialize(), u"")
15
16     def test_single_commit(self):
17         doc = Document.objects.create(name=u"Sample Document")
18         doc.commit(text=u"Ala ma kota", description="Commit #1")
19         self.assert_(doc.head is not None)
20         self.assertEqual(doc.change_set.count(), 2)
21         self.assertEqual(doc.materialize(), u"Ala ma kota")
22
23     def test_chained_commits(self):
24         doc = Document.objects.create(name=u"Sample Document")
25         c1 = doc.commit(description="Commit #1", text=u"""
26             Line #1
27             Line #2 is cool
28         """)
29         c2 = doc.commit(description="Commit #2", text=u"""
30             Line #1
31             Line #2 is hot
32         """)
33         c3 = doc.commit(description="Commit #3", text=u"""
34             Line #1
35             ... is hot
36             Line #3 ate Line #2
37         """)
38         self.assert_(doc.head is not None)
39         self.assertEqual(doc.change_set.count(), 4)
40
41         self.assertEqual(doc.materialize(), u"""
42             Line #1
43             ... is hot
44             Line #3 ate Line #2
45         """)
46         self.assertEqual(doc.materialize(version=c3), u"""
47             Line #1
48             ... is hot
49             Line #3 ate Line #2
50         """)
51         self.assertEqual(doc.materialize(version=c2), u"""
52             Line #1
53             Line #2 is hot
54         """)
55         self.assertEqual(doc.materialize(version=c1), """
56             Line #1
57             Line #2 is cool
58         """)
59
60
61     def test_parallel_commit_noconflict(self):
62         doc = Document.objects.create(name=u"Sample Document")
63         self.assert_(doc.head is not None)
64         base = doc.head
65         base = doc.commit(description="Commit #1", text=u"""
66             Line #1
67             Line #2
68 """)
69
70         c1 = doc.commit(description="Commit #2", text=u"""
71             Line #1 is hot
72             Line #2
73 """, parent=base)
74         self.assertTextEqual(c1.materialize(), u"""
75             Line #1 is hot
76             Line #2
77 """)
78         c2 = doc.commit(description="Commit #3", text=u"""
79             Line #1
80             Line #2
81             Line #3
82 """, parent=base)
83         self.assertEqual(doc.change_set.count(), 5)
84         self.assertTextEqual(doc.materialize(), u"""
85             Line #1 is hot
86             Line #2
87             Line #3
88 """)
89
90     def test_parallel_commit_conflict(self):
91         doc = Document.objects.create(name=u"Sample Document")
92         self.assert_(doc.head is not None)
93         base = doc.head
94         base = doc.commit(description="Commit #1", text=u"""
95 Line #1
96 Line #2
97 Line #3
98 """)
99
100         c1 = doc.commit(description="Commit #2", text=u"""
101 Line #1
102 Line #2 is hot
103 Line #3
104 """, parent=base)
105         c2 = doc.commit(description="Commit #3", text=u"""
106 Line #1
107 Line #2 is cool
108 Line #3
109 """, parent=base)
110         self.assertEqual(doc.change_set.count(), 5)
111         self.assertTextEqual(doc.materialize(), u"""
112 Line #1
113 <<<<<<<
114 Line #2 is hot
115 =======
116 Line #2 is cool
117 >>>>>>>
118 Line #3
119 """)
120