@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.
- package/dist/actions/auth/login/{index.js → login.js} +1 -1
- package/dist/actions/auth/login/{index.js.map → login.js.map} +1 -1
- package/dist/actions/dev/startStudioDevServer.js +3 -8
- package/dist/actions/dev/startStudioDevServer.js.map +1 -1
- package/dist/actions/dev/types.d.ts +1 -3
- package/dist/actions/dev/types.js.map +1 -1
- package/dist/actions/documents/validate.d.ts +0 -2
- package/dist/actions/documents/validate.js +21 -1
- package/dist/actions/documents/validate.js.map +1 -1
- package/dist/actions/exec/execScript.js +1 -1
- package/dist/actions/exec/execScript.js.map +1 -1
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +1 -1
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.js +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
- package/dist/actions/manifest/extractManifest.js +1 -4
- package/dist/actions/manifest/extractManifest.js.map +1 -1
- package/dist/actions/organizations/getOrganizationChoices.d.ts +6 -0
- package/dist/actions/organizations/getOrganizationChoices.js +23 -0
- package/dist/actions/organizations/getOrganizationChoices.js.map +1 -0
- package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.d.ts +2 -0
- package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js +9 -0
- package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js.map +1 -0
- package/dist/actions/organizations/hasProjectAttachGrant.d.ts +1 -0
- package/dist/actions/organizations/hasProjectAttachGrant.js +24 -0
- package/dist/actions/organizations/hasProjectAttachGrant.js.map +1 -0
- package/dist/actions/schema/deleteSchemaAction.d.ts +13 -5
- package/dist/actions/schema/deleteSchemaAction.js +12 -17
- package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
- package/dist/actions/schema/deploySchemas.d.ts +15 -0
- package/dist/actions/schema/deploySchemas.js +98 -0
- package/dist/actions/schema/deploySchemas.js.map +1 -0
- package/dist/actions/schema/listSchemas.d.ts +12 -0
- package/dist/actions/schema/listSchemas.js +119 -0
- package/dist/actions/schema/listSchemas.js.map +1 -0
- package/dist/actions/schema/schemaStoreTypes.d.ts +0 -11
- package/dist/actions/schema/schemaStoreTypes.js.map +1 -1
- package/dist/actions/schema/utils/debug.d.ts +2 -0
- package/dist/actions/schema/utils/debug.js +5 -0
- package/dist/actions/schema/utils/debug.js.map +1 -0
- package/dist/actions/schema/utils/manifestExtractor.d.ts +3 -8
- package/dist/actions/schema/utils/manifestExtractor.js +12 -17
- package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
- package/dist/actions/schema/utils/manifestReader.d.ts +2 -9
- package/dist/actions/schema/utils/manifestReader.js +6 -12
- package/dist/actions/schema/utils/manifestReader.js.map +1 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.js +1 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -1
- package/dist/actions/schema/utils/schemaStoreValidation.d.ts +10 -62
- package/dist/actions/schema/utils/schemaStoreValidation.js +40 -127
- package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +14 -0
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
- package/dist/actions/users/getMembersForProject.d.ts +1 -3
- package/dist/actions/users/getMembersForProject.js +6 -17
- package/dist/actions/users/getMembersForProject.js.map +1 -1
- package/dist/actions/users/types.d.ts +0 -11
- package/dist/actions/users/types.js.map +1 -1
- package/dist/commands/__tests__/debug.test.js +113 -220
- package/dist/commands/__tests__/debug.test.js.map +1 -1
- package/dist/commands/__tests__/deploy.test.js +325 -293
- package/dist/commands/__tests__/deploy.test.js.map +1 -1
- package/dist/commands/__tests__/dev.test.js +62 -19
- package/dist/commands/__tests__/dev.test.js.map +1 -1
- package/dist/commands/__tests__/init/init.authentication.test.js +73 -0
- package/dist/commands/__tests__/init/init.authentication.test.js.map +1 -0
- package/dist/commands/__tests__/init/init.create-new-project.test.js +195 -0
- package/dist/commands/__tests__/init/init.create-new-project.test.js.map +1 -0
- package/dist/commands/__tests__/init/init.plan.test.js +279 -0
- package/dist/commands/__tests__/init/init.plan.test.js.map +1 -0
- package/dist/commands/__tests__/init/init.setup.test.js +335 -0
- package/dist/commands/__tests__/init/init.setup.test.js.map +1 -0
- package/dist/commands/__tests__/install.test.js +46 -22
- package/dist/commands/__tests__/install.test.js.map +1 -1
- package/dist/commands/__tests__/logout.test.js +8 -5
- package/dist/commands/__tests__/logout.test.js.map +1 -1
- package/dist/commands/__tests__/manage.test.js +29 -24
- package/dist/commands/__tests__/manage.test.js.map +1 -1
- package/dist/commands/__tests__/migration.test.js +119 -0
- package/dist/commands/__tests__/migration.test.js.map +1 -0
- package/dist/commands/__tests__/versions.test.js +22 -14
- package/dist/commands/__tests__/versions.test.js.map +1 -1
- package/dist/commands/backup/__tests__/disable.test.js +72 -75
- package/dist/commands/backup/__tests__/disable.test.js.map +1 -1
- package/dist/commands/backup/__tests__/download.test.js +169 -80
- package/dist/commands/backup/__tests__/download.test.js.map +1 -1
- package/dist/commands/backup/__tests__/enable.test.js +109 -140
- package/dist/commands/backup/__tests__/enable.test.js.map +1 -1
- package/dist/commands/backup/__tests__/list.test.js +84 -75
- package/dist/commands/backup/__tests__/list.test.js.map +1 -1
- package/dist/commands/backup/disable.js +5 -11
- package/dist/commands/backup/disable.js.map +1 -1
- package/dist/commands/backup/enable.js +5 -11
- package/dist/commands/backup/enable.js.map +1 -1
- package/dist/commands/backup/list.js +7 -8
- package/dist/commands/backup/list.js.map +1 -1
- package/dist/commands/cors/__tests__/add.test.js +68 -38
- package/dist/commands/cors/__tests__/add.test.js.map +1 -1
- package/dist/commands/cors/__tests__/delete.test.js +52 -37
- package/dist/commands/cors/__tests__/delete.test.js.map +1 -1
- package/dist/commands/cors/__tests__/list.test.js +80 -57
- package/dist/commands/cors/__tests__/list.test.js.map +1 -1
- package/dist/commands/cors/add.js +5 -13
- package/dist/commands/cors/add.js.map +1 -1
- package/dist/commands/cors/delete.js +7 -15
- package/dist/commands/cors/delete.js.map +1 -1
- package/dist/commands/cors/list.js +2 -10
- package/dist/commands/cors/list.js.map +1 -1
- package/dist/commands/dataset/__tests__/copy.test.js +197 -89
- package/dist/commands/dataset/__tests__/copy.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/create.test.js +147 -117
- package/dist/commands/dataset/__tests__/create.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/delete.test.js +75 -68
- package/dist/commands/dataset/__tests__/delete.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/export.test.js +123 -83
- package/dist/commands/dataset/__tests__/export.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/import.test.js +2 -2
- package/dist/commands/dataset/__tests__/import.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/list.test.js +107 -65
- package/dist/commands/dataset/__tests__/list.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/create.test.js +114 -74
- package/dist/commands/dataset/alias/__tests__/create.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/delete.test.js +40 -29
- package/dist/commands/dataset/alias/__tests__/delete.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/link.test.js +114 -74
- package/dist/commands/dataset/alias/__tests__/link.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/unlink.test.js +44 -29
- package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +1 -1
- package/dist/commands/dataset/export.js +4 -4
- package/dist/commands/dataset/export.js.map +1 -1
- package/dist/commands/dataset/visibility/__tests__/get.test.js +48 -67
- package/dist/commands/dataset/visibility/__tests__/get.test.js.map +1 -1
- package/dist/commands/dataset/visibility/__tests__/set.test.js +76 -123
- package/dist/commands/dataset/visibility/__tests__/set.test.js.map +1 -1
- package/dist/commands/dev.js +0 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/docs/__tests__/search.test.js +8 -7
- package/dist/commands/docs/__tests__/search.test.js.map +1 -1
- package/dist/commands/documents/__tests__/create.test.js +328 -265
- package/dist/commands/documents/__tests__/create.test.js.map +1 -1
- package/dist/commands/documents/__tests__/delete.test.js +119 -87
- package/dist/commands/documents/__tests__/delete.test.js.map +1 -1
- package/dist/commands/documents/__tests__/get.test.js +68 -95
- package/dist/commands/documents/__tests__/get.test.js.map +1 -1
- package/dist/commands/documents/__tests__/query.test.js +87 -192
- package/dist/commands/documents/__tests__/query.test.js.map +1 -1
- package/dist/commands/documents/__tests__/validate.test.js +52 -29
- package/dist/commands/documents/__tests__/validate.test.js.map +1 -1
- package/dist/commands/documents/create.d.ts +1 -0
- package/dist/commands/documents/create.js +10 -9
- package/dist/commands/documents/create.js.map +1 -1
- package/dist/commands/documents/delete.js +2 -3
- package/dist/commands/documents/delete.js.map +1 -1
- package/dist/commands/documents/get.js +2 -3
- package/dist/commands/documents/get.js.map +1 -1
- package/dist/commands/documents/query.js +2 -3
- package/dist/commands/documents/query.js.map +1 -1
- package/dist/commands/documents/validate.js +0 -20
- package/dist/commands/documents/validate.js.map +1 -1
- package/dist/commands/graphql/__tests__/list.test.js +57 -45
- package/dist/commands/graphql/__tests__/list.test.js.map +1 -1
- package/dist/commands/graphql/__tests__/undeploy.test.js +85 -59
- package/dist/commands/graphql/__tests__/undeploy.test.js.map +1 -1
- package/dist/commands/graphql/list.js +2 -2
- package/dist/commands/graphql/list.js.map +1 -1
- package/dist/commands/graphql/undeploy.js +4 -9
- package/dist/commands/graphql/undeploy.js.map +1 -1
- package/dist/commands/hook/__tests__/attempt.test.js +48 -33
- package/dist/commands/hook/__tests__/attempt.test.js.map +1 -1
- package/dist/commands/hook/__tests__/create.test.js +49 -51
- package/dist/commands/hook/__tests__/create.test.js.map +1 -1
- package/dist/commands/hook/__tests__/delete.test.js +43 -30
- package/dist/commands/hook/__tests__/delete.test.js.map +1 -1
- package/dist/commands/hook/__tests__/list.test.js +38 -31
- package/dist/commands/hook/__tests__/list.test.js.map +1 -1
- package/dist/commands/hook/__tests__/logs.test.js +68 -40
- package/dist/commands/hook/__tests__/logs.test.js.map +1 -1
- package/dist/commands/hook/create.js +2 -6
- package/dist/commands/hook/create.js.map +1 -1
- package/dist/commands/hook/delete.js +5 -17
- package/dist/commands/hook/delete.js.map +1 -1
- package/dist/commands/hook/list.js +2 -8
- package/dist/commands/hook/list.js.map +1 -1
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.js +151 -18
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/manifest/__tests__/extract.test.js +22 -13
- package/dist/commands/manifest/__tests__/extract.test.js.map +1 -1
- package/dist/commands/media/__tests__/create-aspect.test.js +41 -28
- package/dist/commands/media/__tests__/create-aspect.test.js.map +1 -1
- package/dist/commands/media/__tests__/delete-aspect.test.js +44 -35
- package/dist/commands/media/__tests__/delete-aspect.test.js.map +1 -1
- package/dist/commands/media/__tests__/deploy-aspect.test.js +67 -80
- package/dist/commands/media/__tests__/deploy-aspect.test.js.map +1 -1
- package/dist/commands/media/__tests__/export.test.js +365 -66
- package/dist/commands/media/__tests__/export.test.js.map +1 -1
- package/dist/commands/media/__tests__/import.test.js +171 -105
- package/dist/commands/media/__tests__/import.test.js.map +1 -1
- package/dist/commands/media/export.js +2 -2
- package/dist/commands/media/export.js.map +1 -1
- package/dist/commands/media/import.js +2 -2
- package/dist/commands/media/import.js.map +1 -1
- package/dist/commands/projects/__tests__/list.test.js +5 -4
- package/dist/commands/projects/__tests__/list.test.js.map +1 -1
- package/dist/commands/projects/list.js +2 -6
- package/dist/commands/projects/list.js.map +1 -1
- package/dist/commands/schema/__tests__/delete.test.js +396 -151
- package/dist/commands/schema/__tests__/delete.test.js.map +1 -1
- package/dist/commands/schema/__tests__/deploy.test.js +348 -0
- package/dist/commands/schema/__tests__/deploy.test.js.map +1 -0
- package/dist/commands/schema/__tests__/extract.test.js +19 -11
- package/dist/commands/schema/__tests__/extract.test.js.map +1 -1
- package/dist/commands/schema/__tests__/list.test.js +399 -0
- package/dist/commands/schema/__tests__/list.test.js.map +1 -0
- package/dist/commands/schema/__tests__/validate.test.js +27 -10
- package/dist/commands/schema/__tests__/validate.test.js.map +1 -1
- package/dist/commands/schema/delete.d.ts +1 -1
- package/dist/commands/schema/delete.js +20 -23
- package/dist/commands/schema/delete.js.map +1 -1
- package/dist/commands/schema/deploy.d.ts +16 -0
- package/dist/commands/schema/deploy.js +98 -0
- package/dist/commands/schema/deploy.js.map +1 -0
- package/dist/commands/schema/list.d.ts +15 -0
- package/dist/commands/schema/list.js +104 -0
- package/dist/commands/schema/list.js.map +1 -0
- package/dist/commands/telemetry/__tests__/disable.test.js +7 -5
- package/dist/commands/telemetry/__tests__/disable.test.js.map +1 -1
- package/dist/commands/telemetry/__tests__/enable.test.js +7 -5
- package/dist/commands/telemetry/__tests__/enable.test.js.map +1 -1
- package/dist/commands/telemetry/__tests__/status.test.js +7 -5
- package/dist/commands/telemetry/__tests__/status.test.js.map +1 -1
- package/dist/commands/tokens/__tests__/add.test.js +55 -40
- package/dist/commands/tokens/__tests__/add.test.js.map +1 -1
- package/dist/commands/tokens/__tests__/delete.test.js +72 -42
- package/dist/commands/tokens/__tests__/delete.test.js.map +1 -1
- package/dist/commands/tokens/__tests__/list.test.js +87 -60
- package/dist/commands/tokens/__tests__/list.test.js.map +1 -1
- package/dist/commands/tokens/add.js +3 -5
- package/dist/commands/tokens/add.js.map +1 -1
- package/dist/commands/users/__tests__/invite.test.js +100 -79
- package/dist/commands/users/__tests__/invite.test.js.map +1 -1
- package/dist/commands/users/__tests__/list.test.js +186 -180
- package/dist/commands/users/__tests__/list.test.js.map +1 -1
- package/dist/commands/users/invite.js +6 -17
- package/dist/commands/users/invite.js.map +1 -1
- package/dist/commands/users/list.js +4 -7
- package/dist/commands/users/list.js.map +1 -1
- package/dist/config/createCliConfig.d.ts +4 -4
- package/dist/services/backup.d.ts +8 -0
- package/dist/services/backup.js +19 -0
- package/dist/services/backup.js.map +1 -1
- package/dist/services/cors.d.ts +23 -0
- package/dist/services/cors.js +38 -0
- package/dist/services/cors.js.map +1 -0
- package/dist/services/graphql.d.ts +7 -0
- package/dist/services/graphql.js +11 -0
- package/dist/services/graphql.js.map +1 -1
- package/dist/services/hooks.d.ts +2 -0
- package/dist/services/hooks.js +19 -0
- package/dist/services/hooks.js.map +1 -1
- package/dist/services/organizations.d.ts +40 -0
- package/dist/services/organizations.js +41 -0
- package/dist/services/organizations.js.map +1 -0
- package/dist/services/projects.d.ts +31 -0
- package/dist/services/projects.js +71 -1
- package/dist/services/projects.js.map +1 -1
- package/dist/services/schemas.d.ts +4 -0
- package/dist/services/schemas.js +40 -0
- package/dist/services/schemas.js.map +1 -0
- package/dist/services/user.d.ts +10 -0
- package/dist/services/user.js +24 -0
- package/dist/services/user.js.map +1 -0
- package/dist/util/__tests__/getCliVersion.test.js +2 -2
- package/dist/util/__tests__/getCliVersion.test.js.map +1 -1
- package/dist/util/errorMessages.d.ts +1 -0
- package/dist/util/errorMessages.js +1 -0
- package/dist/util/errorMessages.js.map +1 -1
- package/dist/util/getCliVersion.js +1 -1
- package/dist/util/getCliVersion.js.map +1 -1
- package/dist/util/readPackageJson.d.ts +1 -15
- package/dist/util/readPackageJson.js +1 -1
- package/dist/util/readPackageJson.js.map +1 -1
- package/dist/util/uniqBy.d.ts +1 -0
- package/dist/util/uniqBy.js +14 -0
- package/dist/util/uniqBy.js.map +1 -0
- package/oclif.config.js +6 -1
- package/oclif.manifest.json +152 -158
- package/package.json +30 -31
- package/dist/actions/cors/constants.d.ts +0 -1
- package/dist/actions/cors/constants.js +0 -3
- package/dist/actions/cors/constants.js.map +0 -1
- package/dist/actions/cors/types.d.ts +0 -9
- package/dist/actions/cors/types.js +0 -3
- package/dist/actions/cors/types.js.map +0 -1
- package/dist/actions/migration/getMigrationRootDirectory.d.ts +0 -2
- package/dist/actions/migration/getMigrationRootDirectory.js +0 -14
- package/dist/actions/migration/getMigrationRootDirectory.js.map +0 -1
- package/dist/actions/migration/resolveMigrations.d.ts +0 -19
- package/dist/actions/migration/resolveMigrations.js +0 -43
- package/dist/actions/migration/resolveMigrations.js.map +0 -1
- package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js +0 -65
- package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js.map +0 -1
- package/dist/actions/migration/templates/__tests__/minimalSimple.test.js +0 -145
- package/dist/actions/migration/templates/__tests__/minimalSimple.test.js.map +0 -1
- package/dist/actions/migration/templates/__tests__/renameField.test.js +0 -63
- package/dist/actions/migration/templates/__tests__/renameField.test.js.map +0 -1
- package/dist/actions/migration/templates/__tests__/renameType.test.js +0 -61
- package/dist/actions/migration/templates/__tests__/renameType.test.js.map +0 -1
- package/dist/actions/migration/templates/__tests__/stringToPTE.test.js +0 -87
- package/dist/actions/migration/templates/__tests__/stringToPTE.test.js.map +0 -1
- package/dist/actions/migration/templates/index.d.ts +0 -5
- package/dist/actions/migration/templates/index.js +0 -7
- package/dist/actions/migration/templates/index.js.map +0 -1
- package/dist/actions/migration/templates/minimalAdvanced.d.ts +0 -4
- package/dist/actions/migration/templates/minimalAdvanced.js +0 -21
- package/dist/actions/migration/templates/minimalAdvanced.js.map +0 -1
- package/dist/actions/migration/templates/minimalSimple.d.ts +0 -4
- package/dist/actions/migration/templates/minimalSimple.js +0 -61
- package/dist/actions/migration/templates/minimalSimple.js.map +0 -1
- package/dist/actions/migration/templates/renameField.d.ts +0 -4
- package/dist/actions/migration/templates/renameField.js +0 -20
- package/dist/actions/migration/templates/renameField.js.map +0 -1
- package/dist/actions/migration/templates/renameType.d.ts +0 -4
- package/dist/actions/migration/templates/renameType.js +0 -19
- package/dist/actions/migration/templates/renameType.js.map +0 -1
- package/dist/actions/migration/templates/stringToPTE.d.ts +0 -4
- package/dist/actions/migration/templates/stringToPTE.js +0 -32
- package/dist/actions/migration/templates/stringToPTE.js.map +0 -1
- package/dist/actions/schema/__tests__/deleteSchemaAction.test.js +0 -294
- package/dist/actions/schema/__tests__/deleteSchemaAction.test.js.map +0 -1
- package/dist/actions/schema/schemaStoreConstants.d.ts +0 -1
- package/dist/actions/schema/schemaStoreConstants.js +0 -4
- package/dist/actions/schema/schemaStoreConstants.js.map +0 -1
- package/dist/actions/schema/utils/schemaActionHelpers.d.ts +0 -1
- package/dist/actions/schema/utils/schemaActionHelpers.js +0 -5
- package/dist/actions/schema/utils/schemaActionHelpers.js.map +0 -1
- package/dist/actions/schema/utils/schemaApiClient.d.ts +0 -6
- package/dist/actions/schema/utils/schemaApiClient.js +0 -17
- package/dist/actions/schema/utils/schemaApiClient.js.map +0 -1
- package/dist/actions/users/apiVersion.d.ts +0 -6
- package/dist/actions/users/apiVersion.js +0 -7
- package/dist/actions/users/apiVersion.js.map +0 -1
- package/dist/commands/__tests__/init.test.js +0 -411
- package/dist/commands/__tests__/init.test.js.map +0 -1
- package/dist/commands/migration/__tests__/create.test.js +0 -296
- package/dist/commands/migration/__tests__/create.test.js.map +0 -1
- package/dist/commands/migration/__tests__/list.test.js +0 -166
- package/dist/commands/migration/__tests__/list.test.js.map +0 -1
- package/dist/commands/migration/__tests__/run.test.js +0 -481
- package/dist/commands/migration/__tests__/run.test.js.map +0 -1
- package/dist/commands/migration/create.d.ts +0 -17
- package/dist/commands/migration/create.js +0 -143
- package/dist/commands/migration/create.js.map +0 -1
- package/dist/commands/migration/list.d.ts +0 -9
- package/dist/commands/migration/list.js +0 -61
- package/dist/commands/migration/list.js.map +0 -1
- package/dist/commands/migration/run.d.ts +0 -26
- package/dist/commands/migration/run.js +0 -271
- package/dist/commands/migration/run.js.map +0 -1
- package/dist/util/migration/constants.d.ts +0 -3
- package/dist/util/migration/constants.js +0 -10
- package/dist/util/migration/constants.js.map +0 -1
- package/dist/util/migration/ensureApiVersionFormat.d.ts +0 -9
- package/dist/util/migration/ensureApiVersionFormat.js +0 -16
- package/dist/util/migration/ensureApiVersionFormat.js.map +0 -1
- package/dist/util/migration/prettyMutationFormatter.d.ts +0 -8
- package/dist/util/migration/prettyMutationFormatter.js +0 -141
- package/dist/util/migration/prettyMutationFormatter.js.map +0 -1
- package/dist/utils/migration/resolveMigrationScript.d.ts +0 -44
- package/dist/utils/migration/resolveMigrationScript.js +0 -74
- package/dist/utils/migration/resolveMigrationScript.js.map +0 -1
- /package/dist/actions/auth/login/{index.d.ts → login.d.ts} +0 -0
|
@@ -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.
|
|
12
|
-
|
|
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
|
-
|
|
16
|
-
|
|
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
|
-
|
|
34
|
-
|
|
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
|
-
|
|
28
|
+
input: vi.fn(),
|
|
29
|
+
select: vi.fn()
|
|
41
30
|
};
|
|
42
31
|
});
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
241
|
-
|
|
242
|
-
|
|
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:
|
|
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
|
-
|
|
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":"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"}
|
|
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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"}
|