@sanity/cli 6.0.0-alpha.4 → 6.0.0-alpha.5

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 (291) hide show
  1. package/dist/actions/dev/startStudioDevServer.js +3 -8
  2. package/dist/actions/dev/startStudioDevServer.js.map +1 -1
  3. package/dist/actions/dev/types.d.ts +1 -3
  4. package/dist/actions/dev/types.js.map +1 -1
  5. package/dist/actions/documents/validate.d.ts +0 -2
  6. package/dist/actions/documents/validate.js +21 -1
  7. package/dist/actions/documents/validate.js.map +1 -1
  8. package/dist/actions/exec/execScript.js +1 -1
  9. package/dist/actions/exec/execScript.js.map +1 -1
  10. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +1 -1
  11. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +1 -1
  12. package/dist/actions/graphql/getGraphQLAPIs.js +1 -1
  13. package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
  14. package/dist/actions/manifest/extractManifest.js +1 -4
  15. package/dist/actions/manifest/extractManifest.js.map +1 -1
  16. package/dist/actions/schema/deleteSchemaAction.d.ts +13 -5
  17. package/dist/actions/schema/deleteSchemaAction.js +12 -17
  18. package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
  19. package/dist/actions/schema/deploySchemas.d.ts +15 -0
  20. package/dist/actions/schema/deploySchemas.js +98 -0
  21. package/dist/actions/schema/deploySchemas.js.map +1 -0
  22. package/dist/actions/schema/listSchemas.d.ts +12 -0
  23. package/dist/actions/schema/listSchemas.js +119 -0
  24. package/dist/actions/schema/listSchemas.js.map +1 -0
  25. package/dist/actions/schema/schemaStoreTypes.d.ts +0 -11
  26. package/dist/actions/schema/schemaStoreTypes.js.map +1 -1
  27. package/dist/actions/schema/utils/debug.d.ts +2 -0
  28. package/dist/actions/schema/utils/debug.js +5 -0
  29. package/dist/actions/schema/utils/debug.js.map +1 -0
  30. package/dist/actions/schema/utils/manifestExtractor.d.ts +3 -8
  31. package/dist/actions/schema/utils/manifestExtractor.js +12 -17
  32. package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
  33. package/dist/actions/schema/utils/manifestReader.d.ts +2 -9
  34. package/dist/actions/schema/utils/manifestReader.js +6 -12
  35. package/dist/actions/schema/utils/manifestReader.js.map +1 -1
  36. package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -1
  37. package/dist/actions/schema/utils/schemaStoreOutStrings.js +1 -1
  38. package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -1
  39. package/dist/actions/schema/utils/schemaStoreValidation.d.ts +10 -62
  40. package/dist/actions/schema/utils/schemaStoreValidation.js +38 -125
  41. package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
  42. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +14 -0
  43. package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
  44. package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
  45. package/dist/actions/users/getMembersForProject.d.ts +1 -3
  46. package/dist/actions/users/getMembersForProject.js +6 -17
  47. package/dist/actions/users/getMembersForProject.js.map +1 -1
  48. package/dist/actions/users/types.d.ts +0 -11
  49. package/dist/actions/users/types.js.map +1 -1
  50. package/dist/commands/__tests__/debug.test.js +113 -220
  51. package/dist/commands/__tests__/debug.test.js.map +1 -1
  52. package/dist/commands/__tests__/deploy.test.js +325 -293
  53. package/dist/commands/__tests__/deploy.test.js.map +1 -1
  54. package/dist/commands/__tests__/dev.test.js +62 -19
  55. package/dist/commands/__tests__/dev.test.js.map +1 -1
  56. package/dist/commands/__tests__/init/init.authentication.test.js +40 -27
  57. package/dist/commands/__tests__/init/init.authentication.test.js.map +1 -1
  58. package/dist/commands/__tests__/init/init.create-new-project.test.js +84 -85
  59. package/dist/commands/__tests__/init/init.create-new-project.test.js.map +1 -1
  60. package/dist/commands/__tests__/init/init.plan.test.js +103 -44
  61. package/dist/commands/__tests__/init/init.plan.test.js.map +1 -1
  62. package/dist/commands/__tests__/init/init.setup.test.js +85 -29
  63. package/dist/commands/__tests__/init/init.setup.test.js.map +1 -1
  64. package/dist/commands/__tests__/install.test.js +46 -22
  65. package/dist/commands/__tests__/install.test.js.map +1 -1
  66. package/dist/commands/__tests__/logout.test.js +8 -5
  67. package/dist/commands/__tests__/logout.test.js.map +1 -1
  68. package/dist/commands/__tests__/manage.test.js +29 -24
  69. package/dist/commands/__tests__/manage.test.js.map +1 -1
  70. package/dist/commands/__tests__/versions.test.js +22 -14
  71. package/dist/commands/__tests__/versions.test.js.map +1 -1
  72. package/dist/commands/backup/__tests__/disable.test.js +72 -75
  73. package/dist/commands/backup/__tests__/disable.test.js.map +1 -1
  74. package/dist/commands/backup/__tests__/download.test.js +166 -77
  75. package/dist/commands/backup/__tests__/download.test.js.map +1 -1
  76. package/dist/commands/backup/__tests__/enable.test.js +109 -140
  77. package/dist/commands/backup/__tests__/enable.test.js.map +1 -1
  78. package/dist/commands/backup/__tests__/list.test.js +84 -75
  79. package/dist/commands/backup/__tests__/list.test.js.map +1 -1
  80. package/dist/commands/backup/disable.js +5 -11
  81. package/dist/commands/backup/disable.js.map +1 -1
  82. package/dist/commands/backup/enable.js +5 -11
  83. package/dist/commands/backup/enable.js.map +1 -1
  84. package/dist/commands/backup/list.js +7 -8
  85. package/dist/commands/backup/list.js.map +1 -1
  86. package/dist/commands/cors/__tests__/add.test.js +68 -38
  87. package/dist/commands/cors/__tests__/add.test.js.map +1 -1
  88. package/dist/commands/cors/__tests__/delete.test.js +52 -37
  89. package/dist/commands/cors/__tests__/delete.test.js.map +1 -1
  90. package/dist/commands/cors/__tests__/list.test.js +80 -57
  91. package/dist/commands/cors/__tests__/list.test.js.map +1 -1
  92. package/dist/commands/cors/add.js +5 -13
  93. package/dist/commands/cors/add.js.map +1 -1
  94. package/dist/commands/cors/delete.js +7 -15
  95. package/dist/commands/cors/delete.js.map +1 -1
  96. package/dist/commands/cors/list.js +2 -10
  97. package/dist/commands/cors/list.js.map +1 -1
  98. package/dist/commands/dataset/__tests__/copy.test.js +197 -89
  99. package/dist/commands/dataset/__tests__/copy.test.js.map +1 -1
  100. package/dist/commands/dataset/__tests__/create.test.js +147 -117
  101. package/dist/commands/dataset/__tests__/create.test.js.map +1 -1
  102. package/dist/commands/dataset/__tests__/delete.test.js +75 -68
  103. package/dist/commands/dataset/__tests__/delete.test.js.map +1 -1
  104. package/dist/commands/dataset/__tests__/export.test.js +123 -83
  105. package/dist/commands/dataset/__tests__/export.test.js.map +1 -1
  106. package/dist/commands/dataset/__tests__/list.test.js +107 -65
  107. package/dist/commands/dataset/__tests__/list.test.js.map +1 -1
  108. package/dist/commands/dataset/alias/__tests__/create.test.js +114 -74
  109. package/dist/commands/dataset/alias/__tests__/create.test.js.map +1 -1
  110. package/dist/commands/dataset/alias/__tests__/delete.test.js +40 -29
  111. package/dist/commands/dataset/alias/__tests__/delete.test.js.map +1 -1
  112. package/dist/commands/dataset/alias/__tests__/link.test.js +114 -74
  113. package/dist/commands/dataset/alias/__tests__/link.test.js.map +1 -1
  114. package/dist/commands/dataset/alias/__tests__/unlink.test.js +44 -29
  115. package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +1 -1
  116. package/dist/commands/dataset/export.js +4 -4
  117. package/dist/commands/dataset/export.js.map +1 -1
  118. package/dist/commands/dataset/visibility/__tests__/get.test.js +48 -67
  119. package/dist/commands/dataset/visibility/__tests__/get.test.js.map +1 -1
  120. package/dist/commands/dataset/visibility/__tests__/set.test.js +76 -123
  121. package/dist/commands/dataset/visibility/__tests__/set.test.js.map +1 -1
  122. package/dist/commands/dev.js +0 -1
  123. package/dist/commands/dev.js.map +1 -1
  124. package/dist/commands/docs/__tests__/search.test.js +8 -7
  125. package/dist/commands/docs/__tests__/search.test.js.map +1 -1
  126. package/dist/commands/documents/__tests__/create.test.js +328 -265
  127. package/dist/commands/documents/__tests__/create.test.js.map +1 -1
  128. package/dist/commands/documents/__tests__/delete.test.js +119 -87
  129. package/dist/commands/documents/__tests__/delete.test.js.map +1 -1
  130. package/dist/commands/documents/__tests__/get.test.js +68 -95
  131. package/dist/commands/documents/__tests__/get.test.js.map +1 -1
  132. package/dist/commands/documents/__tests__/query.test.js +84 -189
  133. package/dist/commands/documents/__tests__/query.test.js.map +1 -1
  134. package/dist/commands/documents/__tests__/validate.test.js +52 -29
  135. package/dist/commands/documents/__tests__/validate.test.js.map +1 -1
  136. package/dist/commands/documents/create.d.ts +1 -0
  137. package/dist/commands/documents/create.js +10 -9
  138. package/dist/commands/documents/create.js.map +1 -1
  139. package/dist/commands/documents/delete.js +2 -3
  140. package/dist/commands/documents/delete.js.map +1 -1
  141. package/dist/commands/documents/get.js +2 -3
  142. package/dist/commands/documents/get.js.map +1 -1
  143. package/dist/commands/documents/query.js +2 -3
  144. package/dist/commands/documents/query.js.map +1 -1
  145. package/dist/commands/documents/validate.js +0 -20
  146. package/dist/commands/documents/validate.js.map +1 -1
  147. package/dist/commands/graphql/__tests__/list.test.js +57 -45
  148. package/dist/commands/graphql/__tests__/list.test.js.map +1 -1
  149. package/dist/commands/graphql/__tests__/undeploy.test.js +85 -59
  150. package/dist/commands/graphql/__tests__/undeploy.test.js.map +1 -1
  151. package/dist/commands/graphql/list.js +2 -2
  152. package/dist/commands/graphql/list.js.map +1 -1
  153. package/dist/commands/graphql/undeploy.js +4 -9
  154. package/dist/commands/graphql/undeploy.js.map +1 -1
  155. package/dist/commands/hook/__tests__/attempt.test.js +48 -33
  156. package/dist/commands/hook/__tests__/attempt.test.js.map +1 -1
  157. package/dist/commands/hook/__tests__/create.test.js +49 -51
  158. package/dist/commands/hook/__tests__/create.test.js.map +1 -1
  159. package/dist/commands/hook/__tests__/delete.test.js +43 -30
  160. package/dist/commands/hook/__tests__/delete.test.js.map +1 -1
  161. package/dist/commands/hook/__tests__/list.test.js +38 -31
  162. package/dist/commands/hook/__tests__/list.test.js.map +1 -1
  163. package/dist/commands/hook/__tests__/logs.test.js +68 -40
  164. package/dist/commands/hook/__tests__/logs.test.js.map +1 -1
  165. package/dist/commands/hook/create.js +2 -6
  166. package/dist/commands/hook/create.js.map +1 -1
  167. package/dist/commands/hook/delete.js +5 -17
  168. package/dist/commands/hook/delete.js.map +1 -1
  169. package/dist/commands/hook/list.js +2 -8
  170. package/dist/commands/hook/list.js.map +1 -1
  171. package/dist/commands/manifest/__tests__/extract.test.js +22 -13
  172. package/dist/commands/manifest/__tests__/extract.test.js.map +1 -1
  173. package/dist/commands/media/__tests__/create-aspect.test.js +41 -28
  174. package/dist/commands/media/__tests__/create-aspect.test.js.map +1 -1
  175. package/dist/commands/media/__tests__/delete-aspect.test.js +44 -35
  176. package/dist/commands/media/__tests__/delete-aspect.test.js.map +1 -1
  177. package/dist/commands/media/__tests__/deploy-aspect.test.js +67 -80
  178. package/dist/commands/media/__tests__/deploy-aspect.test.js.map +1 -1
  179. package/dist/commands/media/__tests__/export.test.js +365 -66
  180. package/dist/commands/media/__tests__/export.test.js.map +1 -1
  181. package/dist/commands/media/__tests__/import.test.js +171 -105
  182. package/dist/commands/media/__tests__/import.test.js.map +1 -1
  183. package/dist/commands/media/export.js +2 -2
  184. package/dist/commands/media/export.js.map +1 -1
  185. package/dist/commands/media/import.js +2 -2
  186. package/dist/commands/media/import.js.map +1 -1
  187. package/dist/commands/projects/__tests__/list.test.js +5 -4
  188. package/dist/commands/projects/__tests__/list.test.js.map +1 -1
  189. package/dist/commands/projects/list.js +2 -6
  190. package/dist/commands/projects/list.js.map +1 -1
  191. package/dist/commands/schema/__tests__/delete.test.js +396 -151
  192. package/dist/commands/schema/__tests__/delete.test.js.map +1 -1
  193. package/dist/commands/schema/__tests__/deploy.test.js +348 -0
  194. package/dist/commands/schema/__tests__/deploy.test.js.map +1 -0
  195. package/dist/commands/schema/__tests__/extract.test.js +19 -11
  196. package/dist/commands/schema/__tests__/extract.test.js.map +1 -1
  197. package/dist/commands/schema/__tests__/list.test.js +399 -0
  198. package/dist/commands/schema/__tests__/list.test.js.map +1 -0
  199. package/dist/commands/schema/__tests__/validate.test.js +27 -10
  200. package/dist/commands/schema/__tests__/validate.test.js.map +1 -1
  201. package/dist/commands/schema/delete.d.ts +1 -1
  202. package/dist/commands/schema/delete.js +20 -23
  203. package/dist/commands/schema/delete.js.map +1 -1
  204. package/dist/commands/schema/deploy.d.ts +16 -0
  205. package/dist/commands/schema/deploy.js +98 -0
  206. package/dist/commands/schema/deploy.js.map +1 -0
  207. package/dist/commands/schema/list.d.ts +15 -0
  208. package/dist/commands/schema/list.js +104 -0
  209. package/dist/commands/schema/list.js.map +1 -0
  210. package/dist/commands/telemetry/__tests__/disable.test.js +7 -5
  211. package/dist/commands/telemetry/__tests__/disable.test.js.map +1 -1
  212. package/dist/commands/telemetry/__tests__/enable.test.js +7 -5
  213. package/dist/commands/telemetry/__tests__/enable.test.js.map +1 -1
  214. package/dist/commands/telemetry/__tests__/status.test.js +7 -5
  215. package/dist/commands/telemetry/__tests__/status.test.js.map +1 -1
  216. package/dist/commands/tokens/__tests__/add.test.js +55 -40
  217. package/dist/commands/tokens/__tests__/add.test.js.map +1 -1
  218. package/dist/commands/tokens/__tests__/delete.test.js +72 -42
  219. package/dist/commands/tokens/__tests__/delete.test.js.map +1 -1
  220. package/dist/commands/tokens/__tests__/list.test.js +87 -60
  221. package/dist/commands/tokens/__tests__/list.test.js.map +1 -1
  222. package/dist/commands/tokens/add.js +3 -5
  223. package/dist/commands/tokens/add.js.map +1 -1
  224. package/dist/commands/users/__tests__/invite.test.js +100 -79
  225. package/dist/commands/users/__tests__/invite.test.js.map +1 -1
  226. package/dist/commands/users/__tests__/list.test.js +186 -180
  227. package/dist/commands/users/__tests__/list.test.js.map +1 -1
  228. package/dist/commands/users/invite.js +6 -17
  229. package/dist/commands/users/invite.js.map +1 -1
  230. package/dist/commands/users/list.js +4 -7
  231. package/dist/commands/users/list.js.map +1 -1
  232. package/dist/config/createCliConfig.d.ts +4 -4
  233. package/dist/services/backup.d.ts +8 -0
  234. package/dist/services/backup.js +19 -0
  235. package/dist/services/backup.js.map +1 -1
  236. package/dist/services/cors.d.ts +23 -0
  237. package/dist/services/cors.js +38 -0
  238. package/dist/services/cors.js.map +1 -0
  239. package/dist/services/graphql.d.ts +7 -0
  240. package/dist/services/graphql.js +11 -0
  241. package/dist/services/graphql.js.map +1 -1
  242. package/dist/services/hooks.d.ts +2 -0
  243. package/dist/services/hooks.js +19 -0
  244. package/dist/services/hooks.js.map +1 -1
  245. package/dist/services/organizations.d.ts +1 -1
  246. package/dist/services/organizations.js +1 -1
  247. package/dist/services/organizations.js.map +1 -1
  248. package/dist/services/projects.d.ts +11 -0
  249. package/dist/services/projects.js +41 -0
  250. package/dist/services/projects.js.map +1 -1
  251. package/dist/services/schemas.d.ts +4 -0
  252. package/dist/services/schemas.js +40 -0
  253. package/dist/services/schemas.js.map +1 -0
  254. package/dist/services/user.d.ts +8 -0
  255. package/dist/services/user.js +15 -2
  256. package/dist/services/user.js.map +1 -1
  257. package/dist/util/__tests__/getCliVersion.test.js +2 -2
  258. package/dist/util/__tests__/getCliVersion.test.js.map +1 -1
  259. package/dist/util/errorMessages.d.ts +1 -0
  260. package/dist/util/errorMessages.js +1 -0
  261. package/dist/util/errorMessages.js.map +1 -1
  262. package/dist/util/getCliVersion.js +1 -1
  263. package/dist/util/getCliVersion.js.map +1 -1
  264. package/dist/util/readPackageJson.d.ts +1 -15
  265. package/dist/util/readPackageJson.js +1 -1
  266. package/dist/util/readPackageJson.js.map +1 -1
  267. package/dist/util/uniqBy.d.ts +1 -0
  268. package/dist/util/uniqBy.js +14 -0
  269. package/dist/util/uniqBy.js.map +1 -0
  270. package/oclif.manifest.json +172 -27
  271. package/package.json +27 -28
  272. package/dist/actions/cors/constants.d.ts +0 -1
  273. package/dist/actions/cors/constants.js +0 -3
  274. package/dist/actions/cors/constants.js.map +0 -1
  275. package/dist/actions/cors/types.d.ts +0 -9
  276. package/dist/actions/cors/types.js +0 -3
  277. package/dist/actions/cors/types.js.map +0 -1
  278. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js +0 -294
  279. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js.map +0 -1
  280. package/dist/actions/schema/schemaStoreConstants.d.ts +0 -1
  281. package/dist/actions/schema/schemaStoreConstants.js +0 -4
  282. package/dist/actions/schema/schemaStoreConstants.js.map +0 -1
  283. package/dist/actions/schema/utils/schemaActionHelpers.d.ts +0 -1
  284. package/dist/actions/schema/utils/schemaActionHelpers.js +0 -5
  285. package/dist/actions/schema/utils/schemaActionHelpers.js.map +0 -1
  286. package/dist/actions/schema/utils/schemaApiClient.d.ts +0 -6
  287. package/dist/actions/schema/utils/schemaApiClient.js +0 -17
  288. package/dist/actions/schema/utils/schemaApiClient.js.map +0 -1
  289. package/dist/actions/users/apiVersion.d.ts +0 -6
  290. package/dist/actions/users/apiVersion.js +0 -7
  291. package/dist/actions/users/apiVersion.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/commands/hook/__tests__/create.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig} from '@sanity/cli-core'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {HOOK_API_VERSION} from '../../../actions/hook/constants.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {CreateHookCommand} from '../create.js'\n\nvi.mock('open', () => ({\n default: vi.fn().mockResolvedValue(undefined),\n}))\n\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', async () => {\n return {\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n }\n})\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', async () => {\n return {\n getCliConfig: vi.fn().mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n }),\n }\n})\n\ndescribe('#hook:create', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['hook create', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Create a new webhook for the current project\n\n USAGE\n $ sanity hook create\n\n DESCRIPTION\n Create a new webhook for the current project\n\n EXAMPLES\n Create a new webhook for the current project\n\n $ sanity hook create\n\n \"\n `)\n })\n\n test('opens webhook creation URL for project with organization', async () => {\n const open = await import('open')\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/projects/test-project',\n }).reply(200, {\n id: 'test-project',\n organizationId: 'test-org',\n })\n\n const {stdout} = await testCommand(CreateHookCommand)\n\n expect(open.default).toHaveBeenCalledWith(\n 'https://www.sanity.io/organizations/test-org/project/test-project/api/webhooks/new',\n )\n expect(stdout).toContain(\n 'Opening https://www.sanity.io/organizations/test-org/project/test-project/api/webhooks/new',\n )\n })\n\n test('opens webhook creation URL for project without organization (personal)', async () => {\n const open = await import('open')\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/projects/test-project',\n }).reply(200, {\n id: 'test-project',\n })\n\n const {stdout} = await testCommand(CreateHookCommand)\n\n expect(open.default).toHaveBeenCalledWith(\n 'https://www.sanity.io/organizations/personal/project/test-project/api/webhooks/new',\n )\n expect(stdout).toContain(\n 'Opening https://www.sanity.io/organizations/personal/project/test-project/api/webhooks/new',\n )\n })\n\n test('displays an error if the project fetch fails', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/projects/test-project',\n }).reply(500, {message: 'Internal Server Error'})\n\n const {error} = await testCommand(CreateHookCommand)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to fetch project information')\n })\n\n test('throws error when no project ID is found', async () => {\n vi.mocked(getCliConfig).mockResolvedValueOnce({\n api: {\n projectId: undefined,\n },\n })\n\n const {error} = await testCommand(CreateHookCommand)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n })\n\n test('handles open failure gracefully', async () => {\n const open = await import('open')\n vi.mocked(open.default).mockRejectedValueOnce(new Error('Failed to open browser'))\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/projects/test-project',\n }).reply(200, {\n id: 'test-project',\n organizationId: 'test-org',\n })\n\n const {error} = await testCommand(CreateHookCommand)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to open browser')\n })\n})\n"],"names":["runCommand","getCliConfig","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","HOOK_API_VERSION","NO_PROJECT_ID","CreateHookCommand","mock","default","fn","mockResolvedValue","undefined","findProjectRoot","directory","root","type","api","projectId","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","open","apiVersion","uri","reply","id","organizationId","toHaveBeenCalledWith","toContain","message","error","toBeInstanceOf","Error","mocked","mockResolvedValueOnce","mockRejectedValueOnce"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/commands/hook/__tests__/create.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {testCommand} from '@sanity/cli-test'\nimport open from 'open'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {CreateHookCommand} from '../create.js'\n\nvi.mock('open', () => ({\n default: vi.fn().mockResolvedValue(undefined),\n}))\n\nconst testProjectId = 'test-project'\n\nconst defaultMocks = {\n cliConfig: {api: {projectId: testProjectId}},\n projectRoot: {\n directory: '/test/path',\n path: '/test/path/sanity.config.ts',\n type: 'studio' as const,\n },\n token: 'test-token',\n}\n\nconst mockGetById = vi.hoisted(() => vi.fn())\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual('@sanity/cli-core')\n return {\n ...actual,\n getProjectCliClient: vi.fn().mockResolvedValue({\n projects: {\n getById: mockGetById,\n },\n }),\n }\n})\n\ndescribe('#hook:create', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['hook create', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Create a new webhook for the current project\n\n USAGE\n $ sanity hook create\n\n DESCRIPTION\n Create a new webhook for the current project\n\n EXAMPLES\n Create a new webhook for the current project\n\n $ sanity hook create\n\n \"\n `)\n })\n\n test('opens webhook creation URL for project with organization', async () => {\n mockGetById.mockResolvedValueOnce({\n id: 'test-project',\n organizationId: 'test-org',\n })\n\n const {stdout} = await testCommand(CreateHookCommand, [], {mocks: defaultMocks})\n\n expect(open).toHaveBeenCalledWith(\n 'https://www.sanity.io/organizations/test-org/project/test-project/api/webhooks/new',\n )\n expect(stdout).toContain(\n 'Opening https://www.sanity.io/organizations/test-org/project/test-project/api/webhooks/new',\n )\n })\n\n test('opens webhook creation URL for project without organization (personal)', async () => {\n mockGetById.mockResolvedValueOnce({\n id: 'test-project',\n })\n\n const {stdout} = await testCommand(CreateHookCommand, [], {mocks: defaultMocks})\n\n expect(open).toHaveBeenCalledWith(\n 'https://www.sanity.io/organizations/personal/project/test-project/api/webhooks/new',\n )\n expect(stdout).toContain(\n 'Opening https://www.sanity.io/organizations/personal/project/test-project/api/webhooks/new',\n )\n })\n\n test('displays an error if the project fetch fails', async () => {\n mockGetById.mockRejectedValueOnce(new Error('Internal Server Error'))\n\n const {error} = await testCommand(CreateHookCommand, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to fetch project information')\n })\n\n test('throws error when no project ID is found', async () => {\n const {error} = await testCommand(CreateHookCommand, [], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {projectId: undefined}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n })\n\n test('handles open failure gracefully', async () => {\n vi.mocked(open).mockRejectedValueOnce(new Error('Failed to open browser'))\n\n mockGetById.mockResolvedValueOnce({\n id: 'test-project',\n organizationId: 'test-org',\n })\n\n const {error} = await testCommand(CreateHookCommand, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to open browser')\n })\n})\n"],"names":["runCommand","testCommand","open","afterEach","describe","expect","test","vi","NO_PROJECT_ID","CreateHookCommand","mock","default","fn","mockResolvedValue","undefined","testProjectId","defaultMocks","cliConfig","api","projectId","projectRoot","directory","path","type","token","mockGetById","hoisted","actual","importActual","getProjectCliClient","projects","getById","clearAllMocks","stdout","toMatchInlineSnapshot","mockResolvedValueOnce","id","organizationId","mocks","toHaveBeenCalledWith","toContain","mockRejectedValueOnce","Error","error","toBeInstanceOf","message","toEqual","mocked"],"mappings":"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"}
