@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,5 +1,4 @@
1
1
  import { runCommand } from '@oclif/test';
2
- import { getCliConfig, getProjectCliClient } from '@sanity/cli-core';
3
2
  import { input, select } from '@sanity/cli-core/ux';
4
3
  import { mockApi, testCommand } from '@sanity/cli-test';
5
4
  import nock from 'nock';
@@ -8,59 +7,44 @@ import { BACKUP_API_VERSION } from '../../../actions/backup/constants.js';
8
7
  import { NEW_DATASET_VALUE } from '../../../prompts/promptForDataset.js';
9
8
  import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
10
9
  import { EnableBackupCommand } from '../enable.js';
11
- vi.mock('@sanity/cli-core/ux', async ()=>{
12
- const actual = await vi.importActual('@sanity/cli-core/ux');
10
+ const mockListDatasets = vi.hoisted(()=>vi.fn());
11
+ const mockCreateDataset = vi.hoisted(()=>vi.fn());
12
+ vi.mock('@sanity/cli-core', async (importOriginal)=>{
13
+ const actual = await importOriginal();
13
14
  return {
14
15
  ...actual,
15
- input: vi.fn(),
16
- select: vi.fn()
17
- };
18
- });
19
- vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
20
- findProjectRoot: vi.fn().mockResolvedValue({
21
- directory: '/test/path',
22
- root: '/test/path',
23
- type: 'studio'
24
- })
25
- }));
26
- vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
27
- getCliConfig: vi.fn().mockResolvedValue({
28
- api: {
29
- projectId: 'test-project'
16
+ getProjectCliClient: vi.fn().mockResolvedValue({
17
+ datasets: {
18
+ create: mockCreateDataset,
19
+ list: mockListDatasets
30
20
  }
31
21
  })
32
- }));
33
- vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
34
- getCliToken: vi.fn().mockResolvedValue('test-token')
35
- }));
36
- vi.mock(import('../../../../../cli-core/src/services/apiClient.js'), async (importOriginal)=>{
37
- const actual = await importOriginal();
22
+ };
23
+ });
24
+ vi.mock('@sanity/cli-core/ux', async ()=>{
25
+ const actual = await vi.importActual('@sanity/cli-core/ux');
38
26
  return {
39
27
  ...actual,
40
- getProjectCliClient: vi.fn()
28
+ input: vi.fn(),
29
+ select: vi.fn()
41
30
  };
42
31
  });
