@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.
87 lines (69 loc) • 2.34 kB
text/typescript
import { nanoid } from 'nanoid';
import { describe, expect, it } from 'vitest';
import { SessionGroupItem } from '@/types/session';
import { sessionGroupsReducer } from './reducer';
describe('sessionGroupsReducer', () => {
const initialState: SessionGroupItem[] = [
{
id: nanoid(),
name: 'Group 1',
createdAt: new Date(),
updatedAt: new Date(),
},
{
id: nanoid(),
name: 'Group 2',
createdAt: new Date(),
updatedAt: new Date(),
sort: 1,
},
];
it('should add a new session group item', () => {
const newItem: SessionGroupItem = {
id: nanoid(),
name: 'New Group',
createdAt: new Date(),
updatedAt: new Date(),
};
const result = sessionGroupsReducer(initialState, {
type: 'addSessionGroupItem',
item: newItem,
});
expect(result).toHaveLength(3);
expect(result).toContainEqual(newItem);
});
it('should delete a session group item', () => {
const itemToDelete = initialState[0].id;
const result = sessionGroupsReducer(initialState, {
type: 'deleteSessionGroupItem',
id: itemToDelete,
});
expect(result).toHaveLength(1);
expect(result).not.toContainEqual(expect.objectContaining({ id: itemToDelete }));
});
it('should update a session group item', () => {
const itemToUpdate = initialState[0].id;
const updatedItem = { name: 'Updated Group' };
const result = sessionGroupsReducer(initialState, {
type: 'updateSessionGroupItem',
id: itemToUpdate,
item: updatedItem,
});
expect(result).toHaveLength(2);
expect(result).toContainEqual(expect.objectContaining({ id: itemToUpdate, ...updatedItem }));
});
it('should update session group order', () => {
const sortMap = [
{ id: initialState[1].id, sort: 0 },
{ id: initialState[0].id, sort: 1 },
];
const result = sessionGroupsReducer(initialState, { type: 'updateSessionGroupOrder', sortMap });
expect(result).toHaveLength(2);
expect(result[0].id).toBe(initialState[1].id);
expect(result[1].id).toBe(initialState[0].id);
});
it('should return the initial state for unknown action', () => {
const result = sessionGroupsReducer(initialState, { type: 'unknown' } as any);
expect(result).toEqual(initialState);
});
});