feat: added integration tests
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
/**
|
||||
* Mock implementation of KGAudioInterface for integration tests
|
||||
* Provides interface compatibility while avoiding actual audio operations
|
||||
*/
|
||||
import { vi } from 'vitest'
|
||||
|
||||
export const mockAudioInterface = {
|
||||
// Audio context management
|
||||
startAudioContext: vi.fn().mockResolvedValue(true),
|
||||
isAudioContextStarted: vi.fn().mockReturnValue(true),
|
||||
|
||||
// Track management
|
||||
createTrackBus: vi.fn().mockResolvedValue(undefined),
|
||||
setTrackInstrument: vi.fn().mockResolvedValue(undefined),
|
||||
setTrackVolume: vi.fn().mockReturnValue(undefined),
|
||||
setTrackMuted: vi.fn().mockReturnValue(undefined),
|
||||
setTrackSoloed: vi.fn().mockReturnValue(undefined),
|
||||
removeTrackBus: vi.fn().mockReturnValue(undefined),
|
||||
|
||||
// Playback control
|
||||
startPlayback: vi.fn().mockReturnValue(undefined),
|
||||
stopPlayback: vi.fn().mockReturnValue(undefined),
|
||||
pausePlayback: vi.fn().mockReturnValue(undefined),
|
||||
setPlaybackPosition: vi.fn().mockReturnValue(undefined),
|
||||
|
||||
// Note scheduling
|
||||
scheduleNote: vi.fn().mockReturnValue(undefined),
|
||||
scheduleNotes: vi.fn().mockReturnValue(undefined),
|
||||
clearScheduledNotes: vi.fn().mockReturnValue(undefined),
|
||||
|
||||
// Transport
|
||||
getCurrentBeat: vi.fn().mockReturnValue(0),
|
||||
setBpm: vi.fn().mockReturnValue(undefined),
|
||||
|
||||
// Singleton pattern
|
||||
getInstance: vi.fn().mockReturnThis(),
|
||||
}
|
||||
|
||||
// Mock the class constructor
|
||||
export const mockKGAudioInterfaceClass = vi.fn(() => mockAudioInterface)
|
||||
@@ -0,0 +1,55 @@
|
||||
/**
|
||||
* Mock implementation of IndexedDB for integration tests
|
||||
* Provides in-memory storage that mimics IndexedDB interface
|
||||
*/
|
||||
import { vi } from 'vitest'
|
||||
|
||||
// In-memory storage for tests
|
||||
const mockStorage = new Map<string, any>()
|
||||
|
||||
export const mockIndexedDB = {
|
||||
openDB: vi.fn().mockImplementation(() => {
|
||||
return Promise.resolve({
|
||||
put: vi.fn().mockImplementation((storeName: string, data: any, key?: string) => {
|
||||
const actualKey = key || data.id || 'default'
|
||||
mockStorage.set(`${storeName}:${actualKey}`, data)
|
||||
return Promise.resolve(actualKey)
|
||||
}),
|
||||
|
||||
get: vi.fn().mockImplementation((storeName: string, key: string) => {
|
||||
return Promise.resolve(mockStorage.get(`${storeName}:${key}`))
|
||||
}),
|
||||
|
||||
getAll: vi.fn().mockImplementation((storeName: string) => {
|
||||
const results: any[] = []
|
||||
for (const [key, value] of mockStorage.entries()) {
|
||||
if (key.startsWith(`${storeName}:`)) {
|
||||
results.push(value)
|
||||
}
|
||||
}
|
||||
return Promise.resolve(results)
|
||||
}),
|
||||
|
||||
delete: vi.fn().mockImplementation((storeName: string, key: string) => {
|
||||
mockStorage.delete(`${storeName}:${key}`)
|
||||
return Promise.resolve()
|
||||
}),
|
||||
|
||||
clear: vi.fn().mockImplementation((storeName: string) => {
|
||||
for (const key of mockStorage.keys()) {
|
||||
if (key.startsWith(`${storeName}:`)) {
|
||||
mockStorage.delete(key)
|
||||
}
|
||||
}
|
||||
return Promise.resolve()
|
||||
}),
|
||||
|
||||
close: vi.fn().mockResolvedValue(undefined),
|
||||
})
|
||||
}),
|
||||
}
|
||||
|
||||
// Helper function to clear mock storage between tests
|
||||
export const clearMockStorage = () => {
|
||||
mockStorage.clear()
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
/**
|
||||
* Mock implementation of Tone.js for integration tests
|
||||
* Provides interface compatibility while avoiding actual audio operations
|
||||
*/
|
||||
import { vi } from 'vitest'
|
||||
|
||||
// Mock Sampler class
|
||||
export const mockSampler = {
|
||||
triggerAttackRelease: vi.fn(),
|
||||
triggerAttack: vi.fn(),
|
||||
triggerRelease: vi.fn(),
|
||||
dispose: vi.fn(),
|
||||
loaded: true,
|
||||
toDestination: vi.fn().mockReturnThis(),
|
||||
connect: vi.fn().mockReturnThis(),
|
||||
disconnect: vi.fn().mockReturnThis(),
|
||||
set: vi.fn().mockReturnThis(),
|
||||
get: vi.fn().mockReturnValue({}),
|
||||
}
|
||||
|
||||
// Mock Transport
|
||||
export const mockTransport = {
|
||||
start: vi.fn(),
|
||||
stop: vi.fn(),
|
||||
pause: vi.fn(),
|
||||
position: '0:0:0',
|
||||
bpm: { value: 120 },
|
||||
timeSignature: [4, 4],
|
||||
state: 'stopped',
|
||||
schedule: vi.fn(),
|
||||
clear: vi.fn(),
|
||||
cancel: vi.fn(),
|
||||
}
|
||||
|
||||
// Mock Tone namespace
|
||||
export const mockTone = {
|
||||
Sampler: vi.fn().mockImplementation(() => mockSampler),
|
||||
Transport: mockTransport,
|
||||
Buffer: vi.fn().mockImplementation(() => ({
|
||||
loaded: true,
|
||||
duration: 1,
|
||||
get: vi.fn(),
|
||||
set: vi.fn(),
|
||||
})),
|
||||
ToneAudioBuffer: vi.fn().mockImplementation(() => ({
|
||||
loaded: true,
|
||||
duration: 1,
|
||||
})),
|
||||
start: vi.fn(),
|
||||
getContext: vi.fn().mockReturnValue({
|
||||
state: 'running',
|
||||
resume: vi.fn().mockResolvedValue(undefined),
|
||||
}),
|
||||
context: {
|
||||
state: 'running',
|
||||
resume: vi.fn().mockResolvedValue(undefined),
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user