test(journey): fix getByText assertions broken by keep-mounted tab change

Tabs are now always mounted (visibility toggled via hidden class), so
the same entry title can appear in multiple tab views simultaneously.
Replace getByText with getAllByText for presence checks; scope the
FE-086 click target to the cursor-pointer container.
This commit is contained in:
jubnl
2026-04-17 21:02:46 +02:00
parent b5b1d32b31
commit 677157de1d
+16 -13
View File
@@ -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(<JourneyDetailPage />);
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(<JourneyDetailPage />);
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)