- {followupAutoApproveTimeoutMs / 1000}s
+
+ {followupAutoApproveTimeoutMs === 0
+ ? "Disabled"
+ : `${followupAutoApproveTimeoutMs / 1000}s`}
+
{t("settings:autoApprove.followupQuestions.timeoutLabel")}
From 04aa5fad937595e2100c935d182aee0a67f737af Mon Sep 17 00:00:00 2001
From: Para <62068271+murd0cc@users.noreply.github.com>
Date: Tue, 11 Aug 2026 23:59:03 +0300
Subject: [PATCH 02/13] PR requested changes implemented
---
.../chat/__tests__/FollowUpSuggest.spec.tsx | 19 +++++++++
.../settings/AutoApproveSettings.tsx | 2 +-
.../__tests__/AutoApproveSettings.spec.tsx | 14 +++++++
.../AutoApproveSettings.visual.fixture.tsx | 36 ++++++++++++++++++
.../__tests__/AutoApproveSettings.visual.tsx | 18 +++++++++
...approve-followup-timeout-disabled-dark.png | Bin 0 -> 205 bytes
webview-ui/src/i18n/locales/ca/settings.json | 3 +-
webview-ui/src/i18n/locales/de/settings.json | 3 +-
webview-ui/src/i18n/locales/en/settings.json | 3 +-
webview-ui/src/i18n/locales/es/settings.json | 3 +-
webview-ui/src/i18n/locales/fr/settings.json | 3 +-
webview-ui/src/i18n/locales/hi/settings.json | 3 +-
webview-ui/src/i18n/locales/id/settings.json | 3 +-
webview-ui/src/i18n/locales/it/settings.json | 3 +-
webview-ui/src/i18n/locales/ja/settings.json | 3 +-
webview-ui/src/i18n/locales/ko/settings.json | 3 +-
webview-ui/src/i18n/locales/nl/settings.json | 3 +-
webview-ui/src/i18n/locales/pl/settings.json | 3 +-
.../src/i18n/locales/pt-BR/settings.json | 3 +-
webview-ui/src/i18n/locales/ru/settings.json | 3 +-
webview-ui/src/i18n/locales/tr/settings.json | 3 +-
webview-ui/src/i18n/locales/vi/settings.json | 3 +-
.../src/i18n/locales/zh-CN/settings.json | 3 +-
.../src/i18n/locales/zh-TW/settings.json | 3 +-
24 files changed, 124 insertions(+), 19 deletions(-)
create mode 100644 webview-ui/src/components/settings/__tests__/AutoApproveSettings.visual.fixture.tsx
create mode 100644 webview-ui/src/components/settings/__tests__/AutoApproveSettings.visual.tsx
create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/auto-approve-followup-timeout-disabled-dark.png
diff --git a/webview-ui/src/components/chat/__tests__/FollowUpSuggest.spec.tsx b/webview-ui/src/components/chat/__tests__/FollowUpSuggest.spec.tsx
index 2672e47306..169df1aee4 100644
--- a/webview-ui/src/components/chat/__tests__/FollowUpSuggest.spec.tsx
+++ b/webview-ui/src/components/chat/__tests__/FollowUpSuggest.spec.tsx
@@ -241,6 +241,25 @@ describe("FollowUpSuggest", () => {
expect(screen.queryByText(/\d+s/)).not.toBeInTheDocument()
})
+ it("should not show countdown when timeout is negative", () => {
+ const negativeTimeoutState: TestExtensionState = {
+ ...defaultTestState,
+ followupAutoApproveTimeoutMs: -1000,
+ }
+
+ renderWithTestProviders(
+ ,
+ negativeTimeoutState,
+ )
+
+ expect(screen.queryByText(/\d+s/)).not.toBeInTheDocument()
+ })
+
it("should not render when no suggestions are provided", () => {
const { container } = renderWithTestProviders(
{followupAutoApproveTimeoutMs === 0
- ? "Disabled"
+ ? t("settings:autoApprove.followupQuestions.timeoutDisabled")
: `${followupAutoApproveTimeoutMs / 1000}s`}
diff --git a/webview-ui/src/components/settings/__tests__/AutoApproveSettings.spec.tsx b/webview-ui/src/components/settings/__tests__/AutoApproveSettings.spec.tsx
index c798b7a4a9..5ee6026ed8 100644
--- a/webview-ui/src/components/settings/__tests__/AutoApproveSettings.spec.tsx
+++ b/webview-ui/src/components/settings/__tests__/AutoApproveSettings.spec.tsx
@@ -161,4 +161,18 @@ describe("AutoApproveSettings - Save/Discard contract", () => {
expect(screen.getByTestId("allowed-commands-heading")).toBeInTheDocument()
expect(screen.getByTestId("denied-commands-heading")).toBeInTheDocument()
})
+
+ it("renders disabled timeout label when follow-up auto-approve timeout is 0", () => {
+ renderSettings({ alwaysAllowFollowupQuestions: true, followupAutoApproveTimeoutMs: 0 })
+
+ expect(screen.getByTestId("followup-timeout-slider")).toBeInTheDocument()
+ expect(screen.getByText("settings:autoApprove.followupQuestions.timeoutDisabled")).toBeInTheDocument()
+ })
+
+ it("renders timeout in seconds when follow-up auto-approve timeout is non-zero", () => {
+ renderSettings({ alwaysAllowFollowupQuestions: true, followupAutoApproveTimeoutMs: 5000 })
+
+ expect(screen.getByTestId("followup-timeout-slider")).toBeInTheDocument()
+ expect(screen.getByText("5s")).toBeInTheDocument()
+ })
})
diff --git a/webview-ui/src/components/settings/__tests__/AutoApproveSettings.visual.fixture.tsx b/webview-ui/src/components/settings/__tests__/AutoApproveSettings.visual.fixture.tsx
new file mode 100644
index 0000000000..6f4e4707e3
--- /dev/null
+++ b/webview-ui/src/components/settings/__tests__/AutoApproveSettings.visual.fixture.tsx
@@ -0,0 +1,36 @@
+/* v8 ignore file -- Playwright component fixture is covered by the visual test. */
+import React from "react"
+
+import { TranslationContext } from "@/i18n/TranslationContext"
+import { ExtensionStateContext } from "@/context/ExtensionStateContext"
+import { AutoApproveSettings } from "../AutoApproveSettings"
+
+const extensionStateValue = {
+ autoApprovalEnabled: false,
+ setAutoApprovalEnabled: () => {},
+ alwaysAllowReadOnly: false,
+ alwaysAllowWrite: false,
+ alwaysAllowExecute: false,
+ alwaysAllowMcp: false,
+ alwaysAllowModeSwitch: false,
+ alwaysAllowSubtasks: false,
+ alwaysAllowFollowupQuestions: true,
+} as any
+
+export const AutoApproveSettingsFixture = () => (
+ key,
+ i18n: null as unknown as typeof import("../../../i18n/setup").default,
+ }}>
+
+
+
+
+)
diff --git a/webview-ui/src/components/settings/__tests__/AutoApproveSettings.visual.tsx b/webview-ui/src/components/settings/__tests__/AutoApproveSettings.visual.tsx
new file mode 100644
index 0000000000..9fea71d4e0
--- /dev/null
+++ b/webview-ui/src/components/settings/__tests__/AutoApproveSettings.visual.tsx
@@ -0,0 +1,18 @@
+import React from "react"
+
+import { expect, test } from "../../../../playwright/coverage-fixture"
+import { AutoApproveSettingsFixture } from "./AutoApproveSettings.visual.fixture"
+
+test("renders follow-up timeout row with disabled state label in the VS Code dark theme", async ({ mount, page }) => {
+ // The full settings bundle can leave a bare Zod reference after CT tree-shaking.
+ await page.evaluate(() => Object.assign(globalThis, { z: undefined }))
+
+ const component = await mount( )
+
+ await component.evaluate(async () => {
+ await document.fonts.ready
+ await new Promise((resolve) => requestAnimationFrame(() => resolve()))
+ })
+
+ await expect(component).toHaveScreenshot("auto-approve-followup-timeout-disabled-dark.png")
+})
diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/auto-approve-followup-timeout-disabled-dark.png b/webview-ui/src/components/settings/__tests__/__screenshots__/auto-approve-followup-timeout-disabled-dark.png
new file mode 100644
index 0000000000000000000000000000000000000000..db87f68911f60194136207b64222fe42540967af
GIT binary patch
literal 205
zcmeAS@N?(olHy`uVBq!ia0y~yVB!F>6*!oH*
k|8@~+mw~Qf1G$Eofo~1NT#m%>1wau7Pgg&ebxsLQ04Fjnga7~l
literal 0
HcmV?d00001
diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json
index 73827b1ec1..c8efd130c4 100644
--- a/webview-ui/src/i18n/locales/ca/settings.json
+++ b/webview-ui/src/i18n/locales/ca/settings.json
@@ -323,7 +323,8 @@
"followupQuestions": {
"label": "Pregunta",
"description": "Seleccionar automàticament la primera resposta suggerida per a preguntes de seguiment després del temps d'espera configurat",
- "timeoutLabel": "Temps d'espera abans de seleccionar automàticament la primera resposta"
+ "timeoutLabel": "Temps d'espera abans de seleccionar automàticament la primera resposta",
+ "timeoutDisabled": "Desactivat"
},
"execute": {
"label": "Executar",
diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json
index 8078037525..b650941fc5 100644
--- a/webview-ui/src/i18n/locales/de/settings.json
+++ b/webview-ui/src/i18n/locales/de/settings.json
@@ -323,7 +323,8 @@
"followupQuestions": {
"label": "Frage",
"description": "Automatisch die erste vorgeschlagene Antwort für Folgefragen nach der konfigurierten Zeitüberschreitung auswählen",
- "timeoutLabel": "Wartezeit vor der automatischen Auswahl der ersten Antwort"
+ "timeoutLabel": "Wartezeit vor der automatischen Auswahl der ersten Antwort",
+ "timeoutDisabled": "Deaktiviert"
},
"execute": {
"label": "Ausführen",
diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json
index 14a7476a75..6f4ac738f0 100644
--- a/webview-ui/src/i18n/locales/en/settings.json
+++ b/webview-ui/src/i18n/locales/en/settings.json
@@ -401,7 +401,8 @@
"followupQuestions": {
"label": "Question",
"description": "Automatically select the first suggested answer for follow-up questions after the configured timeout",
- "timeoutLabel": "Time to wait before auto-selecting the first answer"
+ "timeoutLabel": "Time to wait before auto-selecting the first answer",
+ "timeoutDisabled": "Disabled"
},
"execute": {
"label": "Execute",
diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json
index e629e43b50..529d5f7fad 100644
--- a/webview-ui/src/i18n/locales/es/settings.json
+++ b/webview-ui/src/i18n/locales/es/settings.json
@@ -323,7 +323,8 @@
"followupQuestions": {
"label": "Pregunta",
"description": "Seleccionar automáticamente la primera respuesta sugerida para preguntas de seguimiento después del tiempo de espera configurado",
- "timeoutLabel": "Tiempo de espera antes de seleccionar automáticamente la primera respuesta"
+ "timeoutLabel": "Tiempo de espera antes de seleccionar automáticamente la primera respuesta",
+ "timeoutDisabled": "Deshabilitado"
},
"execute": {
"label": "Ejecutar",
diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json
index 6048e2274c..9b2358bae8 100644
--- a/webview-ui/src/i18n/locales/fr/settings.json
+++ b/webview-ui/src/i18n/locales/fr/settings.json
@@ -324,7 +324,8 @@
"followupQuestions": {
"label": "Question",
"description": "Sélectionner automatiquement la première réponse suggérée pour les questions de suivi après le délai configuré",
- "timeoutLabel": "Temps d'attente avant la sélection automatique de la première réponse"
+ "timeoutLabel": "Temps d'attente avant la sélection automatique de la première réponse",
+ "timeoutDisabled": "Désactivé"
},
"execute": {
"label": "Exécuter",
diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json
index 28d0b8699b..2c03328615 100644
--- a/webview-ui/src/i18n/locales/hi/settings.json
+++ b/webview-ui/src/i18n/locales/hi/settings.json
@@ -323,7 +323,8 @@
"followupQuestions": {
"label": "प्रश्न",
"description": "कॉन्फ़िगर किए गए टाइमआउट के बाद अनुवर्ती प्रश्नों के लिए पहले सुझाए गए उत्तर को स्वचालित रूप से चुनें",
- "timeoutLabel": "पहले उत्तर को स्वचालित रूप से चुनने से पहले प्रतीक्षा करने का समय"
+ "timeoutLabel": "पहले उत्तर को स्वचालित रूप से चुनने से पहले प्रतीक्षा करने का समय",
+ "timeoutDisabled": "अक्षम"
},
"execute": {
"label": "निष्पादित करें",
diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json
index bf049395c4..81c317214a 100644
--- a/webview-ui/src/i18n/locales/id/settings.json
+++ b/webview-ui/src/i18n/locales/id/settings.json
@@ -323,7 +323,8 @@
"followupQuestions": {
"label": "Pertanyaan",
"description": "Secara otomatis memilih jawaban pertama yang disarankan untuk pertanyaan lanjutan setelah batas waktu yang dikonfigurasi",
- "timeoutLabel": "Waktu tunggu sebelum otomatis memilih jawaban pertama"
+ "timeoutLabel": "Waktu tunggu sebelum otomatis memilih jawaban pertama",
+ "timeoutDisabled": "Dinonaktifkan"
},
"execute": {
"label": "Eksekusi",
diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json
index 577a74a77a..35259f3382 100644
--- a/webview-ui/src/i18n/locales/it/settings.json
+++ b/webview-ui/src/i18n/locales/it/settings.json
@@ -323,7 +323,8 @@
"followupQuestions": {
"label": "Domanda",
"description": "Seleziona automaticamente la prima risposta suggerita per le domande di follow-up dopo il timeout configurato",
- "timeoutLabel": "Tempo di attesa prima di selezionare automaticamente la prima risposta"
+ "timeoutLabel": "Tempo di attesa prima di selezionare automaticamente la prima risposta",
+ "timeoutDisabled": "Disabilitato"
},
"execute": {
"label": "Esegui",
diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json
index 1113ac32a6..169eb60858 100644
--- a/webview-ui/src/i18n/locales/ja/settings.json
+++ b/webview-ui/src/i18n/locales/ja/settings.json
@@ -323,7 +323,8 @@
"followupQuestions": {
"label": "質問",
"description": "設定された時間が経過すると、フォローアップ質問の最初の提案回答を自動的に選択します",
- "timeoutLabel": "最初の回答を自動選択するまでの待機時間"
+ "timeoutLabel": "最初の回答を自動選択するまでの待機時間",
+ "timeoutDisabled": "無効"
},
"execute": {
"label": "実行",
diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json
index 27e8493bd4..39e780c3c7 100644
--- a/webview-ui/src/i18n/locales/ko/settings.json
+++ b/webview-ui/src/i18n/locales/ko/settings.json
@@ -323,7 +323,8 @@
"followupQuestions": {
"label": "질문",
"description": "설정된 시간이 지나면 후속 질문에 대한 첫 번째 제안 답변을 자동으로 선택합니다",
- "timeoutLabel": "첫 번째 답변을 자동 선택하기 전 대기 시간"
+ "timeoutLabel": "첫 번째 답변을 자동 선택하기 전 대기 시간",
+ "timeoutDisabled": "사용 안 함"
},
"execute": {
"label": "실행",
diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json
index 394cdd48f2..27f6ebccfb 100644
--- a/webview-ui/src/i18n/locales/nl/settings.json
+++ b/webview-ui/src/i18n/locales/nl/settings.json
@@ -323,7 +323,8 @@
"followupQuestions": {
"label": "Vraag",
"description": "Selecteer automatisch het eerste voorgestelde antwoord voor vervolgvragen na de geconfigureerde time-out",
- "timeoutLabel": "Wachttijd voordat het eerste antwoord automatisch wordt geselecteerd"
+ "timeoutLabel": "Wachttijd voordat het eerste antwoord automatisch wordt geselecteerd",
+ "timeoutDisabled": "Uitgeschakeld"
},
"execute": {
"label": "Uitvoeren",
diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json
index 864e4ffde1..1e9fb88c1b 100644
--- a/webview-ui/src/i18n/locales/pl/settings.json
+++ b/webview-ui/src/i18n/locales/pl/settings.json
@@ -323,7 +323,8 @@
"followupQuestions": {
"label": "Pytanie",
"description": "Automatycznie wybierz pierwszą sugerowaną odpowiedź na pytania uzupełniające po skonfigurowanym limicie czasu",
- "timeoutLabel": "Czas oczekiwania przed automatycznym wybraniem pierwszej odpowiedzi"
+ "timeoutLabel": "Czas oczekiwania przed automatycznym wybraniem pierwszej odpowiedzi",
+ "timeoutDisabled": "Wyłączone"
},
"execute": {
"label": "Wykonaj",
diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json
index a1948a0218..078b78e815 100644
--- a/webview-ui/src/i18n/locales/pt-BR/settings.json
+++ b/webview-ui/src/i18n/locales/pt-BR/settings.json
@@ -323,7 +323,8 @@
"followupQuestions": {
"label": "Pergunta",
"description": "Selecionar automaticamente a primeira resposta sugerida para perguntas de acompanhamento após o tempo limite configurado",
- "timeoutLabel": "Tempo de espera antes de selecionar automaticamente a primeira resposta"
+ "timeoutLabel": "Tempo de espera antes de selecionar automaticamente a primeira resposta",
+ "timeoutDisabled": "Desativado"
},
"execute": {
"label": "Executar",
diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json
index f36fe62539..bb807c930f 100644
--- a/webview-ui/src/i18n/locales/ru/settings.json
+++ b/webview-ui/src/i18n/locales/ru/settings.json
@@ -323,7 +323,8 @@
"followupQuestions": {
"label": "Вопрос",
"description": "Автоматически выбирать первый предложенный ответ на дополнительные вопросы после настроенного тайм-аута",
- "timeoutLabel": "Время ожидания перед автоматическим выбором первого ответа"
+ "timeoutLabel": "Время ожидания перед автоматическим выбором первого ответа",
+ "timeoutDisabled": "Отключено"
},
"execute": {
"label": "Выполнение",
diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json
index 9099677679..638fd6c8b2 100644
--- a/webview-ui/src/i18n/locales/tr/settings.json
+++ b/webview-ui/src/i18n/locales/tr/settings.json
@@ -323,7 +323,8 @@
"followupQuestions": {
"label": "Soru",
"description": "Yapılandırılan zaman aşımından sonra takip sorularına ilişkin ilk önerilen yanıtı otomatik olarak seç",
- "timeoutLabel": "İlk yanıtı otomatik olarak seçmeden önce beklenecek süre"
+ "timeoutLabel": "İlk yanıtı otomatik olarak seçmeden önce beklenecek süre",
+ "timeoutDisabled": "Devre dışı"
},
"execute": {
"label": "Yürüt",
diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json
index c66b236165..11d368ea1e 100644
--- a/webview-ui/src/i18n/locales/vi/settings.json
+++ b/webview-ui/src/i18n/locales/vi/settings.json
@@ -323,7 +323,8 @@
"followupQuestions": {
"label": "Câu hỏi",
"description": "Tự động chọn câu trả lời đầu tiên được đề xuất cho các câu hỏi tiếp theo sau thời gian chờ đã cấu hình",
- "timeoutLabel": "Thời gian chờ trước khi tự động chọn câu trả lời đầu tiên"
+ "timeoutLabel": "Thời gian chờ trước khi tự động chọn câu trả lời đầu tiên",
+ "timeoutDisabled": "Đã tắt"
},
"execute": {
"label": "Thực thi",
diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json
index 22742e0e0e..fec2653574 100644
--- a/webview-ui/src/i18n/locales/zh-CN/settings.json
+++ b/webview-ui/src/i18n/locales/zh-CN/settings.json
@@ -323,7 +323,8 @@
"followupQuestions": {
"label": "问题",
"description": "在配置的超时时间后自动选择后续问题的第一个建议答案",
- "timeoutLabel": "自动选择第一个答案前的等待时间"
+ "timeoutLabel": "自动选择第一个答案前的等待时间",
+ "timeoutDisabled": "已禁用"
},
"execute": {
"label": "执行",
diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json
index 4255a2e697..80a7a94dbd 100644
--- a/webview-ui/src/i18n/locales/zh-TW/settings.json
+++ b/webview-ui/src/i18n/locales/zh-TW/settings.json
@@ -348,7 +348,8 @@
"followupQuestions": {
"label": "後續提問",
"description": "在設定的逾時時間過後,自動選擇後續問題的第一個建議答案",
- "timeoutLabel": "自動選擇第一個答案前的等待時間"
+ "timeoutLabel": "自動選擇第一個答案前的等待時間",
+ "timeoutDisabled": "已停用"
},
"execute": {
"label": "執行命令",
From 9411e41853f512b970473d7cc0bbccc30a53a009 Mon Sep 17 00:00:00 2001
From: Para <62068271+murd0cc@users.noreply.github.com>
Date: Wed, 12 Aug 2026 00:13:19 +0300
Subject: [PATCH 03/13] Maintainability & Code Quality
---
webview-ui/eslint-suppressions.json | 1 +
.../__tests__/AutoApproveSettings.spec.tsx | 83 +++++++++++++++++--
.../AutoApproveSettings.visual.fixture.tsx | 24 ++----
3 files changed, 85 insertions(+), 23 deletions(-)
create mode 100644 webview-ui/eslint-suppressions.json
diff --git a/webview-ui/eslint-suppressions.json b/webview-ui/eslint-suppressions.json
new file mode 100644
index 0000000000..0967ef424b
--- /dev/null
+++ b/webview-ui/eslint-suppressions.json
@@ -0,0 +1 @@
+{}
diff --git a/webview-ui/src/components/settings/__tests__/AutoApproveSettings.spec.tsx b/webview-ui/src/components/settings/__tests__/AutoApproveSettings.spec.tsx
index 5ee6026ed8..37fa40024d 100644
--- a/webview-ui/src/components/settings/__tests__/AutoApproveSettings.spec.tsx
+++ b/webview-ui/src/components/settings/__tests__/AutoApproveSettings.spec.tsx
@@ -33,6 +33,24 @@ vi.mock("@/hooks/useAutoApprovalState", () => ({
useAutoApprovalState: () => ({ effectiveAutoApprovalEnabled: false, hasEnabledOptions: false }),
}))
+vi.mock("@/components/ui", async (importOriginal) => {
+ const actual = await importOriginal()
+
+ return {
+ ...actual,
+ Button: ({ children, ...props }: any) => {children} ,
+ Input: (props: any) => ,
+ Slider: ({ value, onValueChange, ...props }: any) => (
+ onValueChange?.([Number((event.target as HTMLInputElement).value)])}
+ {...props}
+ />
+ ),
+ }
+})
+
const renderSettings = (overrides = {}) => {
const setCachedStateField = vi.fn()
const props = {
@@ -163,16 +181,69 @@ describe("AutoApproveSettings - Save/Discard contract", () => {
})
it("renders disabled timeout label when follow-up auto-approve timeout is 0", () => {
- renderSettings({ alwaysAllowFollowupQuestions: true, followupAutoApproveTimeoutMs: 0 })
-
- expect(screen.getByTestId("followup-timeout-slider")).toBeInTheDocument()
+ const { setCachedStateField } = renderSettings({
+ alwaysAllowFollowupQuestions: true,
+ followupAutoApproveTimeoutMs: 0,
+ })
+
+ const slider = screen.getByTestId("followup-timeout-slider") as HTMLInputElement
+ expect(slider).toBeInTheDocument()
+ expect(slider.value).toBe("0")
expect(screen.getByText("settings:autoApprove.followupQuestions.timeoutDisabled")).toBeInTheDocument()
+
+ fireEvent.change(slider, { target: { value: "4000" } })
+
+ expect(setCachedStateField).toHaveBeenCalledWith("followupAutoApproveTimeoutMs", 4000)
+ expectNoImmediateUpdateSettings()
})
it("renders timeout in seconds when follow-up auto-approve timeout is non-zero", () => {
- renderSettings({ alwaysAllowFollowupQuestions: true, followupAutoApproveTimeoutMs: 5000 })
-
- expect(screen.getByTestId("followup-timeout-slider")).toBeInTheDocument()
+ const { setCachedStateField } = renderSettings({
+ alwaysAllowFollowupQuestions: true,
+ followupAutoApproveTimeoutMs: 5000,
+ })
+
+ const slider = screen.getByTestId("followup-timeout-slider") as HTMLInputElement
+ expect(slider).toBeInTheDocument()
+ expect(slider.value).toBe("5000")
expect(screen.getByText("5s")).toBeInTheDocument()
+
+ fireEvent.change(slider, { target: { value: "0" } })
+
+ expect(setCachedStateField).toHaveBeenCalledWith("followupAutoApproveTimeoutMs", 0)
+ expectNoImmediateUpdateSettings()
+ })
+
+ it("uses the default timeout value when timeout is unset and follow-up auto-approve is enabled", () => {
+ renderSettings({ alwaysAllowFollowupQuestions: true })
+
+ const slider = screen.getByTestId("followup-timeout-slider") as HTMLInputElement
+ expect(slider.value).toBe("60000")
+ expect(screen.getByText("60s")).toBeInTheDocument()
+ })
+
+ it("does not render the follow-up timeout controls when follow-up auto-approve is disabled or unset", () => {
+ const { rerender } = render(
+ ,
+ )
+
+ expect(screen.queryByTestId("followup-timeout-slider")).not.toBeInTheDocument()
+
+ rerender(
+ ,
+ )
+
+ expect(screen.queryByTestId("followup-timeout-slider")).not.toBeInTheDocument()
})
})
diff --git a/webview-ui/src/components/settings/__tests__/AutoApproveSettings.visual.fixture.tsx b/webview-ui/src/components/settings/__tests__/AutoApproveSettings.visual.fixture.tsx
index 6f4e4707e3..0002607348 100644
--- a/webview-ui/src/components/settings/__tests__/AutoApproveSettings.visual.fixture.tsx
+++ b/webview-ui/src/components/settings/__tests__/AutoApproveSettings.visual.fixture.tsx
@@ -2,28 +2,18 @@
import React from "react"
import { TranslationContext } from "@/i18n/TranslationContext"
-import { ExtensionStateContext } from "@/context/ExtensionStateContext"
+import i18next from "@/i18n/setup"
+import { ExtensionStateContextProvider } from "@/context/ExtensionStateContext"
import { AutoApproveSettings } from "../AutoApproveSettings"
-const extensionStateValue = {
- autoApprovalEnabled: false,
- setAutoApprovalEnabled: () => {},
- alwaysAllowReadOnly: false,
- alwaysAllowWrite: false,
- alwaysAllowExecute: false,
- alwaysAllowMcp: false,
- alwaysAllowModeSwitch: false,
- alwaysAllowSubtasks: false,
- alwaysAllowFollowupQuestions: true,
-} as any
-
export const AutoApproveSettingsFixture = () => (
key,
- i18n: null as unknown as typeof import("../../../i18n/setup").default,
+ t: (key) => (key === "settings:autoApprove.followupQuestions.timeoutDisabled" ? "Disabled" : key),
+ i18n: i18next,
}}>
-
+
(
setCachedStateField={() => {}}
/>
-
+
)
From ca2ed956a63a6389e27c5031e9e38d3f0a65880e Mon Sep 17 00:00:00 2001
From: Para <62068271+murd0cc@users.noreply.github.com>
Date: Wed, 12 Aug 2026 00:38:51 +0300
Subject: [PATCH 04/13] coverage improvements
---
.../chat/__tests__/FollowUpSuggest.spec.tsx | 94 ++++++++++++++++++-
1 file changed, 92 insertions(+), 2 deletions(-)
diff --git a/webview-ui/src/components/chat/__tests__/FollowUpSuggest.spec.tsx b/webview-ui/src/components/chat/__tests__/FollowUpSuggest.spec.tsx
index 169df1aee4..e6d623b389 100644
--- a/webview-ui/src/components/chat/__tests__/FollowUpSuggest.spec.tsx
+++ b/webview-ui/src/components/chat/__tests__/FollowUpSuggest.spec.tsx
@@ -1,5 +1,5 @@
import React, { createContext, useContext } from "react"
-import { render, screen, act } from "@testing-library/react"
+import { render, screen, act, fireEvent } from "@testing-library/react"
import { TooltipProvider } from "@radix-ui/react-tooltip"
import { FollowUpSuggest } from "../FollowUpSuggest"
@@ -28,7 +28,7 @@ vi.mock("@src/i18n/TranslationContext", () => ({
interface TestExtensionState {
autoApprovalEnabled: boolean
alwaysAllowFollowupQuestions: boolean
- followupAutoApproveTimeoutMs: number
+ followupAutoApproveTimeoutMs?: number
}
const TestExtensionStateContext = createContext(undefined)
@@ -749,4 +749,94 @@ describe("FollowUpSuggest", () => {
expect(mockOnCancelAutoApproval).toHaveBeenCalled()
})
})
+
+ describe("suggestion interactions", () => {
+ it("cancels countdown and forwards click when user clicks a suggestion", () => {
+ renderWithTestProviders(
+ ,
+ defaultTestState,
+ )
+
+ fireEvent.click(screen.getByText("First suggestion"))
+
+ expect(mockOnSuggestionClick).toHaveBeenCalledWith(
+ expect.objectContaining({ answer: "First suggestion" }),
+ expect.objectContaining({ shiftKey: false }),
+ )
+ expect(mockOnCancelAutoApproval).toHaveBeenCalled()
+ expect(screen.queryByText(/Selecting in \d+s/)).not.toBeInTheDocument()
+ })
+
+ it("keeps countdown when shift-clicking a suggestion", () => {
+ renderWithTestProviders(
+ ,
+ defaultTestState,
+ )
+
+ mockOnCancelAutoApproval.mockClear()
+ fireEvent.click(screen.getByText("First suggestion"), { shiftKey: true })
+
+ expect(mockOnSuggestionClick).toHaveBeenCalledWith(
+ expect.objectContaining({ answer: "First suggestion" }),
+ expect.objectContaining({ shiftKey: true }),
+ )
+ expect(mockOnCancelAutoApproval).not.toHaveBeenCalled()
+ expect(screen.getByText(/Selecting in 3s/)).toBeInTheDocument()
+ })
+
+ it("copies suggestion into input when the copy affordance is clicked", () => {
+ const { container } = renderWithTestProviders(
+ ,
+ defaultTestState,
+ )
+
+ const copyAffordance = container.querySelector(
+ ".absolute.cursor-pointer.top-1\\.5.right-1\\.5",
+ ) as HTMLElement
+
+ expect(copyAffordance).toBeTruthy()
+ fireEvent.click(copyAffordance)
+
+ expect(mockOnSuggestionClick).toHaveBeenCalledWith(
+ expect.objectContaining({ answer: "First suggestion" }),
+ expect.objectContaining({ shiftKey: true }),
+ )
+ expect(mockOnCancelAutoApproval).toHaveBeenCalled()
+ expect(screen.queryByText(/Selecting in \d+s/)).not.toBeInTheDocument()
+ })
+
+ it("uses default timeout when extension state timeout is undefined", () => {
+ const stateWithUndefinedTimeout = {
+ ...defaultTestState,
+ followupAutoApproveTimeoutMs: undefined,
+ }
+
+ renderWithTestProviders(
+ ,
+ stateWithUndefinedTimeout,
+ )
+
+ expect(screen.getByText(/Selecting in 60s/)).toBeInTheDocument()
+ })
+ })
})
From 73602a91c38989c9d282f4d9f7b82e6ecdcc694c Mon Sep 17 00:00:00 2001
From: Para <62068271+murd0cc@users.noreply.github.com>
Date: Sun, 16 Aug 2026 20:48:58 +0300
Subject: [PATCH 05/13] fixed screenshots
---
...o-approve-followup-timeout-disabled-dark.png | Bin 205 -> 0 bytes
.../model-info-service-tier-pricing-dark.png | Bin 18087 -> 0 bytes
.../__screenshots__/screenshot (1).jpg | Bin 0 -> 43544 bytes
.../__screenshots__/screenshot (2).jpg | Bin 0 -> 33097 bytes
.../__screenshots__/screenshot (3).jpg | Bin 0 -> 43262 bytes
5 files changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/auto-approve-followup-timeout-disabled-dark.png
delete mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/model-info-service-tier-pricing-dark.png
create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/screenshot (1).jpg
create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/screenshot (2).jpg
create mode 100644 webview-ui/src/components/settings/__tests__/__screenshots__/screenshot (3).jpg
diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/auto-approve-followup-timeout-disabled-dark.png b/webview-ui/src/components/settings/__tests__/__screenshots__/auto-approve-followup-timeout-disabled-dark.png
deleted file mode 100644
index db87f68911f60194136207b64222fe42540967af..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 205
zcmeAS@N?(olHy`uVBq!ia0y~yVB!F>6*!oH*
k|8@~+mw~Qf1G$Eofo~1NT#m%>1wau7Pgg&ebxsLQ04Fjnga7~l
diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/model-info-service-tier-pricing-dark.png b/webview-ui/src/components/settings/__tests__/__screenshots__/model-info-service-tier-pricing-dark.png
deleted file mode 100644
index 0a3bee53510b9ab9282bd0e1c910a2b2e58f0a66..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 18087
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
diff --git a/webview-ui/src/components/settings/__tests__/__screenshots__/screenshot (1).jpg b/webview-ui/src/components/settings/__tests__/__screenshots__/screenshot (1).jpg
new file mode 100644
index 0000000000000000000000000000000000000000..7694412f7e4f468813057631c6873e0ec2dc0bc9
GIT binary patch
literal 43544
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
z
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