79 lines
2.1 KiB
TypeScript
79 lines
2.1 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
import { act } from '@testing-library/react';
|
|
import { KGMidiTrack } from '../core/track/KGMidiTrack';
|
|
|
|
const mockProject = {
|
|
getTimeSignature: () => ({ numerator: 4, denominator: 4 }),
|
|
getMaxBars: () => 32,
|
|
getBarWidthMultiplier: () => 1,
|
|
getTracks: () => [new KGMidiTrack('Track 1', 0, 'acoustic_grand_piano')],
|
|
getBpm: () => 120,
|
|
getKeySignature: () => 'C major',
|
|
getName: () => 'Test Project',
|
|
getSelectedMode: () => 'major',
|
|
getIsLooping: () => false,
|
|
getLoopingRange: () => null,
|
|
};
|
|
|
|
const mockCore = {
|
|
getCurrentProject: () => mockProject,
|
|
setPlayheadUpdateCallback: vi.fn(),
|
|
setPlaybackStateChangeCallback: vi.fn(),
|
|
getSelectedItems: () => [],
|
|
onSelectionChanged: vi.fn(),
|
|
canUndo: () => false,
|
|
canRedo: () => false,
|
|
getUndoDescription: () => '',
|
|
getRedoDescription: () => '',
|
|
setOnCommandHistoryChanged: vi.fn(),
|
|
executeCommand: vi.fn(),
|
|
clearSelectedItems: vi.fn(),
|
|
getStatus: () => 'Ready',
|
|
getPlayheadPosition: () => 0,
|
|
getIsPlaying: () => false,
|
|
};
|
|
|
|
vi.mock('../core/KGCore', () => ({
|
|
KGCore: {
|
|
instance: () => mockCore,
|
|
},
|
|
}));
|
|
|
|
vi.mock('../core/config/ConfigManager', () => ({
|
|
ConfigManager: {
|
|
instance: () => ({
|
|
getIsInitialized: () => true,
|
|
get: () => false,
|
|
}),
|
|
},
|
|
}));
|
|
|
|
describe('projectStore piano roll state', () => {
|
|
beforeEach(() => {
|
|
vi.resetModules();
|
|
});
|
|
|
|
it('clears hybrid state when opening a MIDI region', async () => {
|
|
const { useProjectStore } = await import('./projectStore');
|
|
|
|
act(() => {
|
|
useProjectStore.getState().openHybridMode('midi-a', 'audio-a');
|
|
});
|
|
|
|
let state = useProjectStore.getState();
|
|
expect(state.pianoRollMode).toBe('hybrid');
|
|
expect(state.activeRegionId).toBe('midi-a');
|
|
expect(state.hybridAudioRegionId).toBe('audio-a');
|
|
|
|
act(() => {
|
|
useProjectStore.getState().openMidiPianoRoll('midi-b');
|
|
});
|
|
|
|
state = useProjectStore.getState();
|
|
expect(state.showPianoRoll).toBe(true);
|
|
expect(state.pianoRollMode).toBe('midi-edit');
|
|
expect(state.activeRegionId).toBe('midi-b');
|
|
expect(state.hybridAudioRegionId).toBeNull();
|
|
});
|
|
});
|