@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
275 lines (216 loc) • 7.54 kB
text/typescript
import { t } from 'i18next';
import { afterEach, describe, expect, it, vi } from 'vitest';
import { UserStore } from '@/store/user';
import { authSelectors, userProfileSelectors } from './selectors';
vi.mock('i18next', () => ({
t: vi.fn((key) => key),
}));
// 定义一个变量来存储 enableAuth 的值
let enableAuth = true;
let isDesktop = false;
// 模拟 @/const/auth 模块
vi.mock('@/const/auth', () => ({
get enableAuth() {
return enableAuth;
},
}));
// 模拟 @/const/version 模块
vi.mock('@/const/version', () => ({
get isDesktop() {
return isDesktop;
},
}));
afterEach(() => {
enableAuth = true;
isDesktop = false;
});
describe('userProfileSelectors', () => {
describe('displayUserName', () => {
it('should return default username when auth is disabled and not desktop', () => {
enableAuth = false;
isDesktop = false;
const store: UserStore = {
isSignedIn: false,
user: null,
enableAuth: () => false,
} as unknown as UserStore;
expect(userProfileSelectors.displayUserName(store)).toBe('LobeChat');
});
it('should return user username when auth is disabled and is desktop', () => {
enableAuth = false;
isDesktop = true;
const store: UserStore = {
isSignedIn: false,
user: { username: 'johndoe' },
enableAuth: () => false,
} as unknown as UserStore;
expect(userProfileSelectors.displayUserName(store)).toBe('johndoe');
});
it('should return user username when signed in', () => {
const store: UserStore = {
isSignedIn: true,
user: { username: 'johndoe' },
enableAuth: () => true,
} as UserStore;
expect(userProfileSelectors.displayUserName(store)).toBe('johndoe');
});
it('should return email when signed in but username is not existed in UserStore', () => {
const store: UserStore = {
isSignedIn: true,
user: { email: 'demo@lobehub.com' },
enableAuth: () => true,
} as UserStore;
expect(userProfileSelectors.displayUserName(store)).toBe('demo@lobehub.com');
});
it('should return "anonymous" when not signed in', () => {
const store: UserStore = {
enableAuth: () => true,
isSignedIn: false,
user: null,
} as unknown as UserStore;
expect(userProfileSelectors.displayUserName(store)).toBe('anonymous');
});
});
describe('email', () => {
it('should return user email if exist', () => {
const store: UserStore = {
user: { email: 'demo@lobehub.com' },
} as UserStore;
expect(userProfileSelectors.email(store)).toBe('demo@lobehub.com');
});
it('should return empty string if not exist', () => {
const store: UserStore = {
user: { email: undefined },
} as UserStore;
expect(userProfileSelectors.email(store)).toBe('');
});
});
describe('fullName', () => {
it('should return user fullName if exist', () => {
const store: UserStore = {
user: { fullName: 'John Doe' },
} as UserStore;
expect(userProfileSelectors.fullName(store)).toBe('John Doe');
});
it('should return empty string if not exist', () => {
const store: UserStore = {
user: { fullName: undefined },
} as UserStore;
expect(userProfileSelectors.fullName(store)).toBe('');
});
});
describe('nickName', () => {
it('should return default nickname when auth is disabled and not desktop', () => {
enableAuth = false;
isDesktop = false;
const store: UserStore = {
isSignedIn: false,
user: null,
enableAuth: () => false,
} as unknown as UserStore;
expect(userProfileSelectors.nickName(store)).toBe('userPanel.defaultNickname');
expect(t).toHaveBeenCalledWith('userPanel.defaultNickname', { ns: 'common' });
});
it('should return user fullName when auth is disabled and is desktop', () => {
enableAuth = false;
isDesktop = true;
const store: UserStore = {
isSignedIn: false,
user: { fullName: 'John Doe' },
enableAuth: () => false,
} as unknown as UserStore;
expect(userProfileSelectors.nickName(store)).toBe('John Doe');
});
it('should return user fullName when signed in', () => {
enableAuth = true;
const store: UserStore = {
isSignedIn: true,
user: { fullName: 'John Doe' },
enableAuth: () => true,
} as UserStore;
expect(userProfileSelectors.nickName(store)).toBe('John Doe');
});
it('should return user username when fullName is not available', () => {
const store: UserStore = {
isSignedIn: true,
user: { username: 'johndoe' },
enableAuth: () => true,
} as UserStore;
expect(userProfileSelectors.nickName(store)).toBe('johndoe');
});
it('should return anonymous nickname when not signed in', () => {
enableAuth = true;
const store: UserStore = {
enableAuth: () => true,
isSignedIn: false,
user: null,
} as unknown as UserStore;
expect(userProfileSelectors.nickName(store)).toBe('userPanel.anonymousNickName');
expect(t).toHaveBeenCalledWith('userPanel.anonymousNickName', { ns: 'common' });
});
});
describe('username', () => {
it('should return default username when auth is disabled and not desktop', () => {
enableAuth = false;
isDesktop = false;
const store: UserStore = {
isSignedIn: false,
user: null,
enableAuth: () => false,
} as unknown as UserStore;
expect(userProfileSelectors.username(store)).toBe('LobeChat');
});
it('should return user username when auth is disabled and is desktop', () => {
enableAuth = false;
isDesktop = true;
const store: UserStore = {
isSignedIn: false,
user: { username: 'johndoe' },
enableAuth: () => false,
} as unknown as UserStore;
expect(userProfileSelectors.username(store)).toBe('johndoe');
});
it('should return user username when signed in', () => {
const store: UserStore = {
isSignedIn: true,
user: { username: 'johndoe' },
enableAuth: () => true,
} as UserStore;
expect(userProfileSelectors.username(store)).toBe('johndoe');
});
it('should return "anonymous" when not signed in', () => {
const store: UserStore = {
enableAuth: () => true,
isSignedIn: false,
user: null,
} as unknown as UserStore;
expect(userProfileSelectors.username(store)).toBe('anonymous');
});
});
});
describe('authSelectors', () => {
describe('isLogin', () => {
it('should return true when auth is disabled', () => {
enableAuth = false;
const store: UserStore = {
isSignedIn: false,
enableAuth: () => false,
} as UserStore;
expect(authSelectors.isLogin(store)).toBe(true);
});
it('should return true when signed in', () => {
const store: UserStore = {
isSignedIn: true,
enableAuth: () => true,
} as UserStore;
expect(authSelectors.isLogin(store)).toBe(true);
});
it('should return false when not signed in and auth is enabled', () => {
const store: UserStore = {
isSignedIn: false,
enableAuth: () => true,
} as UserStore;
expect(authSelectors.isLogin(store)).toBe(false);
});
});
});