@sentry/wizard 6.10.0 → 6.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/ci-ensure-runtime-loaded.sh +82 -0
  3. package/dist/e2e-tests/tests/angular-17.test.js +72 -82
  4. package/dist/e2e-tests/tests/angular-17.test.js.map +1 -1
  5. package/dist/e2e-tests/tests/angular-19.test.js +71 -80
  6. package/dist/e2e-tests/tests/angular-19.test.js.map +1 -1
  7. package/dist/e2e-tests/tests/cloudflare-worker.test.d.ts +1 -0
  8. package/dist/e2e-tests/tests/cloudflare-worker.test.js +64 -0
  9. package/dist/e2e-tests/tests/cloudflare-worker.test.js.map +1 -0
  10. package/dist/e2e-tests/tests/cloudflare-wrangler-sourcemaps.test.js +2 -5
  11. package/dist/e2e-tests/tests/cloudflare-wrangler-sourcemaps.test.js.map +1 -1
  12. package/dist/e2e-tests/tests/expo.test.js +36 -61
  13. package/dist/e2e-tests/tests/expo.test.js.map +1 -1
  14. package/dist/e2e-tests/tests/flutter.test.js +63 -70
  15. package/dist/e2e-tests/tests/flutter.test.js.map +1 -1
  16. package/dist/e2e-tests/tests/help-message.test.js +2 -2
  17. package/dist/e2e-tests/tests/help-message.test.js.map +1 -1
  18. package/dist/e2e-tests/tests/nextjs-14.test.js +48 -76
  19. package/dist/e2e-tests/tests/nextjs-14.test.js.map +1 -1
  20. package/dist/e2e-tests/tests/nextjs-15.test.js +89 -99
  21. package/dist/e2e-tests/tests/nextjs-15.test.js.map +1 -1
  22. package/dist/e2e-tests/tests/nextjs-16.test.js +48 -45
  23. package/dist/e2e-tests/tests/nextjs-16.test.js.map +1 -1
  24. package/dist/e2e-tests/tests/nuxt-3.test.js +45 -58
  25. package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
  26. package/dist/e2e-tests/tests/nuxt-4.test.js +59 -73
  27. package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
  28. package/dist/e2e-tests/tests/pnpm-workspace.test.js +4 -7
  29. package/dist/e2e-tests/tests/pnpm-workspace.test.js.map +1 -1
  30. package/dist/e2e-tests/tests/react-native.test.js +44 -80
  31. package/dist/e2e-tests/tests/react-native.test.js.map +1 -1
  32. package/dist/e2e-tests/tests/react-router.test.js +163 -145
  33. package/dist/e2e-tests/tests/react-router.test.js.map +1 -1
  34. package/dist/e2e-tests/tests/remix.test.js +162 -132
  35. package/dist/e2e-tests/tests/remix.test.js.map +1 -1
  36. package/dist/e2e-tests/tests/sveltekit-hooks.test.js +48 -36
  37. package/dist/e2e-tests/tests/sveltekit-hooks.test.js.map +1 -1
  38. package/dist/e2e-tests/tests/sveltekit-tracing.test.js +3 -6
  39. package/dist/e2e-tests/tests/sveltekit-tracing.test.js.map +1 -1
  40. package/dist/e2e-tests/utils/index.d.ts +15 -43
  41. package/dist/e2e-tests/utils/index.js +95 -185
  42. package/dist/e2e-tests/utils/index.js.map +1 -1
  43. package/dist/get-e2e-test-matrix.mjs +11 -0
  44. package/dist/lib/Constants.d.ts +1 -0
  45. package/dist/lib/Constants.js +5 -0
  46. package/dist/lib/Constants.js.map +1 -1
  47. package/dist/src/android/android-wizard.js +2 -4
  48. package/dist/src/android/android-wizard.js.map +1 -1
  49. package/dist/src/angular/angular-wizard.js +4 -6
  50. package/dist/src/angular/angular-wizard.js.map +1 -1
  51. package/dist/src/angular/sdk-setup.js +1 -1
  52. package/dist/src/angular/sdk-setup.js.map +1 -1
  53. package/dist/src/apple/apple-wizard.js +2 -4
  54. package/dist/src/apple/apple-wizard.js.map +1 -1
  55. package/dist/src/cloudflare/cloudflare-wizard.d.ts +3 -0
  56. package/dist/src/cloudflare/cloudflare-wizard.js +99 -0
  57. package/dist/src/cloudflare/cloudflare-wizard.js.map +1 -0
  58. package/dist/src/cloudflare/sdk-setup.d.ts +7 -0
  59. package/dist/src/cloudflare/sdk-setup.js +47 -0
  60. package/dist/src/cloudflare/sdk-setup.js.map +1 -0
  61. package/dist/src/cloudflare/templates.d.ts +4 -0
  62. package/dist/src/cloudflare/templates.js +44 -0
  63. package/dist/src/cloudflare/templates.js.map +1 -0
  64. package/dist/src/cloudflare/wrangler/create-wrangler-config.d.ts +4 -0
  65. package/dist/src/cloudflare/wrangler/create-wrangler-config.js +27 -0
  66. package/dist/src/cloudflare/wrangler/create-wrangler-config.js.map +1 -0
  67. package/dist/src/cloudflare/wrangler/ensure-wrangler-config.d.ts +4 -0
  68. package/dist/src/cloudflare/wrangler/ensure-wrangler-config.js +25 -0
  69. package/dist/src/cloudflare/wrangler/ensure-wrangler-config.js.map +1 -0
  70. package/dist/src/cloudflare/wrangler/find-wrangler-config.d.ts +4 -0
  71. package/dist/src/cloudflare/wrangler/find-wrangler-config.js +23 -0
  72. package/dist/src/cloudflare/wrangler/find-wrangler-config.js.map +1 -0
  73. package/dist/src/cloudflare/wrangler/get-entry-point-from-wrangler-config.d.ts +6 -0
  74. package/dist/src/cloudflare/wrangler/get-entry-point-from-wrangler-config.js +52 -0
  75. package/dist/src/cloudflare/wrangler/get-entry-point-from-wrangler-config.js.map +1 -0
  76. package/dist/src/cloudflare/wrangler/update-wrangler-config.d.ts +17 -0
  77. package/dist/src/cloudflare/wrangler/update-wrangler-config.js +173 -0
  78. package/dist/src/cloudflare/wrangler/update-wrangler-config.js.map +1 -0
  79. package/dist/src/cloudflare/wrap-worker.d.ts +32 -0
  80. package/dist/src/cloudflare/wrap-worker.js +109 -0
  81. package/dist/src/cloudflare/wrap-worker.js.map +1 -0
  82. package/dist/src/flutter/flutter-wizard.js +3 -6
  83. package/dist/src/flutter/flutter-wizard.js.map +1 -1
  84. package/dist/src/nextjs/nextjs-wizard.js +0 -2
  85. package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
  86. package/dist/src/nuxt/nuxt-wizard.js +3 -5
  87. package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
  88. package/dist/src/react-native/react-native-wizard.js +2 -4
  89. package/dist/src/react-native/react-native-wizard.js.map +1 -1
  90. package/dist/src/react-router/react-router-wizard.js +3 -5
  91. package/dist/src/react-router/react-router-wizard.js.map +1 -1
  92. package/dist/src/react-router/sdk-setup.d.ts +1 -1
  93. package/dist/src/react-router/sdk-setup.js +3 -4
  94. package/dist/src/react-router/sdk-setup.js.map +1 -1
  95. package/dist/src/remix/remix-wizard.js +2 -4
  96. package/dist/src/remix/remix-wizard.js.map +1 -1
  97. package/dist/src/run.d.ts +1 -1
  98. package/dist/src/run.js +5 -0
  99. package/dist/src/run.js.map +1 -1
  100. package/dist/src/sveltekit/sveltekit-wizard.js +2 -4
  101. package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
  102. package/dist/src/utils/abort-if-sportlight-not-supported.d.ts +5 -0
  103. package/dist/src/utils/abort-if-sportlight-not-supported.js +40 -0
  104. package/dist/src/utils/abort-if-sportlight-not-supported.js.map +1 -0
  105. package/dist/src/utils/ast-utils.d.ts +1 -1
  106. package/dist/src/utils/ast-utils.js.map +1 -1
  107. package/dist/src/utils/clack/index.d.ts +2 -2
  108. package/dist/src/utils/clack/index.js.map +1 -1
  109. package/dist/src/utils/clack/mcp-config.js +117 -59
  110. package/dist/src/utils/clack/mcp-config.js.map +1 -1
  111. package/dist/src/version.d.ts +1 -1
  112. package/dist/src/version.js +1 -1
  113. package/dist/src/version.js.map +1 -1
  114. package/dist/test/angular/angular-wizard.test.js +2 -4
  115. package/dist/test/angular/angular-wizard.test.js.map +1 -1
  116. package/dist/test/cloudflare/create-wrangler-config.test.d.ts +1 -0
  117. package/dist/test/cloudflare/create-wrangler-config.test.js +48 -0
  118. package/dist/test/cloudflare/create-wrangler-config.test.js.map +1 -0
  119. package/dist/test/cloudflare/ensure-wrangler-config.test.d.ts +1 -0
  120. package/dist/test/cloudflare/ensure-wrangler-config.test.js +61 -0
  121. package/dist/test/cloudflare/ensure-wrangler-config.test.js.map +1 -0
  122. package/dist/test/cloudflare/find-wrangler-config.test.d.ts +1 -0
  123. package/dist/test/cloudflare/find-wrangler-config.test.js +77 -0
  124. package/dist/test/cloudflare/find-wrangler-config.test.js.map +1 -0
  125. package/dist/test/cloudflare/get-entry-point-from-wrangler-config.test.d.ts +1 -0
  126. package/dist/test/cloudflare/get-entry-point-from-wrangler-config.test.js +81 -0
  127. package/dist/test/cloudflare/get-entry-point-from-wrangler-config.test.js.map +1 -0
  128. package/dist/test/cloudflare/sdk-setup.test.d.ts +1 -0
  129. package/dist/test/cloudflare/sdk-setup.test.js +152 -0
  130. package/dist/test/cloudflare/sdk-setup.test.js.map +1 -0
  131. package/dist/test/cloudflare/templates.test.d.ts +1 -0
  132. package/dist/test/cloudflare/templates.test.js +68 -0
  133. package/dist/test/cloudflare/templates.test.js.map +1 -0
  134. package/dist/test/cloudflare/update-wrangler-config.test.d.ts +1 -0
  135. package/dist/test/cloudflare/update-wrangler-config.test.js +216 -0
  136. package/dist/test/cloudflare/update-wrangler-config.test.js.map +1 -0
  137. package/dist/test/cloudflare/wrap-worker.test.d.ts +1 -0
  138. package/dist/test/cloudflare/wrap-worker.test.js +143 -0
  139. package/dist/test/cloudflare/wrap-worker.test.js.map +1 -0
  140. package/dist/test/react-router/sdk-setup.test.js +2 -2
  141. package/dist/test/react-router/sdk-setup.test.js.map +1 -1
  142. package/dist/test/utils/clack/mcp-config.test.js +176 -51
  143. package/dist/test/utils/clack/mcp-config.test.js.map +1 -1
  144. package/package.json +5 -4
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config.test.js","sourceRoot":"","sources":["../../../../test/utils/clack/mcp-config.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as childProcess from 'node:child_process';\nimport { offerProjectScopedMcpConfig } from '../../../src/utils/clack/mcp-config';\n\n// Mock types for better type safety\ntype ConfigContent = {\n mcpServers?: Record<string, { url: string }>;\n servers?: Record<string, { url: string; type?: string }>;\n otherProperty?: string;\n};\n\n// Mock the clack utils which wrap the prompts\nvi.mock('../../../src/utils/clack', () => ({\n abortIfCancelled: vi.fn((value: unknown) => Promise.resolve(value)),\n showCopyPasteInstructions: vi.fn(),\n}));\n\n// Mock the external dependencies\nvi.mock('@clack/prompts', () => ({\n confirm: vi.fn(),\n select: vi.fn(),\n isCancel: vi.fn(() => false),\n cancel: vi.fn(),\n log: {\n success: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n },\n}));\n\nvi.mock('node:fs');\nvi.mock('node:child_process');\n\ndescribe('mcp-config', () => {\n // Helper to get mocked modules with proper typing\n type ClackMocks = {\n select: ReturnType<typeof vi.fn>;\n log: {\n success: ReturnType<typeof vi.fn>;\n info: ReturnType<typeof vi.fn>;\n warn: ReturnType<typeof vi.fn>;\n };\n };\n\n type ClackUtilsMocks = {\n abortIfCancelled: ReturnType<typeof vi.fn>;\n showCopyPasteInstructions: ReturnType<typeof vi.fn>;\n };\n\n const getMocks = async () => {\n const clack = await vi.importMock<ClackMocks>('@clack/prompts');\n const clackUtils = await vi.importMock<ClackUtilsMocks>(\n '../../../src/utils/clack',\n );\n return { clack, clackUtils };\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n });\n\n describe('offerProjectScopedMcpConfig', () => {\n it('should return early if user declines MCP config', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValue('no');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n await offerProjectScopedMcpConfig();\n\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: expect.stringContaining(\n 'Optionally add a project-scoped MCP server configuration',\n ) as string,\n options: expect.arrayContaining([\n expect.objectContaining({ value: 'yes' }),\n expect.objectContaining({ value: 'no' }),\n expect.objectContaining({ value: 'explain' }),\n ]) as unknown[],\n initialValue: 'yes',\n }),\n );\n });\n\n it('should configure for Cursor when selected', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('cursor');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n expect(clack.select).toHaveBeenCalledTimes(2);\n expect(clack.select).toHaveBeenNthCalledWith(\n 2,\n expect.objectContaining({\n message: 'Which editor do you want to configure?',\n options: expect.arrayContaining([\n expect.objectContaining({ value: 'cursor' }),\n expect.objectContaining({ value: 'vscode' }),\n expect.objectContaining({ value: 'claudeCode' }),\n ]) as unknown[],\n }),\n );\n\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('.cursor/mcp.json'),\n expect.stringContaining('\"mcpServers\"'),\n 'utf8',\n );\n\n expect(clack.log.success).toHaveBeenCalledWith(\n expect.stringContaining('.cursor/mcp.json'),\n );\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Added project-scoped Sentry MCP configuration.',\n );\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('reload your editor'),\n );\n });\n\n it('should configure for VS Code when selected', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('vscode');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('.vscode/mcp.json'),\n expect.stringContaining('\"servers\"'),\n 'utf8',\n );\n\n expect(clack.log.success).toHaveBeenCalledWith(\n expect.stringContaining('.vscode/mcp.json'),\n );\n });\n\n it('should configure for Claude Code when selected', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('claudeCode');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('.mcp.json'),\n expect.stringContaining('\"mcpServers\"'),\n 'utf8',\n );\n\n expect(clack.log.success).toHaveBeenCalledWith(\n expect.stringContaining('.mcp.json'),\n );\n });\n\n it('should update existing Cursor config file', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('cursor');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const existingConfig = JSON.stringify({\n mcpServers: {\n OtherServer: {\n url: 'https://other.example.com',\n },\n },\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n expect(mockReadFile).toHaveBeenCalled();\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('.cursor/mcp.json'),\n expect.stringContaining('Sentry'),\n 'utf8',\n );\n\n const writtenContent = JSON.parse(\n mockWriteFile.mock.calls[0][1] as string,\n ) as ConfigContent;\n expect(writtenContent.mcpServers).toHaveProperty('OtherServer');\n expect(writtenContent.mcpServers).toHaveProperty('Sentry');\n\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Updated .cursor/mcp.json',\n );\n });\n\n it('should update existing VS Code config file', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('vscode');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const existingConfig = JSON.stringify({\n servers: {\n OtherServer: {\n url: 'https://other.example.com',\n type: 'http',\n },\n },\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n const writtenContent = JSON.parse(\n mockWriteFile.mock.calls[0][1] as string,\n ) as ConfigContent;\n expect(writtenContent.servers).toHaveProperty('OtherServer');\n expect(writtenContent.servers).toHaveProperty('Sentry');\n expect(writtenContent.servers?.Sentry).toHaveProperty('type', 'http');\n\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Updated .vscode/mcp.json',\n );\n });\n\n it('should update existing Claude Code config file', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('claudeCode');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const existingConfig = JSON.stringify({\n mcpServers: {\n OtherServer: {\n url: 'https://other.example.com',\n },\n },\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n const writtenContent = JSON.parse(\n mockWriteFile.mock.calls[0][1] as string,\n ) as ConfigContent;\n expect(writtenContent.mcpServers).toHaveProperty('OtherServer');\n expect(writtenContent.mcpServers).toHaveProperty('Sentry');\n\n expect(clack.log.success).toHaveBeenCalledWith('Updated .mcp.json');\n });\n\n it('should handle file write errors gracefully for Cursor', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('cursor');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi\n .fn()\n .mockRejectedValue(new Error('Permission denied'));\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to write MCP config automatically'),\n );\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalledWith(\n expect.objectContaining({\n filename: path.join('.cursor', 'mcp.json'),\n codeSnippet: expect.stringContaining('mcpServers') as string,\n hint: 'create the file if it does not exist',\n }),\n );\n });\n\n it('should handle file write errors gracefully for VS Code', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('vscode');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi\n .fn()\n .mockRejectedValue(new Error('Permission denied'));\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalledWith(\n expect.objectContaining({\n filename: path.join('.vscode', 'mcp.json'),\n codeSnippet: expect.stringContaining('servers') as string,\n hint: 'create the file if it does not exist',\n }),\n );\n });\n\n it('should handle file write errors gracefully for Claude Code', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('claudeCode');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi\n .fn()\n .mockRejectedValue(new Error('Permission denied'));\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalledWith(\n expect.objectContaining({\n filename: '.mcp.json',\n codeSnippet: expect.stringContaining('mcpServers') as string,\n hint: 'create the file if it does not exist',\n }),\n );\n });\n\n it('should handle update errors and show copy-paste instructions', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('cursor');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n // Mock existing file and simulate write error during update\n const existingConfig = JSON.stringify({\n mcpServers: {\n OtherServer: {\n url: 'https://other.example.com',\n },\n },\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi\n .fn()\n .mockRejectedValue(new Error('Write failed during update'));\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to write MCP config automatically'),\n );\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalled();\n });\n\n it('should handle mkdirSync errors', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('cursor');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn().mockImplementation(() => {\n throw new Error('Permission denied');\n });\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to write MCP config automatically'),\n );\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalled();\n });\n\n it('should create config with empty servers/mcpServers when existing config lacks them', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('vscode');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const existingConfig = JSON.stringify({\n otherProperty: 'value',\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n const writtenContent = JSON.parse(\n mockWriteFile.mock.calls[0][1] as string,\n ) as ConfigContent;\n expect(writtenContent).toHaveProperty('otherProperty', 'value');\n expect(writtenContent).toHaveProperty('servers');\n expect(writtenContent.servers).toHaveProperty('Sentry');\n\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Updated .vscode/mcp.json',\n );\n });\n\n it('should show config for JetBrains IDEs with clipboard copy', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('jetbrains')\n .mockResolvedValueOnce(true); // For the clipboard copy prompt\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n // Mock clipboard copy\n const mockSpawn = vi.fn().mockReturnValue({\n stdin: {\n write: vi.fn(),\n end: vi.fn(),\n },\n on: vi.fn((event, callback: (code?: number) => void) => {\n if (event === 'close') callback(0);\n }),\n });\n vi.spyOn(childProcess, 'spawn').mockImplementation(mockSpawn);\n\n // Mock console.log to capture output\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {});\n\n await offerProjectScopedMcpConfig();\n\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('JetBrains IDEs'),\n );\n\n expect(consoleSpy).toHaveBeenCalledWith(\n expect.stringContaining('mcpServers'),\n );\n\n // Should ask to copy to clipboard\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Copy configuration to clipboard?',\n }),\n );\n\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Configuration copied to clipboard!',\n );\n\n consoleSpy.mockRestore();\n });\n\n it('should show generic config for unsupported IDEs with clipboard copy', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('other')\n .mockResolvedValueOnce(true); // For the clipboard copy prompt\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n // Mock clipboard copy failure to test fallback\n const mockSpawn = vi.fn().mockReturnValue({\n stdin: {\n write: vi.fn(),\n end: vi.fn(),\n },\n on: vi.fn((event, callback: () => void) => {\n if (event === 'error') callback();\n }),\n });\n vi.spyOn(childProcess, 'spawn').mockImplementation(mockSpawn);\n\n // Mock console.log to capture output\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {});\n\n await offerProjectScopedMcpConfig();\n\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('Generic MCP configuration'),\n );\n\n expect(consoleSpy).toHaveBeenCalledWith(\n expect.stringContaining('mcpServers'),\n );\n\n // Should ask to copy to clipboard\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Copy configuration to clipboard?',\n }),\n );\n\n // Since clipboard copy failed, should show warning\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to copy to clipboard'),\n );\n\n consoleSpy.mockRestore();\n });\n\n it('should handle clipboard copy failure gracefully for JetBrains', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('jetbrains')\n .mockResolvedValueOnce(true); // For clipboard copy prompt\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n // Mock clipboard copy to throw error\n const mockSpawn = vi.fn().mockImplementation(() => {\n throw new Error('Clipboard not available');\n });\n vi.spyOn(childProcess, 'spawn').mockImplementation(mockSpawn);\n\n // Mock console.log to capture output\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {});\n\n await offerProjectScopedMcpConfig();\n\n // Should ask to copy to clipboard\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Copy configuration to clipboard?',\n }),\n );\n\n // Should show warning when clipboard fails\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to copy to clipboard'),\n );\n\n consoleSpy.mockRestore();\n });\n\n it('should show MCP explanation when user selects \"What is MCP?\"', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('explain') // User selects \"What is MCP?\"\n .mockResolvedValueOnce(true) // User selects \"Yes\" after explanation\n .mockResolvedValueOnce('cursor'); // User selects Cursor\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n // Should show MCP explanation\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('What is MCP'),\n );\n\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('AI assistants'),\n );\n\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('https://docs.sentry.io/product/sentry-mcp/'),\n );\n\n // Should ask again after explanation\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Would you like to configure MCP for your IDE now?',\n }),\n );\n\n // Should proceed with normal flow\n expect(mockWriteFile).toHaveBeenCalled();\n });\n\n it('should respect user choice not to copy to clipboard', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('jetbrains')\n .mockResolvedValueOnce(false); // User declines to copy to clipboard\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockSpawn = vi.fn();\n vi.spyOn(childProcess, 'spawn').mockImplementation(mockSpawn);\n\n // Mock console.log to capture output\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {});\n\n await offerProjectScopedMcpConfig();\n\n // Should ask to copy to clipboard\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Copy configuration to clipboard?',\n }),\n );\n\n // Should NOT attempt to copy when user declines\n expect(mockSpawn).not.toHaveBeenCalled();\n\n // Should NOT show success or warning messages\n expect(clack.log.success).not.toHaveBeenCalledWith(\n 'Configuration copied to clipboard!',\n );\n expect(clack.log.warn).not.toHaveBeenCalledWith(\n expect.stringContaining('Failed to copy to clipboard'),\n );\n\n consoleSpy.mockRestore();\n });\n\n it('should exit if user declines after MCP explanation', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('explain') // User selects \"What is MCP?\"\n .mockResolvedValueOnce(false); // User selects \"No\" after explanation\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n await offerProjectScopedMcpConfig();\n\n // Should show MCP explanation\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('What is MCP'),\n );\n\n // Should ask again after explanation\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Would you like to configure MCP for your IDE now?',\n }),\n );\n\n // Should NOT proceed with editor selection\n expect(clack.select).not.toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Which editor do you want to configure?',\n }),\n );\n });\n });\n});\n"]}
1
+ {"version":3,"file":"mcp-config.test.js","sourceRoot":"","sources":["../../../../test/utils/clack/mcp-config.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as childProcess from 'node:child_process';\nimport { offerProjectScopedMcpConfig } from '../../../src/utils/clack/mcp-config';\n\n// Mock types for better type safety\ntype ConfigContent = {\n mcpServers?: Record<string, { url: string }>;\n servers?: Record<string, { url: string; type?: string }>;\n mcp?: Record<string, { type: string; url: string; oauth?: object }>;\n $schema?: string;\n otherProperty?: string;\n};\n\n// Mock the clack utils which wrap the prompts\nvi.mock('../../../src/utils/clack', () => ({\n abortIfCancelled: vi.fn((value: unknown) => Promise.resolve(value)),\n showCopyPasteInstructions: vi.fn(),\n}));\n\n// Mock the external dependencies\nvi.mock('@clack/prompts', () => ({\n confirm: vi.fn(),\n select: vi.fn(),\n multiselect: vi.fn(),\n isCancel: vi.fn(() => false),\n cancel: vi.fn(),\n log: {\n success: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n },\n}));\n\nvi.mock('node:fs');\nvi.mock('node:child_process');\n\ndescribe('mcp-config', () => {\n // Helper to get mocked modules with proper typing\n type ClackMocks = {\n select: ReturnType<typeof vi.fn>;\n multiselect: ReturnType<typeof vi.fn>;\n log: {\n success: ReturnType<typeof vi.fn>;\n info: ReturnType<typeof vi.fn>;\n warn: ReturnType<typeof vi.fn>;\n };\n };\n\n type ClackUtilsMocks = {\n abortIfCancelled: ReturnType<typeof vi.fn>;\n showCopyPasteInstructions: ReturnType<typeof vi.fn>;\n };\n\n const getMocks = async () => {\n const clack = await vi.importMock<ClackMocks>('@clack/prompts');\n const clackUtils = await vi.importMock<ClackUtilsMocks>(\n '../../../src/utils/clack',\n );\n return { clack, clackUtils };\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n });\n\n describe('offerProjectScopedMcpConfig', () => {\n it('should return early if user declines MCP config', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValue('no');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n await offerProjectScopedMcpConfig();\n\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: expect.stringContaining(\n 'Optionally add a project-scoped MCP server configuration',\n ) as string,\n options: expect.arrayContaining([\n expect.objectContaining({ value: 'yes' }),\n expect.objectContaining({ value: 'no' }),\n expect.objectContaining({ value: 'explain' }),\n ]) as unknown[],\n initialValue: 'yes',\n }),\n );\n });\n\n it('should configure for Cursor when selected', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['cursor']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n expect(clack.multiselect).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Which editor(s) do you want to configure?',\n options: expect.arrayContaining([\n expect.objectContaining({ value: 'cursor' }),\n expect.objectContaining({ value: 'vscode' }),\n expect.objectContaining({ value: 'claudeCode' }),\n ]) as unknown[],\n }),\n );\n\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('.cursor/mcp.json'),\n expect.stringContaining('\"mcpServers\"'),\n 'utf8',\n );\n\n expect(clack.log.success).toHaveBeenCalledWith(\n expect.stringContaining('.cursor/mcp.json'),\n );\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Added project-scoped Sentry MCP configuration for Cursor.',\n );\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('reload your editor'),\n );\n });\n\n it('should configure for VS Code when selected', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['vscode']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('.vscode/mcp.json'),\n expect.stringContaining('\"servers\"'),\n 'utf8',\n );\n\n expect(clack.log.success).toHaveBeenCalledWith(\n expect.stringContaining('.vscode/mcp.json'),\n );\n });\n\n it('should configure for Claude Code when selected', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['claudeCode']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('.mcp.json'),\n expect.stringContaining('\"mcpServers\"'),\n 'utf8',\n );\n\n expect(clack.log.success).toHaveBeenCalledWith(\n expect.stringContaining('.mcp.json'),\n );\n });\n\n it('should update existing Cursor config file', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['cursor']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const existingConfig = JSON.stringify({\n mcpServers: {\n OtherServer: {\n url: 'https://other.example.com',\n },\n },\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n expect(mockReadFile).toHaveBeenCalled();\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('.cursor/mcp.json'),\n expect.stringContaining('Sentry'),\n 'utf8',\n );\n\n const writtenContent = JSON.parse(\n mockWriteFile.mock.calls[0][1] as string,\n ) as ConfigContent;\n expect(writtenContent.mcpServers).toHaveProperty('OtherServer');\n expect(writtenContent.mcpServers).toHaveProperty('Sentry');\n\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Updated .cursor/mcp.json',\n );\n });\n\n it('should update existing VS Code config file', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['vscode']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const existingConfig = JSON.stringify({\n servers: {\n OtherServer: {\n url: 'https://other.example.com',\n type: 'http',\n },\n },\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n const writtenContent = JSON.parse(\n mockWriteFile.mock.calls[0][1] as string,\n ) as ConfigContent;\n expect(writtenContent.servers).toHaveProperty('OtherServer');\n expect(writtenContent.servers).toHaveProperty('Sentry');\n expect(writtenContent.servers?.Sentry).toHaveProperty('type', 'http');\n\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Updated .vscode/mcp.json',\n );\n });\n\n it('should update existing Claude Code config file', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['claudeCode']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const existingConfig = JSON.stringify({\n mcpServers: {\n OtherServer: {\n url: 'https://other.example.com',\n },\n },\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n const writtenContent = JSON.parse(\n mockWriteFile.mock.calls[0][1] as string,\n ) as ConfigContent;\n expect(writtenContent.mcpServers).toHaveProperty('OtherServer');\n expect(writtenContent.mcpServers).toHaveProperty('Sentry');\n\n expect(clack.log.success).toHaveBeenCalledWith('Updated .mcp.json');\n });\n\n it('should configure for OpenCode when selected', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['openCode']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('opencode.json'),\n expect.stringContaining('\"mcp\"'),\n 'utf8',\n );\n\n // Verify the written content has the correct structure for OpenCode\n const writtenContent = JSON.parse(\n mockWriteFile.mock.calls[0][1] as string,\n ) as ConfigContent;\n expect(writtenContent.$schema).toBe('https://opencode.ai/config.json');\n expect(writtenContent.mcp).toHaveProperty('Sentry');\n expect(writtenContent.mcp?.Sentry).toHaveProperty('type', 'remote');\n expect(writtenContent.mcp?.Sentry).toHaveProperty('url');\n expect(writtenContent.mcp?.Sentry?.oauth).toEqual({});\n\n expect(clack.log.success).toHaveBeenCalledWith(\n expect.stringContaining('opencode.json'),\n );\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Added project-scoped Sentry MCP configuration for OpenCode.',\n );\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('restart OpenCode'),\n );\n });\n\n it('should update existing OpenCode config file', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['openCode']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const existingConfig = JSON.stringify({\n mcp: {\n OtherServer: {\n type: 'remote',\n url: 'https://other.example.com',\n },\n },\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n const writtenContent = JSON.parse(\n mockWriteFile.mock.calls[0][1] as string,\n ) as ConfigContent;\n expect(writtenContent.mcp).toHaveProperty('OtherServer');\n expect(writtenContent.mcp).toHaveProperty('Sentry');\n expect(writtenContent.mcp?.Sentry).toHaveProperty('type', 'remote');\n\n expect(clack.log.success).toHaveBeenCalledWith('Updated opencode.json');\n });\n\n it('should handle file write errors gracefully for OpenCode', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['openCode']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi\n .fn()\n .mockRejectedValue(new Error('Permission denied'));\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to write MCP config for openCode'),\n );\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalledWith(\n expect.objectContaining({\n filename: 'opencode.json',\n codeSnippet: expect.stringContaining('\"mcp\"') as string,\n hint: 'create the file if it does not exist',\n }),\n );\n });\n\n it('should handle file write errors gracefully for Cursor', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['cursor']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi\n .fn()\n .mockRejectedValue(new Error('Permission denied'));\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to write MCP config'),\n );\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalledWith(\n expect.objectContaining({\n filename: path.join('.cursor', 'mcp.json'),\n codeSnippet: expect.stringContaining('mcpServers') as string,\n hint: 'create the file if it does not exist',\n }),\n );\n });\n\n it('should handle file write errors gracefully for VS Code', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['vscode']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi\n .fn()\n .mockRejectedValue(new Error('Permission denied'));\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalledWith(\n expect.objectContaining({\n filename: path.join('.vscode', 'mcp.json'),\n codeSnippet: expect.stringContaining('servers') as string,\n hint: 'create the file if it does not exist',\n }),\n );\n });\n\n it('should handle file write errors gracefully for Claude Code', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['claudeCode']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi\n .fn()\n .mockRejectedValue(new Error('Permission denied'));\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalledWith(\n expect.objectContaining({\n filename: '.mcp.json',\n codeSnippet: expect.stringContaining('mcpServers') as string,\n hint: 'create the file if it does not exist',\n }),\n );\n });\n\n it('should handle update errors and show copy-paste instructions', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['cursor']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n // Mock existing file and simulate write error during update\n const existingConfig = JSON.stringify({\n mcpServers: {\n OtherServer: {\n url: 'https://other.example.com',\n },\n },\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi\n .fn()\n .mockRejectedValue(new Error('Write failed during update'));\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to write MCP config'),\n );\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalled();\n });\n\n it('should handle mkdirSync errors', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['cursor']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn().mockImplementation(() => {\n throw new Error('Permission denied');\n });\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to write MCP config'),\n );\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalled();\n });\n\n it('should create config with empty servers/mcpServers when existing config lacks them', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['vscode']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const existingConfig = JSON.stringify({\n otherProperty: 'value',\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n const writtenContent = JSON.parse(\n mockWriteFile.mock.calls[0][1] as string,\n ) as ConfigContent;\n expect(writtenContent).toHaveProperty('otherProperty', 'value');\n expect(writtenContent).toHaveProperty('servers');\n expect(writtenContent.servers).toHaveProperty('Sentry');\n\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Updated .vscode/mcp.json',\n );\n });\n\n it('should show config for JetBrains IDEs with clipboard copy', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce(true); // For the clipboard copy prompt\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['jetbrains']);\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n // Mock clipboard copy\n const mockSpawn = vi.fn().mockReturnValue({\n stdin: {\n write: vi.fn(),\n end: vi.fn(),\n },\n on: vi.fn((event, callback: (code?: number) => void) => {\n if (event === 'close') callback(0);\n }),\n });\n vi.spyOn(childProcess, 'spawn').mockImplementation(mockSpawn);\n\n // Mock console.log to capture output\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {});\n\n await offerProjectScopedMcpConfig();\n\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('JetBrains IDEs'),\n );\n\n expect(consoleSpy).toHaveBeenCalledWith(\n expect.stringContaining('mcpServers'),\n );\n\n // Should ask to copy to clipboard\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Copy configuration to clipboard?',\n }),\n );\n\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Configuration copied to clipboard!',\n );\n\n consoleSpy.mockRestore();\n });\n\n it('should show generic config for unsupported IDEs with clipboard copy', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce(true); // For the clipboard copy prompt\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['other']);\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n // Mock clipboard copy failure to test fallback\n const mockSpawn = vi.fn().mockReturnValue({\n stdin: {\n write: vi.fn(),\n end: vi.fn(),\n },\n on: vi.fn((event, callback: () => void) => {\n if (event === 'error') callback();\n }),\n });\n vi.spyOn(childProcess, 'spawn').mockImplementation(mockSpawn);\n\n // Mock console.log to capture output\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {});\n\n await offerProjectScopedMcpConfig();\n\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('Generic MCP configuration'),\n );\n\n expect(consoleSpy).toHaveBeenCalledWith(\n expect.stringContaining('mcpServers'),\n );\n\n // Should ask to copy to clipboard\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Copy configuration to clipboard?',\n }),\n );\n\n // Since clipboard copy failed, should show warning\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to copy to clipboard'),\n );\n\n consoleSpy.mockRestore();\n });\n\n it('should handle clipboard copy failure gracefully for JetBrains', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce(true); // For clipboard copy prompt\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['jetbrains']);\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n // Mock clipboard copy to throw error\n const mockSpawn = vi.fn().mockImplementation(() => {\n throw new Error('Clipboard not available');\n });\n vi.spyOn(childProcess, 'spawn').mockImplementation(mockSpawn);\n\n // Mock console.log to capture output\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {});\n\n await offerProjectScopedMcpConfig();\n\n // Should ask to copy to clipboard\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Copy configuration to clipboard?',\n }),\n );\n\n // Should show warning when clipboard fails\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to copy to clipboard'),\n );\n\n consoleSpy.mockRestore();\n });\n\n it('should show MCP explanation when user selects \"What is MCP?\"', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('explain') // User selects \"What is MCP?\"\n .mockResolvedValueOnce(true); // User selects \"Yes\" after explanation\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['cursor']); // User selects Cursor\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n // Should show MCP explanation\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('What is MCP'),\n );\n\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('AI assistants'),\n );\n\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('https://docs.sentry.io/product/sentry-mcp/'),\n );\n\n // Should ask again after explanation\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Would you like to configure MCP for your IDE now?',\n }),\n );\n\n // Should proceed with normal flow\n expect(mockWriteFile).toHaveBeenCalled();\n });\n\n it('should respect user choice not to copy to clipboard', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce(false); // User declines to copy to clipboard\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['jetbrains']);\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockSpawn = vi.fn();\n vi.spyOn(childProcess, 'spawn').mockImplementation(mockSpawn);\n\n // Mock console.log to capture output\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {});\n\n await offerProjectScopedMcpConfig();\n\n // Should ask to copy to clipboard\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Copy configuration to clipboard?',\n }),\n );\n\n // Should NOT attempt to copy when user declines\n expect(mockSpawn).not.toHaveBeenCalled();\n\n // Should NOT show success or warning messages\n expect(clack.log.success).not.toHaveBeenCalledWith(\n 'Configuration copied to clipboard!',\n );\n expect(clack.log.warn).not.toHaveBeenCalledWith(\n expect.stringContaining('Failed to copy to clipboard'),\n );\n\n consoleSpy.mockRestore();\n });\n\n it('should exit if user declines after MCP explanation', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('explain') // User selects \"What is MCP?\"\n .mockResolvedValueOnce(false); // User selects \"No\" after explanation\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n await offerProjectScopedMcpConfig();\n\n // Should show MCP explanation\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('What is MCP'),\n );\n\n // Should ask again after explanation\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Would you like to configure MCP for your IDE now?',\n }),\n );\n\n // Should NOT proceed with editor selection\n expect(clack.multiselect).not.toHaveBeenCalled();\n });\n\n it('should configure multiple editors when selected', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce([\n 'cursor',\n 'vscode',\n 'claudeCode',\n ]);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n // Should write config for all three editors\n expect(mockWriteFile).toHaveBeenCalledTimes(3);\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('.cursor/mcp.json'),\n expect.stringContaining('\"mcpServers\"'),\n 'utf8',\n );\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('.vscode/mcp.json'),\n expect.stringContaining('\"servers\"'),\n 'utf8',\n );\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('.mcp.json'),\n expect.stringContaining('\"mcpServers\"'),\n 'utf8',\n );\n\n // Should show success messages for each (twice per editor: filename + editor-specific message)\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Added project-scoped Sentry MCP configuration for Cursor.',\n );\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Added project-scoped Sentry MCP configuration for VS Code.',\n );\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Added project-scoped Sentry MCP configuration for Claude Code.',\n );\n });\n\n it('should return early when no editors are selected', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce([]);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockWriteFile = vi.fn();\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n\n await offerProjectScopedMcpConfig();\n\n expect(clack.log.info).toHaveBeenCalledWith(\n 'No editors selected. You can add MCP configuration later.',\n );\n expect(mockWriteFile).not.toHaveBeenCalled();\n });\n\n it('should handle mixed success and failure for multiple editors', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValueOnce('yes');\n vi.mocked(clack.multiselect).mockResolvedValueOnce(['cursor', 'vscode']);\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi\n .fn()\n .mockResolvedValueOnce(undefined) // Cursor succeeds\n .mockRejectedValueOnce(new Error('Permission denied')); // VS Code fails\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n // Cursor should succeed\n expect(clack.log.success).toHaveBeenCalledWith(\n expect.stringContaining('.cursor/mcp.json'),\n );\n\n // VS Code should fail and show fallback\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to write MCP config for vscode'),\n );\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalledWith(\n expect.objectContaining({\n filename: path.join('.vscode', 'mcp.json'),\n }),\n );\n });\n });\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentry/wizard",
3
- "version": "6.10.0",
3
+ "version": "6.11.0",
4
4
  "homepage": "https://github.com/getsentry/sentry-wizard",
5
5
  "repository": "https://github.com/getsentry/sentry-wizard",
6
6
  "description": "Sentry wizard helping you to configure your project",
@@ -53,7 +53,7 @@
53
53
  "@types/yargs": "^16.0.9",
54
54
  "@typescript-eslint/eslint-plugin": "^5.13.0",
55
55
  "@typescript-eslint/parser": "^5.13.0",
56
- "@vitest/coverage-v8": "3.0.9",
56
+ "@vitest/coverage-v8": "3.2.4",
57
57
  "clifty": "0.3.2",
58
58
  "eslint": "^8.18.0",
59
59
  "eslint-config-prettier": "^8.3.0",
@@ -63,10 +63,11 @@
63
63
  "ts-node": "^10.9.1",
64
64
  "typescript": "^5.0.4",
65
65
  "vite": "^6.2.3",
66
- "vitest": "^3.0.9"
66
+ "vitest": "3.0.9"
67
67
  },
68
68
  "resolutions": {
69
- "simple-plist": "1.4.0-0"
69
+ "simple-plist": "1.4.0-0",
70
+ "tmp": "0.2.4"
70
71
  },
71
72
  "engines": {
72
73
  "node": ">=18.20.6",