itpdp/api/src/party/__tests__/party-data.test.ts
Daniel Bulant bfeb44a625
update
2026-05-16 13:15:40 +02:00

39 lines
1.4 KiB
TypeScript

import { eq } from "drizzle-orm";
import { describe, expect, it } from "vitest";
import { db } from "../../db";
import { partyMember } from "../../db/schema";
import { getPartyForUser, leaveParty } from "../../party-data";
import { createParty, createUser, joinParty } from "../../test/factories";
describe("party data lifecycle", () => {
it("moves a leaving user to a fresh party and clears stale memberships", async () => {
const user = await createUser("Leave Tester");
const otherA = await createUser("Other A");
const otherB = await createUser("Other B");
const firstParty = await createParty(otherA.id);
const secondParty = await createParty(otherB.id);
await joinParty(firstParty.partyId, user.id);
await joinParty(secondParty.partyId, user.id);
const result = await leaveParty(db, user.id, {
createReplacementParty: true,
});
expect(result?.affectedPartyIds).toEqual(
expect.arrayContaining([firstParty.partyId, secondParty.partyId]),
);
expect(result?.replacementPartyId).toBeTruthy();
const memberships = await db
.select({ id: partyMember.id, partyId: partyMember.partyId })
.from(partyMember)
.where(eq(partyMember.userId, user.id));
expect(memberships).toHaveLength(1);
expect(memberships[0]?.partyId).toBe(result?.replacementPartyId);
const currentParty = await getPartyForUser(user.id);
expect(currentParty?.id).toBe(result?.replacementPartyId);
});
});