Files
gui-video-clipper/tests/lib/stores/clips.test.ts

78 lines
1.8 KiB
TypeScript
Raw Normal View History

import { describe, it, expect, beforeEach } from 'vitest';
import {
addClip,
removeClip,
updateClip,
markInPoint,
markOutPoint,
getClips,
getSelectedClipId,
getPendingInPoint,
clearAll,
selectClip,
} from '$lib/stores/clips.svelte';
describe('clip store', () => {
beforeEach(() => {
clearAll();
});
it('starts with no clips', () => {
expect(getClips()).toHaveLength(0);
});
it('adds a clip', () => {
addClip(10, 20);
const clips = getClips();
expect(clips).toHaveLength(1);
expect(clips[0].startTime).toBe(10);
expect(clips[0].endTime).toBe(20);
expect(clips[0].label).toBe('Clip 1');
});
it('removes a clip', () => {
addClip(10, 20);
const id = getClips()[0].id;
removeClip(id);
expect(getClips()).toHaveLength(0);
});
it('updates clip times', () => {
addClip(10, 20);
const id = getClips()[0].id;
updateClip(id, { startTime: 5 });
expect(getClips()[0].startTime).toBe(5);
expect(getClips()[0].endTime).toBe(20);
});
it('marks in-point and out-point to create a clip', () => {
markInPoint(15);
expect(getPendingInPoint()).toBe(15);
expect(getClips()).toHaveLength(0);
markOutPoint(25);
expect(getPendingInPoint()).toBeNull();
expect(getClips()).toHaveLength(1);
expect(getClips()[0].startTime).toBe(15);
expect(getClips()[0].endTime).toBe(25);
});
it('updates selected clip start when I is pressed', () => {
addClip(10, 20);
const id = getClips()[0].id;
selectClip(id);
markInPoint(12);
expect(getClips()[0].startTime).toBe(12);
expect(getPendingInPoint()).toBeNull();
});
it('swaps start/end if in-point is after out-point', () => {
markInPoint(30);
markOutPoint(10);
const clip = getClips()[0];
expect(clip.startTime).toBe(10);
expect(clip.endTime).toBe(30);
});
});