def test_get_upgrade_path(self): conn = sqlite3.connect(':memory:') curs = conn.cursor() adbi_conn = adbi.connect(conn) adbi_conn.schema_dir = 'tests/sql' # No current schema. schemas, version = adbi_conn._get_upgrade_path() self.assertEqual(schemas, [Path('tests/sql/schema-current.sql')], "Got expected list of schema files") self.assertEqual(version, '1.0.0', "Got expected latest version value") # We have an existing version, but it's old. curs.execute( "INSERT INTO _schema_info (variable, value) VALUES ('schema_version', '0.1.0')" ) schemas, version = adbi_conn._get_upgrade_path() self.assertEqual(schemas, [ Path('tests/sql/schema-0.2.0.sql'), Path('tests/sql/schema-1.0.0.sql') ], "Got expected list of schema files") self.assertEqual(version, '1.0.0', "Got expected latest version value") # We are up to date. curs.execute( "UPDATE _schema_info set value = '1.0.0' WHERE variable = 'schema_version'" ) schemas, version = adbi_conn._get_upgrade_path() self.assertEqual(schemas, [], "Nothing to do") self.assertEqual(version, '1.0.0', "Got expected latest version value")
def test_connect(self): conn = sqlite3.connect(':memory:') adbi_conn = adbi.connect(conn) self.assertIsInstance(adbi_conn, ADBI, "Got correct object returned") self.assertEqual(adbi_conn.connection, conn, "Connection has been saved") self.assertEqual(adbi_conn.wrapped_db_param_style, sqlite3.paramstyle, "Got expected param style") # Try again, forcing the param style. adbi_conn = adbi.connect(conn, 'my_style') self.assertIsInstance(adbi_conn, ADBI, "Got correct object returned") self.assertEqual(adbi_conn.connection, conn, "Connection has been saved") self.assertEqual(adbi_conn.wrapped_db_param_style, 'my_style', "Got provided param style")
def test_update_schema_clean(self): conn = sqlite3.connect(':memory:') curs = conn.cursor() adbi_conn = adbi.connect(conn) adbi_conn.schema_dir = 'tests/sql' # Fresh database. adbi_conn.update_schema() self.validate_test_schema(curs)
def test_update_schema_previous_version(self): conn = sqlite3.connect(':memory:') curs = conn.cursor() adbi_conn = adbi.connect(conn) adbi_conn.schema_dir = 'tests/sql' # Apply a previous version. curs.executescript(Path('tests/sql/schema-0.1.0.sql').read_text()) adbi_conn._validate_schema_table() curs.execute( "INSERT INTO _schema_info (variable, value) VALUES ('schema_version', '0.1.0')" ) # Database from previous version. adbi_conn.update_schema() self.validate_test_schema(curs)
def test_current_schema_version(self): conn = sqlite3.connect(':memory:') curs = conn.cursor() adbi_conn = adbi.connect(conn) current_ver = adbi_conn.current_schema_version() self.assertIsNone(current_ver, "No current schema version found") # Put a version in place, the table should have been auto-created. curs.execute( "INSERT INTO _schema_info (variable, value) VALUES ('schema_version', '1.0.0')" ) # Query again. current_ver = adbi_conn.current_schema_version() self.assertEqual(current_ver, '1.0.0', "Got expected version") # Clean up curs.close() conn.close()
def test_validate_schema_table(self): conn = sqlite3.connect(':memory:') curs = conn.cursor() adbi_conn = adbi.connect(conn) # Build our schema, it can't exist yet. adbi_conn._validate_schema_table() # Make sure it exists now by querying. curs.execute("SELECT * from _schema_info") # Try to build it again, should be a no-op adbi_conn._validate_schema_table() # Insert an item into the table. curs.execute( "INSERT INTO _schema_info (variable, value) VALUES ('foo', 'bar')") # Query it. curs.execute("SELECT value FROM _schema_info WHERE variable = 'foo'") row = curs.fetchone() self.assertEqual(row[0], 'bar', "Got expected value stored in the schema table") # Clean up. curs.close() conn.close()