@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/documents/__tests__/delete.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {DeleteDocumentCommand} from '../delete.js'\n\n// Mock the config functions\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn().mockResolvedValue({\n api: {\n dataset: 'production',\n projectId: 'test-project',\n },\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/services/apiClient.js', () => ({\n getProjectCliClient: vi.fn(),\n}))\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\n// Mock the project API client\nconst mockTransaction = vi.fn()\nconst mockCommit = vi.fn()\nconst mockDelete = vi.fn()\n\n// Get the mocked functions\nconst mockedGetCliConfig = vi.mocked(getCliConfig)\nconst mockedGetProjectCliClient = vi.mocked(getProjectCliClient)\n\ndescribe('documents delete', () => {\n beforeEach(() => {\n // Setup transaction chain\n mockDelete.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n mockedGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n })\n\n afterEach(() => {\n vi.clearAllMocks()\n mockTransaction.mockReset()\n mockCommit.mockReset()\n mockDelete.mockReset()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['documents delete', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Delete one or more documents from the projects configured dataset\n\n USAGE\n $ sanity documents delete ID... [IDS...] [--dataset <value>]\n\n ARGUMENTS\n ID... Document ID to delete\n [IDS...] Additional document IDs to delete\n\n FLAGS\n --dataset=<value> NAME to override dataset\n\n DESCRIPTION\n Delete one or more documents from the projects configured dataset\n\n EXAMPLES\n Delete the document with the ID \"myDocId\"\n\n $ sanity documents delete myDocId\n\n ID wrapped in double or single quote works equally well\n\n $ sanity documents delete 'myDocId'\n\n Delete document with ID \"someDocId\" from dataset \"blog\"\n\n $ sanity documents delete --dataset=blog someDocId\n\n Delete the document with ID \"doc1\" and \"doc2\"\n\n $ sanity documents delete doc1 doc2\n\n \"\n `)\n })\n\n test('deletes a single document successfully', async () => {\n mockCommit.mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['test-doc'])\n\n expect(stdout).toContain('Deleted 1 document')\n expect(mockDelete).toHaveBeenCalledWith('test-doc')\n expect(mockCommit).toHaveBeenCalled()\n })\n\n test('deletes multiple documents successfully', async () => {\n mockCommit.mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'delete'},\n {id: 'doc2', operation: 'delete'},\n {id: 'doc3', operation: 'delete'},\n ],\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['doc1', 'doc2', 'doc3'])\n\n expect(stdout).toContain('Deleted 3 documents')\n expect(mockDelete).toHaveBeenCalledWith('doc1')\n expect(mockDelete).toHaveBeenCalledWith('doc2')\n expect(mockDelete).toHaveBeenCalledWith('doc3')\n expect(mockCommit).toHaveBeenCalled()\n })\n\n test('handles documents not found', async () => {\n mockCommit.mockResolvedValue({\n results: [{id: 'doc1', operation: 'delete'}],\n })\n\n const {error} = await testCommand(DeleteDocumentCommand, ['doc1', 'nonexistent-doc'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Document not found: nonexistent-doc')\n expect(mockDelete).toHaveBeenCalledWith('doc1')\n expect(mockDelete).toHaveBeenCalledWith('nonexistent-doc')\n expect(mockCommit).toHaveBeenCalled()\n })\n\n test('uses custom dataset when --dataset flag is provided', async () => {\n mockCommit.mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n\n await testCommand(DeleteDocumentCommand, ['test-doc', '--dataset', 'staging'])\n\n expect(mockDelete).toHaveBeenCalledWith('test-doc')\n // Verify that the getProjectCliClient was called with the staging dataset\n expect(mockedGetProjectCliClient).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n projectId: 'test-project',\n }),\n )\n })\n\n test('throws error when no project ID is configured', async () => {\n mockedGetCliConfig.mockResolvedValue({\n api: {\n dataset: 'production',\n projectId: undefined,\n },\n })\n\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n\n // Restore the original mock for other tests\n mockedGetCliConfig.mockResolvedValue({\n api: {\n dataset: 'production',\n projectId: 'test-project',\n },\n })\n })\n\n test('throws error when no dataset is configured and none provided', async () => {\n mockedGetCliConfig.mockResolvedValueOnce({\n api: {\n dataset: undefined,\n projectId: 'test-project',\n },\n })\n\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No dataset specified')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles transaction errors gracefully', async () => {\n mockCommit.mockRejectedValue(new Error('Transaction failed'))\n\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to delete 1 document: Transaction failed')\n expect(error?.oclif?.exit).toBe(1)\n expect(mockDelete).toHaveBeenCalledWith('test-doc')\n })\n\n test('requires document ID argument', async () => {\n const {error} = await testCommand(DeleteDocumentCommand, [])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Missing 1 required arg')\n })\n\n test('shows singular message when deleting one document', async () => {\n mockCommit.mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['test-doc'])\n\n expect(stdout).toContain('Deleted 1 document')\n expect(stdout).not.toContain('documents')\n })\n\n test('shows plural message when deleting multiple documents', async () => {\n mockCommit.mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'delete'},\n {id: 'doc2', operation: 'delete'},\n ],\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['doc1', 'doc2'])\n\n expect(stdout).toContain('Deleted 2 documents')\n })\n})\n"],"names":["runCommand","getCliConfig","getProjectCliClient","testCommand","afterEach","beforeEach","describe","expect","test","vi","NO_PROJECT_ID","DeleteDocumentCommand","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","api","dataset","projectId","getCliToken","mockTransaction","mockCommit","mockDelete","mockedGetCliConfig","mocked","mockedGetProjectCliClient","mockReturnValue","commit","delete","transaction","clearAllMocks","mockReset","stdout","toMatchInlineSnapshot","results","id","operation","toContain","toHaveBeenCalledWith","toHaveBeenCalled","error","toBeInstanceOf","Error","message","objectContaining","undefined","toEqual","oclif","exit","toBe","mockResolvedValueOnce","mockRejectedValue","not"],"mappings":"AAAA,SAAQA,UAAU,QAAO,cAAa;AACtC,SAAQC,YAAY,EAAEC,mBAAmB,QAAO,mBAAkB;AAClE,SAAQC,WAAW,QAAO,mBAAkB;AAC5C,SAAQC,SAAS,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAO,SAAQ;AAExE,SAAQC,aAAa,QAAO,iCAAgC;AAC5D,SAAQC,qBAAqB,QAAO,eAAc;AAElD,4BAA4B;AAC5BF,GAAGG,IAAI,CAAC,yDAAyD,IAAO,CAAA;QACtEC,iBAAiBJ,GAAGK,EAAE,GAAGC,iBAAiB,CAAC;YACzCC,WAAW;YACXC,MAAM;YACNC,MAAM;QACR;IACF,CAAA;AAEAT,GAAGG,IAAI,CAAC,0DAA0D,IAAO,CAAA;QACvEX,cAAcQ,GAAGK,EAAE,GAAGC,iBAAiB,CAAC;YACtCI,KAAK;gBACHC,SAAS;gBACTC,WAAW;YACb;QACF;IACF,CAAA;AAEAZ,GAAGG,IAAI,CAAC,qDAAqD,IAAO,CAAA;QAClEV,qBAAqBO,GAAGK,EAAE;IAC5B,CAAA;AAEAL,GAAGG,IAAI,CAAC,uDAAuD,IAAO,CAAA;QACpEU,aAAab,GAAGK,EAAE,GAAGC,iBAAiB,CAAC;IACzC,CAAA;AAEA,8BAA8B;AAC9B,MAAMQ,kBAAkBd,GAAGK,EAAE;AAC7B,MAAMU,aAAaf,GAAGK,EAAE;AACxB,MAAMW,aAAahB,GAAGK,EAAE;AAExB,2BAA2B;AAC3B,MAAMY,qBAAqBjB,GAAGkB,MAAM,CAAC1B;AACrC,MAAM2B,4BAA4BnB,GAAGkB,MAAM,CAACzB;AAE5CI,SAAS,oBAAoB;IAC3BD,WAAW;QACT,0BAA0B;QAC1BoB,WAAWI,eAAe,CAAC;YACzBC,QAAQN;YACRO,QAAQN;QACV;QACAF,gBAAgBM,eAAe,CAAC;YAC9BC,QAAQN;YACRO,QAAQN;QACV;QAEAG,0BAA0Bb,iBAAiB,CAAC;YAC1CiB,aAAaT;QACf;IACF;IAEAnB,UAAU;QACRK,GAAGwB,aAAa;QAChBV,gBAAgBW,SAAS;QACzBV,WAAWU,SAAS;QACpBT,WAAWS,SAAS;IACtB;IAEA1B,KAAK,gBAAgB;QACnB,MAAM,EAAC2B,MAAM,EAAC,GAAG,MAAMnC,WAAW;YAAC;YAAoB;SAAS;QAEhEO,OAAO4B,QAAQC,qBAAqB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkCtC,CAAC;IACH;IAEA5B,KAAK,0CAA0C;QAC7CgB,WAAWT,iBAAiB,CAAC;YAC3BsB,SAAS;gBAAC;oBAACC,IAAI;oBAAYC,WAAW;gBAAQ;aAAE;QAClD;QAEA,MAAM,EAACJ,MAAM,EAAC,GAAG,MAAMhC,YAAYQ,uBAAuB;YAAC;SAAW;QAEtEJ,OAAO4B,QAAQK,SAAS,CAAC;QACzBjC,OAAOkB,YAAYgB,oBAAoB,CAAC;QACxClC,OAAOiB,YAAYkB,gBAAgB;IACrC;IAEAlC,KAAK,2CAA2C;QAC9CgB,WAAWT,iBAAiB,CAAC;YAC3BsB,SAAS;gBACP;oBAACC,IAAI;oBAAQC,WAAW;gBAAQ;gBAChC;oBAACD,IAAI;oBAAQC,WAAW;gBAAQ;gBAChC;oBAACD,IAAI;oBAAQC,WAAW;gBAAQ;aACjC;QACH;QAEA,MAAM,EAACJ,MAAM,EAAC,GAAG,MAAMhC,YAAYQ,uBAAuB;YAAC;YAAQ;YAAQ;SAAO;QAElFJ,OAAO4B,QAAQK,SAAS,CAAC;QACzBjC,OAAOkB,YAAYgB,oBAAoB,CAAC;QACxClC,OAAOkB,YAAYgB,oBAAoB,CAAC;QACxClC,OAAOkB,YAAYgB,oBAAoB,CAAC;QACxClC,OAAOiB,YAAYkB,gBAAgB;IACrC;IAEAlC,KAAK,+BAA+B;QAClCgB,WAAWT,iBAAiB,CAAC;YAC3BsB,SAAS;gBAAC;oBAACC,IAAI;oBAAQC,WAAW;gBAAQ;aAAE;QAC9C;QAEA,MAAM,EAACI,KAAK,EAAC,GAAG,MAAMxC,YAAYQ,uBAAuB;YAAC;YAAQ;SAAkB;QAEpFJ,OAAOoC,OAAOC,cAAc,CAACC;QAC7BtC,OAAOoC,OAAOG,SAASN,SAAS,CAAC;QACjCjC,OAAOkB,YAAYgB,oBAAoB,CAAC;QACxClC,OAAOkB,YAAYgB,oBAAoB,CAAC;QACxClC,OAAOiB,YAAYkB,gBAAgB;IACrC;IAEAlC,KAAK,uDAAuD;QAC1DgB,WAAWT,iBAAiB,CAAC;YAC3BsB,SAAS;gBAAC;oBAACC,IAAI;oBAAYC,WAAW;gBAAQ;aAAE;QAClD;QAEA,MAAMpC,YAAYQ,uBAAuB;YAAC;YAAY;YAAa;SAAU;QAE7EJ,OAAOkB,YAAYgB,oBAAoB,CAAC;QACxC,0EAA0E;QAC1ElC,OAAOqB,2BAA2Ba,oBAAoB,CACpDlC,OAAOwC,gBAAgB,CAAC;YACtB3B,SAAS;YACTC,WAAW;QACb;IAEJ;IAEAb,KAAK,iDAAiD;QACpDkB,mBAAmBX,iBAAiB,CAAC;YACnCI,KAAK;gBACHC,SAAS;gBACTC,WAAW2B;YACb;QACF;QAEA,MAAM,EAACL,KAAK,EAAC,GAAG,MAAMxC,YAAYQ,uBAAuB;YAAC;SAAW;QAErEJ,OAAOoC,OAAOC,cAAc,CAACC;QAC7BtC,OAAOoC,OAAOG,SAASG,OAAO,CAACvC;QAC/BH,OAAOoC,OAAOO,OAAOC,MAAMC,IAAI,CAAC;QAEhC,4CAA4C;QAC5C1B,mBAAmBX,iBAAiB,CAAC;YACnCI,KAAK;gBACHC,SAAS;gBACTC,WAAW;YACb;QACF;IACF;IAEAb,KAAK,gEAAgE;QACnEkB,mBAAmB2B,qBAAqB,CAAC;YACvClC,KAAK;gBACHC,SAAS4B;gBACT3B,WAAW;YACb;QACF;QAEA,MAAM,EAACsB,KAAK,EAAC,GAAG,MAAMxC,YAAYQ,uBAAuB;YAAC;SAAW;QAErEJ,OAAOoC,OAAOC,cAAc,CAACC;QAC7BtC,OAAOoC,OAAOG,SAASN,SAAS,CAAC;QACjCjC,OAAOoC,OAAOO,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEA5C,KAAK,yCAAyC;QAC5CgB,WAAW8B,iBAAiB,CAAC,IAAIT,MAAM;QAEvC,MAAM,EAACF,KAAK,EAAC,GAAG,MAAMxC,YAAYQ,uBAAuB;YAAC;SAAW;QAErEJ,OAAOoC,OAAOC,cAAc,CAACC;QAC7BtC,OAAOoC,OAAOG,SAASN,SAAS,CAAC;QACjCjC,OAAOoC,OAAOO,OAAOC,MAAMC,IAAI,CAAC;QAChC7C,OAAOkB,YAAYgB,oBAAoB,CAAC;IAC1C;IAEAjC,KAAK,iCAAiC;QACpC,MAAM,EAACmC,KAAK,EAAC,GAAG,MAAMxC,YAAYQ,uBAAuB,EAAE;QAE3DJ,OAAOoC,OAAOC,cAAc,CAACC;QAC7BtC,OAAOoC,OAAOG,SAASN,SAAS,CAAC;IACnC;IAEAhC,KAAK,qDAAqD;QACxDgB,WAAWT,iBAAiB,CAAC;YAC3BsB,SAAS;gBAAC;oBAACC,IAAI;oBAAYC,WAAW;gBAAQ;aAAE;QAClD;QAEA,MAAM,EAACJ,MAAM,EAAC,GAAG,MAAMhC,YAAYQ,uBAAuB;YAAC;SAAW;QAEtEJ,OAAO4B,QAAQK,SAAS,CAAC;QACzBjC,OAAO4B,QAAQoB,GAAG,CAACf,SAAS,CAAC;IAC/B;IAEAhC,KAAK,yDAAyD;QAC5DgB,WAAWT,iBAAiB,CAAC;YAC3BsB,SAAS;gBACP;oBAACC,IAAI;oBAAQC,WAAW;gBAAQ;gBAChC;oBAACD,IAAI;oBAAQC,WAAW;gBAAQ;aACjC;QACH;QAEA,MAAM,EAACJ,MAAM,EAAC,GAAG,MAAMhC,YAAYQ,uBAAuB;YAAC;YAAQ;SAAO;QAE1EJ,OAAO4B,QAAQK,SAAS,CAAC;IAC3B;AACF"}
1
+ {"version":3,"sources":["../../../../src/commands/documents/__tests__/delete.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {DeleteDocumentCommand} from '../delete.js'\n\nconst testProjectId = 'test-project'\nconst testDataset = 'production'\n\nconst defaultMocks = {\n cliConfig: {api: {dataset: testDataset, 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 mockTransaction = vi.hoisted(() => vi.fn())\nconst mockGetProjectCliClient = vi.hoisted(() =>\n vi.fn().mockResolvedValue({\n transaction: mockTransaction,\n }),\n)\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual('@sanity/cli-core')\n return {\n ...actual,\n getProjectCliClient: mockGetProjectCliClient,\n }\n})\n\ndescribe('#documents:delete', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['documents delete', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Delete one or more documents from the projects configured dataset\n\n USAGE\n $ sanity documents delete ID... [IDS...] [--dataset <value>]\n\n ARGUMENTS\n ID... Document ID to delete\n [IDS...] Additional document IDs to delete\n\n FLAGS\n --dataset=<value> NAME to override dataset\n\n DESCRIPTION\n Delete one or more documents from the projects configured dataset\n\n EXAMPLES\n Delete the document with the ID \"myDocId\"\n\n $ sanity documents delete myDocId\n\n ID wrapped in double or single quote works equally well\n\n $ sanity documents delete 'myDocId'\n\n Delete document with ID \"someDocId\" from dataset \"blog\"\n\n $ sanity documents delete --dataset=blog someDocId\n\n Delete the document with ID \"doc1\" and \"doc2\"\n\n $ sanity documents delete doc1 doc2\n\n \"\n `)\n })\n\n test('deletes a single document successfully', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['test-doc'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Deleted 1 document')\n expect(mockDelete).toHaveBeenCalledWith('test-doc')\n expect(mockCommit).toHaveBeenCalled()\n })\n\n test('deletes multiple documents successfully', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'delete'},\n {id: 'doc2', operation: 'delete'},\n {id: 'doc3', operation: 'delete'},\n ],\n })\n\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['doc1', 'doc2', 'doc3'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Deleted 3 documents')\n expect(mockDelete).toHaveBeenCalledWith('doc1')\n expect(mockDelete).toHaveBeenCalledWith('doc2')\n expect(mockDelete).toHaveBeenCalledWith('doc3')\n expect(mockCommit).toHaveBeenCalled()\n })\n\n test('handles documents not found', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [{id: 'doc1', operation: 'delete'}],\n })\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {error} = await testCommand(DeleteDocumentCommand, ['doc1', 'nonexistent-doc'], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Document not found: nonexistent-doc')\n expect(mockDelete).toHaveBeenCalledWith('doc1')\n expect(mockDelete).toHaveBeenCalledWith('nonexistent-doc')\n expect(mockCommit).toHaveBeenCalled()\n })\n\n test('uses custom dataset when --dataset flag is provided', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n await testCommand(DeleteDocumentCommand, ['test-doc', '--dataset', 'staging'], {\n mocks: defaultMocks,\n })\n\n expect(mockDelete).toHaveBeenCalledWith('test-doc')\n // Verify that the projectApiClient was called with the staging dataset\n expect(mockGetProjectCliClient).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n projectId: testProjectId,\n }),\n )\n })\n\n test('throws error when no project ID is configured', async () => {\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {dataset: testDataset, projectId: undefined}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when no dataset is configured and none provided', async () => {\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {dataset: undefined, projectId: testProjectId}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No dataset specified')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles transaction errors gracefully', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockRejectedValue(new Error('Transaction failed'))\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to delete 1 document: Transaction failed')\n expect(error?.oclif?.exit).toBe(1)\n expect(mockDelete).toHaveBeenCalledWith('test-doc')\n })\n\n test('requires document ID argument', async () => {\n const {error} = await testCommand(DeleteDocumentCommand, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Missing 1 required arg')\n })\n\n test('shows singular message when deleting one document', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['test-doc'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Deleted 1 document')\n expect(stdout).not.toContain('documents')\n })\n\n test('shows plural message when deleting multiple documents', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'delete'},\n {id: 'doc2', operation: 'delete'},\n ],\n })\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['doc1', 'doc2'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Deleted 2 documents')\n })\n})\n"],"names":["runCommand","testCommand","afterEach","describe","expect","test","vi","NO_PROJECT_ID","DeleteDocumentCommand","testProjectId","testDataset","defaultMocks","cliConfig","api","dataset","projectId","projectRoot","directory","path","type","token","mockTransaction","hoisted","fn","mockGetProjectCliClient","mockResolvedValue","transaction","mock","actual","importActual","getProjectCliClient","clearAllMocks","stdout","toMatchInlineSnapshot","mockDelete","mockCommit","results","id","operation","mockReturnValue","commit","delete","mocks","toContain","toHaveBeenCalledWith","toHaveBeenCalled","error","toBeInstanceOf","Error","message","objectContaining","undefined","toEqual","oclif","exit","toBe","mockRejectedValue","not"],"mappings":"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"}
@@ -1,31 +1,35 @@
1
1
  import { runCommand } from '@oclif/test';
