diff --git a/client/src/pages/JourneyDetailPage.test.tsx b/client/src/pages/JourneyDetailPage.test.tsx
index d3b005cd..8b93c175 100644
--- a/client/src/pages/JourneyDetailPage.test.tsx
+++ b/client/src/pages/JourneyDetailPage.test.tsx
@@ -265,8 +265,8 @@ describe('JourneyDetailPage', () => {
await renderAndWait();
const timelineBtn = screen.getByRole('button', { name: /timeline/i });
expect(timelineBtn).toBeInTheDocument();
- // Timeline entries are visible by default
- expect(screen.getByText('Arrived in Rome')).toBeInTheDocument();
+ // Timeline entries are visible by default (gallery also mounted but hidden, so multiple matches are expected)
+ expect(screen.getAllByText('Arrived in Rome').length).toBeGreaterThanOrEqual(1);
});
});
@@ -274,8 +274,8 @@ describe('JourneyDetailPage', () => {
describe('FE-PAGE-JOURNEYDETAIL-004: Shows entry cards with titles', () => {
it('renders all entry titles in timeline view', async () => {
await renderAndWait();
- expect(screen.getByText('Arrived in Rome')).toBeInTheDocument();
- expect(screen.getByText('Florence Day')).toBeInTheDocument();
+ expect(screen.getAllByText('Arrived in Rome').length).toBeGreaterThanOrEqual(1);
+ expect(screen.getAllByText('Florence Day').length).toBeGreaterThanOrEqual(1);
});
});
@@ -615,7 +615,7 @@ describe('JourneyDetailPage', () => {
render();
await waitFor(() => {
- expect(screen.getByText('Venice Visit')).toBeInTheDocument();
+ expect(screen.getAllByText('Venice Visit').length).toBeGreaterThanOrEqual(1);
});
// Skeleton card shows "Add Entry" CTA
@@ -655,10 +655,10 @@ describe('JourneyDetailPage', () => {
render();
await waitFor(() => {
- expect(screen.getByText('Quick stop at cafe')).toBeInTheDocument();
+ expect(screen.getAllByText('Quick stop at cafe').length).toBeGreaterThanOrEqual(1);
});
- expect(screen.getByText(/Cafe Roma/)).toBeInTheDocument();
+ expect(screen.getAllByText(/Cafe Roma/).length).toBeGreaterThanOrEqual(1);
expect(screen.getByText('Grabbed an espresso')).toBeInTheDocument();
});
});
@@ -1117,8 +1117,9 @@ describe('JourneyDetailPage', () => {
// Map view renders a location list with entry titles/location names
// The MapView component shows entry names in clickable location items
- expect(screen.getByText('Arrived in Rome')).toBeInTheDocument();
- expect(screen.getByText('Florence Day')).toBeInTheDocument();
+ // (timeline is still mounted but hidden, so multiple matches are expected)
+ expect(screen.getAllByText('Arrived in Rome').length).toBeGreaterThanOrEqual(1);
+ expect(screen.getAllByText('Florence Day').length).toBeGreaterThanOrEqual(1);
});
});
@@ -1177,8 +1178,8 @@ describe('JourneyDetailPage', () => {
expect(dayBadges.length).toBeGreaterThanOrEqual(2);
// Each day group shows its entries
- expect(screen.getByText('Arrived in Rome')).toBeInTheDocument();
- expect(screen.getByText('Florence Day')).toBeInTheDocument();
+ expect(screen.getAllByText('Arrived in Rome').length).toBeGreaterThanOrEqual(1);
+ expect(screen.getAllByText('Florence Day').length).toBeGreaterThanOrEqual(1);
});
});
@@ -1878,8 +1879,10 @@ describe('JourneyDetailPage', () => {
expect(screen.getAllByTestId('journey-map').length).toBeGreaterThanOrEqual(1);
});
- // Click the "Arrived in Rome" location item
- const romeItem = screen.getByText('Arrived in Rome');
+ // Click the "Arrived in Rome" location item in the map view's location list
+ // (timeline is still mounted but hidden, so find the one inside a cursor-pointer container)
+ const romeItems = screen.getAllByText('Arrived in Rome');
+ const romeItem = romeItems.find(el => el.closest('[class*="cursor-pointer"]')) ?? romeItems[0];
await user.click(romeItem);
// After clicking, the item should gain active styles (translate-x-0.5 on the container)