feat: persist track mute/solo status

This commit is contained in:
Xiaohan-Tian
2026-05-17 13:06:47 -07:00
parent cbd66ab4f6
commit 9c197ecd08
13 changed files with 285 additions and 21 deletions
+17
View File
@@ -1,6 +1,7 @@
import { describe, it, expect, beforeEach, vi } from 'vitest';
import { KGProjectStorage, DuplicateEntryError } from './KGProjectStorage';
import { KGProject } from '../KGProject';
import { KGTrack } from '../track/KGTrack';
// --- OPFS mock infrastructure ---
@@ -121,6 +122,22 @@ describe('KGProjectStorage', () => {
expect(loaded!.getBpm()).toBe(120);
});
it('preserves track mute and solo state when saving and loading', async () => {
const track = new KGTrack('Track 1', 1);
track.setMuted(true);
track.setSolo(true);
const project = new KGProject('My Song', 16, 0, 120, undefined, undefined, undefined, undefined, undefined, 1, [track], 11);
await storage.save('My Song', project);
const loaded = await storage.load('My Song');
expect(loaded).not.toBeNull();
expect(loaded!.getTracks()).toHaveLength(1);
expect(loaded!.getTracks()[0].getMuted()).toBe(true);
expect(loaded!.getTracks()[0].getSolo()).toBe(true);
});
it('creates meta.json and media/ directory on save', async () => {
const project = createTestProject('My Song');
await storage.save('My Song', project);