2
- import { getCliConfig, getProjectCliClient } from '@sanity/cli-core';
3
2
  import { chalk } from '@sanity/cli-core/ux';
4
3
  import { testCommand } from '@sanity/cli-test';
5
4
  import { afterEach, describe, expect, test, vi } from 'vitest';
6
5
  import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
7
6
  import { GetDocumentCommand } from '../get.js';
8
- // Mock the config functions
9
- vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
10
- findProjectRoot: vi.fn().mockResolvedValue({
11
- directory: '/test/path',
12
- root: '/test/path',
13
- type: 'studio'
14
- })
15
- }));
16
- vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
17
- getCliConfig: vi.fn()
18
- }));
19
- vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
20
- getCliToken: vi.fn().mockResolvedValue('test-token')
21
- }));
22
- vi.mock('../../../../../cli-core/src/services/apiClient.js', ()=>({
23
- getProjectCliClient: vi.fn()
24
- }));
25
- const mockGetCliConfig = vi.mocked(getCliConfig);
26
- const mockGetProjectCliClient = vi.mocked(getProjectCliClient);
27
7
  const testProjectId = 'test-project';
28
8
  const testDataset = 'production';
9
+ const defaultMocks = {
10
+ cliConfig: {
11
+ api: {
12
+ dataset: testDataset,
13
+ projectId: testProjectId
14
+ }
15
+ },
16
+ projectRoot: {
17
+ directory: '/test/path',
18
+ path: '/test/path/sanity.config.ts',
19
+ type: 'studio'
20
+ },
21
+ token: 'test-token'
22
+ };
23
+ const mockGetDocument = vi.hoisted(()=>vi.fn());
24
+ vi.mock('@sanity/cli-core', async ()=>{
25
+ const actual = await vi.importActual('@sanity/cli-core');
26
+ return {
27
+ ...actual,
28
+ getProjectCliClient: vi.fn().mockResolvedValue({
29
+ getDocument: mockGetDocument
30
+ })
31
+ };
32
+ });
29
33
  describe('#documents:get', ()=>{
30
34
  afterEach(()=>{
31
35
  vi.clearAllMocks();
@@ -46,20 +50,12 @@ describe('#documents:get', ()=>{
46
50
  content: 'This is a test post',
47
51
  title: 'Test Post'
48
52
  };
49
- mockGetCliConfig.mockResolvedValue({
50
- api: {
51
- dataset: testDataset,
52
- projectId: testProjectId
53
- }
54
- });
55
- // Mock the getProjectApiClient to return a mock client with getDocument
56
- const mockGetDocument = vi.fn().mockResolvedValue(mockDoc);
57
- mockGetProjectCliClient.mockResolvedValue({
58
- getDocument: mockGetDocument
59
- });
53
+ mockGetDocument.mockResolvedValue(mockDoc);
60
54
  const { stdout } = await testCommand(GetDocumentCommand, [
61
55
  'test-doc'
62
- ]);
56
+ ], {
57
+ mocks: defaultMocks
58
+ });
63
59
  expect(stdout).toContain('"_id": "test-doc"');
64
60
  expect(stdout).toContain('"title": "Test Post"');
65
61
  expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
@@ -70,17 +66,7 @@ describe('#documents:get', ()=>{
70
66
  _type: 'post',
71
67
  title: 'Test Post'
72
68
  };
73
- mockGetCliConfig.mockResolvedValue({
74
- api: {
75
- dataset: testDataset,
76
- projectId: testProjectId
77
- }
78
- });
79
- // Mock the getProjectApiClient to return a mock client with getDocument
80
- const mockGetDocument = vi.fn().mockResolvedValue(mockDoc);
81
- mockGetProjectCliClient.mockResolvedValue({
82
- getDocument: mockGetDocument
83
- });
69
+ mockGetDocument.mockResolvedValue(mockDoc);
84
70
  const originalChalkLevel = chalk.level;
85
71
  // Force colorization
86
72
  chalk.level = 3;
@@ -90,7 +76,8 @@ describe('#documents:get', ()=>{
90
76
  ], {
91
77
  capture: {
92
78
  stripAnsi: false
93
- }
79
+ },
80
+ mocks: defaultMocks
94
81
  });
95
82
  // Reset chalk level
96
83
  chalk.level = originalChalkLevel;
@@ -110,96 +97,82 @@ describe('#documents:get', ()=>{
110
97
  _type: 'post',
111
98
  title: 'Test Post'
112
99
  };
113
- mockGetCliConfig.mockResolvedValue({
114
- api: {
115
- dataset: testDataset,
116
- projectId: testProjectId
117
- }
118
- });
119
- // Mock the getProjectApiClient to return a mock client with getDocument
120
- const mockGetDocument = vi.fn().mockResolvedValue(mockDoc);
121
- mockGetProjectCliClient.mockResolvedValue({
122
- getDocument: mockGetDocument
123
- });
100
+ mockGetDocument.mockResolvedValue(mockDoc);
124
101
  const { stdout } = await testCommand(GetDocumentCommand, [
125
102
  'test-doc',
126
103
  '--dataset',
127
104
  'staging'
128
- ]);
105
+ ], {
106
+ mocks: defaultMocks
107
+ });
129
108
  expect(stdout).toContain('"_id": "test-doc"');
130
109
  expect(stdout).toContain('"title": "Test Post"');
131
110
  expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
132
111
  });