43
- const mockGetCliConfig = vi.mocked(getCliConfig);
44
- const mockInput = vi.mocked(input);
45
- const mockSelect = vi.mocked(select);
46
- const mockGetProjectCliClient = vi.mocked(getProjectCliClient);
47
- const setupMocksWithDatasets = (datasets = [
48
- {
49
- name: 'production'
50
- },
51
- {
52
- name: 'staging'
53
- }
54
- ])=>{
55
- mockGetProjectCliClient.mockResolvedValue({
56
- datasets: {
57
- create: vi.fn().mockResolvedValue({
58
- name: 'new-dataset'
59
- }),
60
- list: vi.fn().mockResolvedValue(datasets)
32
+ const testProjectId = 'test-project';
33
+ const defaultMocks = {
34
+ cliConfig: {
35
+ api: {
36
+ projectId: testProjectId
61
37
  }
62
- });
38
+ },
39
+ projectRoot: {
40
+ directory: '/test/path',
41
+ path: '/test/path/sanity.config.ts',
42
+ type: 'studio'
43
+ },
44
+ token: 'test-token'
63
45
  };
46
+ const mockInput = vi.mocked(input);
47
+ const mockSelect = vi.mocked(select);
64
48
  describe('#backup:enable', ()=>{
65
49
  afterEach(()=>{
66
50
  const pending = nock.pendingMocks();
@@ -98,34 +82,29 @@ describe('#backup:enable', ()=>{
98
82
  `);
99
83
  });
100
84
  test('should enable backup for specified dataset', async ()=>{
85
+ mockListDatasets.mockResolvedValue([
86
+ {
87
+ name: 'production'
88
+ }
89
+ ]);
101
90
  mockApi({
102
91
  apiVersion: BACKUP_API_VERSION,
103
92
  method: 'put',
104
- uri: '/projects/test-project/datasets/production/settings/backups'
93
+ uri: `/projects/${testProjectId}/datasets/production/settings/backups`
105
94
  }).reply(200, {
106
95
  enabled: true
107
96
  });
108
- setupMocksWithDatasets([
109
- {
110
- name: 'production'
111
- }
112
- ]);
113
97
  const { stdout } = await testCommand(EnableBackupCommand, [
114
98
  'production'
115
- ]);
99
+ ], {
100
+ mocks: defaultMocks
101
+ });
116
102
  expect(stdout).toContain('Enabled backups for dataset production');
117
103
  expect(stdout).toContain('it may take up to 24 hours');
118
104
  expect(stdout).toContain('Retention policies may apply');
119
105
  });
120
106
  test('should prompt for dataset when none specified', async ()=>{
121
- mockApi({
122
- apiVersion: BACKUP_API_VERSION,
123
- method: 'put',
124
- uri: '/projects/test-project/datasets/production/settings/backups'
125
- }).reply(200, {
126
- enabled: true
127
- });
128
- setupMocksWithDatasets([
107
+ mockListDatasets.mockResolvedValue([
129
108
  {
130
109
  name: 'production'
131
110
  },
@@ -133,8 +112,17 @@ describe('#backup:enable', ()=>{
133
112
  name: 'staging'
134
113
  }
135
114
  ]);
115
+ mockApi({
116
+ apiVersion: BACKUP_API_VERSION,
117
+ method: 'put',
118
+ uri: `/projects/${testProjectId}/datasets/production/settings/backups`
119
+ }).reply(200, {
120
+ enabled: true
121
+ });
136
122
  mockSelect.mockResolvedValue('production');
137
- const { stdout } = await testCommand(EnableBackupCommand, []);
123
+ const { stdout } = await testCommand(EnableBackupCommand, [], {
124
+ mocks: defaultMocks
125
+ });
138
126
  expect(stdout).toContain('Enabled backups for dataset production');
139
127
  expect(mockSelect).toHaveBeenCalledWith({
140
128
  choices: [
@@ -155,80 +143,77 @@ describe('#backup:enable', ()=>{
155
143
  });
156
144
  });
157
145
  test('should fail when no project ID is available', async ()=>{
158
- mockGetCliConfig.mockResolvedValueOnce({
159
- api: undefined
160
- });
161
146
  const { error } = await testCommand(EnableBackupCommand, [
162
147
  'production'
163
- ]);
148
+ ], {
149
+ mocks: {
150
+ ...defaultMocks,
151
+ cliConfig: {
152
+ api: undefined
153
+ }
154
+ }
155
+ });
164
156
  expect(error?.message).toContain(NO_PROJECT_ID);
165
157
  expect(error?.oclif?.exit).toBe(1);
166
158
  });
167
159
  test('should handle API errors gracefully', async ()=>{
168
- mockApi({
169
- apiVersion: BACKUP_API_VERSION,
170
- method: 'put',
171
- uri: '/projects/test-project/datasets/production/settings/backups'
172
- }).reply(500, 'API request failed');
173
- setupMocksWithDatasets([
160
+ mockListDatasets.mockResolvedValue([
174
161
  {
175
162
  name: 'production'
176
163
  }
177
164
  ]);
165
+ mockApi({
166
+ apiVersion: BACKUP_API_VERSION,
167
+ method: 'put',
168
+ uri: `/projects/${testProjectId}/datasets/production/settings/backups`
169
+ }).reply(500, 'API request failed');
178
170
  const { error } = await testCommand(EnableBackupCommand, [
179
171
  'production'
180
- ]);
172
+ ], {
173
+ mocks: defaultMocks
174
+ });
181
175
  expect(error?.message).toContain('Enabling dataset backup failed:');
182
176
  expect(error?.message).toContain('API request failed');
183
177
  expect(error?.oclif?.exit).toBe(1);
184
178
  });
185
179
  test('should fail when no datasets are available', async ()=>{
186
- setupMocksWithDatasets([]);
187
- const { error } = await testCommand(EnableBackupCommand, []);
180
+ mockListDatasets.mockResolvedValue([]);
181
+ const { error } = await testCommand(EnableBackupCommand, [], {
182
+ mocks: defaultMocks
183
+ });
188
184
  expect(error?.message).toContain('No datasets found in this project');
189
185
  expect(error?.oclif?.exit).toBe(1);
190
186
  });
191
187
  test('should handle dataset list fetch errors', async ()=>{
192
- mockGetProjectCliClient.mockResolvedValue({
193
- datasets: {
194
- list: vi.fn().mockRejectedValue(new Error('Failed to fetch datasets'))
195
- }
188
+ mockListDatasets.mockRejectedValue(new Error('Failed to fetch datasets'));
189
+ const { error } = await testCommand(EnableBackupCommand, [], {
190
+ mocks: defaultMocks
196
191
  });
197
- const { error } = await testCommand(EnableBackupCommand, []);
198
192
  expect(error?.message).toContain('Failed to list datasets: Failed to fetch datasets');
199
193
  expect(error?.oclif?.exit).toBe(1);
200
194
  });
201
195
  test('should create new dataset and enable backup when "new" is selected', async ()=>{
196
+ mockListDatasets.mockResolvedValue([
197
+ {
198
+ name: 'production'
199
+ }
200
+ ]);
201
+ mockCreateDataset.mockResolvedValue({
202
+ name: 'new-dataset'
203
+ });
202
204
  mockApi({
203
205
  apiVersion: BACKUP_API_VERSION,
204
206
  method: 'put',
205
- uri: '/projects/test-project/datasets/new-dataset/settings/backups'
207
+ uri: `/projects/${testProjectId}/datasets/new-dataset/settings/backups`
206
208
  }).reply(200, {
207
209
  enabled: true
208
210
  });
209
- const mockCreate = vi.fn().mockResolvedValue({
210
- name: 'new-dataset'
211
- });
212
- // First call is from listDatasets for listing datasets
213
- mockGetProjectCliClient.mockResolvedValueOnce({
214
- datasets: {
215
- list: vi.fn().mockResolvedValue([
216
- {
217
- name: 'production'
218
- }
219
- ])
220
- }
221
- });
222
- // Second call is for creating the new dataset
223
- mockGetProjectCliClient.mockResolvedValueOnce({
224
- datasets: {
225
- create: mockCreate
226
- }
227
- });
228
211
  mockSelect.mockResolvedValue(NEW_DATASET_VALUE);
229
212
  mockInput.mockResolvedValue('new-dataset');
230
- const { stdout } = await testCommand(EnableBackupCommand, []);
231
- expect(mockCreate).toHaveBeenCalledWith('new-dataset');
213
+ const { stdout } = await testCommand(EnableBackupCommand, [], {
214
+ mocks: defaultMocks
215
+ });
216
+ expect(mockCreateDataset).toHaveBeenCalledWith('new-dataset');
232
217
  expect(stdout).toContain('Enabled backups for dataset new-dataset');
233
218
  expect(mockInput).toHaveBeenCalledWith({
234
219
  default: undefined,
@@ -237,59 +222,41 @@ describe('#backup:enable', ()=>{
237
222
  });
238
223
  });
239
224
  test('should handle dataset creation failure', async ()=>{
240
- const mockCreate = vi.fn().mockRejectedValue(new Error('Dataset creation failed'));
241
- // First call is from listDatasets for listing datasets
242
- mockGetProjectCliClient.mockResolvedValueOnce({
243
- datasets: {
244
- list: vi.fn().mockResolvedValue([
245
- {
246
- name: 'production'
247
- }
248
- ])
249
- }
250
- });
251
- // Second call is for creating the new dataset (which fails)
252
- mockGetProjectCliClient.mockResolvedValueOnce({
253
- datasets: {
254
- create: mockCreate
225
+ mockListDatasets.mockResolvedValue([
226
+ {
227
+ name: 'production'
255
228
  }
256
- });
229
+ ]);
230
+ mockCreateDataset.mockRejectedValue(new Error('Dataset creation failed'));
257
231
  mockSelect.mockResolvedValue(NEW_DATASET_VALUE);
258
232
  mockInput.mockResolvedValue('invalid-dataset');
259
- const { error } = await testCommand(EnableBackupCommand, []);
233
+ const { error } = await testCommand(EnableBackupCommand, [], {
234
+ mocks: defaultMocks
235
+ });
260
236
  expect(error?.message).toContain('Failed to create dataset invalid-dataset: Dataset creation failed');
261
237
  expect(error?.oclif?.exit).toBe(1);
262
238
  });
263
239
  test('should prompt for dataset name with validation when creating new dataset', async ()=>{
240
+ mockListDatasets.mockResolvedValue([
241
+ {
242
+ name: 'staging'
243
+ }
244
+ ]);
245
+ mockCreateDataset.mockResolvedValue({
246
+ name: 'valid-dataset'
247
+ });
264
248
  mockApi({
265
249
  apiVersion: BACKUP_API_VERSION,
266
250
  method: 'put',
267
- uri: '/projects/test-project/datasets/valid-dataset/settings/backups'
251
+ uri: `/projects/${testProjectId}/datasets/valid-dataset/settings/backups`
268
252
  }).reply(200, {
269
253
  enabled: true
270
254
  });
271
- const mockCreate = vi.fn().mockResolvedValue({
272
- name: 'valid-dataset'
273
- });
274
- // First call is from listDatasets for listing datasets
275
- mockGetProjectCliClient.mockResolvedValueOnce({
276
- datasets: {
277
- list: vi.fn().mockResolvedValue([
278
- {
279
- name: 'staging'
280
- }
281
- ])
282
- }
283
- });
284
- // Second call is for creating the new dataset
285
- mockGetProjectCliClient.mockResolvedValueOnce({
286
- datasets: {
287
- create: mockCreate
288
- }
289
- });
290
255
  mockSelect.mockResolvedValue(NEW_DATASET_VALUE);
291
256
  mockInput.mockResolvedValue('valid-dataset');
292
- const { stdout } = await testCommand(EnableBackupCommand, []);
257
+ const { stdout } = await testCommand(EnableBackupCommand, [], {
258
+ mocks: defaultMocks
259
+ });
293
260
  expect(stdout).toContain('Enabled backups for dataset valid-dataset');
294
261
  expect(mockInput).toHaveBeenCalledWith({
295
262
  default: 'production',
@@ -298,7 +265,7 @@ describe('#backup:enable', ()=>{
298
265
  });
299
266
  });
300
267
  test('should fail when specified dataset does not exist', async ()=>{
301
- setupMocksWithDatasets([
268
+ mockListDatasets.mockResolvedValue([
302
269
  {
303
270
  name: 'production'
304
271
  },
@@ -308,7 +275,9 @@ describe('#backup:enable', ()=>{
308
275
  ]);
309
276
  const { error } = await testCommand(EnableBackupCommand, [
310
277
  'nonexistent'
311
- ]);
278
+ ], {
279
+ mocks: defaultMocks
280
+ });
312
281
  expect(error?.message).toContain("Dataset 'nonexistent' not found in this project. Available datasets: production, staging");
313
282
  expect(error?.oclif?.exit).toBe(1);
314
283
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/commands/backup/__tests__/enable.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {input, select} from '@sanity/cli-core/ux'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {BACKUP_API_VERSION} from '../../../actions/backup/constants.js'\nimport {NEW_DATASET_VALUE} from '../../../prompts/promptForDataset.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {EnableBackupCommand} from '../enable.js'\n\nvi.mock('@sanity/cli-core/ux', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core/ux')>('@sanity/cli-core/ux')\n return {\n ...actual,\n input: vi.fn(),\n select: vi.fn(),\n }\n})\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(import('../../../../../cli-core/src/services/apiClient.js'), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n getProjectCliClient: vi.fn(),\n }\n})\n\nconst mockGetCliConfig = vi.mocked(getCliConfig)\nconst mockInput = vi.mocked(input)\nconst mockSelect = vi.mocked(select)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\n\nconst setupMocksWithDatasets = (datasets = [{name: 'production'}, {name: 'staging'}]) => {\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n create: vi.fn().mockResolvedValue({name: 'new-dataset'}),\n list: vi.fn().mockResolvedValue(datasets),\n },\n } as never)\n}\n\ndescribe('#backup:enable', () => {\n afterEach(() => {\n const pending = nock.pendingMocks()\n nock.cleanAll()\n vi.clearAllMocks()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['backup enable', '--help'])\n expect(stdout).toMatchInlineSnapshot(`\n \"Enable backup for a dataset.\n\n USAGE\n $ sanity backup enable [DATASET]\n\n ARGUMENTS\n [DATASET] Dataset name to enable backup for\n\n DESCRIPTION\n Enable backup for a dataset.\n\n EXAMPLES\n Interactively enable backup for a dataset\n\n $ sanity backup enable\n\n Enable backup for the production dataset\n\n $ sanity backup enable production\n\n \"\n `)\n })\n\n test('should enable backup for specified dataset', async () => {\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'put',\n uri: '/projects/test-project/datasets/production/settings/backups',\n }).reply(200, {enabled: true})\n\n setupMocksWithDatasets([{name: 'production'}])\n\n const {stdout} = await testCommand(EnableBackupCommand, ['production'])\n\n expect(stdout).toContain('Enabled backups for dataset production')\n expect(stdout).toContain('it may take up to 24 hours')\n expect(stdout).toContain('Retention policies may apply')\n })\n\n test('should prompt for dataset when none specified', async () => {\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'put',\n uri: '/projects/test-project/datasets/production/settings/backups',\n }).reply(200, {enabled: true})\n\n setupMocksWithDatasets([{name: 'production'}, {name: 'staging'}])\n mockSelect.mockResolvedValue('production')\n\n const {stdout} = await testCommand(EnableBackupCommand, [])\n\n expect(stdout).toContain('Enabled backups for dataset production')\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {name: 'Create new dataset', value: NEW_DATASET_VALUE},\n {name: 'production', value: 'production'},\n {name: 'staging', value: 'staging'},\n ],\n message: 'Select the dataset name:',\n })\n })\n\n test('should fail when no project ID is available', async () => {\n mockGetCliConfig.mockResolvedValueOnce({\n api: undefined,\n })\n\n const {error} = await testCommand(EnableBackupCommand, ['production'])\n\n expect(error?.message).toContain(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle API errors gracefully', async () => {\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'put',\n uri: '/projects/test-project/datasets/production/settings/backups',\n }).reply(500, 'API request failed')\n\n setupMocksWithDatasets([{name: 'production'}])\n\n const {error} = await testCommand(EnableBackupCommand, ['production'])\n\n expect(error?.message).toContain('Enabling dataset backup failed:')\n expect(error?.message).toContain('API request failed')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should fail when no datasets are available', async () => {\n setupMocksWithDatasets([])\n\n const {error} = await testCommand(EnableBackupCommand, [])\n\n expect(error?.message).toContain('No datasets found in this project')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle dataset list fetch errors', async () => {\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n list: vi.fn().mockRejectedValue(new Error('Failed to fetch datasets')),\n },\n } as never)\n\n const {error} = await testCommand(EnableBackupCommand, [])\n\n expect(error?.message).toContain('Failed to list datasets: Failed to fetch datasets')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should create new dataset and enable backup when \"new\" is selected', async () => {\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'put',\n uri: '/projects/test-project/datasets/new-dataset/settings/backups',\n }).reply(200, {enabled: true})\n\n const mockCreate = vi.fn().mockResolvedValue({name: 'new-dataset'})\n\n // First call is from listDatasets for listing datasets\n mockGetProjectCliClient.mockResolvedValueOnce({\n datasets: {\n list: vi.fn().mockResolvedValue([{name: 'production'}]),\n },\n } as never)\n\n // Second call is for creating the new dataset\n mockGetProjectCliClient.mockResolvedValueOnce({\n datasets: {\n create: mockCreate,\n },\n } as never)\n\n mockSelect.mockResolvedValue(NEW_DATASET_VALUE)\n mockInput.mockResolvedValue('new-dataset')\n\n const {stdout} = await testCommand(EnableBackupCommand, [])\n\n expect(mockCreate).toHaveBeenCalledWith('new-dataset')\n expect(stdout).toContain('Enabled backups for dataset new-dataset')\n expect(mockInput).toHaveBeenCalledWith({\n default: undefined,\n message: 'Dataset name:',\n validate: expect.any(Function),\n })\n })\n\n test('should handle dataset creation failure', async () => {\n const mockCreate = vi.fn().mockRejectedValue(new Error('Dataset creation failed'))\n\n // First call is from listDatasets for listing datasets\n mockGetProjectCliClient.mockResolvedValueOnce({\n datasets: {\n list: vi.fn().mockResolvedValue([{name: 'production'}]),\n },\n } as never)\n\n // Second call is for creating the new dataset (which fails)\n mockGetProjectCliClient.mockResolvedValueOnce({\n datasets: {\n create: mockCreate,\n },\n } as never)\n\n mockSelect.mockResolvedValue(NEW_DATASET_VALUE)\n mockInput.mockResolvedValue('invalid-dataset')\n\n const {error} = await testCommand(EnableBackupCommand, [])\n\n expect(error?.message).toContain(\n 'Failed to create dataset invalid-dataset: Dataset creation failed',\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should prompt for dataset name with validation when creating new dataset', async () => {\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'put',\n uri: '/projects/test-project/datasets/valid-dataset/settings/backups',\n }).reply(200, {enabled: true})\n\n const mockCreate = vi.fn().mockResolvedValue({name: 'valid-dataset'})\n\n // First call is from listDatasets for listing datasets\n mockGetProjectCliClient.mockResolvedValueOnce({\n datasets: {\n list: vi.fn().mockResolvedValue([{name: 'staging'}]),\n },\n } as never)\n\n // Second call is for creating the new dataset\n mockGetProjectCliClient.mockResolvedValueOnce({\n datasets: {\n create: mockCreate,\n },\n } as never)\n\n mockSelect.mockResolvedValue(NEW_DATASET_VALUE)\n mockInput.mockResolvedValue('valid-dataset')\n\n const {stdout} = await testCommand(EnableBackupCommand, [])\n\n expect(stdout).toContain('Enabled backups for dataset valid-dataset')\n expect(mockInput).toHaveBeenCalledWith({\n default: 'production',\n message: 'Dataset name:',\n validate: expect.any(Function),\n })\n })\n\n test('should fail when specified dataset does not exist', async () => {\n setupMocksWithDatasets([{name: 'production'}, {name: 'staging'}])\n\n const {error} = await testCommand(EnableBackupCommand, ['nonexistent'])\n\n expect(error?.message).toContain(\n \"Dataset 'nonexistent' not found in this project. Available datasets: production, staging\",\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","getCliConfig","getProjectCliClient","input","select","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","BACKUP_API_VERSION","NEW_DATASET_VALUE","NO_PROJECT_ID","EnableBackupCommand","mock","actual","importActual","fn","findProjectRoot","mockResolvedValue","directory","root","type","api","projectId","getCliToken","importOriginal","mockGetCliConfig","mocked","mockInput","mockSelect","mockGetProjectCliClient","setupMocksWithDatasets","datasets","name","create","list","pending","pendingMocks","cleanAll","clearAllMocks","toEqual","stdout","toMatchInlineSnapshot","apiVersion","method","uri","reply","enabled","toContain","toHaveBeenCalledWith","choices","value","message","mockResolvedValueOnce","undefined","error","oclif","exit","toBe","mockRejectedValue","Error","mockCreate","default","validate","any","Function"],"mappings":"AAAA,SAAQA,UAAU,QAAO,cAAa;AACtC,SAAQC,YAAY,EAAEC,mBAAmB,QAAO,mBAAkB;AAClE,SAAQC,KAAK,EAAEC,MAAM,QAAO,sBAAqB;AACjD,SAAQC,OAAO,EAAEC,WAAW,QAAO,mBAAkB;AACrD,OAAOC,UAAU,OAAM;AACvB,SAAQC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAO,SAAQ;AAE5D,SAAQC,kBAAkB,QAAO,uCAAsC;AACvE,SAAQC,iBAAiB,QAAO,uCAAsC;AACtE,SAAQC,aAAa,QAAO,iCAAgC;AAC5D,SAAQC,mBAAmB,QAAO,eAAc;AAEhDJ,GAAGK,IAAI,CAAC,uBAAuB;IAC7B,MAAMC,SAAS,MAAMN,GAAGO,YAAY,CAAuC;IAC3E,OAAO;QACL,GAAGD,MAAM;QACTf,OAAOS,GAAGQ,EAAE;QACZhB,QAAQQ,GAAGQ,EAAE;IACf;AACF;AAEAR,GAAGK,IAAI,CAAC,yDAAyD,IAAO,CAAA;QACtEI,iBAAiBT,GAAGQ,EAAE,GAAGE,iBAAiB,CAAC;YACzCC,WAAW;YACXC,MAAM;YACNC,MAAM;QACR;IACF,CAAA;AAEAb,GAAGK,IAAI,CAAC,0DAA0D,IAAO,CAAA;QACvEhB,cAAcW,GAAGQ,EAAE,GAAGE,iBAAiB,CAAC;YACtCI,KAAK;gBACHC,WAAW;YACb;QACF;IACF,CAAA;AAEAf,GAAGK,IAAI,CAAC,uDAAuD,IAAO,CAAA;QACpEW,aAAahB,GAAGQ,EAAE,GAAGE,iBAAiB,CAAC;IACzC,CAAA;AAEAV,GAAGK,IAAI,CAAC,MAAM,CAAC,sDAAsD,OAAOY;IAC1E,MAAMX,SAAS,MAAMW;IACrB,OAAO;QACL,GAAGX,MAAM;QACThB,qBAAqBU,GAAGQ,EAAE;IAC5B;AACF;AAEA,MAAMU,mBAAmBlB,GAAGmB,MAAM,CAAC9B;AACnC,MAAM+B,YAAYpB,GAAGmB,MAAM,CAAC5B;AAC5B,MAAM8B,aAAarB,GAAGmB,MAAM,CAAC3B;AAC7B,MAAM8B,0BAA0BtB,GAAGmB,MAAM,CAAC7B;AAE1C,MAAMiC,yBAAyB,CAACC,WAAW;IAAC;QAACC,MAAM;IAAY;IAAG;QAACA,MAAM;IAAS;CAAE;IAClFH,wBAAwBZ,iBAAiB,CAAC;QACxCc,UAAU;YACRE,QAAQ1B,GAAGQ,EAAE,GAAGE,iBAAiB,CAAC;gBAACe,MAAM;YAAa;YACtDE,MAAM3B,GAAGQ,EAAE,GAAGE,iBAAiB,CAACc;QAClC;IACF;AACF;AAEA3B,SAAS,kBAAkB;IACzBD,UAAU;QACR,MAAMgC,UAAUjC,KAAKkC,YAAY;QACjClC,KAAKmC,QAAQ;QACb9B,GAAG+B,aAAa;QAChBjC,OAAO8B,SAAS,iBAAiBI,OAAO,CAAC,EAAE;IAC7C;IAEAjC,KAAK,gBAAgB;QACnB,MAAM,EAACkC,MAAM,EAAC,GAAG,MAAM7C,WAAW;YAAC;YAAiB;SAAS;QAC7DU,OAAOmC,QAAQC,qBAAqB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;IAsBtC,CAAC;IACH;IAEAnC,KAAK,8CAA8C;QACjDN,QAAQ;YACN0C,YAAYlC;YACZmC,QAAQ;YACRC,KAAK;QACP,GAAGC,KAAK,CAAC,KAAK;YAACC,SAAS;QAAI;QAE5BhB,uBAAuB;YAAC;gBAACE,MAAM;YAAY;SAAE;QAE7C,MAAM,EAACQ,MAAM,EAAC,GAAG,MAAMvC,YAAYU,qBAAqB;YAAC;SAAa;QAEtEN,OAAOmC,QAAQO,SAAS,CAAC;QACzB1C,OAAOmC,QAAQO,SAAS,CAAC;QACzB1C,OAAOmC,QAAQO,SAAS,CAAC;IAC3B;IAEAzC,KAAK,iDAAiD;QACpDN,QAAQ;YACN0C,YAAYlC;YACZmC,QAAQ;YACRC,KAAK;QACP,GAAGC,KAAK,CAAC,KAAK;YAACC,SAAS;QAAI;QAE5BhB,uBAAuB;YAAC;gBAACE,MAAM;YAAY;YAAG;gBAACA,MAAM;YAAS;SAAE;QAChEJ,WAAWX,iBAAiB,CAAC;QAE7B,MAAM,EAACuB,MAAM,EAAC,GAAG,MAAMvC,YAAYU,qBAAqB,EAAE;QAE1DN,OAAOmC,QAAQO,SAAS,CAAC;QACzB1C,OAAOuB,YAAYoB,oBAAoB,CAAC;YACtCC,SAAS;gBACP;oBAACjB,MAAM;oBAAsBkB,OAAOzC;gBAAiB;gBACrD;oBAACuB,MAAM;oBAAckB,OAAO;gBAAY;gBACxC;oBAAClB,MAAM;oBAAWkB,OAAO;gBAAS;aACnC;YACDC,SAAS;QACX;IACF;IAEA7C,KAAK,+CAA+C;QAClDmB,iBAAiB2B,qBAAqB,CAAC;YACrC/B,KAAKgC;QACP;QAEA,MAAM,EAACC,KAAK,EAAC,GAAG,MAAMrD,YAAYU,qBAAqB;YAAC;SAAa;QAErEN,OAAOiD,OAAOH,SAASJ,SAAS,CAACrC;QACjCL,OAAOiD,OAAOC,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEAnD,KAAK,uCAAuC;QAC1CN,QAAQ;YACN0C,YAAYlC;YACZmC,QAAQ;YACRC,KAAK;QACP,GAAGC,KAAK,CAAC,KAAK;QAEdf,uBAAuB;YAAC;gBAACE,MAAM;YAAY;SAAE;QAE7C,MAAM,EAACsB,KAAK,EAAC,GAAG,MAAMrD,YAAYU,qBAAqB;YAAC;SAAa;QAErEN,OAAOiD,OAAOH,SAASJ,SAAS,CAAC;QACjC1C,OAAOiD,OAAOH,SAASJ,SAAS,CAAC;QACjC1C,OAAOiD,OAAOC,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEAnD,KAAK,8CAA8C;QACjDwB,uBAAuB,EAAE;QAEzB,MAAM,EAACwB,KAAK,EAAC,GAAG,MAAMrD,YAAYU,qBAAqB,EAAE;QAEzDN,OAAOiD,OAAOH,SAASJ,SAAS,CAAC;QACjC1C,OAAOiD,OAAOC,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEAnD,KAAK,2CAA2C;QAC9CuB,wBAAwBZ,iBAAiB,CAAC;YACxCc,UAAU;gBACRG,MAAM3B,GAAGQ,EAAE,GAAG2C,iBAAiB,CAAC,IAAIC,MAAM;YAC5C;QACF;QAEA,MAAM,EAACL,KAAK,EAAC,GAAG,MAAMrD,YAAYU,qBAAqB,EAAE;QAEzDN,OAAOiD,OAAOH,SAASJ,SAAS,CAAC;QACjC1C,OAAOiD,OAAOC,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEAnD,KAAK,sEAAsE;QACzEN,QAAQ;YACN0C,YAAYlC;YACZmC,QAAQ;YACRC,KAAK;QACP,GAAGC,KAAK,CAAC,KAAK;YAACC,SAAS;QAAI;QAE5B,MAAMc,aAAarD,GAAGQ,EAAE,GAAGE,iBAAiB,CAAC;YAACe,MAAM;QAAa;QAEjE,uDAAuD;QACvDH,wBAAwBuB,qBAAqB,CAAC;YAC5CrB,UAAU;gBACRG,MAAM3B,GAAGQ,EAAE,GAAGE,iBAAiB,CAAC;oBAAC;wBAACe,MAAM;oBAAY;iBAAE;YACxD;QACF;QAEA,8CAA8C;QAC9CH,wBAAwBuB,qBAAqB,CAAC;YAC5CrB,UAAU;gBACRE,QAAQ2B;YACV;QACF;QAEAhC,WAAWX,iBAAiB,CAACR;QAC7BkB,UAAUV,iBAAiB,CAAC;QAE5B,MAAM,EAACuB,MAAM,EAAC,GAAG,MAAMvC,YAAYU,qBAAqB,EAAE;QAE1DN,OAAOuD,YAAYZ,oBAAoB,CAAC;QACxC3C,OAAOmC,QAAQO,SAAS,CAAC;QACzB1C,OAAOsB,WAAWqB,oBAAoB,CAAC;YACrCa,SAASR;YACTF,SAAS;YACTW,UAAUzD,OAAO0D,GAAG,CAACC;QACvB;IACF;IAEA1D,KAAK,0CAA0C;QAC7C,MAAMsD,aAAarD,GAAGQ,EAAE,GAAG2C,iBAAiB,CAAC,IAAIC,MAAM;QAEvD,uDAAuD;QACvD9B,wBAAwBuB,qBAAqB,CAAC;YAC5CrB,UAAU;gBACRG,MAAM3B,GAAGQ,EAAE,GAAGE,iBAAiB,CAAC;oBAAC;wBAACe,MAAM;oBAAY;iBAAE;YACxD;QACF;QAEA,4DAA4D;QAC5DH,wBAAwBuB,qBAAqB,CAAC;YAC5CrB,UAAU;gBACRE,QAAQ2B;YACV;QACF;QAEAhC,WAAWX,iBAAiB,CAACR;QAC7BkB,UAAUV,iBAAiB,CAAC;QAE5B,MAAM,EAACqC,KAAK,EAAC,GAAG,MAAMrD,YAAYU,qBAAqB,EAAE;QAEzDN,OAAOiD,OAAOH,SAASJ,SAAS,CAC9B;QAEF1C,OAAOiD,OAAOC,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEAnD,KAAK,4EAA4E;QAC/EN,QAAQ;YACN0C,YAAYlC;YACZmC,QAAQ;YACRC,KAAK;QACP,GAAGC,KAAK,CAAC,KAAK;YAACC,SAAS;QAAI;QAE5B,MAAMc,aAAarD,GAAGQ,EAAE,GAAGE,iBAAiB,CAAC;YAACe,MAAM;QAAe;QAEnE,uDAAuD;QACvDH,wBAAwBuB,qBAAqB,CAAC;YAC5CrB,UAAU;gBACRG,MAAM3B,GAAGQ,EAAE,GAAGE,iBAAiB,CAAC;oBAAC;wBAACe,MAAM;oBAAS;iBAAE;YACrD;QACF;QAEA,8CAA8C;QAC9CH,wBAAwBuB,qBAAqB,CAAC;YAC5CrB,UAAU;gBACRE,QAAQ2B;YACV;QACF;QAEAhC,WAAWX,iBAAiB,CAACR;QAC7BkB,UAAUV,iBAAiB,CAAC;QAE5B,MAAM,EAACuB,MAAM,EAAC,GAAG,MAAMvC,YAAYU,qBAAqB,EAAE;QAE1DN,OAAOmC,QAAQO,SAAS,CAAC;QACzB1C,OAAOsB,WAAWqB,oBAAoB,CAAC;YACrCa,SAAS;YACTV,SAAS;YACTW,UAAUzD,OAAO0D,GAAG,CAACC;QACvB;IACF;IAEA1D,KAAK,qDAAqD;QACxDwB,uBAAuB;YAAC;gBAACE,MAAM;YAAY;YAAG;gBAACA,MAAM;YAAS;SAAE;QAEhE,MAAM,EAACsB,KAAK,EAAC,GAAG,MAAMrD,YAAYU,qBAAqB;YAAC;SAAc;QAEtEN,OAAOiD,OAAOH,SAASJ,SAAS,CAC9B;QAEF1C,OAAOiD,OAAOC,OAAOC,MAAMC,IAAI,CAAC;IAClC;AACF"}
1
+ {"version":3,"sources":["../../../../src/commands/backup/__tests__/enable.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {input, select} from '@sanity/cli-core/ux'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {BACKUP_API_VERSION} from '../../../actions/backup/constants.js'\nimport {NEW_DATASET_VALUE} from '../../../prompts/promptForDataset.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {EnableBackupCommand} from '../enable.js'\n\nconst mockListDatasets = vi.hoisted(() => vi.fn())\nconst mockCreateDataset = vi.hoisted(() => vi.fn())\n\nvi.mock('@sanity/cli-core', async (importOriginal) => {\n const actual = await importOriginal<typeof import('@sanity/cli-core')>()\n return {\n ...actual,\n getProjectCliClient: vi.fn().mockResolvedValue({\n datasets: {\n create: mockCreateDataset,\n list: mockListDatasets,\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 select: vi.fn(),\n }\n})\n\nconst testProjectId = 'test-project'\n\nconst defaultMocks = {\n cliConfig: {api: {projectId: testProjectId}},\n projectRoot: {\n directory: '/test/path',\n path: '/test/path/sanity.config.ts',\n type: 'studio' as const,\n },\n token: 'test-token',\n}\n\nconst mockInput = vi.mocked(input)\nconst mockSelect = vi.mocked(select)\n\ndescribe('#backup:enable', () => {\n afterEach(() => {\n const pending = nock.pendingMocks()\n nock.cleanAll()\n vi.clearAllMocks()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['backup enable', '--help'])\n expect(stdout).toMatchInlineSnapshot(`\n \"Enable backup for a dataset.\n\n USAGE\n $ sanity backup enable [DATASET]\n\n ARGUMENTS\n [DATASET] Dataset name to enable backup for\n\n DESCRIPTION\n Enable backup for a dataset.\n\n EXAMPLES\n Interactively enable backup for a dataset\n\n $ sanity backup enable\n\n Enable backup for the production dataset\n\n $ sanity backup enable production\n\n \"\n `)\n })\n\n test('should enable backup for specified dataset', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}])\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'put',\n uri: `/projects/${testProjectId}/datasets/production/settings/backups`,\n }).reply(200, {enabled: true})\n\n const {stdout} = await testCommand(EnableBackupCommand, ['production'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Enabled backups for dataset production')\n expect(stdout).toContain('it may take up to 24 hours')\n expect(stdout).toContain('Retention policies may apply')\n })\n\n test('should prompt for dataset when none specified', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}, {name: 'staging'}])\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'put',\n uri: `/projects/${testProjectId}/datasets/production/settings/backups`,\n }).reply(200, {enabled: true})\n\n mockSelect.mockResolvedValue('production')\n\n const {stdout} = await testCommand(EnableBackupCommand, [], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Enabled backups for dataset production')\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {name: 'Create new dataset', value: NEW_DATASET_VALUE},\n {name: 'production', value: 'production'},\n {name: 'staging', value: 'staging'},\n ],\n message: 'Select the dataset name:',\n })\n })\n\n test('should fail when no project ID is available', async () => {\n const {error} = await testCommand(EnableBackupCommand, ['production'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: undefined},\n },\n })\n\n expect(error?.message).toContain(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle API errors gracefully', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}])\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'put',\n uri: `/projects/${testProjectId}/datasets/production/settings/backups`,\n }).reply(500, 'API request failed')\n\n const {error} = await testCommand(EnableBackupCommand, ['production'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Enabling dataset backup failed:')\n expect(error?.message).toContain('API request failed')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should fail when no datasets are available', async () => {\n mockListDatasets.mockResolvedValue([])\n\n const {error} = await testCommand(EnableBackupCommand, [], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('No datasets found in this project')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle dataset list fetch errors', async () => {\n mockListDatasets.mockRejectedValue(new Error('Failed to fetch datasets'))\n\n const {error} = await testCommand(EnableBackupCommand, [], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Failed to list datasets: Failed to fetch datasets')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should create new dataset and enable backup when \"new\" is selected', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}])\n mockCreateDataset.mockResolvedValue({name: 'new-dataset'})\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'put',\n uri: `/projects/${testProjectId}/datasets/new-dataset/settings/backups`,\n }).reply(200, {enabled: true})\n\n mockSelect.mockResolvedValue(NEW_DATASET_VALUE)\n mockInput.mockResolvedValue('new-dataset')\n\n const {stdout} = await testCommand(EnableBackupCommand, [], {\n mocks: defaultMocks,\n })\n\n expect(mockCreateDataset).toHaveBeenCalledWith('new-dataset')\n expect(stdout).toContain('Enabled backups for dataset new-dataset')\n expect(mockInput).toHaveBeenCalledWith({\n default: undefined,\n message: 'Dataset name:',\n validate: expect.any(Function),\n })\n })\n\n test('should handle dataset creation failure', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}])\n mockCreateDataset.mockRejectedValue(new Error('Dataset creation failed'))\n\n mockSelect.mockResolvedValue(NEW_DATASET_VALUE)\n mockInput.mockResolvedValue('invalid-dataset')\n\n const {error} = await testCommand(EnableBackupCommand, [], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain(\n 'Failed to create dataset invalid-dataset: Dataset creation failed',\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should prompt for dataset name with validation when creating new dataset', async () => {\n mockListDatasets.mockResolvedValue([{name: 'staging'}])\n mockCreateDataset.mockResolvedValue({name: 'valid-dataset'})\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'put',\n uri: `/projects/${testProjectId}/datasets/valid-dataset/settings/backups`,\n }).reply(200, {enabled: true})\n\n mockSelect.mockResolvedValue(NEW_DATASET_VALUE)\n mockInput.mockResolvedValue('valid-dataset')\n\n const {stdout} = await testCommand(EnableBackupCommand, [], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Enabled backups for dataset valid-dataset')\n expect(mockInput).toHaveBeenCalledWith({\n default: 'production',\n message: 'Dataset name:',\n validate: expect.any(Function),\n })\n })\n\n test('should fail when specified dataset does not exist', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}, {name: 'staging'}])\n\n const {error} = await testCommand(EnableBackupCommand, ['nonexistent'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain(\n \"Dataset 'nonexistent' not found in this project. Available datasets: production, staging\",\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","input","select","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","BACKUP_API_VERSION","NEW_DATASET_VALUE","NO_PROJECT_ID","EnableBackupCommand","mockListDatasets","hoisted","fn","mockCreateDataset","mock","importOriginal","actual","getProjectCliClient","mockResolvedValue","datasets","create","list","importActual","testProjectId","defaultMocks","cliConfig","api","projectId","projectRoot","directory","path","type","token","mockInput","mocked","mockSelect","pending","pendingMocks","cleanAll","clearAllMocks","toEqual","stdout","toMatchInlineSnapshot","name","apiVersion","method","uri","reply","enabled","mocks","toContain","toHaveBeenCalledWith","choices","value","message","error","undefined","oclif","exit","toBe","mockRejectedValue","Error","default","validate","any","Function"],"mappings":"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"}