Skip to content

Commit 72eff1c

Browse files
author
Bertan Ari
committed
test(webview): strengthen VS Code LM hook assertions per review
1 parent bd9f7a5 commit 72eff1c

2 files changed

Lines changed: 24 additions & 7 deletions

File tree

‎webview-ui/src/components/ui/hooks/__tests__/useSelectedModel.spec.ts‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1699,6 +1699,11 @@ describe("useSelectedModel", () => {
16991699
},
17001700
)
17011701

1702+
it("does not request generic VS Code LM models for other providers", () => {
1703+
renderHook(() => useSelectedModel({ apiProvider: providerIdentifiers.openaiNative }))
1704+
expect(useVsCodeLmModels).toHaveBeenLastCalledWith(false)
1705+
})
1706+
17021707
it.each([
17031708
{ vendor: "other", family: "unknown" },
17041709
{ vendor: "wanted", family: "unknown", id: "missing" },

‎webview-ui/src/components/ui/hooks/__tests__/useVsCodeLmModels.spec.tsx‎

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,12 @@ const setup = (enabled = true) => {
2424
const wrapper = ({ children }: { children: React.ReactNode }) => (
2525
<QueryClientProvider client={client}>{children}</QueryClientProvider>
2626
)
27-
return renderHook(({ enabled }) => useVsCodeLmModels(enabled), { wrapper, initialProps: { enabled } })
27+
return {
28+
client,
29+
...renderHook(({ enabled }) => useVsCodeLmModels(enabled), { wrapper, initialProps: { enabled } }),
30+
}
2831
}
32+
const cachedModels = (client: ReturnType<typeof createTestQueryClient>) => client.getQueryData(["vsCodeLmModels"])
2933

3034
describe("useVsCodeLmModels", () => {
3135
beforeEach(() => vi.clearAllMocks())
@@ -58,9 +62,9 @@ describe("useVsCodeLmModels", () => {
5862
{ type: VsCodeLmModelsMessageType.githubCopilotSignInResult, vsCodeLmModels: [model] },
5963
{ type: VsCodeLmModelsMessageType.vsCodeLmModels },
6064
])("ignores non-generic or unsuccessful replies: %j", (message) => {
61-
const { result } = setup()
65+
const { client } = setup()
6266
send(message)
63-
expect(result.current.data).toBeUndefined()
67+
expect(cachedModels(client)).toBeUndefined()
6468
})
6569

6670
it.each([{ models: undefined }, { models: [model] }])(
@@ -79,19 +83,27 @@ describe("useVsCodeLmModels", () => {
7983
)
8084

8185
it("does not request or listen when disabled, and removes its listener on unmount", () => {
86+
const add = vi.spyOn(window, "addEventListener")
8287
const remove = vi.spyOn(window, "removeEventListener")
83-
const { result, rerender, unmount } = setup(false)
88+
const lastMessageHandler = () => add.mock.calls.filter(([type]) => type === "message").at(-1)?.[1]
89+
const { client, rerender, unmount } = setup(false)
8490
expect(vscode.postMessage).not.toHaveBeenCalled()
91+
expect(lastMessageHandler()).toBeUndefined()
8592
send({ type: VsCodeLmModelsMessageType.vsCodeLmModels, vsCodeLmModels: [model] })
86-
expect(result.current.data).toBeUndefined()
93+
expect(cachedModels(client)).toBeUndefined()
8794
rerender({ enabled: true })
8895
expect(vscode.postMessage).toHaveBeenCalledTimes(1)
96+
const firstHandler = lastMessageHandler()
97+
expect(firstHandler).toBeDefined()
8998
rerender({ enabled: false })
90-
expect(remove).toHaveBeenCalledWith("message", expect.any(Function))
99+
expect(remove).toHaveBeenCalledWith("message", firstHandler)
91100
rerender({ enabled: true })
101+
const secondHandler = lastMessageHandler()
102+
expect(secondHandler).toBeDefined()
92103
remove.mockClear()
93104
unmount()
94-
expect(remove).toHaveBeenCalledWith("message", expect.any(Function))
105+
expect(remove).toHaveBeenCalledWith("message", secondHandler)
106+
add.mockRestore()
95107
remove.mockRestore()
96108
})
97109
})

0 commit comments

Comments
 (0)