import assert from 'node:assert/strict'
import test from 'node:test'
import {
needsCanonicalAppRedirect,
resolveAppUrl,
scopedAssetPath,
serviceWorkerAllowedPath,
serviceWorkerScope,
shouldCanonicalizeClientPath,
} from './app-url.ts'
const origin = 'https://kentcdodds.kody.run'
test('resolves series and sw URLs from a relative data-base', () => {
assert.equal(
resolveAppUrl('/packages/lineage/', 'api/series', origin),
'https://kentcdodds.kody.run/packages/lineage/api/series',
)
assert.equal(
resolveAppUrl('/packages/lineage', 'sw.js', origin),
'https://kentcdodds.kody.run/packages/lineage/sw.js',
)
assert.equal(
resolveAppUrl('/packages/lineage/', '/api/status', origin),
'https://kentcdodds.kody.run/packages/lineage/api/status',
)
})
test('rejects the previous relative-base URL constructor', () => {
assert.throws(
() => new URL('api/series', '/packages/lineage/'),
/Invalid URL/,
)
})
test('joins service-worker shell paths without a URL base', () => {
assert.equal(
scopedAssetPath('/packages/lineage', 'manifest.webmanifest'),
'/packages/lineage/manifest.webmanifest',
)
})
test('service worker scope stays on the trailing-slash default max scope', () => {
assert.equal(
serviceWorkerScope('/packages/lineage/', origin),
'https://kentcdodds.kody.run/packages/lineage/',
)
assert.equal(
serviceWorkerScope('/packages/lineage', origin),
'https://kentcdodds.kody.run/packages/lineage/',
)
assert.equal(serviceWorkerAllowedPath('/packages/lineage/'), '/packages/lineage')
assert.equal(needsCanonicalAppRedirect('/packages/lineage', '/packages/lineage'), true)
assert.equal(needsCanonicalAppRedirect('/packages/lineage/', '/packages/lineage'), false)
assert.equal(shouldCanonicalizeClientPath('/packages/lineage'), true)
assert.equal(shouldCanonicalizeClientPath('/packages/lineage/'), false)
})