Initial commit

This commit is contained in:
2026-02-08 10:09:48 +01:00
commit d165506add
58 changed files with 9879 additions and 0 deletions

113
tests/test_view.py Normal file
View File

@@ -0,0 +1,113 @@
"""Tests for View and MaterializedView classes."""
from sqlalchemy import func, select
from sqlalchemy_pgview import MaterializedView, View
class TestView:
"""Tests for the View class."""
def test_view_creation(self, sample_tables: tuple) -> None:
"""Test basic view creation."""
users, orders = sample_tables
view = View(
"user_order_count",
select(users.c.id, func.count(orders.c.id).label("order_count"))
.select_from(users.join(orders, users.c.id == orders.c.user_id))
.group_by(users.c.id),
)
assert view.name == "user_order_count"
assert view.schema is None
assert view.fullname == "user_order_count"
def test_view_with_schema(self, sample_tables: tuple) -> None:
"""Test view creation with schema."""
users, _ = sample_tables
view = View(
"active_users",
select(users.c.id, users.c.name),
schema="analytics",
)
assert view.name == "active_users"
assert view.schema == "analytics"
assert view.fullname == "analytics.active_users"
def test_view_columns(self, sample_tables: tuple) -> None:
"""Test view column derivation."""
users, _ = sample_tables
view = View(
"user_names",
select(users.c.id, users.c.name.label("user_name")),
)
columns = view.columns
assert len(columns) == 2
assert columns[0].name == "id"
assert columns[1].name == "user_name"
def test_view_as_table(self, sample_tables: tuple) -> None:
"""Test converting view to table for querying."""
users, _ = sample_tables
view = View(
"user_names",
select(users.c.id, users.c.name),
)
table = view.as_table()
assert table.name == "user_names"
assert len(table.columns) == 2
def test_view_repr(self, sample_tables: tuple) -> None:
"""Test view string representation."""
users, _ = sample_tables
view = View(
"test_view",
select(users.c.id),
schema="public",
)
assert repr(view) == "View('test_view', schema='public')"
class TestMaterializedView:
"""Tests for the MaterializedView class."""
def test_materialized_view_creation(self, sample_tables: tuple) -> None:
"""Test basic materialized view creation."""
users, orders = sample_tables
mview = MaterializedView(
"monthly_totals",
select(users.c.id, func.sum(orders.c.total).label("total"))
.select_from(users.join(orders, users.c.id == orders.c.user_id))
.group_by(users.c.id),
with_data=True,
)
assert mview.name == "monthly_totals"
assert mview.with_data is True
def test_materialized_view_without_data(self, sample_tables: tuple) -> None:
"""Test materialized view creation without data."""
users, _ = sample_tables
mview = MaterializedView(
"empty_view",
select(users.c.id),
with_data=False,
)
assert mview.with_data is False
def test_materialized_view_repr(self, sample_tables: tuple) -> None:
"""Test materialized view string representation."""
users, _ = sample_tables
mview = MaterializedView(
"test_mview",
select(users.c.id),
schema="public",
with_data=True,
)
assert repr(mview) == "MaterializedView('test_mview', schema='public', with_data=True)"