@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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/commands/dataset/alias/__tests__/create.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig} from '@sanity/cli-core'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {DATASET_ALIASES_API_VERSION} from '../../../../services/datasetAliases.js'\nimport {listDatasets} from '../../../../services/datasets.js'\nimport {PROJECT_FEATURES_API_VERSION} from '../../../../services/getProjectFeatures.js'\nimport {NO_PROJECT_ID} from '../../../../util/errorMessages.js'\nimport {CreateAliasCommand} from '../create.js'\n\nvi.mock('../../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn().mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n }),\n}))\n\nvi.mock('../../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\nvi.mock('../../../../services/datasets.js', () => ({\n listDatasets: vi.fn(),\n}))\n\nconst mockListDatasets = vi.mocked(listDatasets)\nconst mockGetCliConfig = vi.mocked(getCliConfig)\n\ndescribe('#dataset:alias:create', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('help works correctly', async () => {\n const {stdout} = await runCommand(['dataset alias create', '--help'])\n expect(stdout).toMatchInlineSnapshot(`\n \"Create a dataset alias within your project\n\n USAGE\n $ sanity dataset alias create [ALIASNAME] [TARGETDATASET]\n\n ARGUMENTS\n [ALIASNAME] Dataset alias name to create\n [TARGETDATASET] Target dataset name to link the alias to\n\n DESCRIPTION\n Create a dataset alias within your project\n\n EXAMPLES\n Create an alias with interactive prompts\n\n $ sanity dataset alias create\n\n Create alias named \"conference\" with interactive dataset selection\n\n $ sanity dataset alias create conference\n\n Create alias \"conference\" linked to \"conf-2025\" dataset\n\n $ sanity dataset alias create conference conf-2025\n\n Create alias with explicit ~ prefix\n\n $ sanity dataset alias create ~conference conf-2025\n\n \"\n `)\n })\n\n test.each([\n ['test-alias', 'without ~ prefix'],\n ['~test-alias', 'with ~ prefix'],\n ])('creates alias with valid arguments: %s (%s)', async (aliasInput) => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: PROJECT_FEATURES_API_VERSION,\n uri: '/features',\n }).reply(200, ['advancedDatasetManagement'])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n uri: '/aliases',\n }).reply(200, [])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n method: 'put',\n uri: '/aliases/test-alias',\n }).reply(200, {aliasName: 'test-alias', datasetName: 'production'})\n\n const {stdout} = await testCommand(CreateAliasCommand, [aliasInput, 'production'])\n\n expect(stdout).toContain(\n 'Dataset alias ~test-alias created and linked to production successfully',\n )\n })\n\n test('creates alias without target dataset', async () => {\n mockListDatasets.mockResolvedValue([])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: PROJECT_FEATURES_API_VERSION,\n uri: '/features',\n }).reply(200, ['advancedDatasetManagement'])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n uri: '/aliases',\n }).reply(200, [])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n method: 'put',\n uri: '/aliases/test-alias',\n }).reply(200, {aliasName: 'test-alias', datasetName: null})\n\n const {stdout} = await testCommand(CreateAliasCommand, ['test-alias'])\n\n expect(stdout).toContain('Dataset alias ~test-alias created successfully')\n })\n\n test('fails when alias already exists', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: PROJECT_FEATURES_API_VERSION,\n uri: '/features',\n }).reply(200, ['advancedDatasetManagement'])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n uri: '/aliases',\n }).reply(200, [{datasetName: 'production', name: 'existing-alias'}])\n\n const {error} = await testCommand(CreateAliasCommand, ['existing-alias', 'production'])\n\n expect(error?.message).toContain('Dataset alias \"~existing-alias\" already exists')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails when project lacks advanced dataset management feature', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: PROJECT_FEATURES_API_VERSION,\n uri: '/features',\n }).reply(200, [])\n\n const {error} = await testCommand(CreateAliasCommand, ['test-alias', 'production'])\n\n expect(error?.message).toContain('This project cannot create a dataset alias')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails when target dataset does not exist', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: PROJECT_FEATURES_API_VERSION,\n uri: '/features',\n }).reply(200, ['advancedDatasetManagement'])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n uri: '/aliases',\n }).reply(200, [])\n\n const {error} = await testCommand(CreateAliasCommand, ['test-alias', 'nonexistent'])\n\n expect(error?.message).toContain('Dataset \"nonexistent\" does not exist')\n expect(error?.message).toContain('Available datasets: production')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails when no project ID available', async () => {\n mockGetCliConfig.mockResolvedValueOnce({\n api: {},\n })\n\n const {error} = await testCommand(CreateAliasCommand, ['test-alias', 'production'])\n\n expect(error?.message).toContain(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles API errors gracefully', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: PROJECT_FEATURES_API_VERSION,\n uri: '/features',\n }).reply(200, ['advancedDatasetManagement'])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n uri: '/aliases',\n }).reply(200, [])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n method: 'put',\n uri: '/aliases/test-alias',\n }).reply(500, {message: 'API Error: Network timeout'})\n\n const {error} = await testCommand(CreateAliasCommand, ['test-alias', 'production'])\n\n expect(error?.message).toContain('Dataset alias creation failed: API Error: Network timeout')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test.each([\n ['a', 'production', 'Alias name must be at least two characters long'],\n ['test-alias', 'Invalid Dataset', 'Dataset name must be all lowercase characters'],\n ])('fails with invalid input: alias=%s, dataset=%s', async (alias, dataset, expectedError) => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: PROJECT_FEATURES_API_VERSION,\n uri: '/features',\n }).reply(200, ['advancedDatasetManagement'])\n\n const {error} = await testCommand(CreateAliasCommand, [alias, dataset])\n\n expect(error?.message).toContain(expectedError)\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","getCliConfig","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","DATASET_ALIASES_API_VERSION","listDatasets","PROJECT_FEATURES_API_VERSION","NO_PROJECT_ID","CreateAliasCommand","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","api","projectId","getCliToken","mockListDatasets","mocked","mockGetCliConfig","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","each","aliasInput","name","apiHost","apiVersion","uri","reply","method","aliasName","datasetName","toContain","error","message","oclif","exit","toBe","mockResolvedValueOnce","alias","dataset","expectedError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/commands/dataset/alias/__tests__/create.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {createTestClient, mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {DATASET_API_VERSION} from '../../../../services/datasets.js'\nimport {PROJECT_FEATURES_API_VERSION} from '../../../../services/getProjectFeatures.js'\nimport {NO_PROJECT_ID} from '../../../../util/errorMessages.js'\nimport {CreateAliasCommand} from '../create.js'\n\nconst mockListDatasets = vi.hoisted(() => vi.fn())\nconst testProjectId = vi.hoisted(() => 'test-project')\nconst testToken = vi.hoisted(() => 'test-token')\n\nvi.mock('@sanity/cli-core', async (importOriginal) => {\n const actual = await importOriginal<typeof import('@sanity/cli-core')>()\n const testClient = createTestClient({\n apiVersion: 'v2025-09-16',\n projectId: testProjectId,\n token: testToken,\n })\n\n return {\n ...actual,\n getProjectCliClient: vi.fn().mockResolvedValue({\n datasets: {\n list: mockListDatasets,\n } as never,\n request: testClient.request,\n }),\n }\n})\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: testToken,\n}\n\ndescribe('#dataset:alias:create', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('help works correctly', async () => {\n const {stdout} = await runCommand(['dataset alias create', '--help'])\n expect(stdout).toMatchInlineSnapshot(`\n \"Create a dataset alias within your project\n\n USAGE\n $ sanity dataset alias create [ALIASNAME] [TARGETDATASET]\n\n ARGUMENTS\n [ALIASNAME] Dataset alias name to create\n [TARGETDATASET] Target dataset name to link the alias to\n\n DESCRIPTION\n Create a dataset alias within your project\n\n EXAMPLES\n Create an alias with interactive prompts\n\n $ sanity dataset alias create\n\n Create alias named \"conference\" with interactive dataset selection\n\n $ sanity dataset alias create conference\n\n Create alias \"conference\" linked to \"conf-2025\" dataset\n\n $ sanity dataset alias create conference conf-2025\n\n Create alias with explicit ~ prefix\n\n $ sanity dataset alias create ~conference conf-2025\n\n \"\n `)\n })\n\n test.each([\n ['test-alias', 'without ~ prefix'],\n ['~test-alias', 'with ~ prefix'],\n ])('creates alias with valid arguments: %s (%s)', async (aliasInput) => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: `/features`,\n }).reply(200, ['advancedDatasetManagement'])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(200, [])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'put',\n uri: `/aliases/test-alias`,\n }).reply(200, {aliasName: 'test-alias', datasetName: 'production'})\n\n const {stdout} = await testCommand(CreateAliasCommand, [aliasInput, 'production'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain(\n 'Dataset alias ~test-alias created and linked to production successfully',\n )\n })\n\n test('creates alias without target dataset', async () => {\n mockListDatasets.mockResolvedValue([])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: `/features`,\n }).reply(200, ['advancedDatasetManagement'])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(200, [])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'put',\n uri: `/aliases/test-alias`,\n }).reply(200, {aliasName: 'test-alias', datasetName: null})\n\n const {stdout} = await testCommand(CreateAliasCommand, ['test-alias'], {mocks: defaultMocks})\n\n expect(stdout).toContain('Dataset alias ~test-alias created successfully')\n })\n\n test('fails when alias already exists', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: `/features`,\n }).reply(200, ['advancedDatasetManagement'])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(200, [{datasetName: 'production', name: 'existing-alias'}])\n\n const {error} = await testCommand(CreateAliasCommand, ['existing-alias', 'production'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Dataset alias \"~existing-alias\" already exists')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails when project lacks advanced dataset management feature', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: `/features`,\n }).reply(200, [])\n\n const {error} = await testCommand(CreateAliasCommand, ['test-alias', 'production'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('This project cannot create a dataset alias')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails when target dataset does not exist', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: `/features`,\n }).reply(200, ['advancedDatasetManagement'])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(200, [])\n\n const {error} = await testCommand(CreateAliasCommand, ['test-alias', 'nonexistent'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Dataset \"nonexistent\" does not exist')\n expect(error?.message).toContain('Available datasets: production')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails when no project ID available', async () => {\n const {error} = await testCommand(CreateAliasCommand, ['test-alias', 'production'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {}},\n },\n })\n\n expect(error?.message).toContain(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles API errors gracefully', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: `/features`,\n }).reply(200, ['advancedDatasetManagement'])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(200, [])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'put',\n uri: `/aliases/test-alias`,\n }).reply(500, {error: 'API Error: Network timeout', message: 'API Error: Network timeout'})\n\n const {error} = await testCommand(CreateAliasCommand, ['test-alias', 'production'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Dataset alias creation failed: API Error: Network timeout')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test.each([\n ['a', 'production', 'Alias name must be at least two characters long'],\n ['test-alias', 'Invalid Dataset', 'Dataset name must be all lowercase characters'],\n ])('fails with invalid input: alias=%s, dataset=%s', async (alias, dataset, expectedError) => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: `/features`,\n }).reply(200, ['advancedDatasetManagement'])\n\n const {error} = await testCommand(CreateAliasCommand, [alias, dataset], {mocks: defaultMocks})\n\n expect(error?.message).toContain(expectedError)\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","createTestClient","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","DATASET_API_VERSION","PROJECT_FEATURES_API_VERSION","NO_PROJECT_ID","CreateAliasCommand","mockListDatasets","hoisted","fn","testProjectId","testToken","mock","importOriginal","actual","testClient","apiVersion","projectId","token","getProjectCliClient","mockResolvedValue","datasets","list","request","defaultMocks","cliConfig","api","projectRoot","directory","path","type","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","each","aliasInput","name","apiHost","method","uri","reply","aliasName","datasetName","mocks","toContain","error","message","oclif","exit","toBe","alias","dataset","expectedError"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { runCommand } from '@oclif/test';
|
|
2
|
-
import { getCliConfig } from '@sanity/cli-core';
|
|
3
2
|
import { input } from '@sanity/cli-core/ux';
|
|
4
3
|
import { mockApi, testCommand } from '@sanity/cli-test';
|
|
5
4
|
import nock from 'nock';
|
|
@@ -7,23 +6,6 @@ import { afterEach, describe, expect, test, vi } from 'vitest';
|
|
|
7
6
|
import { DATASET_ALIASES_API_VERSION } from '../../../../services/datasetAliases.js';
|
|
8
7
|
import { NO_PROJECT_ID } from '../../../../util/errorMessages.js';
|
|
9
8
|
import { DeleteAliasCommand } from '../delete.js';
|
|
10
|
-
vi.mock('../../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
|
|
11
|
-
findProjectRoot: vi.fn().mockResolvedValue({
|
|
12
|
-
directory: '/test/path',
|
|
13
|
-
root: '/test/path',
|
|
14
|
-
type: 'studio'
|
|
15
|
-
})
|
|
16
|
-
}));
|
|
17
|
-
vi.mock('../../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
|
|
18
|
-
getCliConfig: vi.fn().mockResolvedValue({
|
|
19
|
-
api: {
|
|
20
|
-
projectId: 'test-project'
|
|
21
|
-
}
|
|
22
|
-
})
|
|
23
|
-
}));
|
|
24
|
-
vi.mock('../../../../../../cli-core/src/services/getCliToken.js', ()=>({
|
|
25
|
-
getCliToken: vi.fn().mockResolvedValue('test-token')
|
|
26
|
-
}));
|
|
27
9
|
vi.mock('@sanity/cli-core/ux', async ()=>{
|
|
28
10
|
const actual = await vi.importActual('@sanity/cli-core/ux');
|
|
29
11
|
return {
|
|
@@ -31,7 +13,20 @@ vi.mock('@sanity/cli-core/ux', async ()=>{
|
|
|
31
13
|
input: vi.fn()
|
|
32
14
|
};
|
|
33
15
|
});
|
|
34
|
-
const
|
|
16
|
+
const testProjectId = 'test-project';
|
|
17
|
+
const defaultMocks = {
|
|
18
|
+
cliConfig: {
|
|
19
|
+
api: {
|
|
20
|
+
projectId: testProjectId
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
projectRoot: {
|
|
24
|
+
directory: '/test/path',
|
|
25
|
+
path: '/test/path/sanity.config.ts',
|
|
26
|
+
type: 'studio'
|
|
27
|
+
},
|
|
28
|
+
token: 'test-token'
|
|
29
|
+
};
|
|
35
30
|
const mockInput = vi.mocked(input);
|
|
36
31
|
describe('#dataset:alias:delete', ()=>{
|
|
37
32
|
afterEach(()=>{
|
|
@@ -107,7 +102,9 @@ describe('#dataset:alias:delete', ()=>{
|
|
|
107
102
|
mockInput.mockResolvedValueOnce('~test-alias');
|
|
108
103
|
const { stdout } = await testCommand(DeleteAliasCommand, [
|
|
109
104
|
aliasInput
|
|
110
|
-
]
|
|
105
|
+
], {
|
|
106
|
+
mocks: defaultMocks
|
|
107
|
+
});
|
|
111
108
|
expect(stdout).toContain('Dataset alias deleted successfully');
|
|
112
109
|
expect(mockInput).toHaveBeenCalledWith({
|
|
113
110
|
message: expect.stringContaining('This dataset alias is linked to production'),
|
|
@@ -136,7 +133,9 @@ describe('#dataset:alias:delete', ()=>{
|
|
|
136
133
|
const { stderr, stdout } = await testCommand(DeleteAliasCommand, [
|
|
137
134
|
'test-alias',
|
|
138
135
|
'--force'
|
|
139
|
-
]
|
|
136
|
+
], {
|
|
137
|
+
mocks: defaultMocks
|
|
138
|
+
});
|
|
140
139
|
expect(stderr).toContain("'--force' used: skipping confirmation");
|
|
141
140
|
expect(stdout).toContain('Dataset alias deleted successfully');
|
|
142
141
|
expect(mockInput).not.toHaveBeenCalled();
|
|
@@ -163,7 +162,9 @@ describe('#dataset:alias:delete', ()=>{
|
|
|
163
162
|
mockInput.mockResolvedValueOnce('~test-alias');
|
|
164
163
|
const { stdout } = await testCommand(DeleteAliasCommand, [
|
|
165
164
|
'test-alias'
|
|
166
|
-
]
|
|
165
|
+
], {
|
|
166
|
+
mocks: defaultMocks
|
|
167
|
+
});
|
|
167
168
|
expect(stdout).toContain('Dataset alias deleted successfully');
|
|
168
169
|
expect(mockInput).toHaveBeenCalledWith({
|
|
169
170
|
message: expect.stringContaining('Are you ABSOLUTELY sure you want to delete'),
|
|
@@ -184,24 +185,32 @@ describe('#dataset:alias:delete', ()=>{
|
|
|
184
185
|
]);
|
|
185
186
|
const { error } = await testCommand(DeleteAliasCommand, [
|
|
186
187
|
'nonexistent'
|
|
187
|
-
]
|
|
188
|
+
], {
|
|
189
|
+
mocks: defaultMocks
|
|
190
|
+
});
|
|
188
191
|
expect(error?.message).toContain('Dataset alias "~nonexistent" does not exist');
|
|
189
192
|
expect(error?.oclif?.exit).toBe(1);
|
|
190
193
|
});
|
|
191
194
|
test('fails with invalid alias name', async ()=>{
|
|
192
195
|
const { error } = await testCommand(DeleteAliasCommand, [
|
|
193
196
|
'a'
|
|
194
|
-
]
|
|
197
|
+
], {
|
|
198
|
+
mocks: defaultMocks
|
|
199
|
+
});
|
|
195
200
|
expect(error?.message).toContain('Alias name must be at least two characters long');
|
|
196
201
|
expect(error?.oclif?.exit).toBe(1);
|
|
197
202
|
});
|
|
198
203
|
test('fails when no project ID available', async ()=>{
|
|
199
|
-
mockGetCliConfig.mockResolvedValueOnce({
|
|
200
|
-
api: {}
|
|
201
|
-
});
|
|
202
204
|
const { error } = await testCommand(DeleteAliasCommand, [
|
|
203
205
|
'test-alias'
|
|
204
|
-
]
|
|
206
|
+
], {
|
|
207
|
+
mocks: {
|
|
208
|
+
...defaultMocks,
|
|
209
|
+
cliConfig: {
|
|
210
|
+
api: {}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
});
|
|
205
214
|
expect(error?.message).toContain(NO_PROJECT_ID);
|
|
206
215
|
expect(error?.oclif?.exit).toBe(1);
|
|
207
216
|
});
|
|
@@ -227,7 +236,9 @@ describe('#dataset:alias:delete', ()=>{
|
|
|
227
236
|
mockInput.mockResolvedValueOnce('~test-alias');
|
|
228
237
|
const { error } = await testCommand(DeleteAliasCommand, [
|
|
229
238
|
'test-alias'
|
|
230
|
-
]
|
|
239
|
+
], {
|
|
240
|
+
mocks: defaultMocks
|
|
241
|
+
});
|
|
231
242
|
expect(error?.message).toContain('Dataset alias deletion failed: API Error: Network timeout');
|
|
232
243
|
expect(error?.oclif?.exit).toBe(1);
|
|
233
244
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/commands/dataset/alias/__tests__/delete.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig} from '@sanity/cli-core'\nimport {input} 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 {DATASET_ALIASES_API_VERSION} from '../../../../services/datasetAliases.js'\nimport {NO_PROJECT_ID} from '../../../../util/errorMessages.js'\nimport {DeleteAliasCommand} from '../delete.js'\n\nvi.mock('../../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn().mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n }),\n}))\n\nvi.mock('../../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\nvi.mock('@sanity/cli-core/ux', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core/ux')>('@sanity/cli-core/ux')\n return {\n ...actual,\n input: vi.fn(),\n }\n})\n\nconst mockGetCliConfig = vi.mocked(getCliConfig)\nconst mockInput = vi.mocked(input)\n\ndescribe('#dataset:alias:delete', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('help works correctly', async () => {\n const {stdout} = await runCommand(['dataset alias delete', '--help'])\n expect(stdout).toMatchInlineSnapshot(`\n \"Delete a dataset alias within your project\n\n USAGE\n $ sanity dataset alias delete ALIASNAME [--force]\n\n ARGUMENTS\n ALIASNAME Dataset alias name to delete\n\n FLAGS\n --force Skip confirmation prompt and delete immediately\n\n DESCRIPTION\n Delete a dataset alias within your project\n\n EXAMPLES\n Delete alias named \"conference\" with confirmation prompt\n\n $ sanity dataset alias delete conference\n\n Delete alias with explicit ~ prefix\n\n $ sanity dataset alias delete ~conference\n\n Delete alias named \"conference\" without confirmation prompt\n\n $ sanity dataset alias delete conference --force\n\n \"\n `)\n })\n\n test.each([\n ['test-alias', 'without ~ prefix'],\n ['~test-alias', 'with ~ prefix'],\n ])('deletes alias with confirmation: %s (%s)', async (aliasInput) => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n uri: '/aliases',\n }).reply(200, [{datasetName: 'production', name: 'test-alias'}])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n method: 'delete',\n uri: '/aliases/test-alias',\n }).reply(200, {deleted: true})\n\n mockInput.mockResolvedValueOnce('~test-alias')\n\n const {stdout} = await testCommand(DeleteAliasCommand, [aliasInput])\n\n expect(stdout).toContain('Dataset alias deleted successfully')\n expect(mockInput).toHaveBeenCalledWith({\n message: expect.stringContaining('This dataset alias is linked to production'),\n validate: expect.any(Function),\n })\n })\n\n test('deletes alias with force flag (skips confirmation)', async () => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n uri: '/aliases',\n }).reply(200, [{datasetName: 'production', name: 'test-alias'}])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n method: 'delete',\n uri: '/aliases/test-alias',\n }).reply(200, {deleted: true})\n\n const {stderr, stdout} = await testCommand(DeleteAliasCommand, ['test-alias', '--force'])\n\n expect(stderr).toContain(\"'--force' used: skipping confirmation\")\n expect(stdout).toContain('Dataset alias deleted successfully')\n expect(mockInput).not.toHaveBeenCalled()\n })\n\n test('deletes unlinked alias with confirmation (different prompt message)', async () => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n uri: '/aliases',\n }).reply(200, [{datasetName: null, name: 'test-alias'}])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n method: 'delete',\n uri: '/aliases/test-alias',\n }).reply(200, {deleted: true})\n\n mockInput.mockResolvedValueOnce('~test-alias')\n\n const {stdout} = await testCommand(DeleteAliasCommand, ['test-alias'])\n\n expect(stdout).toContain('Dataset alias deleted successfully')\n expect(mockInput).toHaveBeenCalledWith({\n message: expect.stringContaining('Are you ABSOLUTELY sure you want to delete'),\n validate: expect.any(Function),\n })\n expect(mockInput.mock.calls[0][0].message).not.toContain('linked to')\n })\n\n test('fails when alias does not exist', async () => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n uri: '/aliases',\n }).reply(200, [{datasetName: 'production', name: 'other-alias'}])\n\n const {error} = await testCommand(DeleteAliasCommand, ['nonexistent'])\n\n expect(error?.message).toContain('Dataset alias \"~nonexistent\" does not exist')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails with invalid alias name', async () => {\n const {error} = await testCommand(DeleteAliasCommand, ['a'])\n\n expect(error?.message).toContain('Alias name must be at least two characters long')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails when no project ID available', async () => {\n mockGetCliConfig.mockResolvedValueOnce({\n api: {},\n })\n\n const {error} = await testCommand(DeleteAliasCommand, ['test-alias'])\n\n expect(error?.message).toContain(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles API errors gracefully', async () => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n uri: '/aliases',\n }).reply(200, [{datasetName: 'production', name: 'test-alias'}])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n method: 'delete',\n uri: '/aliases/test-alias',\n }).reply(500, {message: 'API Error: Network timeout'})\n\n mockInput.mockResolvedValueOnce('~test-alias')\n\n const {error} = await testCommand(DeleteAliasCommand, ['test-alias'])\n\n expect(error?.message).toContain('Dataset alias deletion failed: API Error: Network timeout')\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","getCliConfig","input","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","DATASET_ALIASES_API_VERSION","NO_PROJECT_ID","DeleteAliasCommand","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","api","projectId","getCliToken","actual","importActual","mockGetCliConfig","mocked","mockInput","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","each","aliasInput","apiHost","apiVersion","uri","reply","datasetName","name","method","deleted","mockResolvedValueOnce","toContain","toHaveBeenCalledWith","message","stringContaining","validate","any","Function","stderr","not","toHaveBeenCalled","calls","error","oclif","exit","toBe"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/commands/dataset/alias/__tests__/delete.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {input} 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 {DATASET_ALIASES_API_VERSION} from '../../../../services/datasetAliases.js'\nimport {NO_PROJECT_ID} from '../../../../util/errorMessages.js'\nimport {DeleteAliasCommand} from '../delete.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 }\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)\n\ndescribe('#dataset:alias:delete', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('help works correctly', async () => {\n const {stdout} = await runCommand(['dataset alias delete', '--help'])\n expect(stdout).toMatchInlineSnapshot(`\n \"Delete a dataset alias within your project\n\n USAGE\n $ sanity dataset alias delete ALIASNAME [--force]\n\n ARGUMENTS\n ALIASNAME Dataset alias name to delete\n\n FLAGS\n --force Skip confirmation prompt and delete immediately\n\n DESCRIPTION\n Delete a dataset alias within your project\n\n EXAMPLES\n Delete alias named \"conference\" with confirmation prompt\n\n $ sanity dataset alias delete conference\n\n Delete alias with explicit ~ prefix\n\n $ sanity dataset alias delete ~conference\n\n Delete alias named \"conference\" without confirmation prompt\n\n $ sanity dataset alias delete conference --force\n\n \"\n `)\n })\n\n test.each([\n ['test-alias', 'without ~ prefix'],\n ['~test-alias', 'with ~ prefix'],\n ])('deletes alias with confirmation: %s (%s)', async (aliasInput) => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n uri: '/aliases',\n }).reply(200, [{datasetName: 'production', name: 'test-alias'}])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n method: 'delete',\n uri: '/aliases/test-alias',\n }).reply(200, {deleted: true})\n\n mockInput.mockResolvedValueOnce('~test-alias')\n\n const {stdout} = await testCommand(DeleteAliasCommand, [aliasInput], {mocks: defaultMocks})\n\n expect(stdout).toContain('Dataset alias deleted successfully')\n expect(mockInput).toHaveBeenCalledWith({\n message: expect.stringContaining('This dataset alias is linked to production'),\n validate: expect.any(Function),\n })\n })\n\n test('deletes alias with force flag (skips confirmation)', async () => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n uri: '/aliases',\n }).reply(200, [{datasetName: 'production', name: 'test-alias'}])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n method: 'delete',\n uri: '/aliases/test-alias',\n }).reply(200, {deleted: true})\n\n const {stderr, stdout} = await testCommand(DeleteAliasCommand, ['test-alias', '--force'], {\n mocks: defaultMocks,\n })\n\n expect(stderr).toContain(\"'--force' used: skipping confirmation\")\n expect(stdout).toContain('Dataset alias deleted successfully')\n expect(mockInput).not.toHaveBeenCalled()\n })\n\n test('deletes unlinked alias with confirmation (different prompt message)', async () => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n uri: '/aliases',\n }).reply(200, [{datasetName: null, name: 'test-alias'}])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n method: 'delete',\n uri: '/aliases/test-alias',\n }).reply(200, {deleted: true})\n\n mockInput.mockResolvedValueOnce('~test-alias')\n\n const {stdout} = await testCommand(DeleteAliasCommand, ['test-alias'], {mocks: defaultMocks})\n\n expect(stdout).toContain('Dataset alias deleted successfully')\n expect(mockInput).toHaveBeenCalledWith({\n message: expect.stringContaining('Are you ABSOLUTELY sure you want to delete'),\n validate: expect.any(Function),\n })\n expect(mockInput.mock.calls[0][0].message).not.toContain('linked to')\n })\n\n test('fails when alias does not exist', async () => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n uri: '/aliases',\n }).reply(200, [{datasetName: 'production', name: 'other-alias'}])\n\n const {error} = await testCommand(DeleteAliasCommand, ['nonexistent'], {mocks: defaultMocks})\n\n expect(error?.message).toContain('Dataset alias \"~nonexistent\" does not exist')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails with invalid alias name', async () => {\n const {error} = await testCommand(DeleteAliasCommand, ['a'], {mocks: defaultMocks})\n\n expect(error?.message).toContain('Alias name must be at least two characters long')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails when no project ID available', async () => {\n const {error} = await testCommand(DeleteAliasCommand, ['test-alias'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {}},\n },\n })\n\n expect(error?.message).toContain(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles API errors gracefully', async () => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n uri: '/aliases',\n }).reply(200, [{datasetName: 'production', name: 'test-alias'}])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: DATASET_ALIASES_API_VERSION,\n method: 'delete',\n uri: '/aliases/test-alias',\n }).reply(500, {message: 'API Error: Network timeout'})\n\n mockInput.mockResolvedValueOnce('~test-alias')\n\n const {error} = await testCommand(DeleteAliasCommand, ['test-alias'], {mocks: defaultMocks})\n\n expect(error?.message).toContain('Dataset alias deletion failed: API Error: Network timeout')\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","input","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","DATASET_ALIASES_API_VERSION","NO_PROJECT_ID","DeleteAliasCommand","mock","actual","importActual","fn","testProjectId","defaultMocks","cliConfig","api","projectId","projectRoot","directory","path","type","token","mockInput","mocked","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","each","aliasInput","apiHost","apiVersion","uri","reply","datasetName","name","method","deleted","mockResolvedValueOnce","mocks","toContain","toHaveBeenCalledWith","message","stringContaining","validate","any","Function","stderr","not","toHaveBeenCalled","calls","error","oclif","exit","toBe"],"mappings":"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"}
|
|
@@ -1,34 +1,43 @@
|
|
|
1
1
|
import { runCommand } from '@oclif/test';
|
|
2
|
-
import {
|
|
3
|
-
import { mockApi, testCommand } from '@sanity/cli-test';
|
|
2
|
+
import { createTestClient, mockApi, testCommand } from '@sanity/cli-test';
|
|
4
3
|
import nock from 'nock';
|
|
5
4
|
import { afterEach, describe, expect, test, vi } from 'vitest';
|
|
6
|
-
import {
|
|
7
|
-
import { listDatasets } from '../../../../services/datasets.js';
|
|
5
|
+
import { DATASET_API_VERSION } from '../../../../services/datasets.js';
|
|
8
6
|
import { NO_PROJECT_ID } from '../../../../util/errorMessages.js';
|
|
9
7
|
import { LinkAliasCommand } from '../link.js';
|
|
10
|
-
vi.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
8
|
+
const mockListDatasets = vi.hoisted(()=>vi.fn());
|
|
9
|
+
const testProjectId = vi.hoisted(()=>'test-project');
|
|
10
|
+
const testToken = vi.hoisted(()=>'test-token');
|
|
11
|
+
vi.mock('@sanity/cli-core', async (importOriginal)=>{
|
|
12
|
+
const actual = await importOriginal();
|
|
13
|
+
const testClient = createTestClient({
|
|
14
|
+
apiVersion: 'v2025-09-16',
|
|
15
|
+
projectId: testProjectId,
|
|
16
|
+
token: testToken
|
|
17
|
+
});
|
|
18
|
+
return {
|
|
19
|
+
...actual,
|
|
20
|
+
getProjectCliClient: vi.fn().mockResolvedValue({
|
|
21
|
+
datasets: {
|
|
22
|
+
list: mockListDatasets
|
|
23
|
+
},
|
|
24
|
+
request: testClient.request
|
|
22
25
|
})
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
const defaultMocks = {
|
|
29
|
+
cliConfig: {
|
|
30
|
+
api: {
|
|
31
|
+
projectId: testProjectId
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
projectRoot: {
|
|
35
|
+
directory: '/test/path',
|
|
36
|
+
path: '/test/path/sanity.config.ts',
|
|
37
|
+
type: 'studio'
|
|
38
|
+
},
|
|
39
|
+
token: testToken
|
|
40
|
+
};
|
|
32
41
|
describe('#dataset:alias:link', ()=>{
|
|
33
42
|
afterEach(()=>{
|
|
34
43
|
vi.clearAllMocks();
|
|
@@ -91,9 +100,10 @@ describe('#dataset:alias:link', ()=>{
|
|
|
91
100
|
}
|
|
92
101
|
]);
|
|
93
102
|
mockApi({
|
|
94
|
-
apiHost:
|
|
95
|
-
apiVersion:
|
|
96
|
-
|
|
103
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
104
|
+
apiVersion: DATASET_API_VERSION,
|
|
105
|
+
method: 'get',
|
|
106
|
+
uri: `/aliases`
|
|
97
107
|
}).reply(200, [
|
|
98
108
|
{
|
|
99
109
|
datasetName: null,
|
|
@@ -101,10 +111,10 @@ describe('#dataset:alias:link', ()=>{
|
|
|
101
111
|
}
|
|
102
112
|
]);
|
|
103
113
|
mockApi({
|
|
104
|
-
apiHost:
|
|
105
|
-
apiVersion:
|
|
114
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
115
|
+
apiVersion: DATASET_API_VERSION,
|
|
106
116
|
method: 'patch',
|
|
107
|
-
uri:
|
|
117
|
+
uri: `/aliases/staging`
|
|
108
118
|
}).reply(200, {
|
|
109
119
|
aliasName: 'staging',
|
|
110
120
|
datasetName: 'production'
|
|
@@ -112,7 +122,9 @@ describe('#dataset:alias:link', ()=>{
|
|
|
112
122
|
const { stdout } = await testCommand(LinkAliasCommand, [
|
|
113
123
|
'staging',
|
|
114
124
|
'production'
|
|
115
|
-
]
|
|
125
|
+
], {
|
|
126
|
+
mocks: defaultMocks
|
|
127
|
+
});
|
|
116
128
|
expect(stdout).toContain('Dataset alias ~staging linked to production successfully');
|
|
117
129
|
});
|
|
118
130
|
test('re-links already-linked alias when using force flag', async ()=>{
|
|
@@ -125,9 +137,10 @@ describe('#dataset:alias:link', ()=>{
|
|
|
125
137
|
}
|
|
126
138
|
]);
|
|
127
139
|
mockApi({
|
|
128
|
-
apiHost:
|
|
129
|
-
apiVersion:
|
|
130
|
-
|
|
140
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
141
|
+
apiVersion: DATASET_API_VERSION,
|
|
142
|
+
method: 'get',
|
|
143
|
+
uri: `/aliases`
|
|
131
144
|
}).reply(200, [
|
|
132
145
|
{
|
|
133
146
|
datasetName: 'development',
|
|
@@ -135,10 +148,10 @@ describe('#dataset:alias:link', ()=>{
|
|
|
135
148
|
}
|
|
136
149
|
]);
|
|
137
150
|
mockApi({
|
|
138
|
-
apiHost:
|
|
139
|
-
apiVersion:
|
|
151
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
152
|
+
apiVersion: DATASET_API_VERSION,
|
|
140
153
|
method: 'patch',
|
|
141
|
-
uri:
|
|
154
|
+
uri: `/aliases/staging`
|
|
142
155
|
}).reply(200, {
|
|
143
156
|
aliasName: 'staging',
|
|
144
157
|
datasetName: 'production'
|
|
@@ -147,7 +160,9 @@ describe('#dataset:alias:link', ()=>{
|
|
|
147
160
|
'staging',
|
|
148
161
|
'production',
|
|
149
162
|
'--force'
|
|
150
|
-
]
|
|
163
|
+
], {
|
|
164
|
+
mocks: defaultMocks
|
|
165
|
+
});
|
|
151
166
|
expect(stderr).toContain("'--force' used: skipping confirmation, linking alias to");
|
|
152
167
|
expect(stdout).toContain('Dataset alias ~staging linked to production successfully');
|
|
153
168
|
});
|
|
@@ -158,9 +173,10 @@ describe('#dataset:alias:link', ()=>{
|
|
|
158
173
|
}
|
|
159
174
|
]);
|
|
160
175
|
mockApi({
|
|
161
|
-
apiHost:
|
|
162
|
-
apiVersion:
|
|
163
|
-
|
|
176
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
177
|
+
apiVersion: DATASET_API_VERSION,
|
|
178
|
+
method: 'get',
|
|
179
|
+
uri: `/aliases`
|
|
164
180
|
}).reply(200, [
|
|
165
181
|
{
|
|
166
182
|
datasetName: null,
|
|
@@ -168,10 +184,10 @@ describe('#dataset:alias:link', ()=>{
|
|
|
168
184
|
}
|
|
169
185
|
]);
|
|
170
186
|
mockApi({
|
|
171
|
-
apiHost:
|
|
172
|
-
apiVersion:
|
|
187
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
188
|
+
apiVersion: DATASET_API_VERSION,
|
|
173
189
|
method: 'patch',
|
|
174
|
-
uri:
|
|
190
|
+
uri: `/aliases/staging`
|
|
175
191
|
}).reply(200, {
|
|
176
192
|
aliasName: 'staging',
|
|
177
193
|
datasetName: 'production'
|
|
@@ -179,7 +195,9 @@ describe('#dataset:alias:link', ()=>{
|
|
|
179
195
|
const { stdout } = await testCommand(LinkAliasCommand, [
|
|
180
196
|
'staging',
|
|
181
197
|
'production'
|
|
182
|
-
]
|
|
198
|
+
], {
|
|
199
|
+
mocks: defaultMocks
|
|
200
|
+
});
|
|
183
201
|
expect(stdout).toContain('Dataset alias ~staging linked to production successfully');
|
|
184
202
|
expect(stdout).not.toContain('confirmation');
|
|
185
203
|
});
|
|
@@ -198,18 +216,24 @@ describe('#dataset:alias:link', ()=>{
|
|
|
198
216
|
const { error } = await testCommand(LinkAliasCommand, [
|
|
199
217
|
alias,
|
|
200
218
|
dataset
|
|
201
|
-
]
|
|
219
|
+
], {
|
|
220
|
+
mocks: defaultMocks
|
|
221
|
+
});
|
|
202
222
|
expect(error?.message).toContain(expectedError);
|
|
203
223
|
expect(error?.oclif?.exit).toBe(1);
|
|
204
224
|
});
|
|
205
225
|
test('fails when no project ID', async ()=>{
|
|
206
|
-
mockGetCliConfig.mockResolvedValueOnce({
|
|
207
|
-
api: {}
|
|
208
|
-
});
|
|
209
226
|
const { error } = await testCommand(LinkAliasCommand, [
|
|
210
227
|
'staging',
|
|
211
228
|
'production'
|
|
212
|
-
]
|
|
229
|
+
], {
|
|
230
|
+
mocks: {
|
|
231
|
+
...defaultMocks,
|
|
232
|
+
cliConfig: {
|
|
233
|
+
api: {}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
});
|
|
213
237
|
expect(error?.message).toContain(NO_PROJECT_ID);
|
|
214
238
|
expect(error?.oclif?.exit).toBe(1);
|
|
215
239
|
});
|
|
@@ -220,9 +244,10 @@ describe('#dataset:alias:link', ()=>{
|
|
|
220
244
|
}
|
|
221
245
|
]);
|
|
222
246
|
mockApi({
|
|
223
|
-
apiHost:
|
|
224
|
-
apiVersion:
|
|
225
|
-
|
|
247
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
248
|
+
apiVersion: DATASET_API_VERSION,
|
|
249
|
+
method: 'get',
|
|
250
|
+
uri: `/aliases`
|
|
226
251
|
}).reply(200, [
|
|
227
252
|
{
|
|
228
253
|
datasetName: null,
|
|
@@ -232,7 +257,9 @@ describe('#dataset:alias:link', ()=>{
|
|
|
232
257
|
const { error } = await testCommand(LinkAliasCommand, [
|
|
233
258
|
'nonexistent',
|
|
234
259
|
'production'
|
|
235
|
-
]
|
|
260
|
+
], {
|
|
261
|
+
mocks: defaultMocks
|
|
262
|
+
});
|
|
236
263
|
expect(error?.message).toContain('Dataset alias "~nonexistent" does not exist');
|
|
237
264
|
expect(error?.oclif?.exit).toBe(1);
|
|
238
265
|
});
|
|
@@ -243,9 +270,10 @@ describe('#dataset:alias:link', ()=>{
|
|
|
243
270
|
}
|
|
244
271
|
]);
|
|
245
272
|
mockApi({
|
|
246
|
-
apiHost:
|
|
247
|
-
apiVersion:
|
|
248
|
-
|
|
273
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
274
|
+
apiVersion: DATASET_API_VERSION,
|
|
275
|
+
method: 'get',
|
|
276
|
+
uri: `/aliases`
|
|
249
277
|
}).reply(200, [
|
|
250
278
|
{
|
|
251
279
|
datasetName: null,
|
|
@@ -255,7 +283,9 @@ describe('#dataset:alias:link', ()=>{
|
|
|
255
283
|
const { error } = await testCommand(LinkAliasCommand, [
|
|
256
284
|
'staging',
|
|
257
285
|
'nonexistent'
|
|
258
|
-
]
|
|
286
|
+
], {
|
|
287
|
+
mocks: defaultMocks
|
|
288
|
+
});
|
|
259
289
|
expect(error?.message).toContain('Dataset "nonexistent" does not exist');
|
|
260
290
|
expect(error?.oclif?.exit).toBe(1);
|
|
261
291
|
});
|
|
@@ -266,9 +296,10 @@ describe('#dataset:alias:link', ()=>{
|
|
|
266
296
|
}
|
|
267
297
|
]);
|
|
268
298
|
mockApi({
|
|
269
|
-
apiHost:
|
|
270
|
-
apiVersion:
|
|
271
|
-
|
|
299
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
300
|
+
apiVersion: DATASET_API_VERSION,
|
|
301
|
+
method: 'get',
|
|
302
|
+
uri: `/aliases`
|
|
272
303
|
}).reply(200, [
|
|
273
304
|
{
|
|
274
305
|
datasetName: 'production',
|
|
@@ -278,16 +309,19 @@ describe('#dataset:alias:link', ()=>{
|
|
|
278
309
|
const { error } = await testCommand(LinkAliasCommand, [
|
|
279
310
|
'staging',
|
|
280
311
|
'production'
|
|
281
|
-
]
|
|
312
|
+
], {
|
|
313
|
+
mocks: defaultMocks
|
|
314
|
+
});
|
|
282
315
|
expect(error?.message).toContain('Dataset alias ~staging already linked to production');
|
|
283
316
|
expect(error?.oclif?.exit).toBe(1);
|
|
284
317
|
});
|
|
285
318
|
test('fails when no datasets available', async ()=>{
|
|
286
319
|
mockListDatasets.mockResolvedValue([]);
|
|
287
320
|
mockApi({
|
|
288
|
-
apiHost:
|
|
289
|
-
apiVersion:
|
|
290
|
-
|
|
321
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
322
|
+
apiVersion: DATASET_API_VERSION,
|
|
323
|
+
method: 'get',
|
|
324
|
+
uri: `/aliases`
|
|
291
325
|
}).reply(200, [
|
|
292
326
|
{
|
|
293
327
|
datasetName: null,
|
|
@@ -296,7 +330,9 @@ describe('#dataset:alias:link', ()=>{
|
|
|
296
330
|
]);
|
|
297
331
|
const { error } = await testCommand(LinkAliasCommand, [
|
|
298
332
|
'staging'
|
|
299
|
-
]
|
|
333
|
+
], {
|
|
334
|
+
mocks: defaultMocks
|
|
335
|
+
});
|
|
300
336
|
expect(error?.message).toContain('No datasets available to link to');
|
|
301
337
|
expect(error?.oclif?.exit).toBe(1);
|
|
302
338
|
});
|
|
@@ -307,9 +343,10 @@ describe('#dataset:alias:link', ()=>{
|
|
|
307
343
|
}
|
|
308
344
|
]);
|
|
309
345
|
mockApi({
|
|
310
|
-
apiHost:
|
|
311
|
-
apiVersion:
|
|
312
|
-
|
|
346
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
347
|
+
apiVersion: DATASET_API_VERSION,
|
|
348
|
+
method: 'get',
|
|
349
|
+
uri: `/aliases`
|
|
313
350
|
}).reply(200, [
|
|
314
351
|
{
|
|
315
352
|
datasetName: null,
|
|
@@ -317,17 +354,20 @@ describe('#dataset:alias:link', ()=>{
|
|
|
317
354
|
}
|
|
318
355
|
]);
|
|
319
356
|
mockApi({
|
|
320
|
-
apiHost:
|
|
321
|
-
apiVersion:
|
|
357
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
358
|
+
apiVersion: DATASET_API_VERSION,
|
|
322
359
|
method: 'patch',
|
|
323
|
-
uri:
|
|
360
|
+
uri: `/aliases/staging`
|
|
324
361
|
}).reply(500, {
|
|
362
|
+
error: 'API Error',
|
|
325
363
|
message: 'API Error'
|
|
326
364
|
});
|
|
327
365
|
const { error } = await testCommand(LinkAliasCommand, [
|
|
328
366
|
'staging',
|
|
329
367
|
'production'
|
|
330
|
-
]
|
|
368
|
+
], {
|
|
369
|
+
mocks: defaultMocks
|
|
370
|
+
});
|
|
331
371
|
expect(error?.message).toContain('Dataset alias linking failed: API Error');
|
|
332
372
|
expect(error?.oclif?.exit).toBe(1);
|
|
333
373
|
});
|