# 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, { })