Files
yovision/deploy/postgres/tests/assertions.sql
T
QiuSW 2ff7ff5618
Harness governance / validate (push) Has been cancelled
Harness governance / validate (pull_request) Has been cancelled
feat(store): add PostgreSQL foundation [T-009]
2026-08-07 17:52:50 +08:00

66 lines
2.6 KiB
SQL

\set ON_ERROR_STOP on
DO $assertions$
DECLARE
actual_columns text[];
default_quota integer;
initial_version bigint;
updated_version bigint;
BEGIN
IF current_setting('server_version_num')::integer < 170000
OR current_setting('server_version_num')::integer >= 180000 THEN
RAISE EXCEPTION 'T-009 requires PostgreSQL 17.x';
END IF;
SELECT array_agg(column_name ORDER BY ordinal_position)
INTO actual_columns
FROM information_schema.columns
WHERE table_schema = 'bell' AND table_name = 'site_quota_v1';
IF actual_columns IS DISTINCT FROM ARRAY[
'tenant_id', 'site_id', 'max_video_channels', 'source_version', 'source_updated_at'
] THEN
RAISE EXCEPTION 'site_quota_v1 signature drift: %', actual_columns;
END IF;
IF NOT has_table_privilege('sense_app', 'bell.site_quota_v1', 'SELECT') THEN
RAISE EXCEPTION 'sense_app lacks SELECT on quota view';
END IF;
IF has_table_privilege('sense_app', 'bell.site_quota_v1', 'INSERT')
OR has_table_privilege('sense_app', 'bell.site_quota_v1', 'UPDATE')
OR has_table_privilege('sense_app', 'bell.site_quota_v1', 'DELETE') THEN
RAISE EXCEPTION 'sense_app has forbidden quota-view write privileges';
END IF;
IF has_table_privilege('sense_app', 'bell.sites', 'SELECT')
OR has_table_privilege('sense_app', 'bell.sites', 'INSERT')
OR has_table_privilege('sense_app', 'bell.sites', 'UPDATE')
OR has_table_privilege('sense_app', 'bell.sites', 'DELETE') THEN
RAISE EXCEPTION 'sense_app has forbidden Bell source-table privileges';
END IF;
INSERT INTO bell.sites(tenant_id, id, name)
VALUES ('assertion-tenant', 'assertion-site', 'Assertion Site')
RETURNING max_video_channels, version INTO default_quota, initial_version;
IF default_quota <> 16 OR initial_version <> 1 THEN
RAISE EXCEPTION 'Bell site default quota/version drift';
END IF;
UPDATE bell.sites SET name = 'Assertion Site Updated'
WHERE tenant_id = 'assertion-tenant' AND id = 'assertion-site'
RETURNING version INTO updated_version;
IF updated_version <> initial_version + 1 THEN
RAISE EXCEPTION 'Bell site source_version is not monotonic';
END IF;
BEGIN
INSERT INTO bell.sites(tenant_id, id, name, max_video_channels)
VALUES ('assertion-tenant', 'invalid-site', 'Invalid', 129);
RAISE EXCEPTION 'quota 129 unexpectedly accepted';
EXCEPTION
WHEN check_violation THEN NULL;
END;
DELETE FROM bell.sites
WHERE tenant_id = 'assertion-tenant' AND id = 'assertion-site';
END
$assertions$;