import { describe, it, expect, vi } from 'vitest'; // import { actions } from '$root/routes/anmeldung/+page.server'; // import { load } from '$root/routes/(token-based)/+layout.server' import { actions } from '../../src/routes/anmeldung/+page.server'; import { load } from '../../src/routes/(token-based)/+layout.server'; import { baseData } from '../fixtures'; import { ROUTE_NAMES } from '../../src/routes'; import { dev } from '$app/environment'; import { vorgangExists, vorgangPINValidation } from '$lib/server/vorgangService'; import type { Redirect } from '@sveltejs/kit'; vi.mock('$lib/server/vorgangService', () => ({ vorgangExists: vi.fn(), vorgangPINValidation: vi.fn() })); describe('Vorgang Anzeige via Token', () => { it('Setze Cookie nach erfolgreicher Eingabe', async () => { // Mock formData const vorgObj = baseData.vorgang; const formData = new FormData(); formData.set('vorgang-token', vorgObj.vorgangToken); formData.set('vorgang-pin', vorgObj.vorgangPIN); const mockRequest = { formData: vi.fn().mockResolvedValue(formData) }; vi.mocked(vorgangPINValidation).mockReturnValueOnce(true); const cookiesSet = vi.fn(); const event = { request: mockRequest, cookies: { set: cookiesSet } }; let thrownRedirect: Redirect | undefined; try { await actions.default(event); } catch (e) { thrownRedirect = e as Redirect; } // Redirect bei erfolgreicher Eingabe expect(thrownRedirect?.status).toBe(303); expect(thrownRedirect?.location).toBe(ROUTE_NAMES.VORGANG(vorgObj.vorgangToken)); // Cookie wurde gesetzt const COOKIE_NAME = `token-${vorgObj.vorgangToken}`; expect(cookiesSet).toHaveBeenCalledWith(COOKIE_NAME, vorgObj.vorgangPIN, { path: '/', httpOnly: true, sameSite: 'strict', secure: !dev }); }); it('Schlägt fehl wenn keine Daten übergeben werden', async () => { const formData = new FormData(); // no data const mockRequest = { formData: vi.fn().mockResolvedValue(formData) }; const cookiesSet = vi.fn(); const event = { request: mockRequest, cookies: { set: cookiesSet } }; const result = await actions.default(event); expect(result.status).toBe(400); expect(result.data.message).toMatch(/PIN eingeben/i); // Cookie wird nicht gesetzt expect(cookiesSet).not.toHaveBeenCalled(); }); it.todo('Überprüfe was passiert, wenn Eingabe falsch, bzw. nicht im System passend gefunden'); }); describe('Teste Guard', () => { it('Lese Cookie aus', async () => { const vorgObj = baseData.vorgang; const COOKIE_NAME = `token-${vorgObj.vorgangToken}`; const cookiesGet = vi.fn().mockImplementation((key: string) => { if (key === COOKIE_NAME) return vorgObj.vorgangPIN; return undefined; }); // mocked objects const event = { cookies: { get: cookiesGet }, locals: {}, params: { vorgang: vorgObj.vorgangToken } }; vi.mocked(vorgangExists).mockReturnValueOnce(true); vi.mocked(vorgangPINValidation).mockReturnValueOnce(true); await load(event); expect(cookiesGet).toHaveBeenCalledWith(COOKIE_NAME); }); it('Kein Cookie gesetzt', async () => { const vorgObj = baseData.vorgang; const COOKIE_NAME = `token-${vorgObj.vorgangToken}`; const cookiesGet = vi.fn().mockImplementation((key: string) => { if (key === COOKIE_NAME) return vorgObj.vorgangPIN; return undefined; }); // mocked objects const event = { cookies: { get: cookiesGet }, locals: {}, params: { vorgang: vorgObj.vorgangToken } }; vi.mocked(vorgangExists).mockReturnValueOnce(true); vi.mocked(vorgangPINValidation).mockReturnValueOnce(false); let thrownRedirect; try { await load(event); throw new Error('Function did not throw'); } catch (e) { thrownRedirect = e; } expect(thrownRedirect?.status).toBe(303); expect(thrownRedirect?.location).toBe( ROUTE_NAMES.ANMELDUNG_VORGANG_PARAM(vorgObj.vorgangToken) ); expect(cookiesGet).toHaveBeenCalledWith(COOKIE_NAME); }); });