← Files astronomer-dataARCHIVED FILE
skills/analyzing-data/scripts/tests/integration/test_sqlite_e2e.py
4.42 KB · Sep 30, 2026 · 23:17 UTC
"""End-to-end tests for SQLite via SQLAlchemy connector."""
from connectors import SQLAlchemyConnector
class TestSQLiteEndToEnd:
"""Integration tests for SQLite via SQLAlchemy connector."""
def test_connection_and_query(self, sqlite_path):
"""Test full flow: connect, create table, insert, query."""
conn = SQLAlchemyConnector(
url=f"sqlite:///{sqlite_path}",
databases=["main"],
)
conn.validate("test")
# SQLite doesn't need extra packages
pkgs = conn.get_required_packages()
assert pkgs == ["sqlalchemy"]
# Generate and execute prelude
prelude = conn.to_python_prelude()
local_vars: dict = {}
exec(prelude, local_vars)
run_sql = local_vars["run_sql"]
run_sql_pandas = local_vars["run_sql_pandas"]
_conn = local_vars["_conn"]
text = local_vars["text"]
try:
# Create test table
_conn.execute(
text("""
CREATE TABLE integration_test (
id INTEGER PRIMARY KEY,
name TEXT,
value REAL
)
""")
)
_conn.execute(
text("""
INSERT INTO integration_test (name, value)
VALUES ('alice', 10.50), ('bob', 20.75), ('charlie', 30.00)
""")
)
_conn.commit()
# Test run_sql returns Polars
result = run_sql("SELECT * FROM integration_test ORDER BY id")
assert len(result) == 3
assert "polars" in str(type(result)).lower()
assert result["name"].to_list() == ["alice", "bob", "charlie"]
# Test run_sql_pandas returns Pandas
result_pd = run_sql_pandas("SELECT * FROM integration_test ORDER BY id")
assert len(result_pd) == 3
assert "dataframe" in str(type(result_pd)).lower()
# Test aggregation
result = run_sql("SELECT SUM(value) as total FROM integration_test")
assert float(result["total"][0]) == 61.25
# Test limit parameter
result = run_sql("SELECT * FROM integration_test", limit=2)
assert len(result) == 2
# Test empty result
result = run_sql("SELECT * FROM integration_test WHERE id = -1")
assert len(result) == 0
finally:
_conn.close()
def test_in_memory_database(self):
"""Test SQLite in-memory mode."""
conn = SQLAlchemyConnector(
url="sqlite:///:memory:",
databases=["memory"],
)
conn.validate("test")
prelude = conn.to_python_prelude()
local_vars: dict = {}
exec(prelude, local_vars)
run_sql = local_vars["run_sql"]
_conn = local_vars["_conn"]
text = local_vars["text"]
try:
_conn.execute(text("CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)"))
_conn.execute(text("INSERT INTO test (name) VALUES ('a'), ('b'), ('c')"))
_conn.commit()
result = run_sql("SELECT COUNT(*) as cnt FROM test")
assert int(result["cnt"][0]) == 3
finally:
_conn.close()
def test_data_types(self, sqlite_path):
"""Test various SQLite data types are handled correctly."""
conn = SQLAlchemyConnector(
url=f"sqlite:///{sqlite_path}",
databases=["main"],
)
prelude = conn.to_python_prelude()
local_vars: dict = {}
exec(prelude, local_vars)
run_sql = local_vars["run_sql"]
_conn = local_vars["_conn"]
text = local_vars["text"]
try:
_conn.execute(
text("""
CREATE TABLE types_test (
int_col INTEGER,
real_col REAL,
text_col TEXT,
blob_col BLOB
)
""")
)
_conn.execute(
text("""
INSERT INTO types_test VALUES (42, 3.14, 'hello', X'DEADBEEF')
""")
)
_conn.commit()
result = run_sql("SELECT int_col, real_col, text_col FROM types_test")
assert int(result["int_col"][0]) == 42
assert float(result["real_col"][0]) == 3.14
assert result["text_col"][0] == "hello"
finally:
_conn.close()
SHA-256: fdfc10e331353f319f463e6060623dc51801ee3805b14376e8a1397027e4e0ba