@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,32 +1,23 @@
1
1
  import { runCommand } from '@oclif/test';
2
- import { getCliConfig, getProjectCliClient } from '@sanity/cli-core';
3
2
  import { input } 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 { DeleteDatasetCommand } from '../delete.js';
8
- vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
9
- findProjectRoot: vi.fn().mockResolvedValue({
10
- directory: '/test/path',
11
- root: '/test/path',
12
- type: 'studio'
13
- })
14
- }));
15
- vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
16
- getCliConfig: vi.fn().mockResolvedValue({
17
- api: {
18
- projectId: 'test-project'
19
- }
20
- })
21
- }));
22
- vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
23
- getCliToken: vi.fn().mockResolvedValue('test-token')
24
- }));
25
- vi.mock('../../../../../cli-core/src/services/apiClient.js', async (importOriginal)=>{
26
- const actual = await importOriginal();
7
+ const mockDeleteDataset = vi.hoisted(()=>vi.fn());
8
+ const mockGetProjectById = vi.hoisted(()=>vi.fn());
9
+ vi.mock('@sanity/cli-core', async ()=>{
10
+ const actual = await vi.importActual('@sanity/cli-core');
27
11
  return {
28
12
  ...actual,
29
- getProjectCliClient: vi.fn()
13
+ getProjectCliClient: vi.fn().mockResolvedValue({
14
+ datasets: {
15
+ delete: mockDeleteDataset
16
+ },
17
+ projects: {
18
+ getById: mockGetProjectById
19
+ }
20
+ })
30
21
  };
31
22
  });
32
23
  vi.mock('@sanity/cli-core/ux', async ()=>{
@@ -39,20 +30,20 @@ vi.mock('@sanity/cli-core/ux', async ()=>{
39
30
  const TEST_DATASET_NAME = 'test-dataset';
40
31
  const TEST_PROJECT_NAME = 'Test Project';
41
32
  const TEST_PROJECT_ID = 'test-project';
42
- const mockGetProjectCliClient = vi.mocked(getProjectCliClient);
43
- const setupMockClient = ()=>{
44
- mockGetProjectCliClient.mockResolvedValue({
45
- datasets: {
46
- delete: vi.fn().mockResolvedValue(undefined)
47
- },
48
- projects: {
49
- getById: vi.fn().mockResolvedValue({
50
- displayName: TEST_PROJECT_NAME,
51
- id: TEST_PROJECT_ID
52
- })
33
+ const defaultMocks = {
34
+ cliConfig: {
35
+ api: {
36
+ projectId: TEST_PROJECT_ID
53
37
  }
54
- });
38
+ },
39
+ projectRoot: {
40
+ directory: '/test/path',
41
+ path: '/test/path/sanity.config.ts',
42
+ type: 'studio'
43
+ },
44
+ token: 'test-token'
55
45
  };
46
+ const mockInput = vi.mocked(input);
56
47
  describe('#dataset:delete', ()=>{
57
48
  afterEach(()=>{
58
49
  vi.clearAllMocks();
@@ -90,23 +81,31 @@ describe('#dataset:delete', ()=>{
90
81
  `);
91
82
  });
92
83
  test('deletes dataset with --force flag', async ()=>{
93
- setupMockClient();
84
+ mockDeleteDataset.mockResolvedValue(undefined);
94
85
  const { stderr, stdout } = await testCommand(DeleteDatasetCommand, [
95
86
  TEST_DATASET_NAME,
96
87
  '--force'
97
- ]);
88
+ ], {
89
+ mocks: defaultMocks
90
+ });
98
91
  expect(stderr).toContain(`--force' used: skipping confirmation, deleting dataset`);
99
92
  expect(stdout).toBe('Dataset deleted successfully\n');
100
93
  });
101
94
  test('deletes dataset with confirmation prompt and validates input', async ()=>{
102
- vi.mocked(input).mockResolvedValue(TEST_DATASET_NAME);
103
- setupMockClient();
95
+ mockInput.mockResolvedValue(TEST_DATASET_NAME);
96
+ mockGetProjectById.mockResolvedValue({
97
+ displayName: TEST_PROJECT_NAME,
98
+ id: TEST_PROJECT_ID
99
+ });
100
+ mockDeleteDataset.mockResolvedValue(undefined);
104
101
  const { stdout } = await testCommand(DeleteDatasetCommand, [
105
102
  TEST_DATASET_NAME
106
- ]);
103
+ ], {
104
+ mocks: defaultMocks
105
+ });
107
106
  expect(stdout).toContain(`Deleting dataset "${TEST_DATASET_NAME}" from project "${TEST_PROJECT_NAME} (${TEST_PROJECT_ID})"`);
108
107
  expect(stdout).toContain('Dataset deleted successfully\n');
109
- expect(input).toHaveBeenCalledWith({
108
+ expect(mockInput).toHaveBeenCalledWith({
110
109
  message: 'Are you ABSOLUTELY sure you want to delete this dataset?\n Type the name of the dataset to confirm delete:',
111
110
  validate: expect.any(Function)
112
111
  });
@@ -115,7 +114,9 @@ describe('#dataset:delete', ()=>{
115
114
  const { error: commandError } = await testCommand(DeleteDatasetCommand, [
116
115
  '',
117
116
  '--force'
118
- ]);
117
+ ], {
118
+ mocks: defaultMocks
119
+ });
119
120
  expect(commandError?.message).toBe('Dataset name is missing');
120
121
  expect(commandError?.oclif?.exit).toBe(1);
121
122
  });
@@ -129,15 +130,19 @@ describe('#dataset:delete', ()=>{
129
130
  projectId: ''
130
131
  }
131
132
  ])('throws error when $desc', async ({ projectId })=>{
132
- vi.mocked(getCliConfig).mockResolvedValueOnce({
133
- api: {
134
- projectId
135
- }
136
- });
137
133
  const { error } = await testCommand(DeleteDatasetCommand, [
138
134
  TEST_DATASET_NAME,
139
135
  '--force'
140
- ]);
136
+ ], {
137
+ mocks: {
138
+ ...defaultMocks,
139
+ cliConfig: {
140
+ api: {
141
+ projectId
142
+ }
143
+ }
144
+ }
145
+ });
141
146
  expect(error?.message).toBe(NO_PROJECT_ID);
142
147
  expect(error?.oclif?.exit).toBe(1);
143
148
  });
@@ -162,60 +167,62 @@ describe('#dataset:delete', ()=>{
162
167
  Object.assign(deleteError, {
163
168
  statusCode
164
169
  });
165
- mockGetProjectCliClient.mockResolvedValueOnce({
166
- datasets: {
167
- delete: vi.fn().mockRejectedValue(deleteError)
168
- }
169
- });
170
+ mockDeleteDataset.mockRejectedValue(deleteError);
170
171
  const { error } = await testCommand(DeleteDatasetCommand, [
171
172
  TEST_DATASET_NAME,
172
173
  '--force'
173
- ]);
174
+ ], {
175
+ mocks: defaultMocks
176
+ });
174
177
  expect(error?.message).toContain('Dataset deletion failed');
175
178
  expect(error?.message).toContain(message);
176
179
  expect(error?.oclif?.exit).toBe(1);
177
180
  });
178
181
  test('handles network errors when deleting dataset', async ()=>{
179
- mockGetProjectCliClient.mockResolvedValueOnce({
180
- datasets: {
181
- delete: vi.fn().mockRejectedValue(new Error('Network error'))
182
- }
183
- });
182
+ mockDeleteDataset.mockRejectedValue(new Error('Network error'));
184
183
  const { error } = await testCommand(DeleteDatasetCommand, [
185
184
  TEST_DATASET_NAME,
186
185
  '--force'
187
- ]);
186
+ ], {
187
+ mocks: defaultMocks
188
+ });
188
189
  expect(error?.message).toContain('Dataset deletion failed');
189
190
  expect(error?.message).toContain('Network error');
190
191
  expect(error?.oclif?.exit).toBe(1);
191
192
  });
192
193
  test('handles API client creation errors', async ()=>{
193
- mockGetProjectCliClient.mockRejectedValueOnce(new Error('Failed to create client'));
194
+ mockDeleteDataset.mockRejectedValue(new Error('Failed to create client'));
194
195
  const { error } = await testCommand(DeleteDatasetCommand, [
195
196
  TEST_DATASET_NAME,
196
197
  '--force'
197
- ]);
198
+ ], {
199
+ mocks: defaultMocks
200
+ });
198
201
  expect(error?.message).toContain('Dataset deletion failed');
199
202
  expect(error?.message).toContain('Failed to create client');
200
203
  expect(error?.oclif?.exit).toBe(1);
201
204
  });
202
205
  test('handles user cancellation during confirmation', async ()=>{
203
- vi.mocked(input).mockRejectedValue(new Error('User cancelled'));
206
+ mockGetProjectById.mockResolvedValue({
207
+ displayName: TEST_PROJECT_NAME,
208
+ id: TEST_PROJECT_ID
209
+ });
210
+ mockInput.mockRejectedValue(new Error('User cancelled'));
204
211
  const { error } = await testCommand(DeleteDatasetCommand, [
205
212
  TEST_DATASET_NAME
206
- ]);
213
+ ], {
214
+ mocks: defaultMocks
215
+ });
207
216
  expect(error?.message).toBe('User cancelled');
208
217
  expect(error?.oclif?.exit).toBe(1);
209
218
  });
210
219
  test('handles project retrieval error', async ()=>{
211
- mockGetProjectCliClient.mockResolvedValueOnce({
212
- projects: {
213
- getById: vi.fn().mockRejectedValueOnce(new Error('Project Error'))
214
- }
215
- });
220
+ mockGetProjectById.mockRejectedValue(new Error('Project Error'));
216
221
  const { error } = await testCommand(DeleteDatasetCommand, [
217
222
  TEST_DATASET_NAME
218
- ]);
223
+ ], {
224
+ mocks: defaultMocks
225
+ });
219
226
  expect(error?.message).toContain('Project retrieval failed: Project Error');
220
227
  expect(error?.oclif?.exit).toBe(1);
221
228
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/commands/dataset/__tests__/delete.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {input} 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 {DeleteDatasetCommand} from '../delete.js'\n\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 projectId: 'test-project',\n },\n }),\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', async (importOriginal) => {\n const actual =\n await importOriginal<typeof import('../../../../../cli-core/src/services/apiClient.js')>()\n return {\n ...actual,\n getProjectCliClient: vi.fn(),\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 input: vi.fn(),\n }\n})\n\nconst TEST_DATASET_NAME = 'test-dataset'\nconst TEST_PROJECT_NAME = 'Test Project'\nconst TEST_PROJECT_ID = 'test-project'\n\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\n\nconst setupMockClient = () => {\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n delete: vi.fn().mockResolvedValue(undefined),\n },\n projects: {\n getById: vi.fn().mockResolvedValue({\n displayName: TEST_PROJECT_NAME,\n id: TEST_PROJECT_ID,\n }),\n },\n } as never)\n}\n\ndescribe('#dataset:delete', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['dataset delete', '--help'])\n expect(stdout).toMatchInlineSnapshot(`\n \"Delete a dataset within your project\n\n USAGE\n $ sanity dataset delete DATASETNAME [--force]\n\n ARGUMENTS\n DATASETNAME Dataset name to delete\n\n FLAGS\n --force Do not prompt for delete confirmation - forcefully delete\n\n DESCRIPTION\n Delete a dataset within your project\n\n EXAMPLES\n Delete a specific dataset\n\n $ sanity dataset delete my-dataset\n\n Delete a specific dataset without confirmation\n\n $ sanity dataset delete my-dataset --force\n\n \"\n `)\n })\n\n test('deletes dataset with --force flag', async () => {\n setupMockClient()\n\n const {stderr, stdout} = await testCommand(DeleteDatasetCommand, [TEST_DATASET_NAME, '--force'])\n expect(stderr).toContain(`--force' used: skipping confirmation, deleting dataset`)\n expect(stdout).toBe('Dataset deleted successfully\\n')\n })\n\n test('deletes dataset with confirmation prompt and validates input', async () => {\n vi.mocked(input).mockResolvedValue(TEST_DATASET_NAME)\n setupMockClient()\n\n const {stdout} = await testCommand(DeleteDatasetCommand, [TEST_DATASET_NAME])\n\n expect(stdout).toContain(\n `Deleting dataset \"${TEST_DATASET_NAME}\" from project \"${TEST_PROJECT_NAME} (${TEST_PROJECT_ID})\"`,\n )\n expect(stdout).toContain('Dataset deleted successfully\\n')\n expect(input).toHaveBeenCalledWith({\n message:\n 'Are you ABSOLUTELY sure you want to delete this dataset?\\n Type the name of the dataset to confirm delete:',\n validate: expect.any(Function),\n })\n })\n\n test('throws error for empty dataset name', async () => {\n const {error: commandError} = await testCommand(DeleteDatasetCommand, ['', '--force'])\n expect(commandError?.message).toBe('Dataset name is missing')\n expect(commandError?.oclif?.exit).toBe(1)\n })\n\n test.each([\n {desc: 'no project ID is found', projectId: undefined},\n {desc: 'project ID is empty string', projectId: ''},\n ])('throws error when $desc', async ({projectId}) => {\n vi.mocked(getCliConfig).mockResolvedValueOnce({\n api: {projectId},\n })\n\n const {error} = await testCommand(DeleteDatasetCommand, [TEST_DATASET_NAME, '--force'])\n expect(error?.message).toBe(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test.each([\n {desc: 'when deleting dataset', message: 'Internal Server Error', statusCode: 500},\n {desc: 'with 404 error when deleting dataset', message: 'Dataset not found', statusCode: 404},\n {desc: 'with 403 error when deleting dataset', message: 'Forbidden', statusCode: 403},\n ])('handles API error $desc', async ({message, statusCode}) => {\n const deleteError = new Error(message)\n Object.assign(deleteError, {statusCode})\n\n mockGetProjectCliClient.mockResolvedValueOnce({\n datasets: {\n delete: vi.fn().mockRejectedValue(deleteError),\n },\n } as never)\n\n const {error} = await testCommand(DeleteDatasetCommand, [TEST_DATASET_NAME, '--force'])\n expect(error?.message).toContain('Dataset deletion failed')\n expect(error?.message).toContain(message)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles network errors when deleting dataset', async () => {\n mockGetProjectCliClient.mockResolvedValueOnce({\n datasets: {\n delete: vi.fn().mockRejectedValue(new Error('Network error')),\n },\n } as never)\n\n const {error} = await testCommand(DeleteDatasetCommand, [TEST_DATASET_NAME, '--force'])\n expect(error?.message).toContain('Dataset deletion failed')\n expect(error?.message).toContain('Network error')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles API client creation errors', async () => {\n mockGetProjectCliClient.mockRejectedValueOnce(new Error('Failed to create client'))\n\n const {error} = await testCommand(DeleteDatasetCommand, [TEST_DATASET_NAME, '--force'])\n expect(error?.message).toContain('Dataset deletion failed')\n expect(error?.message).toContain('Failed to create client')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles user cancellation during confirmation', async () => {\n vi.mocked(input).mockRejectedValue(new Error('User cancelled'))\n\n const {error} = await testCommand(DeleteDatasetCommand, [TEST_DATASET_NAME])\n\n expect(error?.message).toBe('User cancelled')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles project retrieval error', async () => {\n mockGetProjectCliClient.mockResolvedValueOnce({\n projects: {\n getById: vi.fn().mockRejectedValueOnce(new Error('Project Error')),\n },\n } as never)\n\n const {error} = await testCommand(DeleteDatasetCommand, [TEST_DATASET_NAME])\n\n expect(error?.message).toContain('Project retrieval failed: Project Error')\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","getCliConfig","getProjectCliClient","input","testCommand","afterEach","describe","expect","test","vi","NO_PROJECT_ID","DeleteDatasetCommand","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","api","projectId","getCliToken","importOriginal","actual","importActual","TEST_DATASET_NAME","TEST_PROJECT_NAME","TEST_PROJECT_ID","mockGetProjectCliClient","mocked","setupMockClient","datasets","delete","undefined","projects","getById","displayName","id","clearAllMocks","stdout","toMatchInlineSnapshot","stderr","toContain","toBe","toHaveBeenCalledWith","message","validate","any","Function","error","commandError","oclif","exit","each","desc","mockResolvedValueOnce","statusCode","deleteError","Error","Object","assign","mockRejectedValue","mockRejectedValueOnce"],"mappings":"AAAA,SAAQA,UAAU,QAAO,cAAa;AACtC,SAAQC,YAAY,EAAEC,mBAAmB,QAAO,mBAAkB;AAClE,SAAQC,KAAK,QAAO,sBAAqB;AACzC,SAAQC,WAAW,QAAO,mBAAkB;AAC5C,SAAQC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAO,SAAQ;AAE5D,SAAQC,aAAa,QAAO,iCAAgC;AAC5D,SAAQC,oBAAoB,QAAO,eAAc;AAEjDF,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,WAAW;YACb;QACF;IACF,CAAA;AAEAX,GAAGG,IAAI,CAAC,uDAAuD,IAAO,CAAA;QACpES,aAAaZ,GAAGK,EAAE,GAAGC,iBAAiB,CAAC;IACzC,CAAA;AAEAN,GAAGG,IAAI,CAAC,qDAAqD,OAAOU;IAClE,MAAMC,SACJ,MAAMD;IACR,OAAO;QACL,GAAGC,MAAM;QACTrB,qBAAqBO,GAAGK,EAAE;IAC5B;AACF;AAEAL,GAAGG,IAAI,CAAC,uBAAuB;IAC7B,MAAMW,SAAS,MAAMd,GAAGe,YAAY,CAAuC;IAC3E,OAAO;QACL,GAAGD,MAAM;QACTpB,OAAOM,GAAGK,EAAE;IACd;AACF;AAEA,MAAMW,oBAAoB;AAC1B,MAAMC,oBAAoB;AAC1B,MAAMC,kBAAkB;AAExB,MAAMC,0BAA0BnB,GAAGoB,MAAM,CAAC3B;AAE1C,MAAM4B,kBAAkB;IACtBF,wBAAwBb,iBAAiB,CAAC;QACxCgB,UAAU;YACRC,QAAQvB,GAAGK,EAAE,GAAGC,iBAAiB,CAACkB;QACpC;QACAC,UAAU;YACRC,SAAS1B,GAAGK,EAAE,GAAGC,iBAAiB,CAAC;gBACjCqB,aAAaV;gBACbW,IAAIV;YACN;QACF;IACF;AACF;AAEArB,SAAS,mBAAmB;IAC1BD,UAAU;QACRI,GAAG6B,aAAa;IAClB;IAEA9B,KAAK,gBAAgB;QACnB,MAAM,EAAC+B,MAAM,EAAC,GAAG,MAAMvC,WAAW;YAAC;YAAkB;SAAS;QAC9DO,OAAOgC,QAAQC,qBAAqB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;IAyBtC,CAAC;IACH;IAEAhC,KAAK,qCAAqC;QACxCsB;QAEA,MAAM,EAACW,MAAM,EAAEF,MAAM,EAAC,GAAG,MAAMnC,YAAYO,sBAAsB;YAACc;YAAmB;SAAU;QAC/FlB,OAAOkC,QAAQC,SAAS,CAAC,CAAC,sDAAsD,CAAC;QACjFnC,OAAOgC,QAAQI,IAAI,CAAC;IACtB;IAEAnC,KAAK,gEAAgE;QACnEC,GAAGoB,MAAM,CAAC1B,OAAOY,iBAAiB,CAACU;QACnCK;QAEA,MAAM,EAACS,MAAM,EAAC,GAAG,MAAMnC,YAAYO,sBAAsB;YAACc;SAAkB;QAE5ElB,OAAOgC,QAAQG,SAAS,CACtB,CAAC,kBAAkB,EAAEjB,kBAAkB,gBAAgB,EAAEC,kBAAkB,EAAE,EAAEC,gBAAgB,EAAE,CAAC;QAEpGpB,OAAOgC,QAAQG,SAAS,CAAC;QACzBnC,OAAOJ,OAAOyC,oBAAoB,CAAC;YACjCC,SACE;YACFC,UAAUvC,OAAOwC,GAAG,CAACC;QACvB;IACF;IAEAxC,KAAK,uCAAuC;QAC1C,MAAM,EAACyC,OAAOC,YAAY,EAAC,GAAG,MAAM9C,YAAYO,sBAAsB;YAAC;YAAI;SAAU;QACrFJ,OAAO2C,cAAcL,SAASF,IAAI,CAAC;QACnCpC,OAAO2C,cAAcC,OAAOC,MAAMT,IAAI,CAAC;IACzC;IAEAnC,KAAK6C,IAAI,CAAC;QACR;YAACC,MAAM;YAA0BlC,WAAWa;QAAS;QACrD;YAACqB,MAAM;YAA8BlC,WAAW;QAAE;KACnD,EAAE,2BAA2B,OAAO,EAACA,SAAS,EAAC;QAC9CX,GAAGoB,MAAM,CAAC5B,cAAcsD,qBAAqB,CAAC;YAC5CpC,KAAK;gBAACC;YAAS;QACjB;QAEA,MAAM,EAAC6B,KAAK,EAAC,GAAG,MAAM7C,YAAYO,sBAAsB;YAACc;YAAmB;SAAU;QACtFlB,OAAO0C,OAAOJ,SAASF,IAAI,CAACjC;QAC5BH,OAAO0C,OAAOE,OAAOC,MAAMT,IAAI,CAAC;IAClC;IAEAnC,KAAK6C,IAAI,CAAC;QACR;YAACC,MAAM;YAAyBT,SAAS;YAAyBW,YAAY;QAAG;QACjF;YAACF,MAAM;YAAwCT,SAAS;YAAqBW,YAAY;QAAG;QAC5F;YAACF,MAAM;YAAwCT,SAAS;YAAaW,YAAY;QAAG;KACrF,EAAE,2BAA2B,OAAO,EAACX,OAAO,EAAEW,UAAU,EAAC;QACxD,MAAMC,cAAc,IAAIC,MAAMb;QAC9Bc,OAAOC,MAAM,CAACH,aAAa;YAACD;QAAU;QAEtC5B,wBAAwB2B,qBAAqB,CAAC;YAC5CxB,UAAU;gBACRC,QAAQvB,GAAGK,EAAE,GAAG+C,iBAAiB,CAACJ;YACpC;QACF;QAEA,MAAM,EAACR,KAAK,EAAC,GAAG,MAAM7C,YAAYO,sBAAsB;YAACc;YAAmB;SAAU;QACtFlB,OAAO0C,OAAOJ,SAASH,SAAS,CAAC;QACjCnC,OAAO0C,OAAOJ,SAASH,SAAS,CAACG;QACjCtC,OAAO0C,OAAOE,OAAOC,MAAMT,IAAI,CAAC;IAClC;IAEAnC,KAAK,gDAAgD;QACnDoB,wBAAwB2B,qBAAqB,CAAC;YAC5CxB,UAAU;gBACRC,QAAQvB,GAAGK,EAAE,GAAG+C,iBAAiB,CAAC,IAAIH,MAAM;YAC9C;QACF;QAEA,MAAM,EAACT,KAAK,EAAC,GAAG,MAAM7C,YAAYO,sBAAsB;YAACc;YAAmB;SAAU;QACtFlB,OAAO0C,OAAOJ,SAASH,SAAS,CAAC;QACjCnC,OAAO0C,OAAOJ,SAASH,SAAS,CAAC;QACjCnC,OAAO0C,OAAOE,OAAOC,MAAMT,IAAI,CAAC;IAClC;IAEAnC,KAAK,sCAAsC;QACzCoB,wBAAwBkC,qBAAqB,CAAC,IAAIJ,MAAM;QAExD,MAAM,EAACT,KAAK,EAAC,GAAG,MAAM7C,YAAYO,sBAAsB;YAACc;YAAmB;SAAU;QACtFlB,OAAO0C,OAAOJ,SAASH,SAAS,CAAC;QACjCnC,OAAO0C,OAAOJ,SAASH,SAAS,CAAC;QACjCnC,OAAO0C,OAAOE,OAAOC,MAAMT,IAAI,CAAC;IAClC;IAEAnC,KAAK,iDAAiD;QACpDC,GAAGoB,MAAM,CAAC1B,OAAO0D,iBAAiB,CAAC,IAAIH,MAAM;QAE7C,MAAM,EAACT,KAAK,EAAC,GAAG,MAAM7C,YAAYO,sBAAsB;YAACc;SAAkB;QAE3ElB,OAAO0C,OAAOJ,SAASF,IAAI,CAAC;QAC5BpC,OAAO0C,OAAOE,OAAOC,MAAMT,IAAI,CAAC;IAClC;IAEAnC,KAAK,mCAAmC;QACtCoB,wBAAwB2B,qBAAqB,CAAC;YAC5CrB,UAAU;gBACRC,SAAS1B,GAAGK,EAAE,GAAGgD,qBAAqB,CAAC,IAAIJ,MAAM;YACnD;QACF;QAEA,MAAM,EAACT,KAAK,EAAC,GAAG,MAAM7C,YAAYO,sBAAsB;YAACc;SAAkB;QAE3ElB,OAAO0C,OAAOJ,SAASH,SAAS,CAAC;QACjCnC,OAAO0C,OAAOE,OAAOC,MAAMT,IAAI,CAAC;IAClC;AACF"}
1
+ {"version":3,"sources":["../../../../src/commands/dataset/__tests__/delete.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {input} 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 {DeleteDatasetCommand} from '../delete.js'\n\nconst mockDeleteDataset = vi.hoisted(() => vi.fn())\nconst mockGetProjectById = 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 datasets: {\n delete: mockDeleteDataset,\n } as never,\n projects: {\n getById: mockGetProjectById,\n } as never,\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 input: vi.fn(),\n }\n})\n\nconst TEST_DATASET_NAME = 'test-dataset'\nconst TEST_PROJECT_NAME = 'Test Project'\nconst TEST_PROJECT_ID = 'test-project'\n\nconst defaultMocks = {\n cliConfig: {api: {projectId: TEST_PROJECT_ID}},\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 mockInput = vi.mocked(input)\n\ndescribe('#dataset:delete', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['dataset delete', '--help'])\n expect(stdout).toMatchInlineSnapshot(`\n \"Delete a dataset within your project\n\n USAGE\n $ sanity dataset delete DATASETNAME [--force]\n\n ARGUMENTS\n DATASETNAME Dataset name to delete\n\n FLAGS\n --force Do not prompt for delete confirmation - forcefully delete\n\n DESCRIPTION\n Delete a dataset within your project\n\n EXAMPLES\n Delete a specific dataset\n\n $ sanity dataset delete my-dataset\n\n Delete a specific dataset without confirmation\n\n $ sanity dataset delete my-dataset --force\n\n \"\n `)\n })\n\n test('deletes dataset with --force flag', async () => {\n mockDeleteDataset.mockResolvedValue(undefined)\n\n const {stderr, stdout} = await testCommand(\n DeleteDatasetCommand,\n [TEST_DATASET_NAME, '--force'],\n {\n mocks: defaultMocks,\n },\n )\n expect(stderr).toContain(`--force' used: skipping confirmation, deleting dataset`)\n expect(stdout).toBe('Dataset deleted successfully\\n')\n })\n\n test('deletes dataset with confirmation prompt and validates input', async () => {\n mockInput.mockResolvedValue(TEST_DATASET_NAME)\n mockGetProjectById.mockResolvedValue({\n displayName: TEST_PROJECT_NAME,\n id: TEST_PROJECT_ID,\n } as never)\n mockDeleteDataset.mockResolvedValue(undefined)\n\n const {stdout} = await testCommand(DeleteDatasetCommand, [TEST_DATASET_NAME], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain(\n `Deleting dataset \"${TEST_DATASET_NAME}\" from project \"${TEST_PROJECT_NAME} (${TEST_PROJECT_ID})\"`,\n )\n expect(stdout).toContain('Dataset deleted successfully\\n')\n expect(mockInput).toHaveBeenCalledWith({\n message:\n 'Are you ABSOLUTELY sure you want to delete this dataset?\\n Type the name of the dataset to confirm delete:',\n validate: expect.any(Function),\n })\n })\n\n test('throws error for empty dataset name', async () => {\n const {error: commandError} = await testCommand(DeleteDatasetCommand, ['', '--force'], {\n mocks: defaultMocks,\n })\n expect(commandError?.message).toBe('Dataset name is missing')\n expect(commandError?.oclif?.exit).toBe(1)\n })\n\n test.each([\n {desc: 'no project ID is found', projectId: undefined},\n {desc: 'project ID is empty string', projectId: ''},\n ])('throws error when $desc', async ({projectId}) => {\n const {error} = await testCommand(DeleteDatasetCommand, [TEST_DATASET_NAME, '--force'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {projectId}},\n },\n })\n expect(error?.message).toBe(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test.each([\n {desc: 'when deleting dataset', message: 'Internal Server Error', statusCode: 500},\n {desc: 'with 404 error when deleting dataset', message: 'Dataset not found', statusCode: 404},\n {desc: 'with 403 error when deleting dataset', message: 'Forbidden', statusCode: 403},\n ])('handles API error $desc', async ({message, statusCode}) => {\n const deleteError = new Error(message)\n Object.assign(deleteError, {statusCode})\n mockDeleteDataset.mockRejectedValue(deleteError)\n\n const {error} = await testCommand(DeleteDatasetCommand, [TEST_DATASET_NAME, '--force'], {\n mocks: defaultMocks,\n })\n expect(error?.message).toContain('Dataset deletion failed')\n expect(error?.message).toContain(message)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles network errors when deleting dataset', async () => {\n mockDeleteDataset.mockRejectedValue(new Error('Network error'))\n\n const {error} = await testCommand(DeleteDatasetCommand, [TEST_DATASET_NAME, '--force'], {\n mocks: defaultMocks,\n })\n expect(error?.message).toContain('Dataset deletion failed')\n expect(error?.message).toContain('Network error')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles API client creation errors', async () => {\n mockDeleteDataset.mockRejectedValue(new Error('Failed to create client'))\n\n const {error} = await testCommand(DeleteDatasetCommand, [TEST_DATASET_NAME, '--force'], {\n mocks: defaultMocks,\n })\n expect(error?.message).toContain('Dataset deletion failed')\n expect(error?.message).toContain('Failed to create client')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles user cancellation during confirmation', async () => {\n mockGetProjectById.mockResolvedValue({\n displayName: TEST_PROJECT_NAME,\n id: TEST_PROJECT_ID,\n } as never)\n mockInput.mockRejectedValue(new Error('User cancelled'))\n\n const {error} = await testCommand(DeleteDatasetCommand, [TEST_DATASET_NAME], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toBe('User cancelled')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles project retrieval error', async () => {\n mockGetProjectById.mockRejectedValue(new Error('Project Error'))\n\n const {error} = await testCommand(DeleteDatasetCommand, [TEST_DATASET_NAME], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Project retrieval failed: Project Error')\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","input","testCommand","afterEach","describe","expect","test","vi","NO_PROJECT_ID","DeleteDatasetCommand","mockDeleteDataset","hoisted","fn","mockGetProjectById","mock","actual","importActual","getProjectCliClient","mockResolvedValue","datasets","delete","projects","getById","TEST_DATASET_NAME","TEST_PROJECT_NAME","TEST_PROJECT_ID","defaultMocks","cliConfig","api","projectId","projectRoot","directory","path","type","token","mockInput","mocked","clearAllMocks","stdout","toMatchInlineSnapshot","undefined","stderr","mocks","toContain","toBe","displayName","id","toHaveBeenCalledWith","message","validate","any","Function","error","commandError","oclif","exit","each","desc","statusCode","deleteError","Error","Object","assign","mockRejectedValue"],"mappings":"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"}