Files
brachnha-insight/tests/unit/services/secure-storage.test.ts
Max 3fbbb1a93b Initial commit: Brachnha Insight project setup
- Next.js 14+ with App Router and TypeScript
- Tailwind CSS and ShadCN UI styling
- Zustand state management
- Dexie.js for IndexedDB (local-first data)
- Auth.js v5 for authentication
- BMAD framework integration

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-26 12:28:43 +07:00

53 lines
1.7 KiB
TypeScript

import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { SecureStorage } from '../../../src/services/secure-storage'; // Implementation doesn't exist yet
describe('SecureStorage Service', () => {
const TEST_KEY = 'test_api_key_123';
const STORAGE_KEY = 'llm_provider_config';
beforeEach(() => {
localStorage.clear();
});
afterEach(() => {
localStorage.clear();
});
it('should save API key with basic encoding (not plain text)', () => {
SecureStorage.saveKey(TEST_KEY);
// Direct access to localStorage to verify obfuscation
const storedValue = localStorage.getItem(STORAGE_KEY);
expect(storedValue).toBeDefined();
expect(storedValue).not.toBe(TEST_KEY); // Should NOT be plain text
expect(storedValue).not.toContain(TEST_KEY); // Should not contain the key
});
it('should retrieve the original API key correctly', () => {
SecureStorage.saveKey(TEST_KEY);
const retrievedKey = SecureStorage.getKey();
expect(retrievedKey).toBe(TEST_KEY);
});
it('should return null if no key is stored', () => {
const retrievedKey = SecureStorage.getKey();
expect(retrievedKey).toBeNull();
});
it('should overwrite existing key when saving new one', () => {
SecureStorage.saveKey('old_key');
SecureStorage.saveKey('new_key');
expect(SecureStorage.getKey()).toBe('new_key');
});
it('should clear key when requested', () => {
SecureStorage.saveKey(TEST_KEY);
SecureStorage.clearKey();
expect(SecureStorage.getKey()).toBeNull();
expect(localStorage.getItem(STORAGE_KEY)).toBeNull();
});
});