Skip to content

Commit 76f59a0

Browse files
committed
fix: update SimpleInstaller tests to match new CustomModesManager API
- Update deleteCustomMode calls to include fromMarketplace parameter - Remove expectations for direct file operations now handled by CustomModesManager - Fix test expectation for error handling behavior
1 parent 3b4110f commit 76f59a0

File tree

1 file changed

+22
-31
lines changed

1 file changed

+22
-31
lines changed

src/services/marketplace/__tests__/SimpleInstaller.spec.ts

Lines changed: 22 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -222,67 +222,58 @@ describe("SimpleInstaller", () => {
222222
vi.mocked(mockCustomModesManager.getCustomModes).mockResolvedValueOnce([
223223
{ slug: "test", name: "Test Mode", source: "project" } as any,
224224
])
225-
// Mock that rules folder exists
226-
vi.mocked(fileExistsAtPath).mockResolvedValueOnce(true)
227225

228226
await installer.removeItem(mockModeItem, { target: "project" })
229227

230-
expect(mockCustomModesManager.deleteCustomMode).toHaveBeenCalledWith("test")
231-
expect(fileExistsAtPath).toHaveBeenCalledWith(path.join("/test/workspace", ".roo", "rules-test"))
232-
expect(mockFs.rm).toHaveBeenCalledWith(path.join("/test/workspace", ".roo", "rules-test"), {
233-
recursive: true,
234-
force: true,
235-
})
228+
// Should call deleteCustomMode with fromMarketplace flag set to true
229+
expect(mockCustomModesManager.deleteCustomMode).toHaveBeenCalledWith("test", true)
230+
// The rules folder deletion is now handled by CustomModesManager, not SimpleInstaller
231+
expect(fileExistsAtPath).not.toHaveBeenCalled()
232+
expect(mockFs.rm).not.toHaveBeenCalled()
236233
})
237234

238235
it("should handle global mode removal with rules cleanup", async () => {
239236
// Mock that the mode exists with global source
240237
vi.mocked(mockCustomModesManager.getCustomModes).mockResolvedValueOnce([
241238
{ slug: "test", name: "Test Mode", source: "global" } as any,
242239
])
243-
// Mock that rules folder exists
244-
vi.mocked(fileExistsAtPath).mockResolvedValueOnce(true)
245240

246241
await installer.removeItem(mockModeItem, { target: "global" })
247242

248-
expect(mockCustomModesManager.deleteCustomMode).toHaveBeenCalledWith("test")
249-
expect(fileExistsAtPath).toHaveBeenCalledWith(path.join("/home/user", ".roo", "rules-test"))
250-
expect(mockFs.rm).toHaveBeenCalledWith(path.join("/home/user", ".roo", "rules-test"), {
251-
recursive: true,
252-
force: true,
253-
})
243+
// Should call deleteCustomMode with fromMarketplace flag set to true
244+
expect(mockCustomModesManager.deleteCustomMode).toHaveBeenCalledWith("test", true)
245+
// The rules folder deletion is now handled by CustomModesManager, not SimpleInstaller
246+
expect(fileExistsAtPath).not.toHaveBeenCalled()
247+
expect(mockFs.rm).not.toHaveBeenCalled()
254248
})
255249

256250
it("should handle case when rules folder does not exist", async () => {
257251
// Mock that the mode exists
258252
vi.mocked(mockCustomModesManager.getCustomModes).mockResolvedValueOnce([
259253
{ slug: "test", name: "Test Mode", source: "project" } as any,
260254
])
261-
// Mock that rules folder does not exist
262-
vi.mocked(fileExistsAtPath).mockResolvedValueOnce(false)
263255

264256
await installer.removeItem(mockModeItem, { target: "project" })
265257

266-
expect(mockCustomModesManager.deleteCustomMode).toHaveBeenCalledWith("test")
267-
expect(fileExistsAtPath).toHaveBeenCalledWith(path.join("/test/workspace", ".roo", "rules-test"))
258+
// Should call deleteCustomMode with fromMarketplace flag set to true
259+
expect(mockCustomModesManager.deleteCustomMode).toHaveBeenCalledWith("test", true)
260+
// The rules folder deletion is now handled by CustomModesManager, not SimpleInstaller
261+
expect(fileExistsAtPath).not.toHaveBeenCalled()
268262
expect(mockFs.rm).not.toHaveBeenCalled()
269263
})
270264

271-
it("should continue even if rules folder deletion fails", async () => {
265+
it("should throw error if deleteCustomMode fails", async () => {
272266
// Mock that the mode exists
273267
vi.mocked(mockCustomModesManager.getCustomModes).mockResolvedValueOnce([
274268
{ slug: "test", name: "Test Mode", source: "project" } as any,
275269
])
276-
// Mock that rules folder exists
277-
vi.mocked(fileExistsAtPath).mockResolvedValueOnce(true)
278-
// Mock that rm fails
279-
mockFs.rm.mockRejectedValueOnce(new Error("Permission denied"))
270+
// Mock that deleteCustomMode fails
271+
mockCustomModesManager.deleteCustomMode = vi.fn().mockRejectedValueOnce(new Error("Permission denied"))
280272

281-
// Should not throw
282-
await expect(installer.removeItem(mockModeItem, { target: "project" })).resolves.not.toThrow()
273+
// Should throw the error from deleteCustomMode
274+
await expect(installer.removeItem(mockModeItem, { target: "project" })).rejects.toThrow("Permission denied")
283275

284-
expect(mockCustomModesManager.deleteCustomMode).toHaveBeenCalledWith("test")
285-
expect(mockFs.rm).toHaveBeenCalled()
276+
expect(mockCustomModesManager.deleteCustomMode).toHaveBeenCalledWith("test", true)
286277
})
287278

288279
it("should handle mode not found in custom modes list", async () => {
@@ -291,7 +282,7 @@ describe("SimpleInstaller", () => {
291282

292283
await installer.removeItem(mockModeItem, { target: "project" })
293284

294-
expect(mockCustomModesManager.deleteCustomMode).toHaveBeenCalledWith("test")
285+
expect(mockCustomModesManager.deleteCustomMode).toHaveBeenCalledWith("test", true)
295286
// Should not attempt to delete rules folder
296287
expect(fileExistsAtPath).not.toHaveBeenCalled()
297288
expect(mockFs.rm).not.toHaveBeenCalled()
@@ -344,7 +335,7 @@ describe("SimpleInstaller", () => {
344335

345336
await installer.removeItem(arrayContentItem, { target: "project" })
346337

347-
expect(mockCustomModesManager.deleteCustomMode).toHaveBeenCalledWith("test-array")
338+
expect(mockCustomModesManager.deleteCustomMode).toHaveBeenCalledWith("test-array", true)
348339
})
349340

350341
it("should throw error when CustomModesManager is not available", async () => {

0 commit comments

Comments
 (0)