@@ -1,29 +1,10 @@
1
1
  import { runCommand } from '@oclif/test';
2
- import { getCliConfig } from '@sanity/cli-core';
3
2
  import { mockApi, testCommand } from '@sanity/cli-test';
4
3
  import nock from 'nock';
5
4
  import { afterEach, describe, expect, test, vi } from 'vitest';
6
5
  import { HOOK_API_VERSION } from '../../../actions/hook/constants.js';
7
6
  import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
8
7
  import { Delete } from '../delete.js';
9
- vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', async ()=>{
10
- return {
11
- findProjectRoot: vi.fn().mockResolvedValue({
12
- directory: '/test/path',
13
- root: '/test/path',
14
- type: 'studio'
15
- })
16
- };
17
- });
18
- vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', async ()=>{
19
- return {
20
- getCliConfig: vi.fn().mockResolvedValue({
21
- api: {
22
- projectId: 'test-project'
23
- }
24
- })
25
- };
26
- });
27
8
  vi.mock('@sanity/cli-core/ux', async ()=>{
28
9
  const actual = await vi.importActual('@sanity/cli-core/ux');
29
10
  return {
@@ -31,6 +12,20 @@ vi.mock('@sanity/cli-core/ux', async ()=>{
31
12
  select: vi.fn()
32
13
  };
33
14
  });
15
+ const testProjectId = 'test-project';
16
+ const defaultMocks = {
17
+ cliConfig: {
18
+ api: {
19
+ projectId: testProjectId
20
+ }
21
+ },
22
+ projectRoot: {
23
+ directory: '/test/path',
24
+ path: '/test/path/sanity.config.ts',
25
+ type: 'studio'
26
+ },
27
+ token: 'test-token'
28
+ };
34
29
  const mockSelect = vi.mocked(await import('@sanity/cli-core/ux')).select;
35
30
  describe('#delete', ()=>{
36
31
  afterEach(()=>{
@@ -69,7 +64,9 @@ describe('#delete', ()=>{
69
64
  }).reply(200);
70
65
  const { stdout } = await testCommand(Delete, [
71
66
  'test-hook'
72
- ]);
67
+ ], {
68
+ mocks: defaultMocks
69
+ });
73
70
  expect(stdout).toContain('Hook deleted');
74
71
  });
75
72
  test('displays error when hook name not found', async ()=>{
@@ -87,7 +84,9 @@ describe('#delete', ()=>{
87
84
  ]);
88
85
  const { error } = await testCommand(Delete, [
89
86
  'nonexistent-hook'
90
- ]);
87
+ ], {
88
+ mocks: defaultMocks
89
+ });
91
90
  expect(error).toBeInstanceOf(Error);
92
91
  expect(error?.message).toContain('Hook with name "nonexistent-hook" not found');
93
92
  });
