@sanity/cli 6.0.0-alpha.3 → 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 (376) hide show
  1. package/dist/actions/auth/login/{index.js → login.js} +1 -1
  2. package/dist/actions/auth/login/{index.js.map → login.js.map} +1 -1
  3. package/dist/actions/dev/startStudioDevServer.js +3 -8
  4. package/dist/actions/dev/startStudioDevServer.js.map +1 -1
  5. package/dist/actions/dev/types.d.ts +1 -3
  6. package/dist/actions/dev/types.js.map +1 -1
  7. package/dist/actions/documents/validate.d.ts +0 -2
  8. package/dist/actions/documents/validate.js +21 -1
  9. package/dist/actions/documents/validate.js.map +1 -1
  10. package/dist/actions/exec/execScript.js +1 -1
  11. package/dist/actions/exec/execScript.js.map +1 -1
  12. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +1 -1
  13. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +1 -1
  14. package/dist/actions/graphql/getGraphQLAPIs.js +1 -1
  15. package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
  16. package/dist/actions/manifest/extractManifest.js +1 -4
  17. package/dist/actions/manifest/extractManifest.js.map +1 -1
  18. package/dist/actions/organizations/getOrganizationChoices.d.ts +6 -0
  19. package/dist/actions/organizations/getOrganizationChoices.js +23 -0
  20. package/dist/actions/organizations/getOrganizationChoices.js.map +1 -0
  21. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.d.ts +2 -0
  22. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js +9 -0
  23. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js.map +1 -0
  24. package/dist/actions/organizations/hasProjectAttachGrant.d.ts +1 -0
  25. package/dist/actions/organizations/hasProjectAttachGrant.js +24 -0
  26. package/dist/actions/organizations/hasProjectAttachGrant.js.map +1 -0
  27. package/dist/actions/schema/deleteSchemaAction.d.ts +13 -5
  28. package/dist/actions/schema/deleteSchemaAction.js +12 -17
  29. package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
  30. package/dist/actions/schema/deploySchemas.d.ts +15 -0
  31. package/dist/actions/schema/deploySchemas.js +98 -0
  32. package/dist/actions/schema/deploySchemas.js.map +1 -0
  33. package/dist/actions/schema/listSchemas.d.ts +12 -0
  34. package/dist/actions/schema/listSchemas.js +119 -0
  35. package/dist/actions/schema/listSchemas.js.map +1 -0
  36. package/dist/actions/schema/schemaStoreTypes.d.ts +0 -11
  37. package/dist/actions/schema/schemaStoreTypes.js.map +1 -1
  38. package/dist/actions/schema/utils/debug.d.ts +2 -0
  39. package/dist/actions/schema/utils/debug.js +5 -0
  40. package/dist/actions/schema/utils/debug.js.map +1 -0
  41. package/dist/actions/schema/utils/manifestExtractor.d.ts +3 -8
  42. package/dist/actions/schema/utils/manifestExtractor.js +12 -17
  43. package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
  44. package/dist/actions/schema/utils/manifestReader.d.ts +2 -9
  45. package/dist/actions/schema/utils/manifestReader.js +6 -12
  46. package/dist/actions/schema/utils/manifestReader.js.map +1 -1
  47. package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -1
  48. package/dist/actions/schema/utils/schemaStoreOutStrings.js +1 -1
  49. package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -1
  50. package/dist/actions/schema/utils/schemaStoreValidation.d.ts +10 -62
  51. package/dist/actions/schema/utils/schemaStoreValidation.js +40 -127
  52. package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
  53. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +14 -0
  54. package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
  55. package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
  56. package/dist/actions/users/getMembersForProject.d.ts +1 -3
  57. package/dist/actions/users/getMembersForProject.js +6 -17
  58. package/dist/actions/users/getMembersForProject.js.map +1 -1
  59. package/dist/actions/users/types.d.ts +0 -11
  60. package/dist/actions/users/types.js.map +1 -1
  61. package/dist/commands/__tests__/debug.test.js +113 -220
  62. package/dist/commands/__tests__/debug.test.js.map +1 -1
  63. package/dist/commands/__tests__/deploy.test.js +325 -293
  64. package/dist/commands/__tests__/deploy.test.js.map +1 -1
  65. package/dist/commands/__tests__/dev.test.js +62 -19
  66. package/dist/commands/__tests__/dev.test.js.map +1 -1
  67. package/dist/commands/__tests__/init/init.authentication.test.js +73 -0
  68. package/dist/commands/__tests__/init/init.authentication.test.js.map +1 -0
  69. package/dist/commands/__tests__/init/init.create-new-project.test.js +195 -0
  70. package/dist/commands/__tests__/init/init.create-new-project.test.js.map +1 -0
  71. package/dist/commands/__tests__/init/init.plan.test.js +279 -0
  72. package/dist/commands/__tests__/init/init.plan.test.js.map +1 -0
  73. package/dist/commands/__tests__/init/init.setup.test.js +335 -0
  74. package/dist/commands/__tests__/init/init.setup.test.js.map +1 -0
  75. package/dist/commands/__tests__/install.test.js +46 -22
  76. package/dist/commands/__tests__/install.test.js.map +1 -1
  77. package/dist/commands/__tests__/logout.test.js +8 -5
  78. package/dist/commands/__tests__/logout.test.js.map +1 -1
  79. package/dist/commands/__tests__/manage.test.js +29 -24
  80. package/dist/commands/__tests__/manage.test.js.map +1 -1
  81. package/dist/commands/__tests__/migration.test.js +119 -0
  82. package/dist/commands/__tests__/migration.test.js.map +1 -0
  83. package/dist/commands/__tests__/versions.test.js +22 -14
  84. package/dist/commands/__tests__/versions.test.js.map +1 -1
  85. package/dist/commands/backup/__tests__/disable.test.js +72 -75
  86. package/dist/commands/backup/__tests__/disable.test.js.map +1 -1
  87. package/dist/commands/backup/__tests__/download.test.js +169 -80
  88. package/dist/commands/backup/__tests__/download.test.js.map +1 -1
  89. package/dist/commands/backup/__tests__/enable.test.js +109 -140
  90. package/dist/commands/backup/__tests__/enable.test.js.map +1 -1
  91. package/dist/commands/backup/__tests__/list.test.js +84 -75
  92. package/dist/commands/backup/__tests__/list.test.js.map +1 -1
  93. package/dist/commands/backup/disable.js +5 -11
  94. package/dist/commands/backup/disable.js.map +1 -1
  95. package/dist/commands/backup/enable.js +5 -11
  96. package/dist/commands/backup/enable.js.map +1 -1
  97. package/dist/commands/backup/list.js +7 -8
  98. package/dist/commands/backup/list.js.map +1 -1
  99. package/dist/commands/cors/__tests__/add.test.js +68 -38
  100. package/dist/commands/cors/__tests__/add.test.js.map +1 -1
  101. package/dist/commands/cors/__tests__/delete.test.js +52 -37
  102. package/dist/commands/cors/__tests__/delete.test.js.map +1 -1
  103. package/dist/commands/cors/__tests__/list.test.js +80 -57
  104. package/dist/commands/cors/__tests__/list.test.js.map +1 -1
  105. package/dist/commands/cors/add.js +5 -13
  106. package/dist/commands/cors/add.js.map +1 -1
  107. package/dist/commands/cors/delete.js +7 -15
  108. package/dist/commands/cors/delete.js.map +1 -1
  109. package/dist/commands/cors/list.js +2 -10
  110. package/dist/commands/cors/list.js.map +1 -1
  111. package/dist/commands/dataset/__tests__/copy.test.js +197 -89
  112. package/dist/commands/dataset/__tests__/copy.test.js.map +1 -1
  113. package/dist/commands/dataset/__tests__/create.test.js +147 -117
  114. package/dist/commands/dataset/__tests__/create.test.js.map +1 -1
  115. package/dist/commands/dataset/__tests__/delete.test.js +75 -68
  116. package/dist/commands/dataset/__tests__/delete.test.js.map +1 -1
  117. package/dist/commands/dataset/__tests__/export.test.js +123 -83
  118. package/dist/commands/dataset/__tests__/export.test.js.map +1 -1
  119. package/dist/commands/dataset/__tests__/import.test.js +2 -2
  120. package/dist/commands/dataset/__tests__/import.test.js.map +1 -1
  121. package/dist/commands/dataset/__tests__/list.test.js +107 -65
  122. package/dist/commands/dataset/__tests__/list.test.js.map +1 -1
  123. package/dist/commands/dataset/alias/__tests__/create.test.js +114 -74
  124. package/dist/commands/dataset/alias/__tests__/create.test.js.map +1 -1
  125. package/dist/commands/dataset/alias/__tests__/delete.test.js +40 -29
  126. package/dist/commands/dataset/alias/__tests__/delete.test.js.map +1 -1
  127. package/dist/commands/dataset/alias/__tests__/link.test.js +114 -74
  128. package/dist/commands/dataset/alias/__tests__/link.test.js.map +1 -1
  129. package/dist/commands/dataset/alias/__tests__/unlink.test.js +44 -29
  130. package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +1 -1
  131. package/dist/commands/dataset/export.js +4 -4
  132. package/dist/commands/dataset/export.js.map +1 -1
  133. package/dist/commands/dataset/visibility/__tests__/get.test.js +48 -67
  134. package/dist/commands/dataset/visibility/__tests__/get.test.js.map +1 -1
  135. package/dist/commands/dataset/visibility/__tests__/set.test.js +76 -123
  136. package/dist/commands/dataset/visibility/__tests__/set.test.js.map +1 -1
  137. package/dist/commands/dev.js +0 -1
  138. package/dist/commands/dev.js.map +1 -1
  139. package/dist/commands/docs/__tests__/search.test.js +8 -7
  140. package/dist/commands/docs/__tests__/search.test.js.map +1 -1
  141. package/dist/commands/documents/__tests__/create.test.js +328 -265
  142. package/dist/commands/documents/__tests__/create.test.js.map +1 -1
  143. package/dist/commands/documents/__tests__/delete.test.js +119 -87
  144. package/dist/commands/documents/__tests__/delete.test.js.map +1 -1
  145. package/dist/commands/documents/__tests__/get.test.js +68 -95
  146. package/dist/commands/documents/__tests__/get.test.js.map +1 -1
  147. package/dist/commands/documents/__tests__/query.test.js +87 -192
  148. package/dist/commands/documents/__tests__/query.test.js.map +1 -1
  149. package/dist/commands/documents/__tests__/validate.test.js +52 -29
  150. package/dist/commands/documents/__tests__/validate.test.js.map +1 -1
  151. package/dist/commands/documents/create.d.ts +1 -0
  152. package/dist/commands/documents/create.js +10 -9
  153. package/dist/commands/documents/create.js.map +1 -1
  154. package/dist/commands/documents/delete.js +2 -3
  155. package/dist/commands/documents/delete.js.map +1 -1
  156. package/dist/commands/documents/get.js +2 -3
  157. package/dist/commands/documents/get.js.map +1 -1
  158. package/dist/commands/documents/query.js +2 -3
  159. package/dist/commands/documents/query.js.map +1 -1
  160. package/dist/commands/documents/validate.js +0 -20
  161. package/dist/commands/documents/validate.js.map +1 -1
  162. package/dist/commands/graphql/__tests__/list.test.js +57 -45
  163. package/dist/commands/graphql/__tests__/list.test.js.map +1 -1
  164. package/dist/commands/graphql/__tests__/undeploy.test.js +85 -59
  165. package/dist/commands/graphql/__tests__/undeploy.test.js.map +1 -1
  166. package/dist/commands/graphql/list.js +2 -2
  167. package/dist/commands/graphql/list.js.map +1 -1
  168. package/dist/commands/graphql/undeploy.js +4 -9
  169. package/dist/commands/graphql/undeploy.js.map +1 -1
  170. package/dist/commands/hook/__tests__/attempt.test.js +48 -33
  171. package/dist/commands/hook/__tests__/attempt.test.js.map +1 -1
  172. package/dist/commands/hook/__tests__/create.test.js +49 -51
  173. package/dist/commands/hook/__tests__/create.test.js.map +1 -1
  174. package/dist/commands/hook/__tests__/delete.test.js +43 -30
  175. package/dist/commands/hook/__tests__/delete.test.js.map +1 -1
  176. package/dist/commands/hook/__tests__/list.test.js +38 -31
  177. package/dist/commands/hook/__tests__/list.test.js.map +1 -1
  178. package/dist/commands/hook/__tests__/logs.test.js +68 -40
  179. package/dist/commands/hook/__tests__/logs.test.js.map +1 -1
  180. package/dist/commands/hook/create.js +2 -6
  181. package/dist/commands/hook/create.js.map +1 -1
  182. package/dist/commands/hook/delete.js +5 -17
  183. package/dist/commands/hook/delete.js.map +1 -1
  184. package/dist/commands/hook/list.js +2 -8
  185. package/dist/commands/hook/list.js.map +1 -1
  186. package/dist/commands/init.d.ts +4 -0
  187. package/dist/commands/init.js +151 -18
  188. package/dist/commands/init.js.map +1 -1
  189. package/dist/commands/login.js +1 -1
  190. package/dist/commands/login.js.map +1 -1
  191. package/dist/commands/manifest/__tests__/extract.test.js +22 -13
  192. package/dist/commands/manifest/__tests__/extract.test.js.map +1 -1
  193. package/dist/commands/media/__tests__/create-aspect.test.js +41 -28
  194. package/dist/commands/media/__tests__/create-aspect.test.js.map +1 -1
  195. package/dist/commands/media/__tests__/delete-aspect.test.js +44 -35
  196. package/dist/commands/media/__tests__/delete-aspect.test.js.map +1 -1
  197. package/dist/commands/media/__tests__/deploy-aspect.test.js +67 -80
  198. package/dist/commands/media/__tests__/deploy-aspect.test.js.map +1 -1
  199. package/dist/commands/media/__tests__/export.test.js +365 -66
  200. package/dist/commands/media/__tests__/export.test.js.map +1 -1
  201. package/dist/commands/media/__tests__/import.test.js +171 -105
  202. package/dist/commands/media/__tests__/import.test.js.map +1 -1
  203. package/dist/commands/media/export.js +2 -2
  204. package/dist/commands/media/export.js.map +1 -1
  205. package/dist/commands/media/import.js +2 -2
  206. package/dist/commands/media/import.js.map +1 -1
  207. package/dist/commands/projects/__tests__/list.test.js +5 -4
  208. package/dist/commands/projects/__tests__/list.test.js.map +1 -1
  209. package/dist/commands/projects/list.js +2 -6
  210. package/dist/commands/projects/list.js.map +1 -1
  211. package/dist/commands/schema/__tests__/delete.test.js +396 -151
  212. package/dist/commands/schema/__tests__/delete.test.js.map +1 -1
  213. package/dist/commands/schema/__tests__/deploy.test.js +348 -0
  214. package/dist/commands/schema/__tests__/deploy.test.js.map +1 -0
  215. package/dist/commands/schema/__tests__/extract.test.js +19 -11
  216. package/dist/commands/schema/__tests__/extract.test.js.map +1 -1
  217. package/dist/commands/schema/__tests__/list.test.js +399 -0
  218. package/dist/commands/schema/__tests__/list.test.js.map +1 -0
  219. package/dist/commands/schema/__tests__/validate.test.js +27 -10
  220. package/dist/commands/schema/__tests__/validate.test.js.map +1 -1
  221. package/dist/commands/schema/delete.d.ts +1 -1
  222. package/dist/commands/schema/delete.js +20 -23
  223. package/dist/commands/schema/delete.js.map +1 -1
  224. package/dist/commands/schema/deploy.d.ts +16 -0
  225. package/dist/commands/schema/deploy.js +98 -0
  226. package/dist/commands/schema/deploy.js.map +1 -0
  227. package/dist/commands/schema/list.d.ts +15 -0
  228. package/dist/commands/schema/list.js +104 -0
  229. package/dist/commands/schema/list.js.map +1 -0
  230. package/dist/commands/telemetry/__tests__/disable.test.js +7 -5
  231. package/dist/commands/telemetry/__tests__/disable.test.js.map +1 -1
  232. package/dist/commands/telemetry/__tests__/enable.test.js +7 -5
  233. package/dist/commands/telemetry/__tests__/enable.test.js.map +1 -1
  234. package/dist/commands/telemetry/__tests__/status.test.js +7 -5
  235. package/dist/commands/telemetry/__tests__/status.test.js.map +1 -1
  236. package/dist/commands/tokens/__tests__/add.test.js +55 -40
  237. package/dist/commands/tokens/__tests__/add.test.js.map +1 -1
  238. package/dist/commands/tokens/__tests__/delete.test.js +72 -42
  239. package/dist/commands/tokens/__tests__/delete.test.js.map +1 -1
  240. package/dist/commands/tokens/__tests__/list.test.js +87 -60
  241. package/dist/commands/tokens/__tests__/list.test.js.map +1 -1
  242. package/dist/commands/tokens/add.js +3 -5
  243. package/dist/commands/tokens/add.js.map +1 -1
  244. package/dist/commands/users/__tests__/invite.test.js +100 -79
  245. package/dist/commands/users/__tests__/invite.test.js.map +1 -1
  246. package/dist/commands/users/__tests__/list.test.js +186 -180
  247. package/dist/commands/users/__tests__/list.test.js.map +1 -1
  248. package/dist/commands/users/invite.js +6 -17
  249. package/dist/commands/users/invite.js.map +1 -1
  250. package/dist/commands/users/list.js +4 -7
  251. package/dist/commands/users/list.js.map +1 -1
  252. package/dist/config/createCliConfig.d.ts +4 -4
  253. package/dist/services/backup.d.ts +8 -0
  254. package/dist/services/backup.js +19 -0
  255. package/dist/services/backup.js.map +1 -1
  256. package/dist/services/cors.d.ts +23 -0
  257. package/dist/services/cors.js +38 -0
  258. package/dist/services/cors.js.map +1 -0
  259. package/dist/services/graphql.d.ts +7 -0
  260. package/dist/services/graphql.js +11 -0
  261. package/dist/services/graphql.js.map +1 -1
  262. package/dist/services/hooks.d.ts +2 -0
  263. package/dist/services/hooks.js +19 -0
  264. package/dist/services/hooks.js.map +1 -1
  265. package/dist/services/organizations.d.ts +40 -0
  266. package/dist/services/organizations.js +41 -0
  267. package/dist/services/organizations.js.map +1 -0
  268. package/dist/services/projects.d.ts +31 -0
  269. package/dist/services/projects.js +71 -1
  270. package/dist/services/projects.js.map +1 -1
  271. package/dist/services/schemas.d.ts +4 -0
  272. package/dist/services/schemas.js +40 -0
  273. package/dist/services/schemas.js.map +1 -0
  274. package/dist/services/user.d.ts +10 -0
  275. package/dist/services/user.js +24 -0
  276. package/dist/services/user.js.map +1 -0
  277. package/dist/util/__tests__/getCliVersion.test.js +2 -2
  278. package/dist/util/__tests__/getCliVersion.test.js.map +1 -1
  279. package/dist/util/errorMessages.d.ts +1 -0
  280. package/dist/util/errorMessages.js +1 -0
  281. package/dist/util/errorMessages.js.map +1 -1
  282. package/dist/util/getCliVersion.js +1 -1
  283. package/dist/util/getCliVersion.js.map +1 -1
  284. package/dist/util/readPackageJson.d.ts +1 -15
  285. package/dist/util/readPackageJson.js +1 -1
  286. package/dist/util/readPackageJson.js.map +1 -1
  287. package/dist/util/uniqBy.d.ts +1 -0
  288. package/dist/util/uniqBy.js +14 -0
  289. package/dist/util/uniqBy.js.map +1 -0
  290. package/oclif.config.js +6 -1
  291. package/oclif.manifest.json +152 -158
  292. package/package.json +30 -31
  293. package/dist/actions/cors/constants.d.ts +0 -1
  294. package/dist/actions/cors/constants.js +0 -3
  295. package/dist/actions/cors/constants.js.map +0 -1
  296. package/dist/actions/cors/types.d.ts +0 -9
  297. package/dist/actions/cors/types.js +0 -3
  298. package/dist/actions/cors/types.js.map +0 -1
  299. package/dist/actions/migration/getMigrationRootDirectory.d.ts +0 -2
  300. package/dist/actions/migration/getMigrationRootDirectory.js +0 -14
  301. package/dist/actions/migration/getMigrationRootDirectory.js.map +0 -1
  302. package/dist/actions/migration/resolveMigrations.d.ts +0 -19
  303. package/dist/actions/migration/resolveMigrations.js +0 -43
  304. package/dist/actions/migration/resolveMigrations.js.map +0 -1
  305. package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js +0 -65
  306. package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js.map +0 -1
  307. package/dist/actions/migration/templates/__tests__/minimalSimple.test.js +0 -145
  308. package/dist/actions/migration/templates/__tests__/minimalSimple.test.js.map +0 -1
  309. package/dist/actions/migration/templates/__tests__/renameField.test.js +0 -63
  310. package/dist/actions/migration/templates/__tests__/renameField.test.js.map +0 -1
  311. package/dist/actions/migration/templates/__tests__/renameType.test.js +0 -61
  312. package/dist/actions/migration/templates/__tests__/renameType.test.js.map +0 -1
  313. package/dist/actions/migration/templates/__tests__/stringToPTE.test.js +0 -87
  314. package/dist/actions/migration/templates/__tests__/stringToPTE.test.js.map +0 -1
  315. package/dist/actions/migration/templates/index.d.ts +0 -5
  316. package/dist/actions/migration/templates/index.js +0 -7
  317. package/dist/actions/migration/templates/index.js.map +0 -1
  318. package/dist/actions/migration/templates/minimalAdvanced.d.ts +0 -4
  319. package/dist/actions/migration/templates/minimalAdvanced.js +0 -21
  320. package/dist/actions/migration/templates/minimalAdvanced.js.map +0 -1
  321. package/dist/actions/migration/templates/minimalSimple.d.ts +0 -4
  322. package/dist/actions/migration/templates/minimalSimple.js +0 -61
  323. package/dist/actions/migration/templates/minimalSimple.js.map +0 -1
  324. package/dist/actions/migration/templates/renameField.d.ts +0 -4
  325. package/dist/actions/migration/templates/renameField.js +0 -20
  326. package/dist/actions/migration/templates/renameField.js.map +0 -1
  327. package/dist/actions/migration/templates/renameType.d.ts +0 -4
  328. package/dist/actions/migration/templates/renameType.js +0 -19
  329. package/dist/actions/migration/templates/renameType.js.map +0 -1
  330. package/dist/actions/migration/templates/stringToPTE.d.ts +0 -4
  331. package/dist/actions/migration/templates/stringToPTE.js +0 -32
  332. package/dist/actions/migration/templates/stringToPTE.js.map +0 -1
  333. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js +0 -294
  334. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js.map +0 -1
  335. package/dist/actions/schema/schemaStoreConstants.d.ts +0 -1
  336. package/dist/actions/schema/schemaStoreConstants.js +0 -4
  337. package/dist/actions/schema/schemaStoreConstants.js.map +0 -1
  338. package/dist/actions/schema/utils/schemaActionHelpers.d.ts +0 -1
  339. package/dist/actions/schema/utils/schemaActionHelpers.js +0 -5
  340. package/dist/actions/schema/utils/schemaActionHelpers.js.map +0 -1
  341. package/dist/actions/schema/utils/schemaApiClient.d.ts +0 -6
  342. package/dist/actions/schema/utils/schemaApiClient.js +0 -17
  343. package/dist/actions/schema/utils/schemaApiClient.js.map +0 -1
  344. package/dist/actions/users/apiVersion.d.ts +0 -6
  345. package/dist/actions/users/apiVersion.js +0 -7
  346. package/dist/actions/users/apiVersion.js.map +0 -1
  347. package/dist/commands/__tests__/init.test.js +0 -411
  348. package/dist/commands/__tests__/init.test.js.map +0 -1
  349. package/dist/commands/migration/__tests__/create.test.js +0 -296
  350. package/dist/commands/migration/__tests__/create.test.js.map +0 -1
  351. package/dist/commands/migration/__tests__/list.test.js +0 -166
  352. package/dist/commands/migration/__tests__/list.test.js.map +0 -1
  353. package/dist/commands/migration/__tests__/run.test.js +0 -481
  354. package/dist/commands/migration/__tests__/run.test.js.map +0 -1
  355. package/dist/commands/migration/create.d.ts +0 -17
  356. package/dist/commands/migration/create.js +0 -143
  357. package/dist/commands/migration/create.js.map +0 -1
  358. package/dist/commands/migration/list.d.ts +0 -9
  359. package/dist/commands/migration/list.js +0 -61
  360. package/dist/commands/migration/list.js.map +0 -1
  361. package/dist/commands/migration/run.d.ts +0 -26
  362. package/dist/commands/migration/run.js +0 -271
  363. package/dist/commands/migration/run.js.map +0 -1
  364. package/dist/util/migration/constants.d.ts +0 -3
  365. package/dist/util/migration/constants.js +0 -10
  366. package/dist/util/migration/constants.js.map +0 -1
  367. package/dist/util/migration/ensureApiVersionFormat.d.ts +0 -9
  368. package/dist/util/migration/ensureApiVersionFormat.js +0 -16
  369. package/dist/util/migration/ensureApiVersionFormat.js.map +0 -1
  370. package/dist/util/migration/prettyMutationFormatter.d.ts +0 -8
  371. package/dist/util/migration/prettyMutationFormatter.js +0 -141
  372. package/dist/util/migration/prettyMutationFormatter.js.map +0 -1
  373. package/dist/utils/migration/resolveMigrationScript.d.ts +0 -44
  374. package/dist/utils/migration/resolveMigrationScript.js +0 -74
  375. package/dist/utils/migration/resolveMigrationScript.js.map +0 -1
  376. /package/dist/actions/auth/login/{index.d.ts → login.d.ts} +0 -0
