Add moderator bots and editable MineGeo usernames
All checks were successful
Deploy MineGeo to Dokploy / deploy (push) Successful in 3m27s
All checks were successful
Deploy MineGeo to Dokploy / deploy (push) Successful in 3m27s
This commit is contained in:
30
scripts/test-moderator-applications-sql.mjs
Normal file
30
scripts/test-moderator-applications-sql.mjs
Normal file
@@ -0,0 +1,30 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { randomUUID } from "node:crypto";
|
||||
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;
|
||||
create table public.profiles(id uuid primary key, role text not null default 'contributor', account_status text not null default 'active');`);
|
||||
for (const name of ["20261029105929_moderator_applications.sql", "20261029111310_fix_moderator_review.sql"])
|
||||
await db.exec(await readFile(`supabase/migrations/${name}`, "utf8"));
|
||||
const player = randomUUID(), other = randomUUID();
|
||||
await db.query("insert into public.profiles(id,username) values ($1,'player_one'),($2,'player_two')", [player, other]);
|
||||
await assert.rejects(db.query("update public.profiles set username='player_one' where id=$1", [other]), /unique/i);
|
||||
await db.query("update public.profiles set username='renamed' where id=$1", [player]);
|
||||
await db.exec("insert into public.moderator_bot_admin(id,discord_user_id) values(true,'admin-id')");
|
||||
const create = async (id, status) => (await db.query("insert into public.moderator_applications(platform,platform_user_id,requested_username,profile_id,confirmation_hash,status) values('discord',$1,'renamed',$2,$3,$4) returning id", [id, player, randomUUID(), status])).rows[0].id;
|
||||
const review = (id, decision, reviewer) => db.query("select public.review_moderator_application($1,$2,$3)", [id, decision, reviewer]);
|
||||
const pending = await create("one", "pending");
|
||||
await assert.rejects(review(pending, "approved", "wrong-id"), /Admin permission required/);
|
||||
await review(pending, "declined", "admin-id");
|
||||
assert.equal((await db.query("select role from public.profiles where id=$1", [player])).rows[0].role, "contributor");
|
||||
const unconfirmed = await create("two", "confirming");
|
||||
await assert.rejects(review(unconfirmed, "approved", "admin-id"), /no longer pending/);
|
||||
const approved = await create("three", "pending");
|
||||
await review(approved, "approved", "admin-id");
|
||||
assert.equal((await db.query("select role from public.profiles where id=$1", [player])).rows[0].role, "moderator");
|
||||
await assert.rejects(review(approved, "approved", "admin-id"), /no longer pending/);
|
||||
console.log("Moderator application SQL checks passed.");
|
||||
} finally { await db.close(); }
|
||||
Reference in New Issue
Block a user