import { http, HttpResponse } from 'msw' import { test, expect } from './msw-setup' const cancelledEventWithReason = { eventToken: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890', title: 'Summer BBQ', description: 'Bring your own drinks!', dateTime: '2026-03-15T20:00:00+01:00', timezone: 'Europe/Berlin', location: 'Central Park, NYC', attendeeCount: 12, cancelled: true, cancellationReason: 'Venue no longer available', } const cancelledEventWithoutReason = { ...cancelledEventWithReason, cancellationReason: null, } test.describe('US2: Visitor sees cancelled event with reason', () => { test('visitor sees red banner with cancellation reason on cancelled event', async ({ page, network, }) => { network.use( http.get('*/api/events/:token', () => HttpResponse.json(cancelledEventWithReason)), ) await page.goto(`/events/${cancelledEventWithReason.eventToken}`) await expect(page.getByText(/This event has been cancelled/i)).toBeVisible() await expect(page.getByText('Venue no longer available')).toBeVisible() }) }) test.describe('US2: Visitor sees cancelled event without reason', () => { test('visitor sees red banner without reason when no reason was provided', async ({ page, network, }) => { network.use( http.get('*/api/events/:token', () => HttpResponse.json(cancelledEventWithoutReason)), ) await page.goto(`/events/${cancelledEventWithoutReason.eventToken}`) await expect(page.getByText(/This event has been cancelled/i)).toBeVisible() // No reason text shown await expect(page.getByText('Venue no longer available')).not.toBeVisible() }) }) test.describe('US2: RSVP buttons hidden on cancelled event', () => { test('RSVP buttons hidden on cancelled event, other details remain visible', async ({ page, network, }) => { network.use( http.get('*/api/events/:token', () => HttpResponse.json(cancelledEventWithReason)), ) await page.goto(`/events/${cancelledEventWithReason.eventToken}`) // Event details are still visible await expect(page.getByRole('heading', { name: 'Summer BBQ' })).toBeVisible() await expect(page.getByText('Bring your own drinks!')).toBeVisible() await expect(page.getByText('Central Park, NYC')).toBeVisible() await expect(page.getByText('12 going')).toBeVisible() // RSVP bar is NOT visible await expect(page.getByRole('button', { name: "I'm attending" })).not.toBeVisible() }) })