Files
2fa/tests/scripts/settings-code.test.js
wuzf c0b8369a81 feat(backup): add unified export endpoint with format preference
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.
2026-04-12 01:36:28 +08:00

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('偏好格式已保存,批量导出和备份导出会优先使用该格式');
});
});