@@ -1,30 +1,34 @@
1
1
  import { runCommand } from '@oclif/test';
2
- import { getCliConfig, getProjectCliClient } from '@sanity/cli-core';
3
2
  import { chalk } from '@sanity/cli-core/ux';
4
3
  import { testCommand } from '@sanity/cli-test';
5
4
  import { afterEach, describe, expect, test, vi } from 'vitest';
6
5
  import { QueryDocumentCommand } from '../query.js';
7
- // Mock the config functions
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()
17
- }));
18
- vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
19
- getCliToken: vi.fn().mockResolvedValue('test-token')
20
- }));
21
- vi.mock('../../../../../cli-core/src/services/apiClient.js', ()=>({
22
- getProjectCliClient: vi.fn()
23
- }));
24
- const mockGetCliConfig = vi.mocked(getCliConfig);
25
- const mockGetProjectCliClient = vi.mocked(getProjectCliClient);
26
6
  const testProjectId = 'test-project';
27
7
  const testDataset = 'production';
8
+ const defaultMocks = {
9
+ cliConfig: {
10
+ api: {
11
+ dataset: testDataset,
12
+ projectId: testProjectId
13
+ }
14
+ },
15
+ projectRoot: {
16
+ directory: '/test/path',
17
+ path: '/test/path/sanity.config.ts',
18
+ type: 'studio'
19
+ },
20
+ token: 'test-token'
21
+ };
22
+ const mockFetch = vi.hoisted(()=>vi.fn());
23
+ vi.mock('@sanity/cli-core', async ()=>{
24
+ const actual = await vi.importActual('@sanity/cli-core');
25
+ return {
26
+ ...actual,
27
+ getProjectCliClient: vi.fn().mockResolvedValue({
28
+ fetch: mockFetch
29
+ })
30
+ };
31
+ });
28
32
  describe('#documents:query', ()=>{
29
33
  afterEach(()=>{
30
34
  vi.clearAllMocks();
@@ -34,7 +38,7 @@ describe('#documents:query', ()=>{
34
38
  'documents query',
35
39
  '--help'
36
40
  ]);
37
- expect(stdout).toMatchInlineSnapshot(`
41
+ expect(stdout).toMatchInlineSnapshot(String.raw`
38
42
  "Query for documents
39
43
 
40
44
  USAGE
@@ -62,12 +66,12 @@ describe('#documents:query', ()=>{
62
66
 
63
67
  Fetch title of the oldest movie in the dataset named "staging"
64
68
 
65
- $ sanity documents query '*[_type == "movie"]|order(releaseDate \\
69
+ $ sanity documents query '*[_type == "movie"]|order(releaseDate \
66
70
  asc)[0]{title}' --dataset staging
67
71
 
68
72
  Use API version v2021-06-07 and do a query
69
73
 
70
- $ sanity documents query '*[_id == "header"] { "headerText": \\
74
+ $ sanity documents query '*[_id == "header"] { "headerText": \
71
75
  pt::text(body) }' --api-version v2021-06-07
72
76
 
73
77
  "
@@ -86,30 +90,15 @@ describe('#documents:query', ()=>{
86
90
  title: 'Inception'
87
91
  }
88
92
  ];
89
- mockGetCliConfig.mockResolvedValue({
90
- api: {
91
- dataset: testDataset,
92
- projectId: testProjectId
93
- }
94
- });
95
- // Mock the getProjectApiClient to return a mock client with fetch
96
- const mockFetch = vi.fn().mockResolvedValue(mockResults);
97
- mockGetProjectCliClient.mockResolvedValue({
98
- fetch: mockFetch
99
- });
93
+ mockFetch.mockResolvedValue(mockResults);
100
94
  const { stdout } = await testCommand(QueryDocumentCommand, [
101
95
  '*[_type == "movie"]'
102
- ]);
96
+ ], {
97
+ mocks: defaultMocks
98
+ });
103
99
  expect(stdout).toContain('"_id": "movie1"');
104
100
  expect(stdout).toContain('"title": "The Matrix"');
105
101
  expect(mockFetch).toHaveBeenCalledWith('*[_type == "movie"]');
106
- // Verify that getProjectCliClient was called with requireUser: true by default
107
- expect(mockGetProjectCliClient).toHaveBeenCalledWith({
108
- apiVersion: expect.any(String),
109
- dataset: testDataset,
110
- projectId: testProjectId,
111
- requireUser: true
112
- });
113
102
  });
114
103
  test('executes query with pretty flag for colorized output', async ()=>{
115
104
  const mockResults = [
@@ -118,16 +107,7 @@ describe('#documents:query', ()=>{
118
107
  title: 'Test Movie'
119
108
  }
120
109
  ];
121
- mockGetCliConfig.mockResolvedValue({
122
- api: {
123
- dataset: testDataset,
124
- projectId: testProjectId
125
- }
126
- });
127
- const mockFetch = vi.fn().mockResolvedValue(mockResults);
128
- mockGetProjectCliClient.mockResolvedValue({
129
- fetch: mockFetch
130
- });
110
+ mockFetch.mockResolvedValue(mockResults);
131
111
  const originalChalkLevel = chalk.level;
132
112
  // Force colorization
133
113
  chalk.level = 3;
@@ -137,7 +117,8 @@ describe('#documents:query', ()=>{
137
117
  ], {
138
118
  capture: {
139
119
  stripAnsi: false
140
- }
120
+ },
121
+ mocks: defaultMocks
141
122
  });
142
123
  // Reset chalk level
143
124
  chalk.level = originalChalkLevel;
@@ -155,29 +136,16 @@ describe('#documents:query', ()=>{
155
136
  }
156
137
  ];
157
138
  const overrideDataset = 'staging';
158
- mockGetCliConfig.mockResolvedValue({
159
- api: {
160
- dataset: testDataset,
161
- projectId: testProjectId
162
- }
163
- });
164
- const mockFetch = vi.fn().mockResolvedValue(mockResults);
165
- mockGetProjectCliClient.mockResolvedValue({
166
- fetch: mockFetch
167
- });
139
+ mockFetch.mockResolvedValue(mockResults);
168
140
  const { stdout } = await testCommand(QueryDocumentCommand, [
169
141
  '*[_type == "movie"]',
170
142
  '--dataset',
171
143
  overrideDataset
172
- ]);
144
+ ], {
145
+ mocks: defaultMocks
146
+ });
173
147
  expect(stdout).toContain('"_id": "test"');
174
148
  expect(mockFetch).toHaveBeenCalledWith('*[_type == "movie"]');
175
- expect(mockGetProjectCliClient).toHaveBeenCalledWith({
176
- apiVersion: expect.any(String),
177
- dataset: overrideDataset,
178
- projectId: testProjectId,
179
- requireUser: true
180
- });
181
149
  });
