import CalendarLayout from '@/components/Calendar/CalendarLayout' import { act, waitFor } from '@testing-library/react' import { renderWithProviders } from '../utils/Renderwithproviders' const PIVOT_UTC = new Date('2026-03-16T17:00:00Z') const makeState = (timezone: string) => ({ user: { userData: { sub: 'test', email: 'test@test.com', sid: 'mockSid', openpaasId: 'user1' }, tokens: { accessToken: 'token' } }, settings: { view: 'calendar', timeZone: timezone }, calendars: { list: { 'user1/cal1': { name: 'Calendar personal', id: 'user1/cal1', color: { light: '#FF0000', dark: '#000' }, owner: { emails: ['test@test.com'] }, events: {} } }, pending: false } }) describe('Calendar – dayHeaderContent respects selected timezone', () => { afterEach(() => { jest.useRealTimers() }) async function renderAtPivotTime(timezone: string): Promise { // Set fake timers the same way the working test does — single chained call jest.useFakeTimers().setSystemTime(PIVOT_UTC) await act(async () => { renderWithProviders(, makeState(timezone)) }) // Advance past the debounce (300ms) like the working navigation test does await act(async () => { jest.advanceTimersByTime(300) }) const calendarRef = window.__calendarRef await waitFor(() => expect(calendarRef?.current).not.toBeNull()) await act(async () => { calendarRef.current?.changeView('timeGridWeek') }) await waitFor(() => { expect(document.querySelectorAll('.fc-col-header-cell').length).toBe(7) }) return Array.from(document.querySelectorAll('.fc-col-header-cell')).map( cell => cell.textContent ?? '' ) } it('UTC: Monday March 16 column exists', async () => { const cells = await renderAtPivotTime('UTC') const monday = cells.find(t => t.includes('16')) expect(monday).toBeDefined() expect(monday).toMatch(/MON/i) }) it('Europe/Paris: Monday March 16 column exists (UTC+1, no day shift)', async () => { const cells = await renderAtPivotTime('Europe/Paris') const monday = cells.find(t => t.includes('16')) expect(monday).toBeDefined() expect(monday).toMatch(/MON/i) }) it('Asia/Jakarta: Tuesday March 17 column exists (UTC+7, day shifts forward)', async () => { const cells = await renderAtPivotTime('Asia/Jakarta') const tuesday = cells.find(t => t.includes('17')) expect(tuesday).toBeDefined() expect(tuesday).toMatch(/TUE/i) }) it('Asia/Jakarta: no column incorrectly labeled MON 17 – regression', async () => { const cells = await renderAtPivotTime('Asia/Jakarta') const wrongCell = cells.find(t => t.includes('17') && /MON/i.test(t)) expect(wrongCell).toBeUndefined() }) it('Asia/Tokyo: Tuesday March 17 column exists (UTC+9)', async () => { const cells = await renderAtPivotTime('Asia/Tokyo') const tuesday = cells.find(t => t.includes('17')) expect(tuesday).toBeDefined() expect(tuesday).toMatch(/TUE/i) }) it('America/New_York: Monday March 16 column exists (UTC-4, no day shift)', async () => { const cells = await renderAtPivotTime('America/New_York') const monday = cells.find(t => t.includes('16')) expect(monday).toBeDefined() expect(monday).toMatch(/MON/i) }) })