refactor: 前端登录/权限/界面状态迁移至 zustand
This commit is contained in:
@@ -8,6 +8,9 @@
|
||||
import { expect } from 'vitest';
|
||||
import { CREDENTIALS } from './fixtures';
|
||||
import { BASE } from './setup';
|
||||
import { usePermissionStore } from '../store/permission/permissionStore';
|
||||
import { useUserStore } from '../store/user/userStore';
|
||||
import type { UserInfo } from '../store/user/userTypes';
|
||||
|
||||
// ── Types ───────────────────────────────────────────────────────────
|
||||
|
||||
@@ -37,8 +40,10 @@ export async function loginAs(
|
||||
expect(res.status).toBe(201);
|
||||
const json = (await res.json()) as ApiResponse<{ token: string; user: Record<string, unknown> }>;
|
||||
expect(json.code).toBe(0);
|
||||
localStorage.setItem('token', json.data.token);
|
||||
localStorage.setItem('user', JSON.stringify(json.data.user));
|
||||
useUserStore.getState().setSession(json.data.token, json.data.user as unknown as UserInfo);
|
||||
usePermissionStore
|
||||
.getState()
|
||||
.writePermissions((json.data.user.permissions ?? []) as string[]);
|
||||
return json.data;
|
||||
}
|
||||
|
||||
@@ -46,15 +51,14 @@ export async function loginAs(
|
||||
* Logout: clear localStorage.
|
||||
*/
|
||||
export function logout(): void {
|
||||
localStorage.removeItem('token');
|
||||
localStorage.removeItem('user');
|
||||
localStorage.removeItem('permissions');
|
||||
useUserStore.getState().logout();
|
||||
usePermissionStore.getState().clearPermissions();
|
||||
}
|
||||
|
||||
// ── API helpers (authenticated) ─────────────────────────────────────
|
||||
|
||||
function authHeaders(): Record<string, string> {
|
||||
const token = localStorage.getItem('token');
|
||||
const token = useUserStore.getState().token;
|
||||
return {
|
||||
'Content-Type': 'application/json',
|
||||
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
* Runs once before all tests.
|
||||
*/
|
||||
import { beforeAll, afterEach } from 'vitest';
|
||||
import { useAppStore } from '../store/app/appStore';
|
||||
import { usePermissionStore } from '../store/permission/permissionStore';
|
||||
import { useSettingsStore } from '../store/settings/settingsStore';
|
||||
import { useUserStore } from '../store/user/userStore';
|
||||
|
||||
// Base URL: the Vite dev server proxies /api → localhost:3003
|
||||
const BASE = 'http://localhost:3002';
|
||||
@@ -18,6 +22,17 @@ afterEach(() => {
|
||||
localStorage.removeItem('token');
|
||||
localStorage.removeItem('user');
|
||||
localStorage.removeItem('permissions');
|
||||
useUserStore.getState().logout();
|
||||
usePermissionStore.getState().clearPermissions();
|
||||
useAppStore.setState({
|
||||
sidebarCollapsed: false,
|
||||
mobileDrawerOpen: false,
|
||||
menuOpenKeys: [],
|
||||
aiChatOpen: false,
|
||||
aiWorking: false,
|
||||
routeDockTabs: [],
|
||||
});
|
||||
useSettingsStore.setState({ aiChat: { deepThinking: false } });
|
||||
});
|
||||
|
||||
export { BASE };
|
||||
|
||||
Reference in New Issue
Block a user