182
150
  test('uses project flag to override config', async ()=>{
183
151
  const mockResults = [
@@ -186,30 +154,16 @@ describe('#documents:query', ()=>{
186
154
  title: 'Test'
187
155
  }
188
156
  ];
189
- const overrideProject = 'other-project';
190
- mockGetCliConfig.mockResolvedValue({
191
- api: {
192
- dataset: testDataset,
193
- projectId: testProjectId
194
- }
195
- });
196
- const mockFetch = vi.fn().mockResolvedValue(mockResults);
197
- mockGetProjectCliClient.mockResolvedValue({
198
- fetch: mockFetch
199
- });
157
+ mockFetch.mockResolvedValue(mockResults);
200
158
  const { stdout } = await testCommand(QueryDocumentCommand, [
201
159
  '*[_type == "movie"]',
202
160
  '--project',
203
- overrideProject
204
- ]);
161
+ 'other-project'
162
+ ], {
163
+ mocks: defaultMocks
164
+ });
205
165
  expect(stdout).toContain('"_id": "test"');
206
166
  expect(mockFetch).toHaveBeenCalledWith('*[_type == "movie"]');
207
- expect(mockGetProjectCliClient).toHaveBeenCalledWith({
208
- apiVersion: expect.any(String),
209
- dataset: testDataset,
210
- projectId: overrideProject,
211
- requireUser: true
212
- });
213
167
  });