@@ -96,7 +95,9 @@ describe('#delete', ()=>{
96
95
  apiVersion: HOOK_API_VERSION,
97
96
  uri: '/hooks/projects/test-project'
98
97
  }).reply(200, []);
99
- const { error } = await testCommand(Delete, []);
98
+ const { error } = await testCommand(Delete, [], {
99
+ mocks: defaultMocks
100
+ });
100
101
  expect(error).toBeInstanceOf(Error);
101
102
  expect(error?.message).toContain('No hooks configured for this project');
102
103
  });
@@ -127,7 +128,9 @@ describe('#delete', ()=>{
127
128
  uri: '/hooks/projects/test-project/hook2'
128
129
  }).reply(200);
129
130
  mockSelect.mockResolvedValueOnce('hook2');
130
- const { stdout } = await testCommand(Delete, []);
131
+ const { stdout } = await testCommand(Delete, [], {
132
+ mocks: defaultMocks
133
+ });
131
134
  expect(mockSelect).toHaveBeenCalledWith({
132
135
  choices: [
133
136
  {
@@ -150,7 +153,9 @@ describe('#delete', ()=>{
150
153
  }).reply(500, {
151
154
  message: 'Internal Server Error'
152
155
  });
153
- const { error } = await testCommand(Delete, []);
156
+ const { error } = await testCommand(Delete, [], {
157
+ mocks: defaultMocks
158
+ });
154
159
  expect(error).toBeInstanceOf(Error);
155
160
  expect(error?.message).toContain('Failed to fetch hooks');
156
161
  });
@@ -177,17 +182,23 @@ describe('#delete', ()=>{
177
182
  });
178
183
  const { error } = await testCommand(Delete, [
179
184
  'test-hook'
180
- ]);
185
+ ], {
186
+ mocks: defaultMocks
187
+ });
181
188
  expect(error).toBeInstanceOf(Error);
