feat: added global key signature track, global chord progression track, global tempo(BPM) track, and global marker track related tools for AI Agent
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { ReadMarkersTool } from './ReadMarkersTool';
|
||||
import { KGProject } from '../../core/KGProject';
|
||||
import { KGCore } from '../../core/KGCore';
|
||||
import { GlobalTrackType } from '../../core/global-track';
|
||||
import { KGMarkerRegion } from '../../core/region/KGMarkerRegion';
|
||||
import { findGlobalTrackByType } from '../../util/globalTrackUtil';
|
||||
|
||||
describe('ReadMarkersTool', () => {
|
||||
beforeEach(() => {
|
||||
vi.restoreAllMocks();
|
||||
});
|
||||
|
||||
it('is only available in regular mode', () => {
|
||||
const tool = new ReadMarkersTool();
|
||||
expect(tool.isAvailableInEfficientMode()).toBe(false);
|
||||
});
|
||||
|
||||
it('reads ordered marker regions from the global marker track', async () => {
|
||||
const project = new KGProject('read-markers', 8, 0, 120, { numerator: 4, denominator: 4 }, 'C major');
|
||||
const track = findGlobalTrackByType(project, GlobalTrackType.Marker);
|
||||
expect(track).not.toBeNull();
|
||||
track!.setRegions([
|
||||
new KGMarkerRegion('region-2', track!.getId(), track!.getTrackIndex(), 'Verse', 8, 4),
|
||||
new KGMarkerRegion('region-1', track!.getId(), track!.getTrackIndex(), 'Intro', 0, 8),
|
||||
]);
|
||||
|
||||
vi.spyOn(KGCore, 'instance').mockReturnValue({
|
||||
getCurrentProject: () => project,
|
||||
getSelectedItems: () => [],
|
||||
} as unknown as KGCore);
|
||||
|
||||
const tool = new ReadMarkersTool();
|
||||
const result = await tool.execute({});
|
||||
|
||||
expect(result.success).toBe(true);
|
||||
expect(result.result).toBe('[Beat: 0; Length: 8]: Intro\n[Beat: 8; Length: 4]: Verse');
|
||||
});
|
||||
|
||||
it('preserves line breaks in UI and history display content', () => {
|
||||
const tool = new ReadMarkersTool();
|
||||
const formatted = '[Beat: 0; Length: 8]: Intro \n[Beat: 8; Length: 4]: Verse';
|
||||
const raw = '[Beat: 0; Length: 8]: Intro\n[Beat: 8; Length: 4]: Verse';
|
||||
|
||||
expect(tool.buildToolResultDisplayContent(null, {
|
||||
success: true,
|
||||
result: raw,
|
||||
})).toBe(formatted);
|
||||
expect(tool.buildToolHistoryContent(null, {
|
||||
success: true,
|
||||
result: raw,
|
||||
})).toBe(raw);
|
||||
});
|
||||
|
||||
it('returns an absence message when no marker regions exist', async () => {
|
||||
const project = new KGProject('empty-markers', 8, 0, 120, { numerator: 4, denominator: 4 }, 'C major');
|
||||
|
||||
vi.spyOn(KGCore, 'instance').mockReturnValue({
|
||||
getCurrentProject: () => project,
|
||||
getSelectedItems: () => [],
|
||||
} as unknown as KGCore);
|
||||
|
||||
const tool = new ReadMarkersTool();
|
||||
const result = await tool.execute({});
|
||||
|
||||
expect(result.success).toBe(true);
|
||||
expect(result.result).toBe('No marker regions found on the global Marker track.');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user