214
168
  test('uses anonymous flag to skip authentication', async ()=>{
215
169
  const mockResults = [
@@ -218,29 +172,15 @@ describe('#documents:query', ()=>{
218
172
  title: 'Test'
219
173
  }
220
174
  ];
221
- mockGetCliConfig.mockResolvedValue({
222
- api: {
223
- dataset: testDataset,
224
- projectId: testProjectId
225
- }
226
- });
227
- const mockFetch = vi.fn().mockResolvedValue(mockResults);
228
- mockGetProjectCliClient.mockResolvedValue({
229
- fetch: mockFetch
230
- });
175
+ mockFetch.mockResolvedValue(mockResults);
231
176
  const { stdout } = await testCommand(QueryDocumentCommand, [
232
177
  '*[_type == "movie"]',
233
178
  '--anonymous'
234
- ]);
179
+ ], {
180
+ mocks: defaultMocks
181
+ });
235
182
  expect(stdout).toContain('"_id": "test"');
236
183
  expect(mockFetch).toHaveBeenCalledWith('*[_type == "movie"]');
237
- // Verify that getProjectCliClient was called with requireUser: false
238
- expect(mockGetProjectCliClient).toHaveBeenCalledWith({
239
- apiVersion: expect.any(String),
240
- dataset: testDataset,
241
- projectId: testProjectId,
242
- requireUser: false
243
- });
244
184
  });
