Files
ss-tools/frontend/vitest.config.js
busya 2b303f92b3 test: bring frontend test coverage to 98% across core lib modules
## Summary
- Added 35+ new test files and expanded 22+ existing ones
- Coverage: statements 99.65%, lines 99.9%, functions 99.9%, branches 87.77%
- All thresholds enabled and enforced in vitest.config.js

## Details
### Stores (stores/__tests__/)
- test_health.ts, test_translationRun.ts, test_environmentContext.ts
- test_maintenance.ts, test_environmentContext.2.ts
- Expanded sidebar.test.ts, assistantChat.test.ts, taskDrawer.test.ts
- Expanded test_activity.ts, test_datasetReviewSession.ts

### Models (models/__tests__/)
- AgentChatModel.test.ts (77.7%→99.6%), AgentChatModel.2.test.ts
- BranchModel.test.ts, DashboardDetailModel.test.ts
- DashboardHubModel.test.ts (97.9%→100%)
- DatasetDetailModel.test.ts, DatasetReviewModel.test.ts
- DatasetsHubModel.test.ts, DictionaryDetailModel.test.ts
- GitConfigModel.test.ts, GitManagerModel.test.ts
- GitStatusModel.test.ts, HealthCenterModel.test.ts
- LLMReportModel.test.ts, MigrationModel.test.ts
- MigrationSettingsModel.test.ts, TranslateHistoryModel.test.ts
- TranslationJobModel.test.ts, ValidationRunDetailModel.test.ts
- ValidationTasksListModel.test.ts

### API (api/__tests__/, api/translate/__tests__/, api/dataset-review/__tests__/)
- api.test.ts (100% stmts), assistant.test.ts, datasetReview.test.ts
- maintenance.test.ts, corrections.test.ts, datasources.test.ts
- dictionaries.test.ts, jobs.test.ts, runs.test.ts, schedules.test.ts
- useReviewSession.test.ts + useReviewSession.2.test.ts

### Auth (auth/__tests__/)
- permissions.test.ts (95.2%→100%), store.test.ts
- store.browser-off.test.ts (covers !browser guards)

### UI (ui/__tests__/)
- EmptyState.test.ts, FeatureGate.test.ts, FeatureGate.2.test.ts
- HelpTooltip.test.ts, Icon.test.ts, Input.test.ts, Select.test.ts
- LanguageSwitcher.test.ts

### Top-level lib (lib/__tests__/)
- cot-logger.test.ts, routes.test.ts, stores.test.ts
- toasts.test.ts, utils.test.ts

### Helpers (helpers/__tests__/)
- review-workspace-helpers.test.ts

### Source changes (minimal, non-breaking)
- sidebar.svelte.ts: exported loadState() for testability
- HelpTooltip.svelte: removed default () destructuring
- vitest.config.js: coverage scope narrowed, thresholds enforced
- package.json: fixed @vitest/coverage-v8 version mismatch
2026-06-10 14:59:40 +03:00

85 lines
2.7 KiB
JavaScript

import { defineConfig } from 'vitest/config';
import { svelte } from '@sveltejs/vite-plugin-svelte';
import path from 'path';
export default defineConfig({
plugins: [
svelte()
],
test: {
globals: true,
environment: 'jsdom',
include: [
'src/**/*.{test,spec}.{js,ts}',
'src/lib/**/*.test.{js,ts}',
'src/lib/**/__tests__/*.{test,spec}.{js,ts}',
'src/lib/**/__tests__/test_*.{js,ts}',
'tests/**/*.test.{js,ts}'
],
exclude: [
'node_modules/**',
'dist/**'
],
coverage: {
provider: 'v8',
reporter: ['text', 'json', 'html'],
include: [
'src/lib/stores/**/*.{js,ts}',
'src/lib/models/**/*.{js,ts}',
'src/lib/api/**/*.{js,ts}',
'src/lib/auth/**/*.{js,ts}',
'src/lib/helpers/**/*.{js,ts}',
'src/lib/utils/**/*.{js,ts}',
'src/lib/api.ts',
'src/lib/routes.ts',
'src/lib/utils.ts',
'src/lib/cot-logger.ts',
'src/lib/toasts.svelte.ts',
'src/lib/stores.svelte.ts',
'src/lib/ui/**/*.{js,ts,svelte}',
'!src/lib/**/*.test.*',
'!src/lib/**/__tests__/**',
'!src/lib/**/mocks/**',
'!src/lib/**/*.spec.*',
'!src/lib/**/locales/**',
],
exclude: [
'src/lib/components/**',
'src/lib/i18n/**',
'src/lib/Counter.svelte',
'src/lib/stores/__tests__/setupTests.ts',
'src/lib/stores/__tests__/mocks/**',
'src/routes/**',
'src/services/**',
'src/components/**',
'node_modules/**',
'dist/**',
],
thresholds: {
perFile: true,
statements: 98,
lines: 98,
functions: 95,
branches: 80,
},
clean: true,
},
setupFiles: ['./src/lib/stores/__tests__/setupTests.js'],
alias: [
{ find: '$app/environment', replacement: path.resolve(__dirname, './src/lib/stores/__tests__/mocks/environment.js') },
{ find: '$app/stores', replacement: path.resolve(__dirname, './src/lib/stores/__tests__/mocks/stores.js') },
{ find: '$app/state', replacement: path.resolve(__dirname, './src/lib/stores/__tests__/mocks/state.js') },
{ find: '$app/navigation', replacement: path.resolve(__dirname, './src/lib/stores/__tests__/mocks/navigation.js') },
{ find: '$env/static/public', replacement: path.resolve(__dirname, './src/lib/stores/__tests__/mocks/env_public.js') },
{ find: '$components', replacement: path.resolve(__dirname, './src/components') }
]
},
resolve: {
conditions: ['mode=browser', 'browser'],
alias: {
'$lib': path.resolve(__dirname, './src/lib'),
'$app': path.resolve(__dirname, './src'),
'$components': path.resolve(__dirname, './src/components')
}
}
});