def test_migrate_from_v4(self): # Create version 3 database self._create_v4() # Verify engine = self._get_engine() self.assertTrue(engine.has_table("shows")) self.assertTrue(engine.has_table("episodes")) self.assertTrue(engine.has_table("meta")) columns = self._tables_dict(engine, "shows") self.assertIsNotNone(columns.get("url")) self.assertIsNotNone(columns.get("enabled")) self.assertIsNotNone(columns.get("status")) columns = self._tables_dict(engine, "episodes") self.assertIsNotNone(columns.get("notified")) engine.dispose() # Migrate to latest version (noop) self._migrate(self.path) db = Database("sqlite:///%s" % self.path) self.assertEqual(4, db.get_schema_version()) db.close()
def test_using_existing_database(self): path = mktemp() self.tempfiles.append(path) db = Database(path) self.assertEqual(len(db.get_shows()), 0) db.close() db = Database(path) self.assertEqual(len(db.get_shows()), 0) db.close()
def test_disable_auto_migration(self): # Create a custom database self._create_custom() # Verify engine = self._get_engine() self.assertTrue(engine.has_table("shows")) self.assertFalse(engine.has_table("episodes")) self.assertTrue(engine.has_table("meta")) columns = self._tables_dict(engine, "shows") self.assertIsNotNone(columns.get("my_int")) self.assertIsNone(columns.get("url")) self.assertIsNone(columns.get("enabled")) self.assertIsNone(columns.get("status")) engine.dispose() # Migrate to latest version -> noop self._migrate(self.path) # Check result engine = self._get_engine() self.assertTrue(engine.has_table("shows")) self.assertFalse(engine.has_table("episodes")) self.assertTrue(engine.has_table("meta")) columns = self._tables_dict(engine, "shows") self.assertIsNotNone(columns.get("my_int")) self.assertIsNone(columns.get("url")) self.assertIsNone(columns.get("enabled")) self.assertIsNone(columns.get("status")) engine.dispose() # Check new schema version db = Database("sqlite:///%s" % self.path) self.assertEqual(-1, db.get_schema_version()) db.close()
def test_migrate_from_v2(self): # Create version 2 database self._create_v2() # Verify engine = self._get_engine() self.assertTrue(engine.has_table("shows")) self.assertTrue(engine.has_table("episodes")) self.assertTrue(engine.has_table("meta")) columns = self._tables_dict(engine, "shows") self.assertIsNotNone(columns.get("url")) self.assertIsNone(columns.get("enabled")) self.assertIsNone(columns.get("status")) columns = self._tables_dict(engine, "episodes") self.assertIsNone(columns.get("notified")) engine.dispose() # Migrate to latest version self._migrate(self.path) # Check result - version 3 adds shows.enabled and shows.status engine = self._get_engine() columns = self._tables_dict(engine, "shows") self.assertIsNotNone(columns.get("enabled")) self.assertIsNotNone(columns.get("status")) # Version 4 adds episodes.notified columns = self._tables_dict(engine, "episodes") self.assertIsNotNone(columns.get("notified")) engine.dispose() # Check new schema version db = Database("sqlite:///%s" % self.path) self.assertEqual(4, db.get_schema_version()) db.close()
def _migrate(self, filename): db = Database(filename) db.migrate() db.close()