245
185
  test('uses custom API version', async ()=>{
246
186
  const mockResults = [
@@ -250,29 +190,16 @@ describe('#documents:query', ()=>{
250
190
  }
251
191
  ];
252
192
  const customApiVersion = 'v2021-06-07';
253
- mockGetCliConfig.mockResolvedValue({
254
- api: {
255
- dataset: testDataset,
256
- projectId: testProjectId
257
- }
258
- });
259
- const mockFetch = vi.fn().mockResolvedValue(mockResults);
260
- mockGetProjectCliClient.mockResolvedValue({
261
- fetch: mockFetch
262
- });
193
+ mockFetch.mockResolvedValue(mockResults);
263
194
  const { stdout } = await testCommand(QueryDocumentCommand, [
264
195
  '*[_type == "movie"]',
265
196
  '--api-version',
266
197
  customApiVersion
267
- ]);
198
+ ], {
199
+ mocks: defaultMocks
200
+ });
268
201
  expect(stdout).toContain('"_id": "test"');
269
202
  expect(mockFetch).toHaveBeenCalledWith('*[_type == "movie"]');
270
- expect(mockGetProjectCliClient).toHaveBeenCalledWith({
271
- apiVersion: customApiVersion,
272
- dataset: testDataset,
273
- projectId: testProjectId,
274
- requireUser: true
275
- });
276
203
  });
277
204
  test('shows warning and uses default API version when not specified', async ()=>{
278
205
  const mockResults = [
@@ -281,87 +208,68 @@ describe('#documents:query', ()=>{
281
208
  title: 'Test'
282
209
  }
283
210
  ];
284
- mockGetCliConfig.mockResolvedValue({
285
- api: {
286
- dataset: testDataset,
287
- projectId: testProjectId
288
- }
289
- });
290
- const mockFetch = vi.fn().mockResolvedValue(mockResults);
291
- mockGetProjectCliClient.mockResolvedValue({
292
- fetch: mockFetch
293
- });
211
+ mockFetch.mockResolvedValue(mockResults);
294
212
  const { stderr, stdout } = await testCommand(QueryDocumentCommand, [
295
213
  '*[_type == "movie"]'
296
- ]);
214
+ ], {
215
+ mocks: defaultMocks
216
+ });
297
217
  expect(stderr).toContain('--api-version not specified, using `2025-08-15`');
298
218
  expect(stdout).toContain('"_id": "test"');
299
- expect(mockGetProjectCliClient).toHaveBeenCalledWith({
300
- apiVersion: '2025-08-15',
301
- dataset: testDataset,
302
- projectId: testProjectId,
303
- requireUser: true
304
- });
305
219
  });
306
220
  test('fails when no project ID is configured or provided', async ()=>{
307
- mockGetCliConfig.mockResolvedValue({
308
- api: {
309
- dataset: testDataset
310
- }
311
- });
312
221
  const { error } = await testCommand(QueryDocumentCommand, [
313
222
  '*[_type == "movie"]'
314
- ]);
223
+ ], {
224
+ mocks: {
225
+ ...defaultMocks,
226
+ cliConfig: {
227
+ api: {
228
+ dataset: testDataset
229
+ }
230
+ }
231
+ }
232
+ });
315
233
  expect(error).toBeInstanceOf(Error);
316
234
  expect(error?.message).toContain('sanity.cli.ts does not contain a project identifier');
317
235
  expect(error?.oclif?.exit).toBe(1);
318
236
  });
319
237
  test('fails when no dataset is configured or provided', async ()=>{
320
- mockGetCliConfig.mockResolvedValue({
321
- api: {
322
- projectId: testProjectId
323
- }
324
- });
325
238
  const { error } = await testCommand(QueryDocumentCommand, [
326
239
  '*[_type == "movie"]'
327
- ]);
240
+ ], {
241
+ mocks: {
242
+ ...defaultMocks,
243
+ cliConfig: {
244
+ api: {
245
+ projectId: testProjectId
246
+ }
247
+ }
248
+ }
249
+ });
328
250
  expect(error).toBeInstanceOf(Error);
329
251
  expect(error?.message).toContain('No dataset specified');
330
252
  expect(error?.oclif?.exit).toBe(1);
331
253
  });
332
254
  test('fails when query returns null/undefined', async ()=>{
333
- mockGetCliConfig.mockResolvedValue({
334
- api: {
335
- dataset: testDataset,
336
- projectId: testProjectId
337
- }
338
- });
339
- const mockFetch = vi.fn().mockResolvedValue(null);
340
- mockGetProjectCliClient.mockResolvedValue({
341
- fetch: mockFetch
342
- });
255
+ mockFetch.mockResolvedValue(null);
343
256
  const { error } = await testCommand(QueryDocumentCommand, [
344
257
  '*[_type == "nonexistent"]'
345
- ]);
258
+ ], {
259
+ mocks: defaultMocks
260
+ });
346
261
  expect(error).toBeInstanceOf(Error);
347
262
  expect(error?.message).toContain('Query returned no results');
348
263
  expect(error?.oclif?.exit).toBe(1);
349
264
  });
350
265
  test('handles query execution errors', async ()=>{
351
266
  const queryError = new Error('Invalid query syntax');
352
- mockGetCliConfig.mockResolvedValue({
353
- api: {
354
- dataset: testDataset,
355
- projectId: testProjectId
356
- }
357
- });
358
- const mockFetch = vi.fn().mockRejectedValue(queryError);
359
- mockGetProjectCliClient.mockResolvedValue({
360
- fetch: mockFetch
361
- });
267
+ mockFetch.mockRejectedValue(queryError);
362
268
  const { error } = await testCommand(QueryDocumentCommand, [
363
269
  'invalid query'
364
- ]);
270
+ ], {
271
+ mocks: defaultMocks
272
+ });
365
273
  expect(error).toBeInstanceOf(Error);
366
274
  expect(error?.message).toContain('Invalid GROQ query syntax: Invalid query syntax');
367
275
  expect(error?.message).toContain('Query: invalid query');
@@ -377,27 +285,14 @@ describe('#documents:query', ()=>{
377
285
  const envApiVersion = 'v2023-01-01';
378
286
  // Mock environment variable
379
287
  vi.stubEnv('SANITY_CLI_QUERY_API_VERSION', envApiVersion);
380
- mockGetCliConfig.mockResolvedValue({
381
- api: {
382
- dataset: testDataset,
383
- projectId: testProjectId
384
- }
385
- });
386
- const mockFetch = vi.fn().mockResolvedValue(mockResults);
387
- mockGetProjectCliClient.mockResolvedValue({
388
- fetch: mockFetch
389
- });
288
+ mockFetch.mockResolvedValue(mockResults);
390
289
  const { stdout } = await testCommand(QueryDocumentCommand, [
391
290
  '*[_type == "movie"]'
392
- ]);
291
+ ], {
292
+ mocks: defaultMocks
293
+ });
393
294
  expect(stdout).toContain('"_id": "test"');
394
295
  expect(mockFetch).toHaveBeenCalledWith('*[_type == "movie"]');
