diff --git a/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte index 617c8ff2b..6b182d437 100644 --- a/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/tags/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -45,7 +45,7 @@ let timelineManager = $state() as TimelineManager; const options = $derived({ deferInit: !tag, tagId: tag?.id }); - const handleNavigation = (tag: string) => navigateToView(joinPaths(data.path, tag)); + const handleNavigation = (child: string) => navigateToView(joinPaths(tag.path, child)); const getLink = (path: string) => Route.tags({ path }); diff --git a/web/test/medium/app.ts b/web/test/medium/app.ts index acaa07ad0..0b42c4578 100644 --- a/web/test/medium/app.ts +++ b/web/test/medium/app.ts @@ -53,6 +53,10 @@ export const createApp = (page: Page, data: MockData) => { createAlbumButton: button('create_album'), }, + tags: { + child: (name: string) => page.getByRole('main').getByRole('button', { name, exact: true }), + }, + album: { summary: page.getByTestId('album-details'), selectPhotosButton: button('select_photos'), diff --git a/web/test/medium/specs/tags/tags.spec.ts b/web/test/medium/specs/tags/tags.spec.ts new file mode 100644 index 000000000..f4f0d2e72 --- /dev/null +++ b/web/test/medium/specs/tags/tags.spec.ts @@ -0,0 +1,18 @@ +import { Route } from '#lib/route.ts'; +import { factory } from '#test/common/factories.ts'; +import { expect, test } from '#test/medium/fixtures.ts'; + +test('navigation keeps working after opening a tag path that does not exist', async ({ page, data, app }) => { + const travel = factory.tag({ name: 'Travel' }); + const japan = factory.tag({ name: 'Japan', value: 'Travel/Japan', parentId: travel.id }); + const tokyo = factory.tag({ name: 'Tokyo', value: 'Travel/Japan/Tokyo', parentId: japan.id }); + data.addTags([travel, japan, tokyo]); + await page.goto(Route.tags({ path: 'Missing' })); + + await app.tags.child('Travel').click(); + await expect(page).toHaveURL(Route.tags({ path: 'Travel' })); + + await app.tags.child('Japan').click(); + await expect(page).toHaveURL(Route.tags({ path: 'Travel/Japan' })); + await expect(app.tags.child('Tokyo')).toBeVisible(); +});