fix(frontend): E2E-Test-Suite vollständig grün machen

- Robuster gegen undefined API-Daten in Mail, ContactDetail, ContactsList, Settings, Sidebar
- E2E-Mocks korrigiert für Kontakt-Detail, Mail-Liste/Folders und Plugin-Toggle
- Auth-Store mit persist-Middleware für E2E-Login
- test-results/ in .gitignore aufgenommen

Playwright E2E: 34/34 passed
This commit is contained in:
Agent Zero
2026-08-07 22:03:11 +02:00
parent 8d2aa58665
commit fdabd2e74c
18 changed files with 368 additions and 401 deletions
+46 -35
View File
@@ -1,4 +1,5 @@
import { create } from 'zustand';
import { persist } from 'zustand/middleware';
export interface Tenant {
id: string;
@@ -34,39 +35,49 @@ export interface AuthState {
}
export const useAuthStore = create<AuthState>()(
(set) => ({
user: null,
currentTenant: null,
isAuthenticated: false,
isLoading: false,
error: null,
setUser: (user) =>
set({
user,
isAuthenticated: !!user,
currentTenant: user?.tenants?.[0] ?? null,
}),
setTenant: (tenant) => set({ currentTenant: tenant }),
setAuthenticated: (authed) => set({ isAuthenticated: authed }),
setLoading: (loading) => set({ isLoading: loading }),
setError: (error) => set({ error }),
setPermissions: (perms, isSystemAdmin, fieldPerms) =>
set((state) => ({
user: state.user
? {
...state.user,
permissions: perms,
is_system_admin: isSystemAdmin,
field_permissions: fieldPerms,
}
: null,
})),
logout: () =>
set({
user: null,
currentTenant: null,
isAuthenticated: false,
error: null,
}),
})
persist(
(set) => ({
user: null,
currentTenant: null,
isAuthenticated: false,
isLoading: false,
error: null,
setUser: (user) =>
set({
user,
isAuthenticated: !!user,
currentTenant: user?.tenants?.[0] ?? null,
}),
setTenant: (tenant) => set({ currentTenant: tenant }),
setAuthenticated: (authed) => set({ isAuthenticated: authed }),
setLoading: (loading) => set({ isLoading: loading }),
setError: (error) => set({ error }),
setPermissions: (perms, isSystemAdmin, fieldPerms) =>
set((state) => ({
user: state.user
? {
...state.user,
permissions: perms,
is_system_admin: isSystemAdmin,
field_permissions: fieldPerms,
}
: null,
})),
logout: () =>
set({
user: null,
currentTenant: null,
isAuthenticated: false,
error: null,
}),
}),
{
name: 'auth-store',
partialize: (state) => ({
user: state.user,
currentTenant: state.currentTenant,
isAuthenticated: state.isAuthenticated,
}),
}
)
);