feat(export): configurable CSV field quoting mode

This commit is contained in:
zipg authored and GitHub committed 2026-09-03 17:51:50 +08:00
1 parent d421bd33fc
commit 203eab3dec
32 files changed
+442 -56

No files matched your search

+22
View File
@@ -186,6 +186,21 @@ test("updateEditorSettings persists numericColumnRightAlign toggles", async () =
});
});
test("updateEditorSettings persists the CSV quote mode", async () => {
await withMockLocalStorage({}, async () => {
setActivePinia(createPinia());
const store = useSettingsStore();
await store.initEditorSettings();
store.updateEditorSettings({ csvQuoteMode: "necessary" });
assert.equal(store.editorSettings.csvQuoteMode, "necessary");
await vi.waitFor(() => {
const saved = saveEditorSettingsMock.mock.calls.at(-1)?.[0] as { csvQuoteMode?: string } | undefined;
assert.equal(saved?.csvQuoteMode, "necessary");
});
});
});
test("migrates legacy execute-all settings to current once and preserves later explicit choices", async () => {
await withMockLocalStorage({ "dbx-app-state:editor_settings": JSON.stringify({ executeMode: "all" }) }, async () => {
setActivePinia(createPinia());
@@ -229,6 +244,13 @@ test("defaults export batch size to 2000 rows", () => {
assert.equal(normalizeEditorSettings({ exportBatchSize: 2000 }).exportBatchSize, 2000);
});
test("CSV quote mode defaults to all fields and preserves a saved necessary mode", () => {
assert.equal(DEFAULT_EDITOR_SETTINGS.csvQuoteMode, "all");
assert.equal(normalizeEditorSettings({}).csvQuoteMode, "all");
assert.equal(normalizeEditorSettings({ csvQuoteMode: "necessary" }).csvQuoteMode, "necessary");
assert.equal(normalizeEditorSettings({ csvQuoteMode: "invalid" as any }).csvQuoteMode, "all");
});
test("migrates the legacy saved export batch default to 2000 once", async () => {
await withMockLocalStorage({ "dbx-editor-settings": JSON.stringify({ exportBatchSize: 10000 }) }, async () => {
setActivePinia(createPinia());