feat(tabs): keep SQL drafts on app exit by default

Closes #7134
This commit is contained in:
t8y2 committed 2026-08-25 05:45:31 +00:00
1 parent cf652f212e
commit d1d8dc4aec
3 files changed
+19 -18

No files matched your search

@@ -40,20 +40,7 @@ describe("queryStore app close unsaved drafts", () => {
return tabId;
}
it("prompts for unsaved SQL when quitting by default", async () => {
const { queryStore } = await createStoreWithDirtyQueryTab();
const confirmed = queryStore.requestAppCloseConfirmation();
expect(confirmed).toBe(true);
expect(queryStore.showCloseConfirm).toBe(true);
expect(queryStore.closeConfirmContext).toBe("app");
});
it("skips the quit prompt and keeps unsaved drafts in keep-drafts mode", async () => {
const { useSettingsStore } = await import("@/stores/settingsStore");
useSettingsStore().updateEditorSettings({ appCloseUnsavedTabsMode: "keep-drafts" });
it("skips the quit prompt and keeps unsaved drafts by default", async () => {
const { queryStore } = await createStoreWithDirtyQueryTab();
const confirmed = queryStore.requestAppCloseConfirmation();
@@ -65,6 +52,19 @@ describe("queryStore app close unsaved drafts", () => {
expect(queryStore.requiresAppCloseDraftPersist).toBe(true);
});
it("prompts for unsaved SQL when quitting in prompt mode", async () => {
const { useSettingsStore } = await import("@/stores/settingsStore");
useSettingsStore().updateEditorSettings({ appCloseUnsavedTabsMode: "prompt" });
const { queryStore } = await createStoreWithDirtyQueryTab();
const confirmed = queryStore.requestAppCloseConfirmation();
expect(confirmed).toBe(true);
expect(queryStore.showCloseConfirm).toBe(true);
expect(queryStore.closeConfirmContext).toBe("app");
});
it("does not require draft persistence when unsaved SQL confirmation is disabled", async () => {
const { useSettingsStore } = await import("@/stores/settingsStore");
useSettingsStore().updateEditorSettings({
+4 -3
View File
@@ -194,10 +194,11 @@ describe("normalizeEditorSettings", () => {
expect(normalizeEditorSettings({ restoreOpenTabsOnLaunch: true } as any).openTabsRestoreMode).toBe("all");
});
it("prompts for unsaved SQL on quit by default and preserves explicit modes", () => {
expect(normalizeEditorSettings({}).appCloseUnsavedTabsMode).toBe("prompt");
it("keeps unsaved SQL drafts on quit by default and preserves explicit modes", () => {
expect(normalizeEditorSettings({}).appCloseUnsavedTabsMode).toBe("keep-drafts");
expect(normalizeEditorSettings({ appCloseUnsavedTabsMode: "prompt" }).appCloseUnsavedTabsMode).toBe("prompt");
expect(normalizeEditorSettings({ appCloseUnsavedTabsMode: "keep-drafts" }).appCloseUnsavedTabsMode).toBe("keep-drafts");
expect(normalizeEditorSettings({ appCloseUnsavedTabsMode: "invalid" as any }).appCloseUnsavedTabsMode).toBe("prompt");
expect(normalizeEditorSettings({ appCloseUnsavedTabsMode: "invalid" as any }).appCloseUnsavedTabsMode).toBe("keep-drafts");
});
it("preserves CNB, migrates AtomGit to CNB, and rejects invalid values", () => {
+1 -1
View File
@@ -749,7 +749,7 @@ export const DEFAULT_EDITOR_SETTINGS: EditorSettings = {
sqlSemanticDiagnosticsEnabled: SQL_SEMANTIC_DIAGNOSTICS_AUTO_ENABLED,
confirmDangerousSqlExecution: true,
confirmUnsavedSqlClose: true,
appCloseUnsavedTabsMode: "prompt",
appCloseUnsavedTabsMode: "keep-drafts",
savedSqlOpenTargetMode: "saved",
compactTabTitle: false,
tabLayout: "scroll",