- Add vitest as dev dep (pnpm add -D vitest), create vitest.config.ts with globals:true and setupFiles - Migrate digest-template, normalize-relay-url, reschedule-on-frequency-change, and event-arrival-race from raw JS + hand-rolled asserts to vitest describe/it/expect, as .test.ts (port all assertions without weakening) - Create test/setup.ts with env vars needed by env.ts/mailer.ts - DELETE test/web-ui.test.js: dead test for removed web UI (PR #1) - package.json: add test:unit script (vitest run), keep test = bash E2E - script/checks: add pnpm test:unit after build - README: document pnpm test:unit / pnpm test
33 lines
No EOL
1.2 KiB
TypeScript
33 lines
No EOL
1.2 KiB
TypeScript
import { describe, it, expect } from 'vitest'
|
|
import { readFileSync } from 'fs'
|
|
import { fileURLToPath } from 'url'
|
|
import { dirname, join } from 'path'
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
const templatePath = join(__dirname, '..', 'src', 'emails', 'digest.mjml')
|
|
const source = readFileSync(templatePath, 'utf8')
|
|
const lines = source.split('\n')
|
|
|
|
describe('digest.mjml brandAccent usage', () => {
|
|
it('.event-item border-left does NOT hardcode #7161FF', () => {
|
|
const hasHardcoded = lines.some(l => l.includes('.event-item') && l.includes('#7161FF'))
|
|
expect(hasHardcoded).toBe(false)
|
|
})
|
|
|
|
it('.footer a color does NOT hardcode #7161FF', () => {
|
|
const hasHardcoded = lines.some(l => l.includes('.footer a') && l.includes('#7161FF'))
|
|
expect(hasHardcoded).toBe(false)
|
|
})
|
|
|
|
it('.event-item border-left uses {{brandAccent}}', () => {
|
|
const eventItemLine = lines.find(l => l.includes('.event-item'))
|
|
expect(eventItemLine).toBeDefined()
|
|
expect(eventItemLine).toContain('{{brandAccent}}')
|
|
})
|
|
|
|
it('.footer a color uses {{brandAccent}}', () => {
|
|
const footerALine = lines.find(l => l.includes('.footer a'))
|
|
expect(footerALine).toBeDefined()
|
|
expect(footerALine).toContain('{{brandAccent}}')
|
|
})
|
|
}) |