diff --git a/client/src/components/Planner/PlacesSidebar.test.tsx b/client/src/components/Planner/PlacesSidebar.test.tsx
index dc25a418..c72d63f4 100644
--- a/client/src/components/Planner/PlacesSidebar.test.tsx
+++ b/client/src/components/Planner/PlacesSidebar.test.tsx
@@ -473,14 +473,14 @@ describe('Google Maps list import', () => {
it('FE-PLANNER-SIDEBAR-040: "Google List" button opens the URL dialog', async () => {
const user = userEvent.setup();
render();
- await user.click(screen.getByText(/Google List/i));
+ await user.click(screen.getByText(/Import List/i));
expect(await screen.findByPlaceholderText(/maps\.app\.goo\.gl/i)).toBeInTheDocument();
});
it('FE-PLANNER-SIDEBAR-041: import button disabled when URL input is empty', async () => {
const user = userEvent.setup();
render();
- await user.click(screen.getByText(/Google List/i));
+ await user.click(screen.getByText(/Import List/i));
await screen.findByPlaceholderText(/maps\.app\.goo\.gl/i);
const importBtn = screen.getByRole('button', { name: /^Import$/i });
expect(importBtn).toBeDisabled();
@@ -498,7 +498,7 @@ describe('Google Maps list import', () => {
(window as any).__addToast = addToast;
const user = userEvent.setup();
render();
- await user.click(screen.getByText(/Google List/i));
+ await user.click(screen.getByText(/Import List/i));
const urlInput = await screen.findByPlaceholderText(/maps\.app\.goo\.gl/i);
await user.type(urlInput, 'https://maps.app.goo.gl/abc123');
await user.click(screen.getByRole('button', { name: /^Import$/i }));
@@ -527,7 +527,7 @@ describe('Google Maps list import', () => {
(window as any).__addToast = addToast;
const user = userEvent.setup();
render();
- await user.click(screen.getByText(/Google List/i));
+ await user.click(screen.getByText(/Import List/i));
const urlInput = await screen.findByPlaceholderText(/maps\.app\.goo\.gl/i);
await user.type(urlInput, 'https://maps.app.goo.gl/xyz{Enter}');
await waitFor(() => {
diff --git a/client/src/components/Planner/ReservationsPanel.test.tsx b/client/src/components/Planner/ReservationsPanel.test.tsx
index 235e3acb..f461251e 100644
--- a/client/src/components/Planner/ReservationsPanel.test.tsx
+++ b/client/src/components/Planner/ReservationsPanel.test.tsx
@@ -91,12 +91,12 @@ describe('ReservationsPanel', () => {
expect(els.length).toBeGreaterThan(0);
});
- it('FE-COMP-RES-010: shows summary text with confirmed and pending counts', () => {
+ it('FE-COMP-RES-010: shows reservations title and cards', () => {
const r1 = buildReservation({ title: 'Flight', type: 'flight', status: 'confirmed' });
const r2 = buildReservation({ title: 'Hotel', type: 'hotel', status: 'pending' });
render();
- // reservations.summary = "{confirmed} confirmed, {pending} pending"
- expect(screen.getByText(/1 confirmed, 1 pending/i)).toBeInTheDocument();
+ expect(screen.getByText('Flight')).toBeInTheDocument();
+ expect(screen.getByText('Hotel')).toBeInTheDocument();
});
it('FE-COMP-RES-011: hotel reservation renders', () => {
@@ -288,27 +288,14 @@ describe('ReservationsPanel', () => {
// ── Status toggle (canEdit=true) ────────────────────────────────────────────
- it('FE-PLANNER-RESP-030: status label is a button when canEdit=true', () => {
- // Default: permissions empty → canEdit=true
+ it('FE-PLANNER-RESP-030: status label is always a span (not clickable)', () => {
const res = buildReservation({ title: 'My Booking', status: 'pending' });
render();
- // Status badge in card header is a button
const pendingEls = screen.getAllByText('Pending');
+ const statusSpan = pendingEls.find(el => el.tagName === 'SPAN');
+ expect(statusSpan).toBeDefined();
const statusBtn = pendingEls.find(el => el.tagName === 'BUTTON');
- expect(statusBtn).toBeDefined();
- });
-
- it('FE-PLANNER-RESP-031: clicking status button calls toggleReservationStatus', async () => {
- const user = userEvent.setup();
- const toggleReservationStatus = vi.fn().mockResolvedValue(undefined);
- // Seed the store with a mock toggleReservationStatus function
- useTripStore.setState({ toggleReservationStatus } as any);
- const res = buildReservation({ id: 42, title: 'Toggle Me', status: 'pending' });
- render();
- const pendingEls = screen.getAllByText('Pending');
- const statusBtn = pendingEls.find(el => el.tagName === 'BUTTON');
- await user.click(statusBtn!);
- await waitFor(() => expect(toggleReservationStatus).toHaveBeenCalledWith(1, 42));
+ expect(statusBtn).toBeUndefined();
});
// ── Status (canEdit=false) ──────────────────────────────────────────────────
diff --git a/server/tests/integration/places.test.ts b/server/tests/integration/places.test.ts
index 00832125..75af1cf0 100644
--- a/server/tests/integration/places.test.ts
+++ b/server/tests/integration/places.test.ts
@@ -525,21 +525,6 @@ describe('Naver list import', () => {
vi.unstubAllGlobals();
});
- it('POST /import/naver-list returns 403 when addon is disabled', async () => {
- const { user } = createUser(testDb);
- const trip = createTrip(testDb, user.id);
-
- testDb.prepare("UPDATE addons SET enabled = 0 WHERE id = 'naver_list_import'").run();
-
- const res = await request(app)
- .post(`/api/trips/${trip.id}/places/import/naver-list`)
- .set('Cookie', authCookie(user.id))
- .send({ url: 'https://naver.me/GYDpx3Wv' });
-
- expect(res.status).toBe(403);
- expect(res.body.error).toContain('addon is disabled');
- });
-
it('POST /import/naver-list resolves shortlink, paginates, and creates places', async () => {
const { user } = createUser(testDb);
const trip = createTrip(testDb, user.id);