2021-08-17 13:49:03 -04:00
|
|
|
# Copyright 2021 (c) Anna Schumaker.
|
|
|
|
import unittest
|
|
|
|
from gi.repository import GObject
|
|
|
|
from . import objects
|
|
|
|
|
|
|
|
class FakeCursor:
|
|
|
|
def __init__(self, lastrowid): self.lastrowid = lastrowid
|
|
|
|
def fetchone(self): return (self.lastrowid,) if self.lastrowid else None
|
|
|
|
|
|
|
|
|
|
|
|
class TestRow(unittest.TestCase):
|
|
|
|
def test_row(self):
|
|
|
|
row = objects.Row(1)
|
|
|
|
self.assertEqual(row.rowid, 1)
|
|
|
|
self.assertIsInstance(row, GObject.GObject)
|
|
|
|
|
|
|
|
self.assertEqual(int(row), 1)
|
|
|
|
self.assertEqual(row, objects.Row(1))
|
|
|
|
self.assertNotEqual(row, objects.Row(2))
|
|
|
|
|
|
|
|
with self.assertRaises(NotImplementedError):
|
|
|
|
row.do_get_column("test")
|
|
|
|
|
|
|
|
|
2021-08-17 16:07:31 -04:00
|
|
|
class FakeTagCursor:
|
|
|
|
def __init__(self, col, text):
|
|
|
|
self.col = col
|
|
|
|
self.text = text
|
|
|
|
def fetchone(self): return { self.col : self.text }
|
|
|
|
|
|
|
|
class FakeTag(objects.Tag):
|
|
|
|
def __init__(self, tid, name, sort):
|
|
|
|
objects.Tag.__init__(self, tid)
|
|
|
|
self.fake_name = name
|
|
|
|
self.fake_sort = sort
|
|
|
|
|
|
|
|
def do_get_column(self, column):
|
|
|
|
if column == "name":
|
|
|
|
return FakeTagCursor(column, self.fake_name)
|
|
|
|
return FakeTagCursor(column, self.fake_sort)
|
|
|
|
|
|
|
|
class TestTag(unittest.TestCase):
|
|
|
|
def test_tag(self):
|
|
|
|
a = FakeTag(1, "A", "a")
|
|
|
|
b = FakeTag(1, "B", "b")
|
|
|
|
|
|
|
|
self.assertIsInstance(a, objects.Tag)
|
|
|
|
self.assertEqual(a.name, "A")
|
|
|
|
self.assertEqual(a.sort, "a")
|
|
|
|
self.assertEqual(str(a), "A")
|
|
|
|
|
|
|
|
self.assertEqual(a.get_property("name"), "A")
|
|
|
|
self.assertEqual(a.get_property("sort"), "a")
|
|
|
|
|
|
|
|
self.assertTrue(a < b)
|
|
|
|
self.assertTrue(b > a)
|
|
|
|
|
|
|
|
self.assertFalse(a > b)
|
|
|
|
self.assertFalse(b < a)
|
|
|
|
|
2021-08-17 13:49:03 -04:00
|
|
|
class FakeTable(objects.Table):
|
|
|
|
def do_create(self): self.create_called = True
|
|
|
|
def do_insert(self, insert, args): return FakeCursor(1)
|
|
|
|
def do_delete(self, obj): self.delete_called = True
|
|
|
|
def do_get(self, rowid): return FakeCursor(1)
|
|
|
|
def do_lookup(self, lookup, args):
|
|
|
|
return FakeCursor(1) if lookup == "lookup" else FakeCursor(None)
|
|
|
|
|
|
|
|
class TestTable(unittest.TestCase):
|
|
|
|
def on_row_inserted(self, table, row):
|
|
|
|
self.row_inserted = row
|
|
|
|
|
|
|
|
def on_row_deleted(self, table, row):
|
|
|
|
self.row_deleted = row
|
|
|
|
|
|
|
|
def test_table_errors(self):
|
|
|
|
with self.assertRaises(NotImplementedError):
|
|
|
|
table = objects.Table("table", objects.Row)
|
|
|
|
with self.assertRaises(NotImplementedError):
|
|
|
|
objects.Table.do_delete(None, objects.Row(1))
|
|
|
|
with self.assertRaises(NotImplementedError):
|
|
|
|
objects.Table.do_insert(None, "insert", "arguments")
|
|
|
|
with self.assertRaises(NotImplementedError):
|
|
|
|
objects.Table.do_get(None, 2)
|
|
|
|
with self.assertRaises(NotImplementedError):
|
|
|
|
objects.Table.do_lookup(None, "lookup", "arguments")
|
|
|
|
|
|
|
|
def test_table(self):
|
|
|
|
table = FakeTable("fake", objects.Row)
|
|
|
|
table.connect("row-inserted", self.on_row_inserted)
|
|
|
|
table.connect("row-deleted", self.on_row_deleted)
|
|
|
|
|
|
|
|
self.assertIsInstance(table, GObject.GObject)
|
|
|
|
self.assertEqual(table.table_name, "fake")
|
|
|
|
self.assertEqual(table.table_type, objects.Row)
|
|
|
|
self.assertTrue(table.create_called)
|
|
|
|
|
|
|
|
self.assertEqual(table.insert("insert", "arguments"), objects.Row(1))
|
|
|
|
self.assertEqual(self.row_inserted, objects.Row(1))
|
|
|
|
|
|
|
|
table.delete(objects.Row(1))
|
|
|
|
self.assertEqual(self.row_deleted, objects.Row(1))
|
|
|
|
self.assertTrue(table.delete_called)
|
|
|
|
|
|
|
|
self.assertEqual(table.get(1), objects.Row(1))
|
|
|
|
self.assertEqual(table[1], objects.Row(1))
|
|
|
|
|
|
|
|
self.assertEqual(table.lookup("lookup", "arguments"), objects.Row(1))
|
|
|
|
|
|
|
|
self.row_inserted = None
|
|
|
|
self.assertEqual(table.find("find", "arguments"), objects.Row(1))
|
|
|
|
self.assertEqual(self.row_inserted, objects.Row(1))
|