示例#1
0
    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")
示例#2
0
    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")
示例#3
0
    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)
示例#4
0
    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)
示例#5
0
    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()
示例#6
0
    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()