44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
from pathlib import Path
|
|
|
|
|
|
def test_metadata_schema_creates_membership_after_referenced_tables():
|
|
auth_sql = Path("resources/sql/004_metadata_auth_management.sql").read_text(
|
|
encoding="utf-8"
|
|
)
|
|
project_sql = Path(
|
|
"resources/sql/005_metadata_project_configuration.sql"
|
|
).read_text(encoding="utf-8")
|
|
|
|
assert "CREATE TABLE IF NOT EXISTS user_project_membership" not in auth_sql
|
|
assert project_sql.index("CREATE TABLE IF NOT EXISTS projects") < project_sql.index(
|
|
"CREATE TABLE IF NOT EXISTS user_project_membership"
|
|
)
|
|
assert "user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE" in project_sql
|
|
assert (
|
|
"project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE"
|
|
in project_sql
|
|
)
|
|
|
|
|
|
def test_metadata_schema_avoids_indexes_duplicated_by_unique_constraints():
|
|
project_sql = Path(
|
|
"resources/sql/005_metadata_project_configuration.sql"
|
|
).read_text(encoding="utf-8")
|
|
|
|
assert "idx_projects_code" not in project_sql
|
|
assert "idx_user_project_membership_user_id" not in project_sql
|
|
assert "idx_user_project_membership_project_id" in project_sql
|
|
|
|
|
|
def test_rbac_migration_normalizes_legacy_roles():
|
|
sql = Path("resources/sql/006_metadata_rbac_roles.sql").read_text(
|
|
encoding="utf-8"
|
|
)
|
|
|
|
assert "role IN ('admin', 'user')" in sql
|
|
assert "project_role IN ('member', 'viewer')" in sql
|
|
assert "'modeler'," in sql
|
|
assert "'dispatcher'" in sql
|
|
assert "THEN 'member'" in sql
|
|
assert "ELSE 'viewer'" in sql
|