Skip to content
← Public packages

@kody/mailroom

Offline-first PWA for your Kody mailbox: sent and received threads, copy-prompt for agents, no send.

src/ui/page.node.test.ts

46 lines · 1.9 KB · TypeScript
import assert from 'node:assert/strict'
import test from 'node:test'
import { LOCAL_THREADS_KEY } from './client-script.ts'
import { renderAppPage } from './page.ts'
import { serviceWorkerScript } from './sw-script.ts'

test('app page is an installable offline mail client with copy-prompt', () => {
	const html = renderAppPage({
		appBasePath: '/packages/mailroom',
		hostedUrl: 'https://kody.kody.run/packages/mailroom',
	})
	assert.match(html, /data-base="\/packages\/mailroom\/"/)
	assert.match(html, /indexedDB\.open/)
	assert.match(html, new RegExp(LOCAL_THREADS_KEY))
	assert.match(html, /navigator\.serviceWorker\.register/)
	assert.match(html, /beforeinstallprompt/)
	assert.match(html, /popovertarget="mailroom-install-popover"/)
	assert.match(html, /data-install-steps/)
	assert.match(html, /appinstalled/)
	assert.match(html, />Received</)
	assert.match(html, />Sent</)
	assert.match(html, /Copy thread prompt/)
	assert.match(html, /Copy prompt/)
	assert.match(html, /data-direction="inbound"/)
	assert.match(html, /data-direction="outbound"/)
	assert.match(html, /<h1>Mailroom<\/h1>/)
	assert.match(html, /data-about/)
	assert.match(html, /favicon\.png/)
	assert.match(html, /apple-touch-icon\.png/)
	assert.equal(html.toLowerCase().includes('compose'), false)
	assert.equal(html.includes('mailto:'), false)
	assert.match(html, /read-only; do not send/)
	assert.match(html, /startInboxPoll/)
	assert.match(html, /api\/status/)
	const refreshAt = html.indexOf('refresh({ force: true }).then')
	const swAt = html.indexOf('navigator.serviceWorker.register')
	assert.ok(refreshAt > 0 && swAt > 0 && swAt < refreshAt)
})

test('service worker caches the PWA shell', () => {
	const script = serviceWorkerScript('/packages/mailroom')
	assert.match(script, /mailroom-v2/)
	assert.match(script, /\/packages\/mailroom\/manifest.webmanifest/)
	assert.match(script, /networkFirst/)
	assert.match(script, /cacheFirst/)
})