133
112
  test('throws error when document is not found', async ()=>{
134
- mockGetCliConfig.mockResolvedValue({
135
- api: {
136
- dataset: testDataset,
137
- projectId: testProjectId
138
- }
139
- });
140
- // Mock the getProjectApiClient to return a mock client with getDocument returning null
141
- const mockGetDocument = vi.fn().mockResolvedValue(null);
142
- mockGetProjectCliClient.mockResolvedValue({
143
- getDocument: mockGetDocument
144
- });
113
+ mockGetDocument.mockResolvedValue(null);
145
114
  const { error } = await testCommand(GetDocumentCommand, [
146
115
  'nonexistent-doc'
147
- ]);
116
+ ], {
117
+ mocks: defaultMocks
118
+ });
148
119
  expect(error).toBeInstanceOf(Error);
149
120
  expect(error?.message).toContain('Document "nonexistent-doc" not found');
150
121
  expect(error?.oclif?.exit).toBe(1);
151
122
  expect(mockGetDocument).toHaveBeenCalledWith('nonexistent-doc');
152
123
  });
153
124
  test('throws error when no project ID is configured', async ()=>{
154
- mockGetCliConfig.mockResolvedValue({
155
- api: {
156
- dataset: 'production',
157
- projectId: undefined
158
- }
159
- });
160
125
  const { error } = await testCommand(GetDocumentCommand, [
161
126
  'test-doc'
162
- ]);
127
+ ], {
128
+ mocks: {
129
+ ...defaultMocks,
130
+ cliConfig: {
131
+ api: {
132
+ dataset: 'production',
133
+ projectId: undefined
134
+ }
135
+ }
136
+ }
137
+ });
163
138
  expect(error).toBeInstanceOf(Error);
