Skip to content

Built for people who want to own their automations. Join the waitlist for an invite.

Package listing

@kentcdodds/lineage

src/ui/app-url.node.test.ts

57 lines · 1.8 KB · TypeScript
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)
})