182
189
  expect(error?.message).toContain('Hook deletion failed');
183
190
  });
184
191
  test('throws error when no project ID is found', async ()=>{
185
- vi.mocked(getCliConfig).mockResolvedValueOnce({
186
- api: {
187
- projectId: undefined
192
+ const { error } = await testCommand(Delete, [], {
193
+ mocks: {
194
+ ...defaultMocks,
195
+ cliConfig: {
196
+ api: {
197
+ projectId: undefined
198
+ }
199
+ }
188
200
  }
189
201
  });
190
- const { error } = await testCommand(Delete, []);
191
202
  expect(error).toBeInstanceOf(Error);
192
203
  expect(error?.message).toEqual(NO_PROJECT_ID);
193
204
  });
@@ -212,7 +223,9 @@ describe('#delete', ()=>{
212
223
  }).reply(200);
213
224
  const { stdout } = await testCommand(Delete, [
214
225
  'test-hook-name'
215
- ]);
226
+ ], {
227
+ mocks: defaultMocks
228
+ });
216
229
  expect(stdout).toContain('Hook deleted');
217
230
  });
218
231
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/commands/hook/__tests__/delete.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig} from '@sanity/cli-core'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {HOOK_API_VERSION} from '../../../actions/hook/constants.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {Delete} from '../delete.js'\n\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', async () => {\n return {\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n }\n})\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', async () => {\n return {\n getCliConfig: vi.fn().mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n }),\n }\n})\n\nvi.mock('@sanity/cli-core/ux', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core/ux')>('@sanity/cli-core/ux')\n return {\n ...actual,\n select: vi.fn(),\n }\n})\n\nconst mockSelect = vi.mocked(await import('@sanity/cli-core/ux')).select\n\ndescribe('#delete', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['hook delete', '--help'])\n\n expect(stdout).toContain('Delete a hook within your project')\n })\n\n test('deletes a hook by name', async () => {\n const mockHook = {\n dataset: 'production',\n id: 'hook1',\n name: 'test-hook',\n type: 'document' as const,\n url: 'https://example.com/webhook',\n }\n\n // Mock the hooks list API call\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(200, [mockHook])\n\n // Mock the delete API call\n mockApi({\n apiVersion: HOOK_API_VERSION,\n method: 'delete',\n uri: '/hooks/projects/test-project/hook1',\n }).reply(200)\n\n const {stdout} = await testCommand(Delete, ['test-hook'])\n\n expect(stdout).toContain('Hook deleted')\n })\n\n test('displays error when hook name not found', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(200, [\n {\n dataset: 'production',\n id: 'hook1',\n name: 'different-hook',\n type: 'document' as const,\n url: 'https://example.com/webhook',\n },\n ])\n\n const {error} = await testCommand(Delete, ['nonexistent-hook'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Hook with name \"nonexistent-hook\" not found')\n })\n\n test('displays error when no hooks exist', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(200, [])\n\n const {error} = await testCommand(Delete, [])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No hooks configured for this project')\n })\n\n test('prompts for hook selection when no name provided', async () => {\n const mockHooks = [\n {\n dataset: 'production',\n id: 'hook1',\n name: 'first-hook',\n type: 'document' as const,\n url: 'https://example.com/webhook1',\n },\n {\n dataset: 'staging',\n id: 'hook2',\n name: 'second-hook',\n type: 'transaction' as const,\n url: 'https://example.com/webhook2',\n },\n ]\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(200, mockHooks)\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n method: 'delete',\n uri: '/hooks/projects/test-project/hook2',\n }).reply(200)\n\n mockSelect.mockResolvedValueOnce('hook2')\n\n const {stdout} = await testCommand(Delete, [])\n\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {name: 'first-hook', value: 'hook1'},\n {name: 'second-hook', value: 'hook2'},\n ],\n message: 'Select hook to delete',\n })\n expect(stdout).toContain('Hook deleted')\n })\n\n test('handles API error when fetching hooks', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(500, {message: 'Internal Server Error'})\n\n const {error} = await testCommand(Delete, [])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to fetch hooks')\n })\n\n test('handles API error when deleting hook', async () => {\n const mockHook = {\n dataset: 'production',\n id: 'hook1',\n name: 'test-hook',\n type: 'document' as const,\n url: 'https://example.com/webhook',\n }\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(200, [mockHook])\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n method: 'delete',\n uri: '/hooks/projects/test-project/hook1',\n }).reply(500, {message: 'Internal Server Error'})\n\n const {error} = await testCommand(Delete, ['test-hook'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Hook deletion failed')\n })\n\n test('throws error when no project ID is found', async () => {\n vi.mocked(getCliConfig).mockResolvedValueOnce({\n api: {\n projectId: undefined,\n },\n })\n\n const {error} = await testCommand(Delete, [])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n })\n\n test('handles case insensitive hook name matching', async () => {\n const mockHook = {\n dataset: 'production',\n id: 'hook1',\n name: 'Test-Hook-Name',\n type: 'document' as const,\n url: 'https://example.com/webhook',\n }\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(200, [mockHook])\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n method: 'delete',\n uri: '/hooks/projects/test-project/hook1',\n }).reply(200)\n\n const {stdout} = await testCommand(Delete, ['test-hook-name'])\n\n expect(stdout).toContain('Hook deleted')\n })\n})\n"],"names":["runCommand","getCliConfig","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","HOOK_API_VERSION","NO_PROJECT_ID","Delete","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","api","projectId","actual","importActual","select","mockSelect","mocked","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toContain","mockHook","dataset","id","name","url","apiVersion","uri","reply","method","error","toBeInstanceOf","Error","message","mockHooks","mockResolvedValueOnce","toHaveBeenCalledWith","choices","value","undefined"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/commands/hook/__tests__/delete.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {HOOK_API_VERSION} from '../../../actions/hook/constants.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {Delete} from '../delete.js'\n\nvi.mock('@sanity/cli-core/ux', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core/ux')>('@sanity/cli-core/ux')\n return {\n ...actual,\n select: vi.fn(),\n }\n})\n\nconst testProjectId = 'test-project'\n\nconst defaultMocks = {\n cliConfig: {api: {projectId: testProjectId}},\n projectRoot: {\n directory: '/test/path',\n path: '/test/path/sanity.config.ts',\n type: 'studio' as const,\n },\n token: 'test-token',\n}\n\nconst mockSelect = vi.mocked(await import('@sanity/cli-core/ux')).select\n\ndescribe('#delete', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['hook delete', '--help'])\n\n expect(stdout).toContain('Delete a hook within your project')\n })\n\n test('deletes a hook by name', async () => {\n const mockHook = {\n dataset: 'production',\n id: 'hook1',\n name: 'test-hook',\n type: 'document' as const,\n url: 'https://example.com/webhook',\n }\n\n // Mock the hooks list API call\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(200, [mockHook])\n\n // Mock the delete API call\n mockApi({\n apiVersion: HOOK_API_VERSION,\n method: 'delete',\n uri: '/hooks/projects/test-project/hook1',\n }).reply(200)\n\n const {stdout} = await testCommand(Delete, ['test-hook'], {mocks: defaultMocks})\n\n expect(stdout).toContain('Hook deleted')\n })\n\n test('displays error when hook name not found', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(200, [\n {\n dataset: 'production',\n id: 'hook1',\n name: 'different-hook',\n type: 'document' as const,\n url: 'https://example.com/webhook',\n },\n ])\n\n const {error} = await testCommand(Delete, ['nonexistent-hook'], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Hook with name \"nonexistent-hook\" not found')\n })\n\n test('displays error when no hooks exist', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(200, [])\n\n const {error} = await testCommand(Delete, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No hooks configured for this project')\n })\n\n test('prompts for hook selection when no name provided', async () => {\n const mockHooks = [\n {\n dataset: 'production',\n id: 'hook1',\n name: 'first-hook',\n type: 'document' as const,\n url: 'https://example.com/webhook1',\n },\n {\n dataset: 'staging',\n id: 'hook2',\n name: 'second-hook',\n type: 'transaction' as const,\n url: 'https://example.com/webhook2',\n },\n ]\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(200, mockHooks)\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n method: 'delete',\n uri: '/hooks/projects/test-project/hook2',\n }).reply(200)\n\n mockSelect.mockResolvedValueOnce('hook2')\n\n const {stdout} = await testCommand(Delete, [], {mocks: defaultMocks})\n\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {name: 'first-hook', value: 'hook1'},\n {name: 'second-hook', value: 'hook2'},\n ],\n message: 'Select hook to delete',\n })\n expect(stdout).toContain('Hook deleted')\n })\n\n test('handles API error when fetching hooks', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(500, {message: 'Internal Server Error'})\n\n const {error} = await testCommand(Delete, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to fetch hooks')\n })\n\n test('handles API error when deleting hook', async () => {\n const mockHook = {\n dataset: 'production',\n id: 'hook1',\n name: 'test-hook',\n type: 'document' as const,\n url: 'https://example.com/webhook',\n }\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(200, [mockHook])\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n method: 'delete',\n uri: '/hooks/projects/test-project/hook1',\n }).reply(500, {message: 'Internal Server Error'})\n\n const {error} = await testCommand(Delete, ['test-hook'], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Hook deletion failed')\n })\n\n test('throws error when no project ID is found', async () => {\n const {error} = await testCommand(Delete, [], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {projectId: undefined}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n })\n\n test('handles case insensitive hook name matching', async () => {\n const mockHook = {\n dataset: 'production',\n id: 'hook1',\n name: 'Test-Hook-Name',\n type: 'document' as const,\n url: 'https://example.com/webhook',\n }\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(200, [mockHook])\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n method: 'delete',\n uri: '/hooks/projects/test-project/hook1',\n }).reply(200)\n\n const {stdout} = await testCommand(Delete, ['test-hook-name'], {mocks: defaultMocks})\n\n expect(stdout).toContain('Hook deleted')\n })\n})\n"],"names":["runCommand","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","HOOK_API_VERSION","NO_PROJECT_ID","Delete","mock","actual","importActual","select","fn","testProjectId","defaultMocks","cliConfig","api","projectId","projectRoot","directory","path","type","token","mockSelect","mocked","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toContain","mockHook","dataset","id","name","url","apiVersion","uri","reply","method","mocks","error","toBeInstanceOf","Error","message","mockHooks","mockResolvedValueOnce","toHaveBeenCalledWith","choices","value","undefined"],"mappings":"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"}
@@ -1,29 +1,24 @@
1
1
  import { runCommand } from '@oclif/test';
2
- import { getCliConfig } from '@sanity/cli-core';
3
2
  import { mockApi, testCommand } from '@sanity/cli-test';
4
3
  import nock from 'nock';
5
4
  import { afterEach, describe, expect, test, vi } from 'vitest';
6
5
  import { HOOK_API_VERSION } from '../../../actions/hook/constants.js';
7
6
  import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
8
7
  import { List } from '../list.js';
9
- vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', async ()=>{
10
- return {
11
- findProjectRoot: vi.fn().mockResolvedValue({
12
- directory: '/test/path',
13
- root: '/test/path',
14
- type: 'studio'
15
- })
16
- };
17
- });
18
- vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', async ()=>{
19
- return {
20
- getCliConfig: vi.fn().mockResolvedValue({
21
- api: {
22
- projectId: 'test-project'
23
- }
24
- })
25
- };
26
- });
8
+ const testProjectId = 'test-project';
9
+ const defaultMocks = {
10
+ cliConfig: {
11
+ api: {
12
+ projectId: testProjectId
13
+ }
14
+ },
15
+ projectRoot: {
16
+ directory: '/test/path',
17
+ path: '/test/path/sanity.config.ts',
18
+ type: 'studio'
19
+ },
20
+ token: 'test-token'
21
+ };
27
22
  describe('#list', ()=>{
28
23
  afterEach(()=>{
29
24
  vi.clearAllMocks();
@@ -41,7 +36,7 @@ describe('#list', ()=>{
41
36
  test('displays hooks correctly', async ()=>{
42
37
  mockApi({
43
38
  apiVersion: HOOK_API_VERSION,
44
- uri: '/hooks/projects/test-project'
39
+ uri: `/hooks/projects/${testProjectId}`
45
40
  }).reply(200, [
46
41
  {
47
42
  apiVersion: '2021-10-04',
@@ -70,7 +65,9 @@ describe('#list', ()=>{
70
65
  url: 'https://webhook.site/b627a04b-52f5-4ecd-9d45-55fdc88ff4e7'
71
66
  }
72
67
  ]);
73
- const { stdout } = await testCommand(List);
68
+ const { stdout } = await testCommand(List, [], {
69
+ mocks: defaultMocks
70
+ });
74
71
  expect(stdout).toContain('Name: test versions');
75
72
  expect(stdout).toContain('Dataset: *');
76
73
  expect(stdout).toContain('URL: https://webhook.site/b627a04b-52f5-4ecd-9d45-55fdc88ff4e7');
@@ -80,7 +77,7 @@ describe('#list', ()=>{
80
77
  test('handles legacy hooks without description', async ()=>{
81
78
  mockApi({
82
79
  apiVersion: HOOK_API_VERSION,
83
- uri: '/hooks/projects/test-project'
80
+ uri: `/hooks/projects/${testProjectId}`
84
81
  }).reply(200, [
85
82
  {
86
83
  createdAt: '2023-01-01',
@@ -97,7 +94,9 @@ describe('#list', ()=>{
97
94
  url: 'https://example.com/webhook'
98
95
  }
99
96
  ]);
100
- const { stdout } = await testCommand(List);
97
+ const { stdout } = await testCommand(List, [], {
98
+ mocks: defaultMocks
99
+ });
101
100
  expect(stdout).toContain('Name: legacy hook');
102
101
  expect(stdout).toContain('Dataset: production');
103
102
  expect(stdout).toContain('URL: https://example.com/webhook');
@@ -107,29 +106,37 @@ describe('#list', ()=>{
107
106
  test('displays an error if the API request fails', async ()=>{
108
107
  mockApi({
109
108
  apiVersion: HOOK_API_VERSION,
110
- uri: '/hooks/projects/test-project'
109
+ uri: `/hooks/projects/${testProjectId}`
111
110
  }).reply(500, {
112
111
  message: 'Internal Server Error'
113
112
  });
114
- const { error } = await testCommand(List);
113
+ const { error } = await testCommand(List, [], {
114
+ mocks: defaultMocks
115
+ });
115
116
  expect(error).toBeInstanceOf(Error);
116
117
  expect(error?.message).toContain('Hook list retrieval failed');
117
118
  });
118
119
  test('handles empty hooks list', async ()=>{
119
120
  mockApi({
120
121
  apiVersion: HOOK_API_VERSION,
121
- uri: '/hooks/projects/test-project'
122
+ uri: `/hooks/projects/${testProjectId}`
122
123
  }).reply(200, []);
123
- const { stdout } = await testCommand(List);
124
+ const { stdout } = await testCommand(List, [], {
125
+ mocks: defaultMocks
126
+ });
124
127
  expect(stdout).toBe('');
125
128
  });
126
129
  test('throws error when no project ID is found', async ()=>{
127
- vi.mocked(getCliConfig).mockResolvedValueOnce({
128
- api: {
129
- projectId: undefined
130
+ const { error } = await testCommand(List, [], {
131
+ mocks: {
132
+ ...defaultMocks,
133
+ cliConfig: {
134
+ api: {
135
+ projectId: undefined
136
+ }
137
+ }
130
138
  }
131
139
  });
132
- const { error } = await testCommand(List);
133
140
  expect(error).toBeInstanceOf(Error);
134
141
  expect(error?.message).toEqual(NO_PROJECT_ID);
135
142
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/commands/hook/__tests__/list.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig} from '@sanity/cli-core'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {HOOK_API_VERSION} from '../../../actions/hook/constants.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {List} from '../list.js'\n\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', async () => {\n return {\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n }\n})\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', async () => {\n return {\n getCliConfig: vi.fn().mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n }),\n }\n})\n\ndescribe('#list', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['hook list', '--help'])\n\n expect(stdout).toContain('List hooks for a given project')\n })\n\n test('displays hooks correctly', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(200, [\n {\n apiVersion: '2021-10-04',\n createdAt: '2023-01-01',\n createdByUserId: 'user1',\n dataset: '*',\n deletedAt: null,\n description: 'test description',\n headers: {},\n httpMethod: 'POST',\n id: 'hook1',\n includeDrafts: false,\n isDisabled: false,\n isDisabledByUser: false,\n name: 'test versions',\n projectId: 'project1',\n rule: {\n filter: null,\n on: ['create'],\n projection: null,\n },\n secret: null,\n type: 'document',\n url: 'https://webhook.site/b627a04b-52f5-4ecd-9d45-55fdc88ff4e7',\n },\n ])\n\n const {stdout} = await testCommand(List)\n\n expect(stdout).toContain('Name: test versions')\n expect(stdout).toContain('Dataset: *')\n expect(stdout).toContain('URL: https://webhook.site/b627a04b-52f5-4ecd-9d45-55fdc88ff4e7')\n expect(stdout).toContain('HTTP method: POST')\n expect(stdout).toContain('Description: test description')\n })\n\n test('handles legacy hooks without description', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(200, [\n {\n createdAt: '2023-01-01',\n createdByUserId: 'user1',\n dataset: 'production',\n deletedAt: null,\n description: null,\n id: 'hook1',\n isDisabled: false,\n isDisabledByUser: false,\n name: 'legacy hook',\n projectId: 'project1',\n type: 'transaction',\n url: 'https://example.com/webhook',\n },\n ])\n\n const {stdout} = await testCommand(List)\n\n expect(stdout).toContain('Name: legacy hook')\n expect(stdout).toContain('Dataset: production')\n expect(stdout).toContain('URL: https://example.com/webhook')\n expect(stdout).not.toContain('HTTP method')\n expect(stdout).not.toContain('Description')\n })\n\n test('displays an error if the API request fails', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(500, {message: 'Internal Server Error'})\n\n const {error} = await testCommand(List)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Hook list retrieval failed')\n })\n\n test('handles empty hooks list', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project',\n }).reply(200, [])\n\n const {stdout} = await testCommand(List)\n\n expect(stdout).toBe('')\n })\n\n test('throws error when no project ID is found', async () => {\n vi.mocked(getCliConfig).mockResolvedValueOnce({\n api: {\n projectId: undefined,\n },\n })\n\n const {error} = await testCommand(List)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n })\n})\n"],"names":["runCommand","getCliConfig","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","HOOK_API_VERSION","NO_PROJECT_ID","List","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","api","projectId","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toContain","apiVersion","uri","reply","createdAt","createdByUserId","dataset","deletedAt","description","headers","httpMethod","id","includeDrafts","isDisabled","isDisabledByUser","name","rule","filter","on","projection","secret","url","not","message","error","toBeInstanceOf","Error","toBe","mocked","mockResolvedValueOnce","undefined"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/commands/hook/__tests__/list.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {HOOK_API_VERSION} from '../../../actions/hook/constants.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {List} from '../list.js'\n\nconst testProjectId = 'test-project'\n\nconst defaultMocks = {\n cliConfig: {api: {projectId: testProjectId}},\n projectRoot: {\n directory: '/test/path',\n path: '/test/path/sanity.config.ts',\n type: 'studio' as const,\n },\n token: 'test-token',\n}\n\ndescribe('#list', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['hook list', '--help'])\n\n expect(stdout).toContain('List hooks for a given project')\n })\n\n test('displays hooks correctly', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: `/hooks/projects/${testProjectId}`,\n }).reply(200, [\n {\n apiVersion: '2021-10-04',\n createdAt: '2023-01-01',\n createdByUserId: 'user1',\n dataset: '*',\n deletedAt: null,\n description: 'test description',\n headers: {},\n httpMethod: 'POST',\n id: 'hook1',\n includeDrafts: false,\n isDisabled: false,\n isDisabledByUser: false,\n name: 'test versions',\n projectId: 'project1',\n rule: {\n filter: null,\n on: ['create'],\n projection: null,\n },\n secret: null,\n type: 'document',\n url: 'https://webhook.site/b627a04b-52f5-4ecd-9d45-55fdc88ff4e7',\n },\n ])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('Name: test versions')\n expect(stdout).toContain('Dataset: *')\n expect(stdout).toContain('URL: https://webhook.site/b627a04b-52f5-4ecd-9d45-55fdc88ff4e7')\n expect(stdout).toContain('HTTP method: POST')\n expect(stdout).toContain('Description: test description')\n })\n\n test('handles legacy hooks without description', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: `/hooks/projects/${testProjectId}`,\n }).reply(200, [\n {\n createdAt: '2023-01-01',\n createdByUserId: 'user1',\n dataset: 'production',\n deletedAt: null,\n description: null,\n id: 'hook1',\n isDisabled: false,\n isDisabledByUser: false,\n name: 'legacy hook',\n projectId: 'project1',\n type: 'transaction',\n url: 'https://example.com/webhook',\n },\n ])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('Name: legacy hook')\n expect(stdout).toContain('Dataset: production')\n expect(stdout).toContain('URL: https://example.com/webhook')\n expect(stdout).not.toContain('HTTP method')\n expect(stdout).not.toContain('Description')\n })\n\n test('displays an error if the API request fails', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: `/hooks/projects/${testProjectId}`,\n }).reply(500, {message: 'Internal Server Error'})\n\n const {error} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Hook list retrieval failed')\n })\n\n test('handles empty hooks list', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: `/hooks/projects/${testProjectId}`,\n }).reply(200, [])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toBe('')\n })\n\n test('throws error when no project ID is found', async () => {\n const {error} = await testCommand(List, [], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {projectId: undefined}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n })\n})\n"],"names":["runCommand","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","HOOK_API_VERSION","NO_PROJECT_ID","List","testProjectId","defaultMocks","cliConfig","api","projectId","projectRoot","directory","path","type","token","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toContain","apiVersion","uri","reply","createdAt","createdByUserId","dataset","deletedAt","description","headers","httpMethod","id","includeDrafts","isDisabled","isDisabledByUser","name","rule","filter","on","projection","secret","url","mocks","not","message","error","toBeInstanceOf","Error","toBe","undefined"],"mappings":"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"}