Files
ss-tools/frontend/src/lib/auth/__tests__/store.browser-off.test.ts
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

40 lines
1.4 KiB
TypeScript

// #region AuthStoreBrowserOffTest [C:2] [TYPE Module] [SEMANTICS test, auth, store, browser-offline, ssr]
// @BRIEF Unit tests for auth store when running in non-browser environment (SSR).
// @LAYER Tests
// @RELATION BINDS_TO -> [AuthStore]
// @TEST_CONTRACT: When browser=false, localStorage is never accessed.
import { describe, it, expect, vi, beforeEach } from 'vitest';
// Mock $app/environment with browser=false
vi.mock('$app/environment', () => ({ browser: false }));
describe('AuthStore — when browser is false', () => {
beforeEach(() => {
localStorage.clear();
vi.resetModules();
});
it('initializes token as null (no localStorage read)', async () => {
localStorage.setItem('auth_token', 'should-be-ignored');
const { auth } = await import('$lib/auth/store.svelte.js');
const subFn = vi.fn();
auth.subscribe(subFn);
const initial = subFn.mock.calls[0][0];
expect(initial.token).toBeNull();
});
it('setToken does not call localStorage.setItem', async () => {
const { auth } = await import('$lib/auth/store.svelte.js');
auth.setToken('no-localstorage');
expect(localStorage.getItem('auth_token')).toBeNull();
});
it('logout does not call localStorage.removeItem when no token was stored', async () => {
const { auth } = await import('$lib/auth/store.svelte.js');
auth.setToken('some-token');
auth.logout();
expect(localStorage.getItem('auth_token')).toBeNull();
});
});
// #endregion