All checks were successful
build-and-push / build (push) Successful in 32s
- 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
58 lines
1.5 KiB
JavaScript
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()
|
|
})
|