From e1aaf0cc7e7c0055bd393f83e15b5b96c55c1f0c Mon Sep 17 00:00:00 2001 From: Henrik <000henrik@gmail.com> Date: Fri, 2 Oct 2026 14:41:20 +0200 Subject: [PATCH 1/3] Added test for JWT, regressiontest from our debt.md --- api/package.json | 6 ++++-- api/src/config.test.js | 26 ++++++++++++++++++++++++++ api/vitest.config.js | 8 ++++++++ package-lock.json | 3 ++- package.json | 2 +- 5 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 api/src/config.test.js create mode 100644 api/vitest.config.js diff --git a/api/package.json b/api/package.json index 92ccbf5..b119e69 100644 --- a/api/package.json +++ b/api/package.json @@ -7,7 +7,8 @@ "dev": "node --watch src/index.js", "start": "node src/index.js", "seed": "node src/db/seed.js", - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit", + "test": "vitest run" }, "dependencies": { "@utpost/shared": "file:../shared", @@ -21,6 +22,7 @@ "@types/express": "^4.17.0", "@types/node": "^22.0.0", "@types/pg": "^8.0.0", - "typescript": "^6.0.3" + "typescript": "^6.0.3", + "vitest": "^3.2.7" } } diff --git a/api/src/config.test.js b/api/src/config.test.js new file mode 100644 index 0000000..e4d406a --- /dev/null +++ b/api/src/config.test.js @@ -0,0 +1,26 @@ +//Test som kollar att JWT_SECRET läses från miljön och att servern vägrar starta om den saknas. + +import { describe, it, expect, vi } from 'vitest' + +// config.js läser miljövariabler vid import, så vi laddar om modulen för varje test. +const loadConfig = async () => { + vi.resetModules() + return import('./config.js') +} +// TODO: Läs JWT_SECRET från process.env i config.js och kasta ett tydligt fel om den saknas. +// Ta bort den hårdkodade hemligheten och sätt JWT_SECRET vid lokal start och i CI. +describe('JWT-konfiguration', () => { + it('läser JWT_SECRET från miljön', async () => { + vi.stubEnv('JWT_SECRET', 'hemlighet-for-testet') + + const { config } = await loadConfig() + + expect(config.jwtSecret).toBe('hemlighet-for-testet') + }) + + it('vägrar starta om JWT_SECRET saknas', async () => { + vi.stubEnv('JWT_SECRET', '') + + await expect(loadConfig()).rejects.toThrow(/JWT_SECRET/) + }) +}) \ No newline at end of file diff --git a/api/vitest.config.js b/api/vitest.config.js new file mode 100644 index 0000000..1345ec8 --- /dev/null +++ b/api/vitest.config.js @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + environment: 'node', + unstubEnvs: true, + }, +}) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index aa4ab7e..a528022 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,8 @@ "@types/express": "^4.17.0", "@types/node": "^22.0.0", "@types/pg": "^8.0.0", - "typescript": "^6.0.3" + "typescript": "^6.0.3", + "vitest": "^3.2.7" } }, "client": { diff --git a/package.json b/package.json index d89a080..1304b99 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "lint": "npm run lint --workspace=client", "format:check": "npm run format:check --workspace=client", "format": "npm run format --workspace=client", - "test": "npm test --workspace=client", + "test": "npm run test --workspace=client && npm run test --workspace=api", "typecheck": "npm run typecheck --workspace=shared && npm run typecheck --workspace=api", "build": "npm run build --workspace=web && npm run build --workspace=client" }, From fd5666368b8090ba127fe0f77c5cf8eb9b0ed1a3 Mon Sep 17 00:00:00 2001 From: Henrik <000henrik@gmail.com> Date: Tue, 6 Oct 2026 08:37:13 +0200 Subject: [PATCH 2/3] Pulled main --- api/src/config.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/api/src/config.js b/api/src/config.js index a3d4bea..f7ad73b 100644 --- a/api/src/config.js +++ b/api/src/config.js @@ -5,3 +5,19 @@ export const config = { port: 4000, uploadDir: './uploads', }; + +/* + +//lösningen så testet blir grönt. +const jwtSecret = process.env.JWT_SECRET + +if (!jwtSecret) { + throw new Error('JWT_SECRET måste vara satt') +} + +export const config = { + databaseUrl: 'postgres://utpost:utpost@localhost:5433/utpost', + jwtSecret, + port: 4000, + uploadDir: './uploads', +} */ \ No newline at end of file From 3111fcd100860e27933bb80c40c7f95ab4d2591e Mon Sep 17 00:00:00 2001 From: Henrik <000henrik@gmail.com> Date: Tue, 6 Oct 2026 08:44:57 +0200 Subject: [PATCH 3/3] Fixed the test --- api/src/config.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/src/config.js b/api/src/config.js index f7ad73b..443a710 100644 --- a/api/src/config.js +++ b/api/src/config.js @@ -1,4 +1,4 @@ -// TODO: flytta ut det här nån gång. /marcus 2021-03-11 +/* TODO: flytta ut det här nån gång. /marcus 2021-03-11 export const config = { databaseUrl: 'postgres://utpost:utpost@localhost:5433/utpost', jwtSecret: 'utpost-super-secret-2021', @@ -6,7 +6,7 @@ export const config = { uploadDir: './uploads', }; -/* +*/ //lösningen så testet blir grönt. const jwtSecret = process.env.JWT_SECRET @@ -20,4 +20,4 @@ export const config = { jwtSecret, port: 4000, uploadDir: './uploads', -} */ \ No newline at end of file +} \ No newline at end of file