Browse Source

Add model tests

Getty Ritter 4 years ago
parent
commit
2a1d1e0bc0
1 changed files with 65 additions and 0 deletions
  1. 65 0
      tests/model.py

+ 65 - 0
tests/model.py

@@ -0,0 +1,65 @@
+import lc.config as c
+import lc.model as m
+import tempfile
+
+class TestDB:
+    def setup_method(self, _):
+        c.DB.init(':memory:')
+        c.DB.create_tables(m.MODELS)
+
+    def test_create_user(self):
+        name = 'gdritter'
+        u = m.User.create(name=name)
+
+        # it should be the only thing in the db
+        all_users = m.User.select()
+        assert len(all_users) == 1
+        assert(all_users[0].id == u.id)
+        assert(all_users[0].name == name)
+
+        # we should be able to find it with the given name, too
+        named_user = m.User.get(m.User.name == name)
+        assert named_user.id == u.id
+        assert named_user.name == name
+
+    def test_find_tag(self):
+        tag_name = 'food'
+        t = m.Tag.find_tag(tag_name)
+
+        # we should be able to find the tag with the given name
+        named_tags = m.Tag.select(m.Tag.name == tag_name)
+        assert len(named_tags) == 1
+
+        # subsequent calls to find_tag should return the same db row
+        t2 = m.Tag.find_tag(tag_name)
+        assert t.id == t2.id
+
+    def test_find_hierarchy(self):
+        tag_name = 'food/bread/rye'
+        t = m.Tag.find_tag(tag_name)
+
+        # this should have created three DB rows: for 'food', for
+        # 'food/bread', and for 'food/bread/rye':
+        assert len(m.Tag.select()) == 3
+
+        # searching for a prefix of the tag should yield the same
+        # parent tag
+        assert t.parent.id == m.Tag.get(name='food/bread').id
+        assert t.parent.parent.id == m.Tag.get(name='food').id
+
+        # creating a new hierarchical tag with a shared prefix should
+        # only create the new child tag
+        t2 = m.Tag.find_tag('food/bread/baguette')
+        assert len(m.Tag.select()) == 4
+        # it should share the same parent tags
+        assert t2.parent.id == t.parent.id
+        assert t2.parent.parent.id == t.parent.parent.id
+
+        # trying to get a hierarchical tag should result in the same
+        # one already entered
+        assert t.id == m.Tag.get(name='food/bread/rye').id
+        assert t2.id == m.Tag.get(name='food/bread/baguette').id
+
+
+    def teardown_method(self, _):
+        c.DB.close()