395
- expect(mockGetProjectCliClient).toHaveBeenCalledWith({
396
- apiVersion: envApiVersion,
397
- dataset: testDataset,
398
- projectId: testProjectId,
399
- requireUser: true
400
- });
401
296
  vi.unstubAllEnvs();
402
297
  });
403
298
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/commands/documents/__tests__/query.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {QueryDocumentCommand} from '../query.js'\n\n// Mock the config functions\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn(),\n}))\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\nvi.mock('../../../../../cli-core/src/services/apiClient.js', () => ({\n getProjectCliClient: vi.fn(),\n}))\n\nconst mockGetCliConfig = vi.mocked(getCliConfig)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\nconst testProjectId = 'test-project'\nconst testDataset = 'production'\n\ndescribe('#documents:query', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['documents query', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Query for documents\n\n USAGE\n $ sanity documents query QUERY [--anonymous] [--api-version <value>] [-d\n <value>] [--pretty] [-p <value>]\n\n ARGUMENTS\n QUERY GROQ query to run against the dataset\n\n FLAGS\n -d, --dataset=<value> Dataset to query (overrides config)\n -p, --project=<value> Project ID to query (overrides config)\n --anonymous Send the query without any authorization token\n --api-version=<value> [env: SANITY_CLI_QUERY_API_VERSION] API version to\n use (defaults to 2025-08-15)\n --pretty Colorize JSON output\n\n DESCRIPTION\n Query for documents\n\n EXAMPLES\n Fetch 5 documents of type \"movie\"\n\n $ sanity documents query '*[_type == \"movie\"][0..4]'\n\n Fetch title of the oldest movie in the dataset named \"staging\"\n\n $ sanity documents query '*[_type == \"movie\"]|order(releaseDate \\\\\n asc)[0]{title}' --dataset staging\n\n Use API version v2021-06-07 and do a query\n\n $ sanity documents query '*[_id == \"header\"] { \"headerText\": \\\\\n pt::text(body) }' --api-version v2021-06-07\n\n \"\n `)\n })\n\n test('executes query successfully with basic options', async () => {\n const mockResults = [\n {\n _id: 'movie1',\n _type: 'movie',\n title: 'The Matrix',\n },\n {\n _id: 'movie2',\n _type: 'movie',\n title: 'Inception',\n },\n ]\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n // Mock the getProjectApiClient to return a mock client with fetch\n const mockFetch = vi.fn().mockResolvedValue(mockResults)\n mockGetProjectCliClient.mockResolvedValue({\n fetch: mockFetch,\n } as never)\n\n const {stdout} = await testCommand(QueryDocumentCommand, ['*[_type == \"movie\"]'])\n\n expect(stdout).toContain('\"_id\": \"movie1\"')\n expect(stdout).toContain('\"title\": \"The Matrix\"')\n expect(mockFetch).toHaveBeenCalledWith('*[_type == \"movie\"]')\n\n // Verify that getProjectCliClient was called with requireUser: true by default\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: expect.any(String),\n dataset: testDataset,\n projectId: testProjectId,\n requireUser: true,\n })\n })\n\n test('executes query with pretty flag for colorized output', async () => {\n const mockResults = [{_id: 'test', title: 'Test Movie'}]\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockFetch = vi.fn().mockResolvedValue(mockResults)\n mockGetProjectCliClient.mockResolvedValue({\n fetch: mockFetch,\n } as never)\n\n const originalChalkLevel = chalk.level\n // Force colorization\n chalk.level = 3\n\n const {stdout} = await testCommand(QueryDocumentCommand, ['*[_type == \"movie\"]', '--pretty'], {\n capture: {\n stripAnsi: false,\n },\n })\n\n // Reset chalk level\n chalk.level = originalChalkLevel\n\n expect(mockFetch).toHaveBeenCalledWith('*[_type == \"movie\"]')\n expect(stdout).toContain('\"_id\"')\n expect(stdout).toContain('test')\n // eslint-disable-next-line no-control-regex\n expect(stdout).toMatch(/\\u001B\\[\\d+m/)\n })\n\n test('uses dataset flag to override config', async () => {\n const mockResults = [{_id: 'test', title: 'Test'}]\n const overrideDataset = 'staging'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockFetch = vi.fn().mockResolvedValue(mockResults)\n mockGetProjectCliClient.mockResolvedValue({\n fetch: mockFetch,\n } as never)\n\n const {stdout} = await testCommand(QueryDocumentCommand, [\n '*[_type == \"movie\"]',\n '--dataset',\n overrideDataset,\n ])\n\n expect(stdout).toContain('\"_id\": \"test\"')\n expect(mockFetch).toHaveBeenCalledWith('*[_type == \"movie\"]')\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: expect.any(String),\n dataset: overrideDataset,\n projectId: testProjectId,\n requireUser: true,\n })\n })\n\n test('uses project flag to override config', async () => {\n const mockResults = [{_id: 'test', title: 'Test'}]\n const overrideProject = 'other-project'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockFetch = vi.fn().mockResolvedValue(mockResults)\n mockGetProjectCliClient.mockResolvedValue({\n fetch: mockFetch,\n } as never)\n\n const {stdout} = await testCommand(QueryDocumentCommand, [\n '*[_type == \"movie\"]',\n '--project',\n overrideProject,\n ])\n\n expect(stdout).toContain('\"_id\": \"test\"')\n expect(mockFetch).toHaveBeenCalledWith('*[_type == \"movie\"]')\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: expect.any(String),\n dataset: testDataset,\n projectId: overrideProject,\n requireUser: true,\n })\n })\n\n test('uses anonymous flag to skip authentication', async () => {\n const mockResults = [{_id: 'test', title: 'Test'}]\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockFetch = vi.fn().mockResolvedValue(mockResults)\n mockGetProjectCliClient.mockResolvedValue({\n fetch: mockFetch,\n } as never)\n\n const {stdout} = await testCommand(QueryDocumentCommand, ['*[_type == \"movie\"]', '--anonymous'])\n\n expect(stdout).toContain('\"_id\": \"test\"')\n expect(mockFetch).toHaveBeenCalledWith('*[_type == \"movie\"]')\n\n // Verify that getProjectCliClient was called with requireUser: false\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: expect.any(String),\n dataset: testDataset,\n projectId: testProjectId,\n requireUser: false,\n })\n })\n\n test('uses custom API version', async () => {\n const mockResults = [{_id: 'test', title: 'Test'}]\n const customApiVersion = 'v2021-06-07'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockFetch = vi.fn().mockResolvedValue(mockResults)\n mockGetProjectCliClient.mockResolvedValue({\n fetch: mockFetch,\n } as never)\n\n const {stdout} = await testCommand(QueryDocumentCommand, [\n '*[_type == \"movie\"]',\n '--api-version',\n customApiVersion,\n ])\n\n expect(stdout).toContain('\"_id\": \"test\"')\n expect(mockFetch).toHaveBeenCalledWith('*[_type == \"movie\"]')\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: customApiVersion,\n dataset: testDataset,\n projectId: testProjectId,\n requireUser: true,\n })\n })\n\n test('shows warning and uses default API version when not specified', async () => {\n const mockResults = [{_id: 'test', title: 'Test'}]\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockFetch = vi.fn().mockResolvedValue(mockResults)\n mockGetProjectCliClient.mockResolvedValue({\n fetch: mockFetch,\n } as never)\n\n const {stderr, stdout} = await testCommand(QueryDocumentCommand, ['*[_type == \"movie\"]'])\n\n expect(stderr).toContain('--api-version not specified, using `2025-08-15`')\n expect(stdout).toContain('\"_id\": \"test\"')\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: '2025-08-15',\n dataset: testDataset,\n projectId: testProjectId,\n requireUser: true,\n })\n })\n\n test('fails when no project ID is configured or provided', async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n },\n })\n\n const {error} = await testCommand(QueryDocumentCommand, ['*[_type == \"movie\"]'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('sanity.cli.ts does not contain a project identifier')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails when no dataset is configured or provided', async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: testProjectId,\n },\n })\n\n const {error} = await testCommand(QueryDocumentCommand, ['*[_type == \"movie\"]'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No dataset specified')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails when query returns null/undefined', async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockFetch = vi.fn().mockResolvedValue(null)\n mockGetProjectCliClient.mockResolvedValue({\n fetch: mockFetch,\n } as never)\n\n const {error} = await testCommand(QueryDocumentCommand, ['*[_type == \"nonexistent\"]'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Query returned no results')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles query execution errors', async () => {\n const queryError = new Error('Invalid query syntax')\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockFetch = vi.fn().mockRejectedValue(queryError)\n mockGetProjectCliClient.mockResolvedValue({\n fetch: mockFetch,\n } as never)\n\n const {error} = await testCommand(QueryDocumentCommand, ['invalid query'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Invalid GROQ query syntax: Invalid query syntax')\n expect(error?.message).toContain('Query: invalid query')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('uses environment variable for API version when set', async () => {\n const mockResults = [{_id: 'test', title: 'Test'}]\n const envApiVersion = 'v2023-01-01'\n\n // Mock environment variable\n vi.stubEnv('SANITY_CLI_QUERY_API_VERSION', envApiVersion)\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockFetch = vi.fn().mockResolvedValue(mockResults)\n mockGetProjectCliClient.mockResolvedValue({\n fetch: mockFetch,\n } as never)\n\n const {stdout} = await testCommand(QueryDocumentCommand, ['*[_type == \"movie\"]'])\n\n expect(stdout).toContain('\"_id\": \"test\"')\n expect(mockFetch).toHaveBeenCalledWith('*[_type == \"movie\"]')\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: envApiVersion,\n dataset: testDataset,\n projectId: testProjectId,\n requireUser: true,\n })\n\n vi.unstubAllEnvs()\n })\n})\n"],"names":["runCommand","getCliConfig","getProjectCliClient","chalk","testCommand","afterEach","describe","expect","test","vi","QueryDocumentCommand","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","getCliToken","mockGetCliConfig","mocked","mockGetProjectCliClient","testProjectId","testDataset","clearAllMocks","stdout","toMatchInlineSnapshot","mockResults","_id","_type","title","api","dataset","projectId","mockFetch","fetch","toContain","toHaveBeenCalledWith","apiVersion","any","String","requireUser","originalChalkLevel","level","capture","stripAnsi","toMatch","overrideDataset","overrideProject","customApiVersion","stderr","error","toBeInstanceOf","Error","message","oclif","exit","toBe","queryError","mockRejectedValue","envApiVersion","stubEnv","unstubAllEnvs"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/commands/documents/__tests__/query.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {chalk} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {QueryDocumentCommand} from '../query.js'\n\nconst testProjectId = 'test-project'\nconst testDataset = 'production'\n\nconst defaultMocks = {\n cliConfig: {api: {dataset: testDataset, projectId: testProjectId}},\n projectRoot: {\n directory: '/test/path',\n path: '/test/path/sanity.config.ts',\n type: 'studio' as const,\n },\n token: 'test-token',\n}\n\nconst mockFetch = 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 fetch: mockFetch,\n }),\n }\n})\n\ndescribe('#documents:query', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['documents query', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(String.raw`\n \"Query for documents\n\n USAGE\n $ sanity documents query QUERY [--anonymous] [--api-version <value>] [-d\n <value>] [--pretty] [-p <value>]\n\n ARGUMENTS\n QUERY GROQ query to run against the dataset\n\n FLAGS\n -d, --dataset=<value> Dataset to query (overrides config)\n -p, --project=<value> Project ID to query (overrides config)\n --anonymous Send the query without any authorization token\n --api-version=<value> [env: SANITY_CLI_QUERY_API_VERSION] API version to\n use (defaults to 2025-08-15)\n --pretty Colorize JSON output\n\n DESCRIPTION\n Query for documents\n\n EXAMPLES\n Fetch 5 documents of type \"movie\"\n\n $ sanity documents query '*[_type == \"movie\"][0..4]'\n\n Fetch title of the oldest movie in the dataset named \"staging\"\n\n $ sanity documents query '*[_type == \"movie\"]|order(releaseDate \\\n asc)[0]{title}' --dataset staging\n\n Use API version v2021-06-07 and do a query\n\n $ sanity documents query '*[_id == \"header\"] { \"headerText\": \\\n pt::text(body) }' --api-version v2021-06-07\n\n \"\n `)\n })\n\n test('executes query successfully with basic options', async () => {\n const mockResults = [\n {\n _id: 'movie1',\n _type: 'movie',\n title: 'The Matrix',\n },\n {\n _id: 'movie2',\n _type: 'movie',\n title: 'Inception',\n },\n ]\n\n mockFetch.mockResolvedValue(mockResults)\n\n const {stdout} = await testCommand(QueryDocumentCommand, ['*[_type == \"movie\"]'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('\"_id\": \"movie1\"')\n expect(stdout).toContain('\"title\": \"The Matrix\"')\n expect(mockFetch).toHaveBeenCalledWith('*[_type == \"movie\"]')\n })\n\n test('executes query with pretty flag for colorized output', async () => {\n const mockResults = [{_id: 'test', title: 'Test Movie'}]\n\n mockFetch.mockResolvedValue(mockResults)\n\n const originalChalkLevel = chalk.level\n // Force colorization\n chalk.level = 3\n\n const {stdout} = await testCommand(QueryDocumentCommand, ['*[_type == \"movie\"]', '--pretty'], {\n capture: {\n stripAnsi: false,\n },\n mocks: defaultMocks,\n })\n\n // Reset chalk level\n chalk.level = originalChalkLevel\n\n expect(mockFetch).toHaveBeenCalledWith('*[_type == \"movie\"]')\n expect(stdout).toContain('\"_id\"')\n expect(stdout).toContain('test')\n // eslint-disable-next-line no-control-regex\n expect(stdout).toMatch(/\\u001B\\[\\d+m/)\n })\n\n test('uses dataset flag to override config', async () => {\n const mockResults = [{_id: 'test', title: 'Test'}]\n const overrideDataset = 'staging'\n\n mockFetch.mockResolvedValue(mockResults)\n\n const {stdout} = await testCommand(\n QueryDocumentCommand,\n ['*[_type == \"movie\"]', '--dataset', overrideDataset],\n {\n mocks: defaultMocks,\n },\n )\n\n expect(stdout).toContain('\"_id\": \"test\"')\n expect(mockFetch).toHaveBeenCalledWith('*[_type == \"movie\"]')\n })\n\n test('uses project flag to override config', async () => {\n const mockResults = [{_id: 'test', title: 'Test'}]\n\n mockFetch.mockResolvedValue(mockResults)\n\n const {stdout} = await testCommand(\n QueryDocumentCommand,\n ['*[_type == \"movie\"]', '--project', 'other-project'],\n {\n mocks: defaultMocks,\n },\n )\n\n expect(stdout).toContain('\"_id\": \"test\"')\n expect(mockFetch).toHaveBeenCalledWith('*[_type == \"movie\"]')\n })\n\n test('uses anonymous flag to skip authentication', async () => {\n const mockResults = [{_id: 'test', title: 'Test'}]\n\n mockFetch.mockResolvedValue(mockResults)\n\n const {stdout} = await testCommand(\n QueryDocumentCommand,\n ['*[_type == \"movie\"]', '--anonymous'],\n {\n mocks: defaultMocks,\n },\n )\n\n expect(stdout).toContain('\"_id\": \"test\"')\n expect(mockFetch).toHaveBeenCalledWith('*[_type == \"movie\"]')\n })\n\n test('uses custom API version', async () => {\n const mockResults = [{_id: 'test', title: 'Test'}]\n const customApiVersion = 'v2021-06-07'\n\n mockFetch.mockResolvedValue(mockResults)\n\n const {stdout} = await testCommand(\n QueryDocumentCommand,\n ['*[_type == \"movie\"]', '--api-version', customApiVersion],\n {\n mocks: defaultMocks,\n },\n )\n\n expect(stdout).toContain('\"_id\": \"test\"')\n expect(mockFetch).toHaveBeenCalledWith('*[_type == \"movie\"]')\n })\n\n test('shows warning and uses default API version when not specified', async () => {\n const mockResults = [{_id: 'test', title: 'Test'}]\n\n mockFetch.mockResolvedValue(mockResults)\n\n const {stderr, stdout} = await testCommand(QueryDocumentCommand, ['*[_type == \"movie\"]'], {\n mocks: defaultMocks,\n })\n\n expect(stderr).toContain('--api-version not specified, using `2025-08-15`')\n expect(stdout).toContain('\"_id\": \"test\"')\n })\n\n test('fails when no project ID is configured or provided', async () => {\n const {error} = await testCommand(QueryDocumentCommand, ['*[_type == \"movie\"]'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {dataset: testDataset}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('sanity.cli.ts does not contain a project identifier')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails when no dataset is configured or provided', async () => {\n const {error} = await testCommand(QueryDocumentCommand, ['*[_type == \"movie\"]'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {projectId: testProjectId}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No dataset specified')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails when query returns null/undefined', async () => {\n mockFetch.mockResolvedValue(null)\n\n const {error} = await testCommand(QueryDocumentCommand, ['*[_type == \"nonexistent\"]'], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Query returned no results')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles query execution errors', async () => {\n const queryError = new Error('Invalid query syntax')\n\n mockFetch.mockRejectedValue(queryError)\n\n const {error} = await testCommand(QueryDocumentCommand, ['invalid query'], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Invalid GROQ query syntax: Invalid query syntax')\n expect(error?.message).toContain('Query: invalid query')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('uses environment variable for API version when set', async () => {\n const mockResults = [{_id: 'test', title: 'Test'}]\n const envApiVersion = 'v2023-01-01'\n\n // Mock environment variable\n vi.stubEnv('SANITY_CLI_QUERY_API_VERSION', envApiVersion)\n\n mockFetch.mockResolvedValue(mockResults)\n\n const {stdout} = await testCommand(QueryDocumentCommand, ['*[_type == \"movie\"]'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('\"_id\": \"test\"')\n expect(mockFetch).toHaveBeenCalledWith('*[_type == \"movie\"]')\n\n vi.unstubAllEnvs()\n })\n})\n"],"names":["runCommand","chalk","testCommand","afterEach","describe","expect","test","vi","QueryDocumentCommand","testProjectId","testDataset","defaultMocks","cliConfig","api","dataset","projectId","projectRoot","directory","path","type","token","mockFetch","hoisted","fn","mock","actual","importActual","getProjectCliClient","mockResolvedValue","fetch","clearAllMocks","stdout","toMatchInlineSnapshot","String","raw","mockResults","_id","_type","title","mocks","toContain","toHaveBeenCalledWith","originalChalkLevel","level","capture","stripAnsi","toMatch","overrideDataset","customApiVersion","stderr","error","toBeInstanceOf","Error","message","oclif","exit","toBe","queryError","mockRejectedValue","envApiVersion","stubEnv","unstubAllEnvs"],"mappings":"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"}
@@ -24,30 +24,34 @@ vi.mock('@sanity/cli-core/ux', async ()=>{
24
24
  confirm: mocks.confirm
25
25
  };
26
26
  });
