feat: SEO SPA Sites, Articles and Integration (4/4)

This commit is contained in:
Florian Sylvain committed 2026-10-18 15:51:28 +02:00
1 parent cb737b7ae3
commit 02fb8751fd
47 files changed
+3218 -227

No files matched your search

+28 -2
View File
@@ -10,6 +10,7 @@ describe('parseArticleQuery', () => {
status: '',
sort: '',
site: '',
seo: '',
})
})
@@ -29,6 +30,7 @@ describe('parseArticleQuery', () => {
status: 'draft',
sort: 'title:asc',
site: '',
seo: '',
})
})
@@ -67,7 +69,7 @@ describe('sort parameter', () => {
})
it('omits the default from the route and treats it as equal to no sort', () => {
const base = { page: 1, size: 25, q: '', status: '' as const, site: '' }
const base = { page: 1, size: 25, q: '', status: '' as const, site: '', seo: '' as const }
expect(toRouteQuery({ ...base, sort: 'updated_at:desc' })).toEqual({})
expect(toRouteQuery({ ...base, sort: 'title:asc' })).toEqual({
sort: 'title:asc',
@@ -98,6 +100,7 @@ describe('toRouteQuery', () => {
status: '',
sort: '',
site: '',
seo: '',
}),
).toEqual({})
})
@@ -111,6 +114,7 @@ describe('toRouteQuery', () => {
status: 'online',
sort: 'title:desc',
site: '',
seo: '',
}),
).toEqual({
page: '2',
@@ -131,6 +135,7 @@ describe('sameArticleQuery', () => {
status: '' as const,
sort: '',
site: '',
seo: '',
}
expect(sameArticleQuery(base, { ...base })).toBe(true)
expect(sameArticleQuery(base, { ...base, page: 2 })).toBe(false)
@@ -148,7 +153,7 @@ describe('site parameter', () => {
})
it('omits an empty site and tells two queries apart by their site', () => {
const base = { page: 1, size: 25, q: '', status: '' as const, sort: '' }
const base = { page: 1, size: 25, q: '', status: '' as const, sort: '', seo: '' as const }
expect(toRouteQuery({ ...base, site: '' })).toEqual({})
expect(sameArticleQuery({ ...base, site: 'journal' }, { ...base, site: '' })).toBe(false)
expect(sameArticleQuery({ ...base, site: 'journal' }, { ...base, site: 'journal' })).toBe(
@@ -156,3 +161,24 @@ describe('site parameter', () => {
)
})
})
describe('seo parameter', () => {
it('reads only the value suggestions and writes it after the site', () => {
const parsed = parseArticleQuery({ site: 'journal', seo: 'suggestions' })
expect(parsed.seo).toBe('suggestions')
expect(Object.keys(toRouteQuery(parsed))).toEqual(['site', 'seo'])
})
it.each(['maybe', '', 'READY', 'ready', 'hidden', 'suggestions,x'])(
'drops the unknown value "%s"',
(seo) => {
expect(parseArticleQuery({ seo }).seo).toBe('')
},
)
it('tells two queries apart by their seo filter', () => {
const base = parseArticleQuery({})
expect(sameArticleQuery(base, { ...base, seo: 'suggestions' })).toBe(false)
expect(sameArticleQuery(base, { ...base })).toBe(true)
})
})