import test from "node:test"; import assert from "node:assert/strict"; import { preferredPartnerGroupId, resolvedPartnerGroups } from "./partner-groups.js"; test("preferredPartnerGroupId picks a real partner group over a solo row", () => { const groups = [ { id: "solo", member_ids: [], participant_ids: ["u1"] }, { id: "pair", member_ids: ["u2"], participant_ids: ["u1", "u2"] }, ]; assert.equal(preferredPartnerGroupId(groups), "pair"); }); test("preferredPartnerGroupId preserves a valid explicit selection", () => { const groups = [ { id: "solo", member_ids: [] }, { id: "pair", member_ids: ["u2"] }, ]; assert.equal(preferredPartnerGroupId(groups, "solo"), "solo"); }); test("preferredPartnerGroupId falls back to first group when no partner group exists", () => { assert.equal(preferredPartnerGroupId([{ id: "solo", member_ids: [] }]), "solo"); assert.equal(preferredPartnerGroupId([]), ""); }); test("resolvedPartnerGroups prefers non-empty user.partner_groups over stale empty groups query", () => { const user = { partner_groups: [{ id: "g1", name: "Together" }] }; const groupsQuery = { items: [] }; assert.deepEqual(resolvedPartnerGroups(user, groupsQuery), [{ id: "g1", name: "Together" }]); }); test("resolvedPartnerGroups uses groups GET when user list not loaded yet", () => { const groupsQuery = { items: [{ id: "g2" }] }; assert.deepEqual(resolvedPartnerGroups(null, groupsQuery), [{ id: "g2" }]); }); test("resolvedPartnerGroups returns an empty array for empty or malformed sources", () => { assert.deepEqual(resolvedPartnerGroups({ partner_groups: [] }, { items: [] }), []); assert.deepEqual(resolvedPartnerGroups({ partner_groups: "bad" }, { items: "bad" }), []); }); test("preferredPartnerGroupId ignores stale selections and empty member placeholders", () => { const groups = [ { id: "solo", member_ids: [] }, { id: "empty-member", member_ids: [""] }, { id: "pair", member_ids: ["u2"] }, ]; assert.equal(preferredPartnerGroupId(groups, "missing"), "pair"); });