27
- vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
28
- findProjectRoot: vi.fn().mockResolvedValue({
29
- directory: '/test/path',
30
- root: '/test/path',
31
- type: 'studio'
32
- })
33
- }));
34
- vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
35
- getCliConfig: vi.fn()
36
- }));
37
- vi.mock('../../../../../cli-core/src/services/apiClient.js', ()=>({
38
- getGlobalCliClient: vi.fn().mockResolvedValue({
39
- config: vi.fn(()=>({
40
- dataset: 'test-dataset',
41
- projectId: 'test-project'
42
- }))
43
- })
44
- }));
45
27
  vi.mock('../../../actions/documents/validate.js', ()=>({
46
28
  validateDocuments: mocks.validate
47
29
  }));
48
30
  const mockConfirm = mocks.confirm;
49
31
  const mockIsFile = mocks.isFile;
50
32
  const mockValidate = mocks.validate;
33
+ const testProjectId = 'test-project';
34
+ const testDataset = 'test-dataset';
35
+ const defaultMocks = {
36
+ cliConfig: {
37
+ api: {
38
+ dataset: testDataset,
39
+ projectId: testProjectId
40
+ }
41
+ },
42
+ globalApiClient: {
43
+ config: vi.fn(()=>({
44
+ dataset: testDataset,
45
+ projectId: testProjectId
46
+ }))
47
+ },
48
+ projectRoot: {
49
+ directory: '/test/path',
50
+ path: '/test/path/sanity.config.ts',
51
+ type: 'studio'
52
+ },
53
+ token: 'test-token'
54
+ };
51
55
  describe('#documents:validate', ()=>{
52
56
  afterEach(()=>{
53
57
  vi.clearAllMocks();
@@ -122,26 +126,34 @@ describe('#documents:validate', ()=>{
122
126
  const { error } = await testCommand(ValidateDocumentsCommand, [
123
127
  '--level',
124
128
  'critical'
125
- ]);
129
+ ], {
130
+ mocks: defaultMocks
131
+ });
126
132
  expect(error?.message).toContain('Expected --level=critical to be one of: error, warning, info');
127
133
  });
128
134
  test('throws error if user enters non integer max-custom-validation-concurrency flag', async ()=>{
129
135
  const { error } = await testCommand(ValidateDocumentsCommand, [
130
136
  '--max-custom-validation-concurrency',
131
137
  'abc'
132
- ]);
138
+ ], {
139
+ mocks: defaultMocks
140
+ });
133
141
  expect(error?.message).toContain('Expected an integer but received: abc');
134
142
  });
