@@ -41,10 +41,10 @@ Not exercised in this plan (separate scenarios):
4141- Eclipse IDE with the GitHub Copilot for Eclipse plugin installed and
4242 activated.
4343- ** A signed-in Copilot account on the host machine** for every TC except
44- TC-009 (which deliberately probes the signed-out empty state). The Copilot
44+ TC-010 (which deliberately probes the signed-out empty state). The Copilot
4545 JS agent reads its token from the OS-standard Copilot store.
4646- The signed-in account must have BYOK enabled by GitHub policy. If the org
47- disables custom models, only TC-010 (disabled tip) is observable; the rest
47+ disables custom models, only TC-011 (disabled tip) is observable; the rest
4848 will short-circuit to the disabled view.
4949- Valid API keys for at least one non-Azure provider (e.g. OpenAI) for the
5050 add-key / add-model / change-key / delete-key TCs. Use a throwaway key
@@ -112,7 +112,7 @@ Not exercised in this plan (separate scenarios):
112112- Page never leaves loading → ` ByokService.refreshData() ` failed; check
113113 ` workspace.log ` for the LS bind error.
114114- Sign-in label or org-disabled tip is shown instead of the tree → the
115- preconditions don't match; fall through to TC-009 / TC-010 .
115+ preconditions don't match; fall through to TC-010 / TC-011 .
116116
117117---
118118
@@ -137,21 +137,27 @@ Not exercised in this plan (separate scenarios):
1371373 . Verify ** Add Model…** becomes enabled and ** Change API…** /
138138 ** Delete API…** stay disabled (no key registered yet).
1391394 . Click ** Add Model…** .
140- 5 . Verify the ** Add OpenAI API Key** dialog opens (title contains the
141- provider name, single password-masked ** API Key** field, ** Add** and
142- ** Cancel** buttons; ** Add** is initially disabled until a non-blank key
143- is entered).
144- 6 . Type a valid OpenAI API key into the field and click ** Add** .
145- 7 . Wait for the per-provider loading indicator to clear (the "(Loading...)"
140+ 5 . Verify the API-key dialog opens with shell title ** Add OpenAI Models**
141+ (formatted from ` preferences_page_byok_addModel_dialog_title ` ). The
142+ dialog body contains a single password-masked ** API Key** text field
143+ with an eye-icon toggle button to reveal/mask the value, and the
144+ button bar shows the platform-default ** OK** and ** Cancel** buttons.
145+ ** OK** is enabled on open (the dialog defers validation until the
146+ button is pressed).
147+ 6 . Verify that pressing ** OK** while the field is empty does ** not**
148+ close the dialog: focus returns to the API Key field and no save is
149+ dispatched. (Equivalent of the empty-input guard in ` okPressed ` .)
150+ 7 . Type a valid OpenAI API key into the field and click ** OK** .
151+ 8 . Wait for the per-provider loading indicator to clear (the "(Loading...)"
146152 suffix on the OpenAI node disappears).
147- 8 . Expand the OpenAI node.
148- 9 . Verify a list of models is fetched from the provider and rendered as
149- children, each with a ** Status** column entry of either ** Enable** or
150- ** Disable** (matching their default registration state) and a status
151- icon.
152- 10 . Verify the OpenAI node label now includes the registered/total count
153+ 9 . Expand the OpenAI node.
154+ 10 . Verify a list of models is fetched from the provider and rendered as
155+ children, each with a ** Status** column entry of either ** Enable** or
156+ ** Disable** (matching their default registration state) and a status
157+ icon.
158+ 11 . Verify the OpenAI node label now includes the registered/total count
153159 suffix, e.g. ` OpenAI ( 0 of N Enabled ) ` .
154- 11 . Re-select the OpenAI provider node and verify ** Change API…** and
160+ 12 . Re-select the OpenAI provider node and verify ** Change API…** and
155161 ** Delete API…** are now enabled.
156162
157163#### Expected Result
@@ -161,7 +167,8 @@ Not exercised in this plan (separate scenarios):
161167
162168#### 📸 Key Screenshots
163169- [ ] ** Empty OpenAI node** — selected before clicking Add Model.
164- - [ ] ** Add API Key dialog** — open with the provider name in the title.
170+ - [ ] ** API key dialog** — shell title ** Add OpenAI Models** , masked
171+ API Key field with eye toggle, ** OK** / ** Cancel** buttons.
165172- [ ] ** OpenAI populated** — node expanded with models + count suffix.
166173
167174---
@@ -182,9 +189,12 @@ Not exercised in this plan (separate scenarios):
1821893 . Verify a confirmation dialog appears with title ** Change OpenAI API
183190 Key?** and warning text about the change potentially breaking models.
184191 Click ** Yes** .
185- 4 . Verify the ** Add API Key** dialog reopens, pre-populated with the
186- current (masked) API key value.
187- 5 . Replace the field with the new API key and click ** Add** .
192+ 4 . Verify the API-key dialog reopens. In the change flow its shell title
193+ is just the provider name (** OpenAI** , not the ` Add %s Models `
194+ formatted title used for the add flow), and the masked API Key field
195+ is pre-populated with the current key. ** OK** / ** Cancel** are the
196+ button-bar labels; ** OK** is enabled on open.
197+ 5 . Replace the field with the new API key and click ** OK** .
1881986 . Wait for the per-provider loading indicator to clear.
1891997 . Verify the OpenAI node still shows its model list (refreshed against
190200 the new key) and no error dialog is shown.
@@ -195,7 +205,8 @@ Not exercised in this plan (separate scenarios):
195205
196206#### 📸 Key Screenshots
197207- [ ] ** Change API confirmation dialog** .
198- - [ ] ** Add API Key dialog with pre-filled value** .
208+ - [ ] ** API key dialog (change flow)** — shell title is just ** OpenAI** ,
209+ field pre-populated with the masked existing key.
199210
200211---
201212
0 commit comments