74 lines
2.8 KiB
JavaScript
74 lines
2.8 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { readFile, readdir } from "node:fs/promises";
|
|
import { PGlite } from "../.data/sql-verification/node_modules/@electric-sql/pglite/dist/index.js";
|
|
|
|
const db = new PGlite();
|
|
try {
|
|
await db.exec(`create role anon; create role authenticated; create role service_role bypassrls;
|
|
create schema auth; create table auth.users(id uuid primary key);
|
|
create function auth.uid() returns uuid language sql as $$ select null::uuid $$;
|
|
create schema storage; create table storage.buckets(id text primary key,name text,public boolean,file_size_limit bigint);`);
|
|
for (const file of (await readdir("supabase/migrations"))
|
|
.filter((f) => f.endsWith(".sql"))
|
|
.sort())
|
|
await db.exec(await readFile(`supabase/migrations/${file}`, "utf8"));
|
|
await db.exec(`insert into auth.users values
|
|
('00000000-0000-4000-8000-000000000001'),('00000000-0000-4000-8000-000000000002');
|
|
insert into public.profiles(id,role) values
|
|
('00000000-0000-4000-8000-000000000001','admin'),('00000000-0000-4000-8000-000000000002','contributor');`);
|
|
const flag = async () =>
|
|
(await db.query("select beta_badge_enabled from public.site_settings"))
|
|
.rows[0].beta_badge_enabled;
|
|
assert.equal(await flag(), true);
|
|
for (const role of ["anon", "authenticated"]) {
|
|
await db.exec(`set role ${role}`);
|
|
await assert.rejects(
|
|
db.query("update public.site_settings set beta_badge_enabled = false"),
|
|
/permission denied/,
|
|
);
|
|
await assert.rejects(
|
|
db.query(
|
|
"select public.set_beta_badge('00000000-0000-4000-8000-000000000001', false)",
|
|
),
|
|
/permission denied/,
|
|
);
|
|
await db.exec("reset role");
|
|
}
|
|
await db.exec("set role service_role");
|
|
await assert.rejects(
|
|
db.query(
|
|
"select public.set_beta_badge('00000000-0000-4000-8000-000000000002', false)",
|
|
),
|
|
/Admin permission required/,
|
|
);
|
|
await assert.rejects(
|
|
db.query("select public.set_beta_badge(null, false)"),
|
|
/Admin permission required/,
|
|
);
|
|
assert.equal(await flag(), true);
|
|
await db.query(
|
|
"select public.set_beta_badge('00000000-0000-4000-8000-000000000001', false)",
|
|
);
|
|
assert.equal(await flag(), false);
|
|
assert.equal(
|
|
(await db.query("select updated_by from public.site_settings")).rows[0]
|
|
.updated_by,
|
|
"00000000-0000-4000-8000-000000000001",
|
|
);
|
|
await db.query(
|
|
"select public.set_beta_badge('00000000-0000-4000-8000-000000000001', true)",
|
|
);
|
|
assert.equal(await flag(), true);
|
|
await assert.rejects(
|
|
db.query(
|
|
"select public.set_beta_badge('00000000-0000-4000-8000-000000000001', null)",
|
|
),
|
|
/visibility is required/,
|
|
);
|
|
console.log(
|
|
"Site settings SQL passed: guests and players denied; admins can hide and restore; updates persist and record the admin.",
|
|
);
|
|
} finally {
|
|
await db.close();
|
|
}
|