d5d23a92f2
Posts, Artists, and Tags are the three 'browse the library by an axis'
surfaces; Subscriptions stays purely management (operator-asked 2026-06-09).
New BrowseView renders them as tabs (?tab=posts|artists|tags); only the active
tab mounts. The old standalone paths become redirects into the matching tab,
preserving deep-link query (/posts?post_id=N → /browse?tab=posts&post_id=N) and
keeping the route names so existing { name: 'posts'|'artists'|'tags' } links and
path pushes still resolve. Nav now reads Showcase · Gallery · Browse · Series ·
Subscriptions, with Settings pinned right.
Test: /browse resolves; /tags and /artists redirect into their tabs; a posts
deep link survives the redirect.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
49 lines
1.7 KiB
JavaScript
49 lines
1.7 KiB
JavaScript
import { describe, it, expect } from 'vitest'
|
|
import router, { FRONT_DOOR } from '../src/router.js'
|
|
|
|
describe('router', () => {
|
|
it('FRONT_DOOR defaults to /showcase', () => {
|
|
expect(FRONT_DOOR).toBe('/showcase')
|
|
})
|
|
|
|
it('/ redirects to FRONT_DOOR', async () => {
|
|
// resolve() does not follow redirects (they apply on navigation), so
|
|
// actually navigate and assert the resulting route.
|
|
await router.push('/')
|
|
expect(router.currentRoute.value.path).toBe(FRONT_DOOR)
|
|
})
|
|
|
|
it('gallery is reachable at /gallery', () => {
|
|
expect(router.resolve('/gallery').name).toBe('gallery')
|
|
})
|
|
|
|
it('showcase, artist resolve to named routes', () => {
|
|
expect(router.resolve('/showcase').name).toBe('showcase')
|
|
expect(router.resolve('/artist/some-slug').name).toBe('artist')
|
|
expect(router.resolve('/artist/some-slug').params.slug).toBe('some-slug')
|
|
})
|
|
|
|
it('browse hub is reachable and old axis paths redirect into its tabs', async () => {
|
|
expect(router.resolve('/browse').name).toBe('browse')
|
|
|
|
await router.push('/tags')
|
|
expect(router.currentRoute.value.name).toBe('browse')
|
|
expect(router.currentRoute.value.query.tab).toBe('tags')
|
|
|
|
await router.push('/artists')
|
|
expect(router.currentRoute.value.query.tab).toBe('artists')
|
|
|
|
// A posts deep link survives the redirect into the hub tab.
|
|
await router.push({ path: '/posts', query: { post_id: '7' } })
|
|
expect(router.currentRoute.value.name).toBe('browse')
|
|
expect(router.currentRoute.value.query.tab).toBe('posts')
|
|
expect(router.currentRoute.value.query.post_id).toBe('7')
|
|
})
|
|
|
|
it('series-read is an immersive route', () => {
|
|
const r = router.resolve('/series/5/read')
|
|
expect(r.name).toBe('series-read')
|
|
expect(r.meta.immersive).toBe(true)
|
|
})
|
|
})
|