From 02306f1b2e5309e0a4204000dfc039bfa5054695 Mon Sep 17 00:00:00 2001 From: Cailyn Sinclair Date: Thu, 18 Jun 2026 20:26:43 +0000 Subject: [PATCH] Fix worlds assignment schedule rendering --- src/containers/PersonalSchedule/utils.test.ts | 69 +++++++++++++++++++ src/containers/PersonalSchedule/utils.ts | 11 +-- 2 files changed, 70 insertions(+), 10 deletions(-) create mode 100644 src/containers/PersonalSchedule/utils.test.ts diff --git a/src/containers/PersonalSchedule/utils.test.ts b/src/containers/PersonalSchedule/utils.test.ts new file mode 100644 index 0000000..d8e6246 --- /dev/null +++ b/src/containers/PersonalSchedule/utils.test.ts @@ -0,0 +1,69 @@ +import { Competition, Person } from '@wca/helpers'; +import { parseActivityCodeFlexible } from '@/lib/activityCodes'; +import { formatBriefActivityName, getAllAssignments, getGroupedAssignmentsByDate } from './utils'; + +jest.mock('@/i18n', () => ({ + __esModule: true, + default: { + t: (key: string) => key, + }, + t: (key: string) => key, +})); + +const wcif = { + id: 'WC2025', + schedule: { + venues: [ + { + id: 1, + name: 'Venue', + timezone: 'America/Los_Angeles', + rooms: [], + }, + ], + }, + events: [], +} as unknown as Competition; + +const worldsAssignmentsPerson = { + registrantId: 215, + assignments: [], + registration: { + eventIds: [], + }, + extensions: [ + { + id: 'com.competitiongroups.worldsassignments', + data: { + assignments: [ + { + staff: 'Stage Stream - Main', + startTime: '2025-07-03T18:00:00Z', + endTime: '2025-07-03T19:00:00Z', + }, + ], + }, + }, + ], +} as unknown as Person; + +describe('PersonalSchedule utils', () => { + it('creates parse-safe activities for worlds assignments with free-form staff names', () => { + const [assignment] = getAllAssignments(wcif, worldsAssignmentsPerson); + + expect(assignment.activity).toBeDefined(); + const activity = assignment.activity!; + + expect(activity.activityCode).toBe('other-misc'); + expect(() => parseActivityCodeFlexible(activity.activityCode)).not.toThrow(); + expect(formatBriefActivityName(activity)).toBe('Stage Stream - Main'); + }); + + it('includes days that only have worlds assignments', () => { + const [scheduleDay] = getGroupedAssignmentsByDate(wcif, worldsAssignmentsPerson); + + expect(scheduleDay.date).toBe('Thursday, 7/3/2025'); + expect(scheduleDay.assignments).toHaveLength(1); + expect(scheduleDay.assignments[0].assignment.assignmentCode).toBe('Stage Stream - Main'); + }); +}); diff --git a/src/containers/PersonalSchedule/utils.ts b/src/containers/PersonalSchedule/utils.ts index c005759..3e38e17 100644 --- a/src/containers/PersonalSchedule/utils.ts +++ b/src/containers/PersonalSchedule/utils.ts @@ -53,7 +53,7 @@ const getExtraAssignments = (person: Person) => { activityId: -1, stationNumber: null, activity: { - activityCode: 'other-' + assignment.staff, + activityCode: 'other-misc', startTime: assignment.startTime, endTime: assignment.endTime, childActivities: [], @@ -148,15 +148,6 @@ export const getGroupedAssignmentsByDate = (wcif: Competition, person: Person) = const scheduledDays = allAssignments .map((a) => { - if (a.type === 'extra') { - return { - approxDateTime: 0, - date: '', - dateParts: [], - assignments: [], - }; - } - if (!a.activity) { return { approxDateTime: 0,