Files
TREK/client/tests/unit/remoteEventHandler/files.test.ts
T
2026-04-07 12:31:09 +02:00

62 lines
2.4 KiB
TypeScript

import { describe, it, expect, beforeEach } from 'vitest';
import { useTripStore } from '../../../src/store/tripStore';
import { resetAllStores } from '../../helpers/store';
import { buildTripFile } from '../../helpers/factories';
beforeEach(() => {
resetAllStores();
});
describe('remoteEventHandler > files', () => {
const seedData = () => {
useTripStore.setState({
files: [buildTripFile({ id: 1, original_name: 'document.pdf' })],
});
};
it('FE-WSEVT-FILE-001: file:created prepends new file to array', () => {
seedData();
const newFile = buildTripFile({ id: 99, original_name: 'photo.jpg' });
useTripStore.getState().handleRemoteEvent({ type: 'file:created', file: newFile });
const { files } = useTripStore.getState();
expect(files).toHaveLength(2);
expect(files[0].id).toBe(99); // prepended
});
it('FE-WSEVT-FILE-002: file:created is idempotent — no duplicate if same ID', () => {
seedData();
const duplicate = buildTripFile({ id: 1, original_name: 'document_dup.pdf' });
useTripStore.getState().handleRemoteEvent({ type: 'file:created', file: duplicate });
const { files } = useTripStore.getState();
expect(files).toHaveLength(1);
expect(files[0].original_name).toBe('document.pdf');
});
it('FE-WSEVT-FILE-003: file:updated replaces file in array', () => {
seedData();
const updated = buildTripFile({ id: 1, original_name: 'renamed.pdf' });
useTripStore.getState().handleRemoteEvent({ type: 'file:updated', file: updated });
const { files } = useTripStore.getState();
expect(files[0].original_name).toBe('renamed.pdf');
});
it('FE-WSEVT-FILE-004: file:deleted removes file by ID', () => {
seedData();
useTripStore.getState().handleRemoteEvent({ type: 'file:deleted', fileId: 1 });
const { files } = useTripStore.getState();
expect(files).toHaveLength(0);
});
it('FE-WSEVT-FILE-005: file:created ordering — newest is first', () => {
seedData();
const f2 = buildTripFile({ id: 2, original_name: 'second.pdf' });
const f3 = buildTripFile({ id: 3, original_name: 'third.pdf' });
useTripStore.getState().handleRemoteEvent({ type: 'file:created', file: f2 });
useTripStore.getState().handleRemoteEvent({ type: 'file:created', file: f3 });
const { files } = useTripStore.getState();
expect(files[0].id).toBe(3);
expect(files[1].id).toBe(2);
expect(files[2].id).toBe(1);
});
});