From 30e168b6fb66d1f45efcb77d53c03ff9a10b9dfe Mon Sep 17 00:00:00 2001 From: MaximumTrainer <1376575+MaximumTrainer@users.noreply.github.com> Date: Fri, 17 Apr 2026 15:42:48 +0100 Subject: [PATCH] Revert "fix: construct User object from flat AuthResponse fields in auth store" --- frontend/src/store/auth.ts | 22 +--- frontend/src/types/index.ts | 5 +- .../src/views/__tests__/auth.store.test.ts | 102 ------------------ 3 files changed, 6 insertions(+), 123 deletions(-) diff --git a/frontend/src/store/auth.ts b/frontend/src/store/auth.ts index 41d0303..12743c0 100644 --- a/frontend/src/store/auth.ts +++ b/frontend/src/store/auth.ts @@ -1,7 +1,7 @@ import { defineStore } from 'pinia' import { ref, computed } from 'vue' import * as authApi from '@/api/auth' -import type { User, LoginRequest, RegisterRequest, UserRole, AuthResponse } from '@/types' +import type { User, LoginRequest, RegisterRequest, UserRole } from '@/types' export const useAuthStore = defineStore('auth', () => { const token = ref(null) @@ -9,16 +9,6 @@ export const useAuthStore = defineStore('auth', () => { const isAuthenticated = computed(() => !!user.value) - function userFromAuthResponse(response: AuthResponse): User { - return { - id: response.userId, - username: response.username, - email: response.email, - role: response.role, - createdAt: new Date().toISOString() - } - } - function initializeFromStorage(): void { const storedToken = localStorage.getItem('token') const storedUser = localStorage.getItem('user') @@ -55,19 +45,17 @@ export const useAuthStore = defineStore('auth', () => { async function login(credentials: LoginRequest): Promise { const response = await authApi.login(credentials) token.value = response.token - const loginUser = userFromAuthResponse(response) - user.value = loginUser + user.value = response.user localStorage.setItem('token', response.token) - localStorage.setItem('user', JSON.stringify(loginUser)) + localStorage.setItem('user', JSON.stringify(response.user)) } async function register(payload: RegisterRequest & { role?: UserRole }): Promise { const response = await authApi.register(payload) token.value = response.token - const regUser = userFromAuthResponse(response) - user.value = regUser + user.value = response.user localStorage.setItem('token', response.token) - localStorage.setItem('user', JSON.stringify(regUser)) + localStorage.setItem('user', JSON.stringify(response.user)) } async function logout(): Promise { diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts index 9ce3685..44b2a32 100644 --- a/frontend/src/types/index.ts +++ b/frontend/src/types/index.ts @@ -28,10 +28,7 @@ export interface RegisterRequest { export interface AuthResponse { token: string - userId: number - username: string - email: string - role: UserRole + user: User } // ── Workspace ───────────────────────────────────────────────────────────── diff --git a/frontend/src/views/__tests__/auth.store.test.ts b/frontend/src/views/__tests__/auth.store.test.ts index 079c791..b0c3732 100644 --- a/frontend/src/views/__tests__/auth.store.test.ts +++ b/frontend/src/views/__tests__/auth.store.test.ts @@ -94,108 +94,6 @@ describe('useAuthStore – SAML session initialisation', () => { }) }) -describe('useAuthStore – login / register with flat AuthResponse', () => { - beforeEach(() => { - setActivePinia(createPinia()) - localStorage.clear() - vi.resetAllMocks() - }) - - const flatLoginResponse = { - token: 'jwt.login.token', - userId: 42, - username: 'test-user', - email: 'test@example.com', - role: UserRole.USER - } - - const flatRegisterResponse = { - token: 'jwt.register.token', - userId: 99, - username: 'new-user', - email: 'new@example.com', - role: UserRole.ADMIN - } - - it('populates user correctly after login with flat AuthResponse', async () => { - vi.mocked(authApi.login).mockResolvedValue(flatLoginResponse) - - const auth = useAuthStore() - await auth.login({ username: 'test-user', password: 'secret' }) - - expect(auth.user).not.toBeNull() - expect(auth.user?.id).toBe(42) - expect(auth.user?.username).toBe('test-user') - expect(auth.user?.email).toBe('test@example.com') - expect(auth.user?.role).toBe(UserRole.USER) - expect(auth.token).toBe('jwt.login.token') - }) - - it('sets isAuthenticated to true after login', async () => { - vi.mocked(authApi.login).mockResolvedValue(flatLoginResponse) - - const auth = useAuthStore() - expect(auth.isAuthenticated).toBe(false) - - await auth.login({ username: 'test-user', password: 'secret' }) - - expect(auth.isAuthenticated).toBe(true) - }) - - it('persists constructed User to localStorage after login', async () => { - vi.mocked(authApi.login).mockResolvedValue(flatLoginResponse) - - const auth = useAuthStore() - await auth.login({ username: 'test-user', password: 'secret' }) - - expect(localStorage.getItem('token')).toBe('jwt.login.token') - const storedUser = JSON.parse(localStorage.getItem('user')!) - expect(storedUser.id).toBe(42) - expect(storedUser.username).toBe('test-user') - expect(storedUser.email).toBe('test@example.com') - expect(storedUser.role).toBe(UserRole.USER) - }) - - it('populates user correctly after register with flat AuthResponse', async () => { - vi.mocked(authApi.register).mockResolvedValue(flatRegisterResponse) - - const auth = useAuthStore() - await auth.register({ username: 'new-user', email: 'new@example.com', password: 'secret123' }) - - expect(auth.user).not.toBeNull() - expect(auth.user?.id).toBe(99) - expect(auth.user?.username).toBe('new-user') - expect(auth.user?.email).toBe('new@example.com') - expect(auth.user?.role).toBe(UserRole.ADMIN) - expect(auth.token).toBe('jwt.register.token') - }) - - it('sets isAuthenticated to true after register', async () => { - vi.mocked(authApi.register).mockResolvedValue(flatRegisterResponse) - - const auth = useAuthStore() - expect(auth.isAuthenticated).toBe(false) - - await auth.register({ username: 'new-user', email: 'new@example.com', password: 'secret123' }) - - expect(auth.isAuthenticated).toBe(true) - }) - - it('persists constructed User to localStorage after register', async () => { - vi.mocked(authApi.register).mockResolvedValue(flatRegisterResponse) - - const auth = useAuthStore() - await auth.register({ username: 'new-user', email: 'new@example.com', password: 'secret123' }) - - expect(localStorage.getItem('token')).toBe('jwt.register.token') - const storedUser = JSON.parse(localStorage.getItem('user')!) - expect(storedUser.id).toBe(99) - expect(storedUser.username).toBe('new-user') - expect(storedUser.email).toBe('new@example.com') - expect(storedUser.role).toBe(UserRole.ADMIN) - }) -}) - describe('useAuthStore – mocking the SAML user directly (unit-test style)', () => { beforeEach(() => { setActivePinia(createPinia())