135
143
  test('throws error if user enters non integer max-fetch-concurrency flag', async ()=>{
136
144
  const { error } = await testCommand(ValidateDocumentsCommand, [
137
145
  '--max-fetch-concurrency',
138
146
  'xyz'
139
- ]);
147
+ ], {
148
+ mocks: defaultMocks
149
+ });
140
150
  expect(error?.message).toContain('Expected an integer but received: xyz');
141
151
  });
142
152
  test('prompts user to confirm by default and exits if they do not want to continue', async ()=>{
143
153
  mockConfirm.mockResolvedValue(false);
144
- const { stdout } = await testCommand(ValidateDocumentsCommand, []);
154
+ const { stdout } = await testCommand(ValidateDocumentsCommand, [], {
155
+ mocks: defaultMocks
156
+ });
145
157
  expect(stdout).toMatchInlineSnapshot(`
146
158
  "⚠ Warning: This command downloads all documents from your dataset and processes them through your local schema within a simulated browser environment.
147
159
 
@@ -163,14 +175,18 @@ describe('#documents:validate', ()=>{
163
175
  test('skips confirm if user uses yes flag', async ()=>{
164
176
  await testCommand(ValidateDocumentsCommand, [
165
177
  '--y'
166
- ]);
178
+ ], {
179
+ mocks: defaultMocks
180
+ });
167
181
  expect(mockConfirm).not.toHaveBeenCalled();
168
182
  });
169
183
  test('exits if format is incorrect value', async ()=>{
170
184
  const { error } = await testCommand(ValidateDocumentsCommand, [
171
185
  '--format',
172
186
  'xml'
173
- ]);
187
+ ], {
188
+ mocks: defaultMocks
189
+ });
174
190
  expect(error?.message).toContain("Did not recognize format 'xml'. Available formats are 'json', 'ndjson', and 'pretty'");
175
191
  });
176
192
  test('exits if user inputs invalid file path in flag', async ()=>{
@@ -178,7 +194,9 @@ describe('#documents:validate', ()=>{
178
194
  const { error } = await testCommand(ValidateDocumentsCommand, [
179
195
  '--file',
180
196
  '/non/existent/file.ndjson'
181
- ]);
197
+ ], {
198
+ mocks: defaultMocks
199
+ });
182
200
  expect(error?.message).toContain("'--file' must point to a valid ndjson file or tarball");
183
201
  });
184
202
  test('validateDocuments is called with the correct params', async ()=>{
@@ -197,9 +215,10 @@ describe('#documents:validate', ()=>{
197
215
  '50',
198
216
  '--file',
199
217
  '/path/to/file.ndjson'
200
- ]);
218
+ ], {
219
+ mocks: defaultMocks
220
+ });
201
221
  expect(mockValidate).toHaveBeenCalledWith({
202
- clientConfig: expect.any(Object),
203
222
  dataset: 'my-dataset',
204
223
  level: 'info',
205
224
  maxCustomValidationConcurrency: 10,
@@ -213,12 +232,16 @@ describe('#documents:validate', ()=>{
213
232
  });
214
233
  test('exits with code 1 if validateDocuments returns overall level as error', async ()=>{
215
234
  mockValidate.mockResolvedValue('error');
216
- const { error } = await testCommand(ValidateDocumentsCommand, []);
235
+ const { error } = await testCommand(ValidateDocumentsCommand, [], {
236
+ mocks: defaultMocks
237
+ });
217
238
  expect(error?.oclif?.exit).toBe(1);
218
239
  });
219
240
  test('exits with code 0 if validateDocuments does not return overall level as error', async ()=>{
220
241
  mockValidate.mockResolvedValue('warning');
221
- const { error } = await testCommand(ValidateDocumentsCommand, []);
242
+ const { error } = await testCommand(ValidateDocumentsCommand, [], {
243
+ mocks: defaultMocks
244
+ });
222
245
  expect(error).toBe(undefined);
223
246
  });
224
247
  });