import { describe, it, expect, beforeEach, afterAll } from "vitest"; import { createPool, resetDB } from "./helpers"; const pool = createPool(); beforeEach(async () => { await resetDB(pool); }); afterAll(async () => { await pool.end(); }); // This tests the name-substitution logic applied in /api/participants GET. // The rule: the participant matching the current user's ID gets name "Me"; // everyone else keeps their real name. function substituteMe( participants: { id: number; name: string }[], currentUserId: number ) { return participants.map((p) => p.id === currentUserId ? { ...p, name: "Me" } : p ); } describe("participant Me substitution", () => { it("replaces the current user's name with Me", async () => { const r = await pool.query( `INSERT INTO participants (name) VALUES ('Siddharth') RETURNING id` ); const userId = r.rows[0].id; const participants = [ { id: userId, name: "Siddharth" }, { id: userId + 1, name: "Sonu" }, ]; const result = substituteMe(participants, userId); expect(result.find((p) => p.id === userId)?.name).toBe("Me"); expect(result.find((p) => p.id === userId + 1)?.name).toBe("Sonu"); }); it("leaves all names unchanged when currentUserId does not match", () => { const participants = [ { id: 1, name: "Siddharth" }, { id: 2, name: "Sonu" }, ]; const result = substituteMe(participants, 999); expect(result).toEqual(participants); }); it("Sonu sees Me for herself and Siddharth for the primary user", async () => { const r1 = await pool.query( `INSERT INTO participants (name) VALUES ('Siddharth') RETURNING id` ); const r2 = await pool.query( `INSERT INTO participants (name, email) VALUES ('Sonu', 'sonu@example.com') RETURNING id` ); const siddharthId = r1.rows[0].id; const sonuId = r2.rows[0].id; const rawParticipants = [ { id: siddharthId, name: "Siddharth" }, { id: sonuId, name: "Sonu" }, ]; // Siddharth's view const siddharthView = substituteMe(rawParticipants, siddharthId); expect(siddharthView.find((p) => p.id === siddharthId)?.name).toBe("Me"); expect(siddharthView.find((p) => p.id === sonuId)?.name).toBe("Sonu"); // Sonu's view const sonuView = substituteMe(rawParticipants, sonuId); expect(sonuView.find((p) => p.id === siddharthId)?.name).toBe("Siddharth"); expect(sonuView.find((p) => p.id === sonuId)?.name).toBe("Me"); }); });