Improve MineGeo interface and functionality
This commit is contained in:
73
scripts/test-site-settings-sql.mjs
Normal file
73
scripts/test-site-settings-sql.mjs
Normal file
@@ -0,0 +1,73 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { readFile } 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 table public.profiles(id uuid primary key, role text not null);
|
||||
grant select on public.profiles to service_role;
|
||||
insert into public.profiles values
|
||||
('00000000-0000-4000-8000-000000000001', 'moderator'),
|
||||
('00000000-0000-4000-8000-000000000002', 'contributor');`);
|
||||
await db.exec(
|
||||
await readFile(
|
||||
"supabase/migrations/20261006141532_site_settings.sql",
|
||||
"utf8",
|
||||
),
|
||||
);
|
||||
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)",
|
||||
),
|
||||
/Moderator permission required/,
|
||||
);
|
||||
await assert.rejects(
|
||||
db.query("select public.set_beta_badge(null, false)"),
|
||||
/Moderator 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; moderators can hide and restore; updates persist and record the moderator.",
|
||||
);
|
||||
} finally {
|
||||
await db.close();
|
||||
}
|
||||
Reference in New Issue
Block a user