Spaces:
Sleeping
Sleeping
| 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); | |
| }); | |
| }); | |