Add moderator bots and editable MineGeo usernames
All checks were successful
Deploy MineGeo to Dokploy / deploy (push) Successful in 3m27s

This commit is contained in:
2026-10-29 16:32:55 +05:00
parent 658c8974ac
commit 50b27cf498
19 changed files with 654 additions and 10 deletions

View 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(); }