Example #1
0
    def test_query_table_with_psycopg2_connection(self):
        db = Database(psycopg2.connect(CONNECTION))
        db.open()
        db.execute('CREATE TABLE SomeTable (id VARCHAR(255))')
        db.execute('INSERT INTO SomeTable VALUES (1)')
        db.execute('INSERT INTO SomeTable VALUES (2)')
        db.execute('SELECT * FROM SomeTable')

        rows = db.fetchall()
        self.assertEqual(True, isinstance(rows, types.GeneratorType))
        self.assertEqual([('1',), ('2',)], list(rows))
        db.rollback()
Example #2
0
    def test_query_table_with_sqlite3_connection(self):
        database_file = 'sometable.db'
        db = Database(sqlite3.connect(database_file))
        db.open()
        db.execute('CREATE TABLE IF NOT EXISTS SomeTable (id VARCHAR(255))')
        db.execute('INSERT INTO SomeTable VALUES (1)')
        db.execute('INSERT INTO SomeTable VALUES (?)', (2,))
        db.execute('SELECT * FROM SomeTable')

        rows = db.fetchall()
        self.assertEqual(True, isinstance(rows, types.GeneratorType))
        self.assertEqual(['1', '2'], [row[0] for row in rows])
        db.rollback()
        db.close()
        os.remove(database_file)
Example #3
0
class TargetTableShould(unittest.TestCase):
    def setUp(self):
        self.schema = JsonObject(TABLE_NAME, Property('id', 'VARCHAR(36)'))
        self.database = Database(psycopg2.connect(CONNECTION))
        self.database.open()

    def tearDown(self):
        self.database.rollback()

    def assertColumns(self, table_name, schema):
        self.database.execute(
            "SELECT column_name, udt_name FROM information_schema.columns "
            "WHERE table_name = '%s'",
            (AsIs(table_name),))
        columns = self.database.cursor.fetchall()

        self.assertEqual(len(schema.schema), len(columns))

        for i, column in enumerate(columns):
            self.assertEqual(schema.schema[i].column_name.lower(), column[0])
            self.assertEqual(True, column[1] in schema.schema[i].type.lower())

    def test_not_exist(self):
        table = TargetTable(self.schema, self.database)

        self.assertEqual(False, table.exists())

    def test_exist(self):
        table = TargetTable(self.schema, self.database)
        table.create()

        self.assertEqual(True, table.exists())

    def test_create_when_column_name_not_defined(self):
        schema = JsonObject(TABLE_NAME,
                            Property('property1', 'VARCHAR(10)'),
                            Property('property2', 'TIMESTAMP'))
        table = TargetTable(schema, self.database)
        table.create()

        self.assertColumns(schema.table, schema)

    def test_create_when_column_name_defined(self):
        schema = JsonObject(TABLE_NAME,
                            Property('property1', 'VARCHAR(10)', 'someColumn'),
                            Property('property2', 'TIMESTAMP', 'anotherColumn'))
        table = TargetTable(schema, self.database)
        table.create()

        self.assertColumns(schema.table, schema)

    def test_stage_update_when_column_name_not_defined(self):
        schema = JsonObject(TABLE_NAME,
                            Property('property1', 'VARCHAR(10)'),
                            Property('property2', 'TIMESTAMP'))
        table = TargetTable(schema, self.database)
        table.stage_update()

        self.assertColumns(schema.update_table, schema)

    def test_stage_update_when_column_name_defined(self):
        schema = JsonObject(TABLE_NAME,
                            Property('property1', 'VARCHAR(10)', 'someColumn'),
                            Property('property2', 'TIMESTAMP', 'anotherColumn'))
        table = TargetTable(schema, self.database)
        table.stage_update()

        self.assertColumns(schema.update_table, schema)

    def test_promote_update(self):
        table = TargetTable(self.schema, self.database)
        table.stage_update()
        table.promote_update()

        self.assertColumns(self.schema.table, self.schema)

    def test_insert_update(self):
        table = TargetTable(self.schema, self.database)
        table.create()
        table.stage_update()
        self.database.execute("INSERT INTO %s VALUES('%s')",
                              (AsIs(TABLE_NAME), AsIs(1),))
        self.database.execute("INSERT INTO %s VALUES('%s')",
                              (AsIs(self.schema.update_table), AsIs(2),))
        self.database.execute("INSERT INTO %s VALUES('%s')",
                              (AsIs(self.schema.update_table), AsIs(3),))

        table.insert_update()

        self.database.execute(
            "SELECT * FROM %s",
            (AsIs(TABLE_NAME),))
        values = list(self.database.cursor.fetchall())

        self.assertEqual([('1',), ('2',), ('3',)], values)

    def test_drop(self):
        table = TargetTable(self.schema, self.database)
        table.create()
        table.drop()

        self.assertEqual(False, table.exists())