emmental/db/test_table.py
Anna Schumaker 427b9fb925 db: Create a new Table class
This is a simlified Table that can be inherited from to implement a
Table-based Gio.ListModel. This gives us the chance to have some tables
that aren't ListModel's, since not everything will need that interface
and unnecessary position-finding slows everything down.

Implements: Issue #8 (Split up db/objects.py)
Implements: Issue #12 (Make database items unique)
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-10-11 11:58:27 -04:00

79 lines
2.4 KiB
Python

# Copyright 2021 (c) Anna Schumaker.
import unittest
from . import sql
from . import table
class FakeRow:
def __init__(self, data):
self.rowid = data["fakeid"]
self.name = data["name"]
class FakeTable(table.Table):
def __init__(self):
table.Table.__init__(self, "fake_table")
self.reset()
def do_create(self):
sql.execute("CREATE TABLE IF NOT EXISTS fake_table "
"(fakeid INTEGER PRIMARY KEY, name TEXT UNIQUE)")
def do_factory(self, row):
return FakeRow(row)
def do_insert(self, name):
return sql.execute("INSERT INTO fake_table (name) VALUES (?)", [ name ])
def do_lookup(self, name):
return sql.execute("SELECT * FROM fake_table WHERE name=?", [ name ])
class TestTable(unittest.TestCase):
def test_init(self):
fake = FakeTable()
self.assertIsInstance(fake.cache, dict)
self.assertEqual(fake.table, "fake_table")
def test_interface(self):
with self.assertRaises(NotImplementedError):
table.Table.do_create(None)
with self.assertRaises(NotImplementedError):
table.Table.do_factory(None, None)
with self.assertRaises(NotImplementedError):
table.Table.do_insert(None, "Text")
with self.assertRaises(NotImplementedError):
table.Table.do_lookup(None, "Text")
def test_insert_delete(self):
fake = FakeTable()
row = fake.insert("Test Name")
self.assertIsInstance(row, FakeRow)
self.assertEqual(fake.cache[1], row)
self.assertEqual(fake.get(1), row)
fake.delete(row)
self.assertEqual(fake.cache, { })
def test_find(self):
fake = FakeTable()
row = fake.find("Test Name")
self.assertIsInstance(row, FakeRow)
self.assertEqual(fake.cache[1], row)
self.assertEqual(fake.find("Test Name"), row)
def test_lookup(self):
fake = FakeTable()
row = fake.insert("Test Name")
fake.cache.clear()
row = fake.lookup("Test Name")
self.assertEqual(row.name, "Test Name")
self.assertEqual(fake.cache, { 1 : row })
self.assertEqual(fake.lookup("Test Name"), row)
def test_reset(self):
fake = FakeTable()
sql.execute("SELECT fakeid,name FROM fake_table")
fake.insert("Test Name")
fake.reset()
self.assertEqual(fake.cache, { })