Adding upstream version 1.1.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
a7c3cb7344
commit
7269eaf22a
23 changed files with 4597 additions and 0 deletions
85
tests/test_catalog.py
Normal file
85
tests/test_catalog.py
Normal file
|
@ -0,0 +1,85 @@
|
|||
import pytest
|
||||
|
||||
from harlequin_mysql.adapter import HarlequinMySQLConnection
|
||||
from harlequin_mysql.catalog import (
|
||||
ColumnCatalogItem,
|
||||
DatabaseCatalogItem,
|
||||
RelationCatalogItem,
|
||||
TableCatalogItem,
|
||||
ViewCatalogItem,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def connection_with_objects(
|
||||
connection: HarlequinMySQLConnection,
|
||||
) -> HarlequinMySQLConnection:
|
||||
connection.execute("create database one")
|
||||
connection.execute("create table one.foo as select 1 as a, '2' as b")
|
||||
connection.execute("create table one.bar as select 1 as a, '2' as b")
|
||||
connection.execute("create table one.baz as select 1 as a, '2' as b")
|
||||
connection.execute("create database two")
|
||||
connection.execute("create view two.qux as select * from one.foo")
|
||||
connection.execute("create database three")
|
||||
# the original connection fixture will clean this up.
|
||||
return connection
|
||||
|
||||
|
||||
def test_catalog(connection_with_objects: HarlequinMySQLConnection) -> None:
|
||||
conn = connection_with_objects
|
||||
|
||||
catalog = conn.get_catalog()
|
||||
|
||||
# five databases: dev, test, one, two, and three.
|
||||
assert len(catalog.items) == 5
|
||||
|
||||
database_items = catalog.items
|
||||
assert all(isinstance(item, DatabaseCatalogItem) for item in database_items)
|
||||
|
||||
[database_one_item] = filter(lambda item: item.label == "one", database_items)
|
||||
assert isinstance(database_one_item, DatabaseCatalogItem)
|
||||
assert not database_one_item.children
|
||||
assert not database_one_item.loaded
|
||||
|
||||
table_items = database_one_item.fetch_children()
|
||||
assert all(isinstance(item, RelationCatalogItem) for item in table_items)
|
||||
|
||||
[foo_item] = filter(lambda item: item.label == "foo", table_items)
|
||||
assert isinstance(foo_item, TableCatalogItem)
|
||||
assert not foo_item.children
|
||||
assert not foo_item.loaded
|
||||
|
||||
foo_column_items = foo_item.fetch_children()
|
||||
assert all(isinstance(item, ColumnCatalogItem) for item in foo_column_items)
|
||||
|
||||
[database_two_item] = filter(lambda item: item.label == "two", database_items)
|
||||
assert isinstance(database_two_item, DatabaseCatalogItem)
|
||||
assert not database_two_item.children
|
||||
assert not database_two_item.loaded
|
||||
|
||||
view_items = database_two_item.fetch_children()
|
||||
assert all(isinstance(item, ViewCatalogItem) for item in view_items)
|
||||
|
||||
[qux_item] = filter(lambda item: item.label == "qux", view_items)
|
||||
assert isinstance(qux_item, ViewCatalogItem)
|
||||
assert not qux_item.children
|
||||
assert not qux_item.loaded
|
||||
|
||||
qux_column_items = qux_item.fetch_children()
|
||||
assert all(isinstance(item, ColumnCatalogItem) for item in qux_column_items)
|
||||
|
||||
assert [item.label for item in foo_column_items] == [
|
||||
item.label for item in qux_column_items
|
||||
]
|
||||
|
||||
# ensure calling fetch_children on cols doesn't raise
|
||||
children_items = foo_column_items[0].fetch_children()
|
||||
assert not children_items
|
||||
|
||||
[database_three_item] = filter(lambda item: item.label == "three", database_items)
|
||||
assert isinstance(database_three_item, DatabaseCatalogItem)
|
||||
assert not database_three_item.children
|
||||
assert not database_three_item.loaded
|
||||
|
||||
three_children = database_three_item.fetch_children()
|
||||
assert not three_children
|
Loading…
Add table
Add a link
Reference in a new issue