class T01_DatabaseMetadata(unittest.TestCase): """ Test Database class metadata """ def setUp(self): self.server = gnats.Server('somehost') self.conn = FakeServerConnectionForDB(self.server) self.db = Database(self.server, 'testdb', self.conn) def test_01_name(self): """ Database name """ self.assertEqual(self.db.name, 'testdb') def test_02_description(self): """ description """ self.assertEqual(self.db.description, 'Fake Database') def test_03_cfgt(self): """ last_config_time """ self.assertEqual(self.db.last_config_time, u'1000') def test_04_ordered_field_names(self): """ ordered_field names """ fnames = ' '.join([f.name for f in self.db.ordered_fields]) self.assertEqual(fnames, self.conn.FIELDNAMES) def test_08_initial_entry(self): """ initial_entry_fields """ self.assertEqual([f.lcname for f in self.db.initial_entry_fields], 'synopsis enum-fld multitext-fld from:'.split()) def test_09_number_field_is_first(self): """ First db field is number_field """ self.assertEqual(self.db.number_field.name, 'Number') def test_10_builtinfield_number(self): """ fields has key builtinfield:number """ self.assertEqual(self.db.fields['builtinfield:number'], self.db.fields['number']) def test_11_number_field(self): """ number_field is builtinfield:number """ self.assertEqual(self.db.number_field, self.db.fields['builtinfield:number']) def test_12_builtins(self): """ Check for builtinfield:synopsis and last-modified """ self.assertEqual(self.db.fields['builtinfield:synopsis'], self.db.fields['synopsis']) self.assertEqual(self.db.fields['builtinfield:last-modified'], self.db.fields['last-modified']) def test_13_callback(self): """ Callback called after _get_metadata() """ def cb(db): cb.dbin = db self.db.post_metadata_callback = cb # "Refresh" the conn, so that metadata can run again self.conn = FakeServerConnectionForDB(self.server) self.db.last_config_time = 987 self.db._get_metadata(self.conn) self.assertEqual(cb.dbin, self.db) def test_14_update_metadata_no_refresh(self): """ update_metadata method doesn't refresh if cached data good. """ def gm(conn): gm.c = conn gm.c = None self.db._get_metadata = gm self.conn = FakeServerConnectionForDB(self.server) self.db.update_metadata(self.conn) self.assertEqual(gm.c, None) def test_15_update_metadata_refresh(self): """ update_metadata method refreshes if cached data stale. """ def gm(conn): gm.c = conn gm.c = None self.db._get_metadata = gm self.conn = FakeServerConnectionForDB(self.server) self.db.last_config_time = 987 self.db.update_metadata(self.conn) self.assertEqual(gm.c, self.conn)