Files
gartenmanager/frontend/src/stores/auth.test.js
Faultier314 4305d104e5
Some checks failed
Tests / Backend Tests (push) Failing after 5m42s
Tests / Frontend Tests (push) Failing after 1m11s
feat: add CI/CD pipelines, test suite, and ci/staging branch
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 10:13:12 +02:00

79 lines
2.4 KiB
JavaScript

import { describe, it, expect, beforeEach, vi } from 'vitest'
import { setActivePinia, createPinia } from 'pinia'
import { useAuthStore } from './auth'
// localStorage is not available in jsdom by default without setup,
// so we mock it minimally
const localStorageMock = (() => {
let store = {}
return {
getItem: (key) => store[key] ?? null,
setItem: (key, value) => { store[key] = String(value) },
removeItem: (key) => { delete store[key] },
clear: () => { store = {} },
}
})()
Object.defineProperty(globalThis, 'localStorage', { value: localStorageMock })
// Mock the API module so tests don't make real HTTP calls
vi.mock('@/api', () => ({
authApi: {
login: vi.fn(),
},
}))
describe('useAuthStore', () => {
beforeEach(() => {
localStorageMock.clear()
setActivePinia(createPinia())
})
it('initializes with null user when localStorage is empty', () => {
const store = useAuthStore()
expect(store.user).toBeNull()
expect(store.tenants).toEqual([])
expect(store.activeTenantId).toBeNull()
expect(store.isLoggedIn).toBe(false)
})
it('isLoggedIn is true when user is set', () => {
localStorageMock.setItem('user', JSON.stringify({ id: '1', email: 'a@b.de' }))
const store = useAuthStore()
expect(store.isLoggedIn).toBe(true)
})
it('logout clears state and localStorage', () => {
localStorageMock.setItem('user', JSON.stringify({ id: '1' }))
localStorageMock.setItem('tenants', JSON.stringify([{ id: 'tid' }]))
localStorageMock.setItem('tenant_id', 'tid')
const store = useAuthStore()
store.logout()
expect(store.user).toBeNull()
expect(store.tenants).toEqual([])
expect(store.activeTenantId).toBeNull()
expect(localStorageMock.getItem('user')).toBeNull()
})
it('setActiveTenant updates state and localStorage', () => {
const store = useAuthStore()
store.setActiveTenant('new-tenant-id')
expect(store.activeTenantId).toBe('new-tenant-id')
expect(localStorageMock.getItem('tenant_id')).toBe('new-tenant-id')
})
it('activeTenant returns matching tenant from list', () => {
const tenants = [
{ id: 'tid-1', name: 'Erster' },
{ id: 'tid-2', name: 'Zweiter' },
]
localStorageMock.setItem('tenants', JSON.stringify(tenants))
localStorageMock.setItem('tenant_id', 'tid-2')
const store = useAuthStore()
expect(store.activeTenant?.name).toBe('Zweiter')
})
})