164
139
  expect(error?.message).toEqual(NO_PROJECT_ID);
165
140
  expect(error?.oclif?.exit).toBe(1);
166
141
  });
167
142
  test('throws error when no dataset is configured and none provided', async ()=>{
168
- mockGetCliConfig.mockResolvedValue({
169
- api: {
170
- dataset: undefined,
171
- projectId: testProjectId
172
- }
173
- });
174
143
  const { error } = await testCommand(GetDocumentCommand, [
175
144
  'test-doc'
176
- ]);
145
+ ], {
146
+ mocks: {
147
+ ...defaultMocks,
148
+ cliConfig: {
149
+ api: {
150
+ dataset: undefined,
151
+ projectId: testProjectId
152
+ }
153
+ }
154
+ }
155
+ });
177
156
  expect(error).toBeInstanceOf(Error);
178
157
  expect(error?.message).toContain('No dataset specified');
179
158
  expect(error?.oclif?.exit).toBe(1);
180
159
  });
181
160
  test('handles client errors gracefully', async ()=>{
182
- mockGetCliConfig.mockResolvedValue({
183
- api: {
184
- dataset: testDataset,
185
- projectId: testProjectId
186
- }
187
- });
188
- // Mock the getProjectApiClient to return a mock client with getDocument throwing an error
189
- const mockGetDocument = vi.fn().mockRejectedValue(new Error('Network error'));
190
- mockGetProjectCliClient.mockResolvedValue({
191
- getDocument: mockGetDocument
192
- });
161
+ mockGetDocument.mockRejectedValue(new Error('Network error'));
193
162
  const { error } = await testCommand(GetDocumentCommand, [
194
163
  'test-doc'
195
- ]);
164
+ ], {
165
+ mocks: defaultMocks
166
+ });
196
167
  expect(error).toBeInstanceOf(Error);
