authSlice.test.ts
1.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import { describe, it, expect } from 'vitest';
import reducer, {
setSession,
clearSession,
setStatus,
selectIsAuthenticated,
selectAccessToken,
selectUserInfo,
selectAuthStatus,
} from './authSlice';
import type { UserInfo } from '../../api/auth';
const userInfo: UserInfo = {
userId: 1,
username: 'alice',
userType: 'NORMAL',
language: 'zh-CN',
companyCode: 'HQ',
};
describe('authSlice', () => {
it('setSession writes accessToken and userInfo and status=success', () => {
const next = reducer(undefined, setSession({ accessToken: 'jwt', userInfo }));
expect(next.accessToken).toBe('jwt');
expect(next.userInfo).toEqual(userInfo);
expect(next.status).toBe('success');
});
it('clearSession resets to null and status=idle', () => {
const initial = reducer(undefined, setSession({ accessToken: 'jwt', userInfo }));
const cleared = reducer(initial, clearSession());
expect(cleared.accessToken).toBeNull();
expect(cleared.userInfo).toBeNull();
expect(cleared.status).toBe('idle');
});
it('setStatus updates status', () => {
const next = reducer(undefined, setStatus('submitting'));
expect(next.status).toBe('submitting');
});
it('selectIsAuthenticated true when token present', () => {
const state = { auth: reducer(undefined, setSession({ accessToken: 'jwt', userInfo })) };
expect(selectIsAuthenticated(state)).toBe(true);
expect(selectAccessToken(state)).toBe('jwt');
expect(selectUserInfo(state)).toEqual(userInfo);
expect(selectAuthStatus(state)).toBe('success');
});
it('selectIsAuthenticated false initially', () => {
const state = { auth: reducer(undefined, { type: '@@INIT' } as any) };
expect(selectIsAuthenticated(state)).toBe(false);
});
});