Skip to content

Commit aaeb28c

Browse files
committed
test(code-index): cover stale validation rejections and strengthen service assertions
1 parent 72c72af commit aaeb28c

3 files changed

Lines changed: 33 additions & 4 deletions

File tree

‎src/eslint-suppressions.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1301,7 +1301,7 @@
13011301
},
13021302
"services/code-index/__tests__/manager.spec.ts": {
13031303
"@typescript-eslint/no-explicit-any": {
1304-
"count": 87
1304+
"count": 84
13051305
}
13061306
},
13071307
"services/code-index/__tests__/orchestrator.spec.ts": {

‎src/services/code-index/__tests__/embedder-readiness-manager.spec.ts‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,33 @@ describe("EmbedderReadinessManager", () => {
8181
expect(stateManager.setSystemState).not.toHaveBeenCalled()
8282
})
8383

84+
it.each(["invalidation", "newer validation", "status change"] as const)(
85+
"ignores a pending rejection after %s",
86+
async (scenario) => {
87+
const { stateManager, manager, serviceFactory, embedder } = setup()
88+
let rejectValidation!: (error: Error) => void
89+
vi.mocked(serviceFactory.validateEmbedder).mockReturnValueOnce(
90+
new Promise((_, reject) => {
91+
rejectValidation = reject
92+
}),
93+
)
94+
const validation = manager.validate(serviceFactory, embedder)
95+
96+
if (scenario === "invalidation") {
97+
manager.invalidate()
98+
} else if (scenario === "newer validation") {
99+
vi.mocked(serviceFactory.validateEmbedder).mockResolvedValueOnce({ valid: true })
100+
await manager.validate(serviceFactory, embedder)
101+
} else {
102+
stateManager.state = "Indexed"
103+
}
104+
105+
rejectValidation(new Error("Stale rejection"))
106+
await expect(validation).resolves.toBeUndefined()
107+
expect(stateManager.setSystemState).not.toHaveBeenCalled()
108+
},
109+
)
110+
84111
it("ignores a pending result after invalidation", async () => {
85112
const { stateManager, manager, serviceFactory, embedder } = setup()
86113
let finishValidation!: (result: { valid: boolean; error?: string }) => void

‎src/services/code-index/__tests__/manager.spec.ts‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { makeExtensionContext } from "../../../test-utils/vscode"
33
import { CodeIndexManager } from "../manager"
44
import { CodeIndexManagerRegistry } from "../code-index-manager-registry"
55
import { CodeIndexServiceFactory } from "../service-factory"
6+
import { CodeIndexOrchestrator } from "../orchestrator"
7+
import { CodeIndexSearchService } from "../search-service"
68
import type { MockedClass } from "vitest"
79
import * as path from "path"
810
import { providerIdentifiers } from "@roo-code/types/provider-identifiers"
@@ -482,13 +484,13 @@ describe("CodeIndexManager - handleSettingsChange regression", () => {
482484
}),
483485
)
484486

485-
await (manager as any)._recreateServices()
487+
await manager["_recreateServices"]()
486488

487489
expect(mockServiceFactoryInstance.createServices).toHaveBeenCalled()
488490
expect(mockServiceFactoryInstance.validateEmbedder).toHaveBeenCalledWith(mockEmbedder)
489491
expect(mockStateManager.setSystemState).not.toHaveBeenCalledWith("Error", expect.any(String))
490-
expect((manager as any)._orchestrator).toBeDefined()
491-
expect((manager as any)._searchService).toBeDefined()
492+
expect(manager["_orchestrator"]).toBeInstanceOf(CodeIndexOrchestrator)
493+
expect(manager["_searchService"]).toBeInstanceOf(CodeIndexSearchService)
492494

493495
finishValidation({ valid: true })
494496
await Promise.resolve()

0 commit comments

Comments
 (0)