mirror of
https://github.com/wuzf/2fa.git
synced 2026-09-03 07:17:09 +08:00
Add a dedicated /api/secrets/export route (api/secrets/export.js) that streams the unified backup format (JSON/CSV/HTML/TXT) with size and auth guards. Settings persist the preferred export format per user; backup runs pick it up so generated files match the chosen schema. The UI settings label/toast reads "导出偏好格式" to clarify the preference applies to batch export and backup export. The Service Worker passes through offline responses, utils/backup-format.js is slimmed down after route consolidation, and unused createdAt is dropped from the unified format and validation.
23 lines
1.3 KiB
JavaScript
23 lines
1.3 KiB
JavaScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import { getSettingsCode } from '../../src/ui/scripts/settings.js';
|
|
|
|
describe('settings module code generation', () => {
|
|
it('guards the default export format against stale preference loads and saves', () => {
|
|
const code = getSettingsCode();
|
|
|
|
expect(code).toContain('let preferencesLoadRequestId = 0;');
|
|
expect(code).toContain('let defaultExportFormatChangeVersion = 0;');
|
|
expect(code).toContain('let defaultExportFormatSaveRequestId = 0;');
|
|
expect(code).toContain('const requestId = ++preferencesLoadRequestId;');
|
|
expect(code).toContain('const formatVersionAtStart = defaultExportFormatChangeVersion;');
|
|
expect(code).toContain('if (requestId !== preferencesLoadRequestId) {');
|
|
expect(code).toContain('const selectedFormat = formatSelect.value;');
|
|
expect(code).toContain('const requestId = ++defaultExportFormatSaveRequestId;');
|
|
expect(code).toContain('body: JSON.stringify({ defaultExportFormat: selectedFormat }),');
|
|
expect(code).toContain('if (requestId !== defaultExportFormatSaveRequestId) {');
|
|
expect(code).toContain('const savedFormat = (data.settings && data.settings.defaultExportFormat) || selectedFormat;');
|
|
expect(code).toContain('偏好格式已保存,批量导出和备份导出会优先使用该格式');
|
|
});
|
|
});
|