276 lines
6.1 KiB
TypeScript
276 lines
6.1 KiB
TypeScript
import type { TestDatabase } from "./test-db";
|
|
import * as schema from "@db/schema";
|
|
import type {
|
|
NewTranscription,
|
|
NewVocabulary,
|
|
NewModel,
|
|
NewAppSettings,
|
|
NewNote,
|
|
AppSettingsData,
|
|
} from "@db/schema";
|
|
|
|
/**
|
|
* Default app settings for testing
|
|
*/
|
|
export const defaultAppSettings: AppSettingsData = {
|
|
formatterConfig: {
|
|
model: "gpt-4o-mini",
|
|
enabled: false,
|
|
},
|
|
ui: {
|
|
theme: "system",
|
|
},
|
|
transcription: {
|
|
language: "en",
|
|
autoTranscribe: true,
|
|
confidenceThreshold: 0.7,
|
|
enablePunctuation: true,
|
|
enableTimestamps: false,
|
|
preloadWhisperModel: false,
|
|
},
|
|
recording: {
|
|
defaultFormat: "wav",
|
|
sampleRate: 16000,
|
|
autoStopSilence: true,
|
|
silenceThreshold: -45,
|
|
maxRecordingDuration: 600,
|
|
},
|
|
shortcuts: {
|
|
pushToTalk: "CommandOrControl+Shift+Space",
|
|
toggleRecording: "CommandOrControl+Shift+R",
|
|
toggleWindow: "CommandOrControl+Shift+W",
|
|
},
|
|
modelProvidersConfig: {
|
|
defaultSpeechModel: "local-whisper:ggml-base.en",
|
|
},
|
|
dictation: {
|
|
autoDetectEnabled: true,
|
|
selectedLanguage: "en",
|
|
},
|
|
preferences: {
|
|
launchAtLogin: false,
|
|
minimizeToTray: true,
|
|
showWidgetWhileInactive: true,
|
|
},
|
|
telemetry: {
|
|
enabled: false,
|
|
},
|
|
auth: {
|
|
isAuthenticated: false,
|
|
idToken: null,
|
|
refreshToken: null,
|
|
expiresAt: null,
|
|
},
|
|
};
|
|
|
|
/**
|
|
* Sample transcriptions for testing
|
|
*/
|
|
export const sampleTranscriptions: NewTranscription[] = [
|
|
{
|
|
text: "This is a test transcription",
|
|
language: "en",
|
|
confidence: 0.95,
|
|
duration: 5,
|
|
speechModel: "whisper-base",
|
|
formattingModel: null,
|
|
},
|
|
{
|
|
text: "Another test transcription with more content",
|
|
language: "en",
|
|
confidence: 0.88,
|
|
duration: 8,
|
|
speechModel: "whisper-base",
|
|
formattingModel: "gpt-4o-mini",
|
|
},
|
|
{
|
|
text: "A third transcription for comprehensive testing",
|
|
language: "en",
|
|
confidence: 0.92,
|
|
duration: 6,
|
|
speechModel: "whisper-large",
|
|
formattingModel: null,
|
|
},
|
|
];
|
|
|
|
/**
|
|
* Sample vocabulary items for testing
|
|
*/
|
|
export const sampleVocabulary: NewVocabulary[] = [
|
|
{
|
|
word: "Amical",
|
|
replacementWord: null,
|
|
isReplacement: false,
|
|
usageCount: 5,
|
|
},
|
|
{
|
|
word: "API",
|
|
replacementWord: null,
|
|
isReplacement: false,
|
|
usageCount: 3,
|
|
},
|
|
{
|
|
word: "teh",
|
|
replacementWord: "the",
|
|
isReplacement: true,
|
|
usageCount: 2,
|
|
},
|
|
];
|
|
|
|
/**
|
|
* Sample models for testing
|
|
*/
|
|
export const sampleModels: NewModel[] = [
|
|
{
|
|
id: "ggml-base.en",
|
|
provider: "local-whisper",
|
|
name: "Whisper Base English",
|
|
type: "speech",
|
|
size: "~147 MB",
|
|
description: "Optimized for English transcription",
|
|
localPath: "/test/models/ggml-base.en.bin",
|
|
sizeBytes: 147964211,
|
|
checksum: "test-checksum-base",
|
|
downloadedAt: new Date(),
|
|
speed: 4,
|
|
accuracy: 3,
|
|
},
|
|
{
|
|
id: "gpt-4o-mini",
|
|
provider: "openrouter",
|
|
name: "GPT-4o Mini",
|
|
type: "language",
|
|
context: "128k",
|
|
description: "Fast and efficient language model",
|
|
speed: 5,
|
|
accuracy: 4,
|
|
},
|
|
];
|
|
|
|
/**
|
|
* Sample notes for testing
|
|
*/
|
|
export const sampleNotes: NewNote[] = [
|
|
{
|
|
title: "Test Note 1",
|
|
content: "This is the first test note",
|
|
icon: "📝",
|
|
},
|
|
{
|
|
title: "Test Note 2",
|
|
content: "This is the second test note with more content",
|
|
icon: "📄",
|
|
},
|
|
];
|
|
|
|
/**
|
|
* Fixture presets
|
|
*/
|
|
export const fixtures = {
|
|
/**
|
|
* Empty database with only default settings
|
|
*/
|
|
empty: async (testDb: TestDatabase) => {
|
|
// Clear existing settings first
|
|
await testDb.db.delete(schema.appSettings);
|
|
// Insert default settings
|
|
await testDb.db.insert(schema.appSettings).values({
|
|
id: 1,
|
|
data: defaultAppSettings,
|
|
version: 1,
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Database with existing transcriptions
|
|
*/
|
|
withTranscriptions: async (testDb: TestDatabase) => {
|
|
await fixtures.empty(testDb);
|
|
await testDb.db.insert(schema.transcriptions).values(sampleTranscriptions);
|
|
},
|
|
|
|
/**
|
|
* Database with vocabulary items
|
|
*/
|
|
withVocabulary: async (testDb: TestDatabase) => {
|
|
await fixtures.empty(testDb);
|
|
await testDb.db.insert(schema.vocabulary).values(sampleVocabulary);
|
|
},
|
|
|
|
/**
|
|
* Database with downloaded models
|
|
*/
|
|
withModels: async (testDb: TestDatabase) => {
|
|
await fixtures.empty(testDb);
|
|
await testDb.db.insert(schema.models).values(sampleModels);
|
|
},
|
|
|
|
/**
|
|
* Database with notes
|
|
*/
|
|
withNotes: async (testDb: TestDatabase) => {
|
|
await fixtures.empty(testDb);
|
|
await testDb.db.insert(schema.notes).values(sampleNotes);
|
|
},
|
|
|
|
/**
|
|
* Full database with all types of data
|
|
*/
|
|
full: async (testDb: TestDatabase) => {
|
|
await fixtures.empty(testDb);
|
|
await testDb.db.insert(schema.transcriptions).values(sampleTranscriptions);
|
|
await testDb.db.insert(schema.vocabulary).values(sampleVocabulary);
|
|
await testDb.db.insert(schema.models).values(sampleModels);
|
|
await testDb.db.insert(schema.notes).values(sampleNotes);
|
|
},
|
|
|
|
/**
|
|
* Database with custom settings
|
|
*/
|
|
withCustomSettings: async (
|
|
testDb: TestDatabase,
|
|
settings: Partial<AppSettingsData>,
|
|
) => {
|
|
// Clear existing settings first
|
|
await testDb.db.delete(schema.appSettings);
|
|
// Insert custom settings
|
|
await testDb.db.insert(schema.appSettings).values({
|
|
id: 1,
|
|
data: { ...defaultAppSettings, ...settings },
|
|
version: 1,
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Database with authenticated user
|
|
*/
|
|
withAuth: async (testDb: TestDatabase) => {
|
|
await fixtures.withCustomSettings(testDb, {
|
|
auth: {
|
|
isAuthenticated: true,
|
|
idToken: "test-id-token",
|
|
refreshToken: "test-refresh-token",
|
|
expiresAt: Date.now() + 3600000, // 1 hour from now
|
|
userInfo: {
|
|
sub: "test-user-123",
|
|
email: "test@example.com",
|
|
name: "Test User",
|
|
},
|
|
},
|
|
});
|
|
},
|
|
};
|
|
|
|
/**
|
|
* Helper to seed specific data
|
|
*/
|
|
export async function seedDatabase(
|
|
testDb: TestDatabase,
|
|
fixture: keyof typeof fixtures | ((testDb: TestDatabase) => Promise<void>),
|
|
): Promise<void> {
|
|
if (typeof fixture === "function") {
|
|
await fixture(testDb);
|
|
} else {
|
|
await fixtures[fixture](testDb);
|
|
}
|
|
}
|