Files
lyssnarr/backend/test/app.test.js
claude 4e0a8aae13
All checks were successful
build-and-push / build (push) Successful in 32s
Milstolpe 1: skelett — Fastify-backend med login, Vue-frontend (mörkt Jellyseerr-tema), Dockerfile
- backend: /api/health, /api/login|logout|session, sessionscookie,
  timingSafeEqual-lösenordskoll, allt annat under /api kräver inloggning,
  serverar byggd frontend med SPA-fallback; 4 tester (node:test)
- frontend: Vue 3 + Vite, login-sida, Upptäck-skal, sökfält (stub),
  mörkt tema enligt Jellyseerr-förlagan
- docker: multi-stage arm64-image; config-plumbing för Lidarr/Jellyfin/
  Gemini via env (Jellyfin-historik prioriterad som signal per Björn)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01824ZrvG2mDYYrmwqypLNup
2026-07-31 23:18:25 +02:00

58 lines
1.5 KiB
JavaScript

import test from 'node:test'
import assert from 'node:assert/strict'
import { buildApp } from '../src/app.js'
const config = {
appPassword: 'testlösen',
sessionSecret: 'x'.repeat(32),
lidarr: { url: '', apiKey: '' },
jellyfin: { url: '', apiKey: '' },
gemini: { apiKey: '', model: '' },
}
test('health svarar utan inloggning', async () => {
const app = buildApp(config)
const res = await app.inject({ method: 'GET', url: '/api/health' })
assert.equal(res.statusCode, 200)
assert.deepEqual(res.json(), { status: 'ok' })
await app.close()
})
test('fel lösenord ger 401', async () => {
const app = buildApp(config)
const res = await app.inject({
method: 'POST',
url: '/api/login',
payload: { password: 'fel' },
})
assert.equal(res.statusCode, 401)
await app.close()
})
test('rätt lösenord ger session-cookie och åtkomst', async () => {
const app = buildApp(config)
const login = await app.inject({
method: 'POST',
url: '/api/login',
payload: { password: 'testlösen' },
})
assert.equal(login.statusCode, 200)
const cookie = login.headers['set-cookie']
assert.ok(cookie, 'ingen session-cookie sattes')
const session = await app.inject({
method: 'GET',
url: '/api/session',
headers: { cookie },
})
assert.equal(session.json().authenticated, true)
await app.close()
})
test('skyddad API-rutt utan session ger 401', async () => {
const app = buildApp(config)
const res = await app.inject({ method: 'GET', url: '/api/whatever' })
assert.equal(res.statusCode, 401)
await app.close()
})