Files
vue-seo-layer/tests/pageHref.test.ts
Jakub Zych 7588aa53b0 fix: HTML sitemap page 1 redirects with the locale's segment
- seoFirstPageRedirect answers the unnumbered URL or null when the target
  is the URL itself, so /mapa-strony/<group>/strona/1 no longer loops (L4 WR-01)
- SeoHtmlSitemapPage takes the segment from the site answer, else the build
  option, else the param, and redirects only when the helper answers a target
2026-11-04 22:41:18 +01:00

62 lines
3.5 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import assert from 'node:assert/strict'
import test from 'node:test'
import { seoFirstPageRedirect, seoPageHref, seoPageNumber } from '../app/utils/pageHref.ts'
import { seoFillPages } from '../app/utils/seo.ts'
test('seoPageHref: the UI-SPEC L2 examples', () => {
assert.equal(seoPageHref('/blog', 1, 'query'), '/blog')
assert.equal(seoPageHref('/blog?sort=new', 3, 'query'), '/blog?sort=new&page=3')
assert.equal(seoPageHref('/blog', 3, 'path', 'strona'), '/blog/strona/3')
assert.equal(seoPageHref('/en/blog', 1, 'path', 'page'), '/en/blog')
})
test('seoPageHref: a page already in the URL is replaced', () => {
assert.equal(seoPageHref('/blog?page=5&sort=new', 6, 'query'), '/blog?sort=new&page=6')
assert.equal(seoPageHref('/blog?page=5', 1, 'query'), '/blog')
assert.equal(seoPageHref('/blog/strona/5', 4, 'path', 'strona'), '/blog/strona/4')
assert.equal(seoPageHref('/blog/strona/5?sort=new', 1, 'path', 'strona'), '/blog?sort=new')
assert.equal(seoPageHref('/strona/5', 1, 'path', 'strona'), '/')
assert.equal(seoPageHref('/docs/page/3', 2, 'query'), '/docs/page/3?page=2', 'a path segment is left alone in the query form')
assert.equal(seoPageHref('/blog?p=2', 3, 'query', '', 'p'), '/blog?p=3')
assert.equal(seoPageHref('/blog', 2, 'path'), '/blog/page/2', 'the param is the segment when none is given')
})
test('seoPageHref: query values are encoded, never concatenated raw', () => {
assert.equal(seoPageHref('/blog?q=%22%3E%3Cscript%3E', 2, 'query'), '/blog?q=%22%3E%3Cscript%3E&page=2')
assert.equal(seoPageHref('/blog#top', 2, 'query'), '/blog?page=2')
})
test('seoPageNumber: 1 without a page, null for an invalid one', () => {
assert.equal(seoPageNumber('/blog'), 1)
assert.equal(seoPageNumber('/blog?page=3'), 3)
assert.equal(seoPageNumber('/blog?page=abc'), null)
assert.equal(seoPageNumber('/blog?page=0'), null)
assert.equal(seoPageNumber('/blog?page=1&page=2'), null)
assert.equal(seoPageNumber('/blog/strona/4', 'path', 'strona'), 4)
assert.equal(seoPageNumber('/blog/strona/x', 'path', 'strona'), 1)
})
test('seoFillPages: %pages% in the title and meta, only once the count is known', () => {
const head = { title: 'Blog – strona 5 z %pages%', meta: [{ name: 'description', content: 'strona 5 z %pages%' }, { name: 'robots', content: 'index' }] }
const out = seoFillPages(head, 14)
assert.equal(out.title, 'Blog – strona 5 z 14')
assert.equal(out.meta[0]!.content, 'strona 5 z 14')
assert.equal(out.meta[1], head.meta[1])
assert.equal(seoFillPages(head, null), head)
assert.equal(seoFillPages(head, 0), head)
})
test('seoFirstPageRedirect: page 1 goes to the unnumbered URL with the locale segment (L4 WR-01)', () => {
assert.equal(seoFirstPageRedirect('/mapa-strony/posty/strona/1', 'path', 'strona', 'page'), '/mapa-strony/posty')
assert.equal(seoFirstPageRedirect('/sitemap/posts/page/1', 'path', 'page', 'page'), '/sitemap/posts')
assert.equal(seoFirstPageRedirect('/mapa-strony/posty?page=1', 'query', '', 'page'), '/mapa-strony/posty')
assert.equal(seoFirstPageRedirect('/mapa-strony/posty/strona/1?x=1', 'path', 'strona', 'page'), '/mapa-strony/posty?x=1')
})
test('seoFirstPageRedirect: never a redirect to the URL itself (no 301 loop)', () => {
// the segment missing: seoPageHref falls back to the param, which the URL does not carry
assert.equal(seoFirstPageRedirect('/mapa-strony/posty/strona/1', 'path', '', 'page'), null)
assert.equal(seoFirstPageRedirect('/mapa-strony/posty', 'query', '', 'page'), null)
assert.equal(seoFirstPageRedirect('/sitemap/posts', 'path', 'page', 'page'), null)
})