197
168
  expect(error?.message).toContain('Failed to fetch document');
198
169
  expect(error?.oclif?.exit).toBe(1);
199
170
  expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
200
171
  });
201
172
  test('requires document ID argument', async ()=>{
202
- const { error } = await testCommand(GetDocumentCommand, []);
173
+ const { error } = await testCommand(GetDocumentCommand, [], {
174
+ mocks: defaultMocks
175
+ });
203
176
  expect(error).toBeInstanceOf(Error);
204
177
  expect(error?.message).toContain('Missing 1 required arg');
205
178
  expect(error?.oclif?.exit).toBe(2);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/commands/documents/__tests__/get.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {GetDocumentCommand} from '../get.js'\n\n// Mock the config functions\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn(),\n}))\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\nvi.mock('../../../../../cli-core/src/services/apiClient.js', () => ({\n getProjectCliClient: vi.fn(),\n}))\n\nconst mockGetCliConfig = vi.mocked(getCliConfig)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\nconst testProjectId = 'test-project'\nconst testDataset = 'production'\n\ndescribe('#documents:get', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['documents get', '--help'])\n\n expect(stdout).toContain('Get and print a document by ID')\n expect(stdout).toContain('ARGUMENTS')\n expect(stdout).toContain('DOCUMENTID')\n })\n\n test('retrieves and displays a document successfully', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n content: 'This is a test post',\n title: 'Test Post',\n }\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n // Mock the getProjectApiClient to return a mock client with getDocument\n const mockGetDocument = vi.fn().mockResolvedValue(mockDoc)\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: mockGetDocument,\n } as never)\n\n const {stdout} = await testCommand(GetDocumentCommand, ['test-doc'])\n\n expect(stdout).toContain('\"_id\": \"test-doc\"')\n expect(stdout).toContain('\"title\": \"Test Post\"')\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('displays colorized output when --pretty flag is used', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n // Mock the getProjectApiClient to return a mock client with getDocument\n const mockGetDocument = vi.fn().mockResolvedValue(mockDoc)\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: mockGetDocument,\n } as never)\n\n const originalChalkLevel = chalk.level\n // Force colorization\n chalk.level = 3\n\n const {stdout} = await testCommand(GetDocumentCommand, ['test-doc', '--pretty'], {\n capture: {\n stripAnsi: false,\n },\n })\n\n // Reset chalk level\n chalk.level = originalChalkLevel\n\n // Check that the output contains the document data\n expect(stdout).toContain('test-doc')\n expect(stdout).toContain('Test Post')\n expect(stdout).toContain('_id')\n expect(stdout).toContain('_type')\n expect(stdout).toContain('title')\n\n // eslint-disable-next-line no-control-regex\n expect(stdout).toMatch(/\\u001B\\[\\d+m/)\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('uses custom dataset when --dataset flag is provided', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n // Mock the getProjectApiClient to return a mock client with getDocument\n const mockGetDocument = vi.fn().mockResolvedValue(mockDoc)\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: mockGetDocument,\n } as never)\n\n const {stdout} = await testCommand(GetDocumentCommand, ['test-doc', '--dataset', 'staging'])\n\n expect(stdout).toContain('\"_id\": \"test-doc\"')\n expect(stdout).toContain('\"title\": \"Test Post\"')\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('throws error when document is not found', async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n // Mock the getProjectApiClient to return a mock client with getDocument returning null\n const mockGetDocument = vi.fn().mockResolvedValue(null)\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: mockGetDocument,\n } as never)\n\n const {error} = await testCommand(GetDocumentCommand, ['nonexistent-doc'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Document \"nonexistent-doc\" not found')\n expect(error?.oclif?.exit).toBe(1)\n expect(mockGetDocument).toHaveBeenCalledWith('nonexistent-doc')\n })\n\n test('throws error when no project ID is configured', async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: 'production',\n projectId: undefined,\n },\n })\n\n const {error} = await testCommand(GetDocumentCommand, ['test-doc'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when no dataset is configured and none provided', async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: undefined,\n projectId: testProjectId,\n },\n })\n\n const {error} = await testCommand(GetDocumentCommand, ['test-doc'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No dataset specified')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles client errors gracefully', async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n // Mock the getProjectApiClient to return a mock client with getDocument throwing an error\n const mockGetDocument = vi.fn().mockRejectedValue(new Error('Network error'))\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: mockGetDocument,\n } as never)\n\n const {error} = await testCommand(GetDocumentCommand, ['test-doc'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to fetch document')\n expect(error?.oclif?.exit).toBe(1)\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('requires document ID argument', async () => {\n const {error} = await testCommand(GetDocumentCommand, [])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Missing 1 required arg')\n expect(error?.oclif?.exit).toBe(2)\n })\n})\n"],"names":["runCommand","getCliConfig","getProjectCliClient","chalk","testCommand","afterEach","describe","expect","test","vi","NO_PROJECT_ID","GetDocumentCommand","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","getCliToken","mockGetCliConfig","mocked","mockGetProjectCliClient","testProjectId","testDataset","clearAllMocks","stdout","toContain","mockDoc","_id","_type","content","title","api","dataset","projectId","mockGetDocument","getDocument","toHaveBeenCalledWith","originalChalkLevel","level","capture","stripAnsi","toMatch","error","toBeInstanceOf","Error","message","oclif","exit","toBe","undefined","toEqual","mockRejectedValue"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/commands/documents/__tests__/get.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {chalk} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {GetDocumentCommand} from '../get.js'\n\nconst testProjectId = 'test-project'\nconst testDataset = 'production'\n\nconst defaultMocks = {\n cliConfig: {api: {dataset: testDataset, 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 mockGetDocument = 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 getDocument: mockGetDocument,\n }),\n }\n})\n\ndescribe('#documents:get', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['documents get', '--help'])\n\n expect(stdout).toContain('Get and print a document by ID')\n expect(stdout).toContain('ARGUMENTS')\n expect(stdout).toContain('DOCUMENTID')\n })\n\n test('retrieves and displays a document successfully', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n content: 'This is a test post',\n title: 'Test Post',\n }\n\n mockGetDocument.mockResolvedValue(mockDoc)\n\n const {stdout} = await testCommand(GetDocumentCommand, ['test-doc'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('\"_id\": \"test-doc\"')\n expect(stdout).toContain('\"title\": \"Test Post\"')\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('displays colorized output when --pretty flag is used', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n mockGetDocument.mockResolvedValue(mockDoc)\n\n const originalChalkLevel = chalk.level\n // Force colorization\n chalk.level = 3\n\n const {stdout} = await testCommand(GetDocumentCommand, ['test-doc', '--pretty'], {\n capture: {\n stripAnsi: false,\n },\n mocks: defaultMocks,\n })\n\n // Reset chalk level\n chalk.level = originalChalkLevel\n\n // Check that the output contains the document data\n expect(stdout).toContain('test-doc')\n expect(stdout).toContain('Test Post')\n expect(stdout).toContain('_id')\n expect(stdout).toContain('_type')\n expect(stdout).toContain('title')\n\n // eslint-disable-next-line no-control-regex\n expect(stdout).toMatch(/\\u001B\\[\\d+m/)\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('uses custom dataset when --dataset flag is provided', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n mockGetDocument.mockResolvedValue(mockDoc)\n\n const {stdout} = await testCommand(GetDocumentCommand, ['test-doc', '--dataset', 'staging'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('\"_id\": \"test-doc\"')\n expect(stdout).toContain('\"title\": \"Test Post\"')\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('throws error when document is not found', async () => {\n mockGetDocument.mockResolvedValue(null)\n\n const {error} = await testCommand(GetDocumentCommand, ['nonexistent-doc'], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Document \"nonexistent-doc\" not found')\n expect(error?.oclif?.exit).toBe(1)\n expect(mockGetDocument).toHaveBeenCalledWith('nonexistent-doc')\n })\n\n test('throws error when no project ID is configured', async () => {\n const {error} = await testCommand(GetDocumentCommand, ['test-doc'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {dataset: 'production', projectId: undefined}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when no dataset is configured and none provided', async () => {\n const {error} = await testCommand(GetDocumentCommand, ['test-doc'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {dataset: undefined, projectId: testProjectId}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No dataset specified')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles client errors gracefully', async () => {\n mockGetDocument.mockRejectedValue(new Error('Network error'))\n\n const {error} = await testCommand(GetDocumentCommand, ['test-doc'], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to fetch document')\n expect(error?.oclif?.exit).toBe(1)\n expect(mockGetDocument).toHaveBeenCalledWith('test-doc')\n })\n\n test('requires document ID argument', async () => {\n const {error} = await testCommand(GetDocumentCommand, [], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Missing 1 required arg')\n expect(error?.oclif?.exit).toBe(2)\n })\n})\n"],"names":["runCommand","chalk","testCommand","afterEach","describe","expect","test","vi","NO_PROJECT_ID","GetDocumentCommand","testProjectId","testDataset","defaultMocks","cliConfig","api","dataset","projectId","projectRoot","directory","path","type","token","mockGetDocument","hoisted","fn","mock","actual","importActual","getProjectCliClient","mockResolvedValue","getDocument","clearAllMocks","stdout","toContain","mockDoc","_id","_type","content","title","mocks","toHaveBeenCalledWith","originalChalkLevel","level","capture","stripAnsi","toMatch","error","toBeInstanceOf","Error","message","oclif","exit","toBe","undefined","toEqual","mockRejectedValue"],"mappings":"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"}