@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,30 +1,32 @@
|
|
|
1
1
|
import { runCommand } from '@oclif/test';
|
|
2
2
|
import { input, select } from '@sanity/cli-core/ux';
|
|
3
|
-
import { testCommand } from '@sanity/cli-test';
|
|
3
|
+
import { createTestClient, mockApi, testCommand } from '@sanity/cli-test';
|
|
4
|
+
import nock from 'nock';
|
|
4
5
|
import { afterEach, describe, expect, test, vi } from 'vitest';
|
|
5
|
-
import {
|
|
6
|
-
import { getProjectCliClient } from '../../../../../cli-core/src/services/apiClient.js';
|
|
6
|
+
import { PROJECT_FEATURES_API_VERSION } from '../../../services/getProjectFeatures.js';
|
|
7
7
|
import { CreateDatasetCommand } from '../create.js';
|
|
8
|
-
vi.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
8
|
+
const mockListDatasets = vi.hoisted(()=>vi.fn());
|
|
9
|
+
const mockCreateDataset = vi.hoisted(()=>vi.fn());
|
|
10
|
+
const testProjectId = vi.hoisted(()=>'test-project');
|
|
11
|
+
const testToken = vi.hoisted(()=>'test-token');
|
|
12
|
+
vi.mock('@sanity/cli-core', async ()=>{
|
|
13
|
+
const actual = await vi.importActual('@sanity/cli-core');
|
|
14
|
+
const testClient = createTestClient({
|
|
15
|
+
apiVersion: 'v2025-09-16',
|
|
16
|
+
projectId: testProjectId,
|
|
17
|
+
token: testToken
|
|
18
|
+
});
|
|
19
|
+
return {
|
|
20
|
+
...actual,
|
|
21
|
+
getProjectCliClient: vi.fn().mockResolvedValue({
|
|
22
|
+
datasets: {
|
|
23
|
+
create: mockCreateDataset,
|
|
24
|
+
list: mockListDatasets
|
|
25
|
+
},
|
|
26
|
+
request: testClient.request
|
|
20
27
|
})
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
getCliToken: vi.fn().mockResolvedValue('test-token')
|
|
24
|
-
}));
|
|
25
|
-
vi.mock('../../../../../cli-core/src/services/apiClient.js', ()=>({
|
|
26
|
-
getProjectCliClient: vi.fn()
|
|
27
|
-
}));
|
|
28
|
+
};
|
|
29
|
+
});
|
|
28
30
|
vi.mock('@sanity/cli-core/ux', async ()=>{
|
|
29
31
|
const actual = await vi.importActual('@sanity/cli-core/ux');
|
|
30
32
|
return {
|
|
@@ -33,28 +35,27 @@ vi.mock('@sanity/cli-core/ux', async ()=>{
|
|
|
33
35
|
select: vi.fn()
|
|
34
36
|
};
|
|
35
37
|
});
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
+
const defaultMocks = {
|
|
39
|
+
cliConfig: {
|
|
40
|
+
api: {
|
|
41
|
+
projectId: testProjectId
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
projectRoot: {
|
|
45
|
+
directory: '/test/path',
|
|
46
|
+
path: '/test/path/sanity.config.ts',
|
|
47
|
+
type: 'studio'
|
|
48
|
+
},
|
|
49
|
+
token: 'test-token'
|
|
50
|
+
};
|
|
38
51
|
const mockInput = vi.mocked(input);
|
|
39
52
|
const mockSelect = vi.mocked(select);
|
|
40
|
-
const createMockClient = (overrides = {})=>{
|
|
41
|
-
const defaultDatasets = {
|
|
42
|
-
create: vi.fn().mockResolvedValue(undefined),
|
|
43
|
-
list: vi.fn().mockResolvedValue([])
|
|
44
|
-
};
|
|
45
|
-
const datasetsOverrides = overrides.datasets;
|
|
46
|
-
return {
|
|
47
|
-
datasets: datasetsOverrides ? {
|
|
48
|
-
...defaultDatasets,
|
|
49
|
-
...datasetsOverrides
|
|
50
|
-
} : defaultDatasets,
|
|
51
|
-
request: vi.fn().mockResolvedValue([]),
|
|
52
|
-
...overrides
|
|
53
|
-
};
|
|
54
|
-
};
|
|
55
53
|
describe('#dataset:create', ()=>{
|
|
56
54
|
afterEach(()=>{
|
|
57
55
|
vi.clearAllMocks();
|
|
56
|
+
const pending = nock.pendingMocks();
|
|
57
|
+
nock.cleanAll();
|
|
58
|
+
expect(pending, 'pending mocks').toEqual([]);
|
|
58
59
|
});
|
|
59
60
|
test('--help works', async ()=>{
|
|
60
61
|
const { stdout } = await runCommand([
|
|
@@ -94,26 +95,42 @@ describe('#dataset:create', ()=>{
|
|
|
94
95
|
`);
|
|
95
96
|
});
|
|
96
97
|
test('creates dataset with provided name', async ()=>{
|
|
97
|
-
|
|
98
|
-
|
|
98
|
+
mockListDatasets.mockResolvedValue([]);
|
|
99
|
+
mockApi({
|
|
100
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
101
|
+
apiVersion: PROJECT_FEATURES_API_VERSION,
|
|
102
|
+
method: 'get',
|
|
103
|
+
uri: '/features'
|
|
104
|
+
}).reply(200, []);
|
|
105
|
+
mockCreateDataset.mockResolvedValue(undefined);
|
|
99
106
|
const { stdout } = await testCommand(CreateDatasetCommand, [
|
|
100
107
|
'my-dataset'
|
|
101
|
-
]
|
|
102
|
-
|
|
108
|
+
], {
|
|
109
|
+
mocks: defaultMocks
|
|
110
|
+
});
|
|
111
|
+
expect(mockCreateDataset).toHaveBeenCalledWith('my-dataset', {
|
|
103
112
|
aclMode: 'public'
|
|
104
113
|
});
|
|
105
114
|
expect(stdout).toContain('Dataset created successfully');
|
|
106
115
|
});
|
|
107
116
|
test('prompts for dataset name when not provided', async ()=>{
|
|
108
|
-
|
|
109
|
-
|
|
117
|
+
mockListDatasets.mockResolvedValue([]);
|
|
118
|
+
mockApi({
|
|
119
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
120
|
+
apiVersion: PROJECT_FEATURES_API_VERSION,
|
|
121
|
+
method: 'get',
|
|
122
|
+
uri: '/features'
|
|
123
|
+
}).reply(200, []);
|
|
124
|
+
mockCreateDataset.mockResolvedValue(undefined);
|
|
110
125
|
mockInput.mockResolvedValue('test-dataset');
|
|
111
|
-
const { stdout } = await testCommand(CreateDatasetCommand, []
|
|
126
|
+
const { stdout } = await testCommand(CreateDatasetCommand, [], {
|
|
127
|
+
mocks: defaultMocks
|
|
128
|
+
});
|
|
112
129
|
expect(mockInput).toHaveBeenCalledWith({
|
|
113
130
|
message: 'Dataset name:',
|
|
114
131
|
validate: expect.any(Function)
|
|
115
132
|
});
|
|
116
|
-
expect(
|
|
133
|
+
expect(mockCreateDataset).toHaveBeenCalledWith('test-dataset', {
|
|
117
134
|
aclMode: 'public'
|
|
118
135
|
});
|
|
119
136
|
expect(stdout).toContain('Dataset created successfully');
|
|
@@ -121,32 +138,36 @@ describe('#dataset:create', ()=>{
|
|
|
121
138
|
test('errors when dataset name is invalid', async ()=>{
|
|
122
139
|
const { error } = await testCommand(CreateDatasetCommand, [
|
|
123
140
|
'Invalid-Dataset-Name'
|
|
124
|
-
]
|
|
141
|
+
], {
|
|
142
|
+
mocks: defaultMocks
|
|
143
|
+
});
|
|
125
144
|
expect(error?.message).toContain('must be all lowercase');
|
|
126
145
|
expect(error?.oclif?.exit).toBe(1);
|
|
127
146
|
});
|
|
128
147
|
test('errors when dataset already exists', async ()=>{
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
features: [],
|
|
140
|
-
name: 'production',
|
|
141
|
-
tags: []
|
|
142
|
-
}
|
|
143
|
-
])
|
|
148
|
+
mockListDatasets.mockResolvedValue([
|
|
149
|
+
{
|
|
150
|
+
aclMode: 'public',
|
|
151
|
+
addonFor: null,
|
|
152
|
+
createdAt: '2023-01-01T00:00:00Z',
|
|
153
|
+
createdByUserId: 'user1',
|
|
154
|
+
datasetProfile: 'default',
|
|
155
|
+
features: [],
|
|
156
|
+
name: 'production',
|
|
157
|
+
tags: []
|
|
144
158
|
}
|
|
145
|
-
|
|
146
|
-
|
|
159
|
+
]);
|
|
160
|
+
mockApi({
|
|
161
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
162
|
+
apiVersion: PROJECT_FEATURES_API_VERSION,
|
|
163
|
+
method: 'get',
|
|
164
|
+
uri: '/features'
|
|
165
|
+
}).reply(200, []);
|
|
147
166
|
const { error } = await testCommand(CreateDatasetCommand, [
|
|
148
167
|
'production'
|
|
149
|
-
]
|
|
168
|
+
], {
|
|
169
|
+
mocks: defaultMocks
|
|
170
|
+
});
|
|
150
171
|
expect(error?.message).toContain('Dataset "production" already exists');
|
|
151
172
|
expect(error?.oclif?.exit).toBe(1);
|
|
152
173
|
});
|
|
@@ -155,49 +176,46 @@ describe('#dataset:create', ()=>{
|
|
|
155
176
|
'my-dataset',
|
|
156
177
|
'--visibility',
|
|
157
178
|
'invalid'
|
|
158
|
-
]
|
|
179
|
+
], {
|
|
180
|
+
mocks: defaultMocks
|
|
181
|
+
});
|
|
159
182
|
expect(error?.message).toContain('Expected --visibility=invalid to be one of: custom, private, public');
|
|
160
183
|
expect(error?.oclif?.exit).toBe(2);
|
|
161
184
|
});
|
|
162
185
|
test('handles dataset creation errors', async ()=>{
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
186
|
+
mockListDatasets.mockResolvedValue([]);
|
|
187
|
+
mockApi({
|
|
188
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
189
|
+
apiVersion: PROJECT_FEATURES_API_VERSION,
|
|
190
|
+
method: 'get',
|
|
191
|
+
uri: '/features'
|
|
192
|
+
}).reply(200, []);
|
|
193
|
+
mockCreateDataset.mockRejectedValue(new Error('API Error'));
|
|
170
194
|
const { error } = await testCommand(CreateDatasetCommand, [
|
|
171
195
|
'my-dataset'
|
|
172
|
-
]
|
|
173
|
-
|
|
174
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
175
|
-
});
|
|
176
|
-
test('handles fetch project data errors', async ()=>{
|
|
177
|
-
const mockClient = createMockClient({
|
|
178
|
-
datasets: {
|
|
179
|
-
create: vi.fn(),
|
|
180
|
-
list: vi.fn().mockRejectedValue(new Error('Network error'))
|
|
181
|
-
}
|
|
196
|
+
], {
|
|
197
|
+
mocks: defaultMocks
|
|
182
198
|
});
|
|
183
|
-
|
|
184
|
-
const { error } = await testCommand(CreateDatasetCommand, [
|
|
185
|
-
'my-dataset-fail'
|
|
186
|
-
]);
|
|
187
|
-
expect(error?.message).toContain('Failed to fetch project data: Network error');
|
|
199
|
+
expect(error?.message).toContain('Dataset creation failed: API Error');
|
|
188
200
|
expect(error?.oclif?.exit).toBe(1);
|
|
189
201
|
});
|
|
190
202
|
test('prompts for dataset visibility when private datasets available and no flag provided', async ()=>{
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
203
|
+
mockListDatasets.mockResolvedValue([]);
|
|
204
|
+
mockApi({
|
|
205
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
206
|
+
apiVersion: PROJECT_FEATURES_API_VERSION,
|
|
207
|
+
method: 'get',
|
|
208
|
+
uri: '/features'
|
|
209
|
+
}).reply(200, [
|
|
210
|
+
'privateDataset'
|
|
211
|
+
]);
|
|
212
|
+
mockCreateDataset.mockResolvedValue(undefined);
|
|
197
213
|
mockSelect.mockResolvedValue('private');
|
|
198
214
|
const { stderr, stdout } = await testCommand(CreateDatasetCommand, [
|
|
199
215
|
'my-dataset'
|
|
200
|
-
]
|
|
216
|
+
], {
|
|
217
|
+
mocks: defaultMocks
|
|
218
|
+
});
|
|
201
219
|
expect(mockSelect).toHaveBeenCalledWith({
|
|
202
220
|
choices: [
|
|
203
221
|
{
|
|
@@ -211,7 +229,7 @@ describe('#dataset:create', ()=>{
|
|
|
211
229
|
],
|
|
212
230
|
message: 'Dataset visibility'
|
|
213
231
|
});
|
|
214
|
-
expect(
|
|
232
|
+
expect(mockCreateDataset).toHaveBeenCalledWith('my-dataset', {
|
|
215
233
|
aclMode: 'private'
|
|
216
234
|
});
|
|
217
235
|
expect(stdout).toContain('Dataset created successfully');
|
|
@@ -262,18 +280,24 @@ describe('#dataset:create', ()=>{
|
|
|
262
280
|
visibility: 'custom'
|
|
263
281
|
}
|
|
264
282
|
])('$testName', async ({ expectedAclMode, expectWarning, hasPrivateFeature, visibility })=>{
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
283
|
+
mockListDatasets.mockResolvedValue([]);
|
|
284
|
+
mockApi({
|
|
285
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
286
|
+
apiVersion: PROJECT_FEATURES_API_VERSION,
|
|
287
|
+
method: 'get',
|
|
288
|
+
uri: '/features'
|
|
289
|
+
}).reply(200, hasPrivateFeature ? [
|
|
290
|
+
'privateDataset'
|
|
291
|
+
] : []);
|
|
292
|
+
mockCreateDataset.mockResolvedValue(undefined);
|
|
271
293
|
const { stderr, stdout } = await testCommand(CreateDatasetCommand, [
|
|
272
294
|
'my-dataset',
|
|
273
295
|
'--visibility',
|
|
274
296
|
visibility
|
|
275
|
-
]
|
|
276
|
-
|
|
297
|
+
], {
|
|
298
|
+
mocks: defaultMocks
|
|
299
|
+
});
|
|
300
|
+
expect(mockCreateDataset).toHaveBeenCalledWith('my-dataset', {
|
|
277
301
|
aclMode: expectedAclMode
|
|
278
302
|
});
|
|
279
303
|
expect(stdout).toContain('Dataset created successfully');
|
|
@@ -283,27 +307,33 @@ describe('#dataset:create', ()=>{
|
|
|
283
307
|
});
|
|
284
308
|
});
|
|
285
309
|
test('handles client request failure independently from listDatasets', async ()=>{
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
310
|
+
mockApi({
|
|
311
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
312
|
+
apiVersion: PROJECT_FEATURES_API_VERSION,
|
|
313
|
+
method: 'get',
|
|
314
|
+
uri: '/features'
|
|
315
|
+
}).reply(500, {
|
|
316
|
+
error: 'Features API error'
|
|
292
317
|
});
|
|
293
|
-
mockGetProjectCliClient.mockResolvedValue(mockClient);
|
|
294
318
|
const { error } = await testCommand(CreateDatasetCommand, [
|
|
295
319
|
'my-dataset'
|
|
296
|
-
]
|
|
320
|
+
], {
|
|
321
|
+
mocks: defaultMocks
|
|
322
|
+
});
|
|
297
323
|
expect(error?.message).toContain('Failed to fetch project data: Features API error');
|
|
298
324
|
expect(error?.oclif?.exit).toBe(1);
|
|
299
325
|
});
|
|
300
326
|
test('errors when no project ID is found', async ()=>{
|
|
301
|
-
mockGetCliConfig.mockResolvedValueOnce({
|
|
302
|
-
api: undefined
|
|
303
|
-
});
|
|
304
327
|
const { error } = await testCommand(CreateDatasetCommand, [
|
|
305
328
|
'my-dataset'
|
|
306
|
-
]
|
|
329
|
+
], {
|
|
330
|
+
mocks: {
|
|
331
|
+
...defaultMocks,
|
|
332
|
+
cliConfig: {
|
|
333
|
+
api: undefined
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
});
|
|
307
337
|
expect(error?.message).toContain('sanity.cli.ts does not contain a project identifier');
|
|
308
338
|
expect(error?.oclif?.exit).toBe(1);
|
|
309
339
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/commands/dataset/__tests__/create.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {input, select} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {getCliConfig} from '../../../../../cli-core/src/config/cli/getCliConfig.js'\nimport {getProjectCliClient} from '../../../../../cli-core/src/services/apiClient.js'\nimport {CreateDatasetCommand} 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('../../../../../cli-core/src/services/apiClient.js', () => ({\n getProjectCliClient: vi.fn(),\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 mockGetProjectCliClient = vi.mocked(getProjectCliClient)\nconst mockGetCliConfig = vi.mocked(getCliConfig)\nconst mockInput = vi.mocked(input)\nconst mockSelect = vi.mocked(select)\n\nconst createMockClient = (overrides: Record<string, unknown> = {}) => {\n const defaultDatasets = {\n create: vi.fn().mockResolvedValue(undefined),\n list: vi.fn().mockResolvedValue([]),\n }\n\n const datasetsOverrides = overrides.datasets as Record<string, unknown> | undefined\n\n return {\n datasets: datasetsOverrides ? {...defaultDatasets, ...datasetsOverrides} : defaultDatasets,\n request: vi.fn().mockResolvedValue([]),\n ...overrides,\n }\n}\n\ndescribe('#dataset:create', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['dataset create', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Create a new dataset within your project\n\n USAGE\n $ sanity dataset create [NAME] [--visibility custom|private|public]\n\n ARGUMENTS\n [NAME] Name of the dataset to create\n\n FLAGS\n --visibility=<option> Set visibility for this dataset (custom/private/public)\n <options: custom|private|public>\n\n DESCRIPTION\n Create a new dataset within your project\n\n EXAMPLES\n Interactively create a dataset\n\n $ sanity dataset create\n\n Create a dataset named \"my-dataset\"\n\n $ sanity dataset create my-dataset\n\n Create a private dataset named \"my-dataset\"\n\n $ sanity dataset create my-dataset --visibility private\n\n \"\n `)\n })\n\n test('creates dataset with provided name', async () => {\n const mockClient = createMockClient()\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n const {stdout} = await testCommand(CreateDatasetCommand, ['my-dataset'])\n\n expect(mockClient.datasets.create).toHaveBeenCalledWith('my-dataset', {\n aclMode: 'public',\n })\n expect(stdout).toContain('Dataset created successfully')\n })\n\n test('prompts for dataset name when not provided', async () => {\n const mockClient = createMockClient()\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n mockInput.mockResolvedValue('test-dataset')\n\n const {stdout} = await testCommand(CreateDatasetCommand, [])\n\n expect(mockInput).toHaveBeenCalledWith({\n message: 'Dataset name:',\n validate: expect.any(Function),\n })\n expect(mockClient.datasets.create).toHaveBeenCalledWith('test-dataset', {\n aclMode: 'public',\n })\n expect(stdout).toContain('Dataset created successfully')\n })\n\n test('errors when dataset name is invalid', async () => {\n const {error} = await testCommand(CreateDatasetCommand, ['Invalid-Dataset-Name'])\n\n expect(error?.message).toContain('must be all lowercase')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('errors when dataset already exists', async () => {\n const mockClient = createMockClient({\n datasets: {\n create: vi.fn(),\n list: vi.fn().mockResolvedValue([\n {\n aclMode: 'public',\n addonFor: null,\n createdAt: '2023-01-01T00:00:00Z',\n createdByUserId: 'user1',\n datasetProfile: 'default',\n features: [],\n name: 'production',\n tags: [],\n },\n ]),\n },\n })\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n const {error} = await testCommand(CreateDatasetCommand, ['production'])\n\n expect(error?.message).toContain('Dataset \"production\" already exists')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('errors with invalid visibility flag', async () => {\n const {error} = await testCommand(CreateDatasetCommand, [\n 'my-dataset',\n '--visibility',\n 'invalid',\n ])\n\n expect(error?.message).toContain(\n 'Expected --visibility=invalid to be one of: custom, private, public',\n )\n expect(error?.oclif?.exit).toBe(2)\n })\n\n test('handles dataset creation errors', async () => {\n const mockClient = createMockClient({\n datasets: {\n create: vi.fn().mockRejectedValue(new Error('API Error')),\n list: vi.fn().mockResolvedValue([]),\n },\n })\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n const {error} = await testCommand(CreateDatasetCommand, ['my-dataset'])\n\n expect(error?.message).toContain('Dataset creation failed: API Error')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles fetch project data errors', async () => {\n const mockClient = createMockClient({\n datasets: {\n create: vi.fn(),\n list: vi.fn().mockRejectedValue(new Error('Network error')),\n },\n })\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n const {error} = await testCommand(CreateDatasetCommand, ['my-dataset-fail'])\n\n expect(error?.message).toContain('Failed to fetch project data: Network error')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('prompts for dataset visibility when private datasets available and no flag provided', async () => {\n const mockClient = createMockClient({\n request: vi.fn().mockResolvedValue(['privateDataset']),\n })\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n mockSelect.mockResolvedValue('private')\n\n const {stderr, stdout} = await testCommand(CreateDatasetCommand, ['my-dataset'])\n\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {\n name: 'Public (world readable)',\n value: 'public',\n },\n {\n name: 'Private (Authenticated user or token needed)',\n value: 'private',\n },\n ],\n message: 'Dataset visibility',\n })\n expect(mockClient.datasets.create).toHaveBeenCalledWith('my-dataset', {\n aclMode: 'private',\n })\n expect(stdout).toContain('Dataset created successfully')\n expect(stderr).toContain('Please note that while documents are private')\n })\n\n describe('visibility flag handling', () => {\n test.each([\n {\n expectedAclMode: 'public',\n expectWarning: false,\n hasPrivateFeature: true,\n testName: 'creates public dataset when privateDataset feature available',\n visibility: 'public',\n },\n {\n expectedAclMode: 'private',\n expectWarning: false,\n hasPrivateFeature: true,\n testName: 'creates private dataset when privateDataset feature available',\n visibility: 'private',\n },\n {\n expectedAclMode: 'custom',\n expectWarning: false,\n hasPrivateFeature: true,\n testName: 'creates custom dataset when privateDataset feature available',\n visibility: 'custom',\n },\n {\n expectedAclMode: 'public',\n expectWarning: false,\n hasPrivateFeature: false,\n testName: 'creates public dataset when privateDataset feature not available',\n visibility: 'public',\n },\n {\n expectedAclMode: 'public',\n expectWarning: true,\n hasPrivateFeature: false,\n testName: 'creates public dataset with warning when private requested but not available',\n visibility: 'private',\n },\n {\n expectedAclMode: 'custom',\n expectWarning: false,\n hasPrivateFeature: false,\n testName: 'creates custom dataset when privateDataset feature not available',\n visibility: 'custom',\n },\n ])('$testName', async ({expectedAclMode, expectWarning, hasPrivateFeature, visibility}) => {\n const mockClient = createMockClient({\n request: vi.fn().mockResolvedValue(hasPrivateFeature ? ['privateDataset'] : []),\n })\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n const {stderr, stdout} = await testCommand(CreateDatasetCommand, [\n 'my-dataset',\n '--visibility',\n visibility,\n ])\n\n expect(mockClient.datasets.create).toHaveBeenCalledWith('my-dataset', {\n aclMode: expectedAclMode,\n })\n expect(stdout).toContain('Dataset created successfully')\n\n if (expectWarning) {\n expect(stderr).toContain('Private datasets are not available for this project')\n }\n })\n })\n\n test('handles client request failure independently from listDatasets', async () => {\n const mockClient = createMockClient({\n datasets: {\n create: vi.fn(),\n list: vi.fn().mockResolvedValue([]),\n },\n request: vi.fn().mockRejectedValue(new Error('Features API error')), // This fails\n })\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n const {error} = await testCommand(CreateDatasetCommand, ['my-dataset'])\n\n expect(error?.message).toContain('Failed to fetch project data: Features API error')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('errors when no project ID is found', async () => {\n mockGetCliConfig.mockResolvedValueOnce({\n api: undefined,\n } as never)\n\n const {error} = await testCommand(CreateDatasetCommand, ['my-dataset'])\n\n expect(error?.message).toContain('sanity.cli.ts does not contain a project identifier')\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","input","select","testCommand","afterEach","describe","expect","test","vi","getCliConfig","getProjectCliClient","CreateDatasetCommand","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","api","projectId","getCliToken","actual","importActual","mockGetProjectCliClient","mocked","mockGetCliConfig","mockInput","mockSelect","createMockClient","overrides","defaultDatasets","create","undefined","list","datasetsOverrides","datasets","request","clearAllMocks","stdout","toMatchInlineSnapshot","mockClient","toHaveBeenCalledWith","aclMode","toContain","message","validate","any","Function","error","oclif","exit","toBe","addonFor","createdAt","createdByUserId","datasetProfile","features","name","tags","mockRejectedValue","Error","stderr","choices","value","each","expectedAclMode","expectWarning","hasPrivateFeature","testName","visibility","mockResolvedValueOnce"],"mappings":"AAAA,SAAQA,UAAU,QAAO,cAAa;AACtC,SAAQC,KAAK,EAAEC,MAAM,QAAO,sBAAqB;AACjD,SAAQC,WAAW,QAAO,mBAAkB;AAC5C,SAAQC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAO,SAAQ;AAE5D,SAAQC,YAAY,QAAO,yDAAwD;AACnF,SAAQC,mBAAmB,QAAO,oDAAmD;AACrF,SAAQC,oBAAoB,QAAO,eAAc;AAEjDH,GAAGI,IAAI,CAAC,yDAAyD,IAAO,CAAA;QACtEC,iBAAiBL,GAAGM,EAAE,GAAGC,iBAAiB,CAAC;YACzCC,WAAW;YACXC,MAAM;YACNC,MAAM;QACR;IACF,CAAA;AAEAV,GAAGI,IAAI,CAAC,0DAA0D,IAAO,CAAA;QACvEH,cAAcD,GAAGM,EAAE,GAAGC,iBAAiB,CAAC;YACtCI,KAAK;gBACHC,WAAW;YACb;QACF;IACF,CAAA;AAEAZ,GAAGI,IAAI,CAAC,uDAAuD,IAAO,CAAA;QACpES,aAAab,GAAGM,EAAE,GAAGC,iBAAiB,CAAC;IACzC,CAAA;AAEAP,GAAGI,IAAI,CAAC,qDAAqD,IAAO,CAAA;QAClEF,qBAAqBF,GAAGM,EAAE;IAC5B,CAAA;AAEAN,GAAGI,IAAI,CAAC,uBAAuB;IAC7B,MAAMU,SAAS,MAAMd,GAAGe,YAAY,CAAuC;IAC3E,OAAO;QACL,GAAGD,MAAM;QACTrB,OAAOO,GAAGM,EAAE;QACZZ,QAAQM,GAAGM,EAAE;IACf;AACF;AAEA,MAAMU,0BAA0BhB,GAAGiB,MAAM,CAACf;AAC1C,MAAMgB,mBAAmBlB,GAAGiB,MAAM,CAAChB;AACnC,MAAMkB,YAAYnB,GAAGiB,MAAM,CAACxB;AAC5B,MAAM2B,aAAapB,GAAGiB,MAAM,CAACvB;AAE7B,MAAM2B,mBAAmB,CAACC,YAAqC,CAAC,CAAC;IAC/D,MAAMC,kBAAkB;QACtBC,QAAQxB,GAAGM,EAAE,GAAGC,iBAAiB,CAACkB;QAClCC,MAAM1B,GAAGM,EAAE,GAAGC,iBAAiB,CAAC,EAAE;IACpC;IAEA,MAAMoB,oBAAoBL,UAAUM,QAAQ;IAE5C,OAAO;QACLA,UAAUD,oBAAoB;YAAC,GAAGJ,eAAe;YAAE,GAAGI,iBAAiB;QAAA,IAAIJ;QAC3EM,SAAS7B,GAAGM,EAAE,GAAGC,iBAAiB,CAAC,EAAE;QACrC,GAAGe,SAAS;IACd;AACF;AAEAzB,SAAS,mBAAmB;IAC1BD,UAAU;QACRI,GAAG8B,aAAa;IAClB;IAEA/B,KAAK,gBAAgB;QACnB,MAAM,EAACgC,MAAM,EAAC,GAAG,MAAMvC,WAAW;YAAC;YAAkB;SAAS;QAE9DM,OAAOiC,QAAQC,qBAAqB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8BtC,CAAC;IACH;IAEAjC,KAAK,sCAAsC;QACzC,MAAMkC,aAAaZ;QACnBL,wBAAwBT,iBAAiB,CAAC0B;QAE1C,MAAM,EAACF,MAAM,EAAC,GAAG,MAAMpC,YAAYQ,sBAAsB;YAAC;SAAa;QAEvEL,OAAOmC,WAAWL,QAAQ,CAACJ,MAAM,EAAEU,oBAAoB,CAAC,cAAc;YACpEC,SAAS;QACX;QACArC,OAAOiC,QAAQK,SAAS,CAAC;IAC3B;IAEArC,KAAK,8CAA8C;QACjD,MAAMkC,aAAaZ;QACnBL,wBAAwBT,iBAAiB,CAAC0B;QAC1Cd,UAAUZ,iBAAiB,CAAC;QAE5B,MAAM,EAACwB,MAAM,EAAC,GAAG,MAAMpC,YAAYQ,sBAAsB,EAAE;QAE3DL,OAAOqB,WAAWe,oBAAoB,CAAC;YACrCG,SAAS;YACTC,UAAUxC,OAAOyC,GAAG,CAACC;QACvB;QACA1C,OAAOmC,WAAWL,QAAQ,CAACJ,MAAM,EAAEU,oBAAoB,CAAC,gBAAgB;YACtEC,SAAS;QACX;QACArC,OAAOiC,QAAQK,SAAS,CAAC;IAC3B;IAEArC,KAAK,uCAAuC;QAC1C,MAAM,EAAC0C,KAAK,EAAC,GAAG,MAAM9C,YAAYQ,sBAAsB;YAAC;SAAuB;QAEhFL,OAAO2C,OAAOJ,SAASD,SAAS,CAAC;QACjCtC,OAAO2C,OAAOC,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEA7C,KAAK,sCAAsC;QACzC,MAAMkC,aAAaZ,iBAAiB;YAClCO,UAAU;gBACRJ,QAAQxB,GAAGM,EAAE;gBACboB,MAAM1B,GAAGM,EAAE,GAAGC,iBAAiB,CAAC;oBAC9B;wBACE4B,SAAS;wBACTU,UAAU;wBACVC,WAAW;wBACXC,iBAAiB;wBACjBC,gBAAgB;wBAChBC,UAAU,EAAE;wBACZC,MAAM;wBACNC,MAAM,EAAE;oBACV;iBACD;YACH;QACF;QACAnC,wBAAwBT,iBAAiB,CAAC0B;QAE1C,MAAM,EAACQ,KAAK,EAAC,GAAG,MAAM9C,YAAYQ,sBAAsB;YAAC;SAAa;QAEtEL,OAAO2C,OAAOJ,SAASD,SAAS,CAAC;QACjCtC,OAAO2C,OAAOC,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEA7C,KAAK,uCAAuC;QAC1C,MAAM,EAAC0C,KAAK,EAAC,GAAG,MAAM9C,YAAYQ,sBAAsB;YACtD;YACA;YACA;SACD;QAEDL,OAAO2C,OAAOJ,SAASD,SAAS,CAC9B;QAEFtC,OAAO2C,OAAOC,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEA7C,KAAK,mCAAmC;QACtC,MAAMkC,aAAaZ,iBAAiB;YAClCO,UAAU;gBACRJ,QAAQxB,GAAGM,EAAE,GAAG8C,iBAAiB,CAAC,IAAIC,MAAM;gBAC5C3B,MAAM1B,GAAGM,EAAE,GAAGC,iBAAiB,CAAC,EAAE;YACpC;QACF;QACAS,wBAAwBT,iBAAiB,CAAC0B;QAE1C,MAAM,EAACQ,KAAK,EAAC,GAAG,MAAM9C,YAAYQ,sBAAsB;YAAC;SAAa;QAEtEL,OAAO2C,OAAOJ,SAASD,SAAS,CAAC;QACjCtC,OAAO2C,OAAOC,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEA7C,KAAK,qCAAqC;QACxC,MAAMkC,aAAaZ,iBAAiB;YAClCO,UAAU;gBACRJ,QAAQxB,GAAGM,EAAE;gBACboB,MAAM1B,GAAGM,EAAE,GAAG8C,iBAAiB,CAAC,IAAIC,MAAM;YAC5C;QACF;QACArC,wBAAwBT,iBAAiB,CAAC0B;QAE1C,MAAM,EAACQ,KAAK,EAAC,GAAG,MAAM9C,YAAYQ,sBAAsB;YAAC;SAAkB;QAE3EL,OAAO2C,OAAOJ,SAASD,SAAS,CAAC;QACjCtC,OAAO2C,OAAOC,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEA7C,KAAK,uFAAuF;QAC1F,MAAMkC,aAAaZ,iBAAiB;YAClCQ,SAAS7B,GAAGM,EAAE,GAAGC,iBAAiB,CAAC;gBAAC;aAAiB;QACvD;QACAS,wBAAwBT,iBAAiB,CAAC0B;QAC1Cb,WAAWb,iBAAiB,CAAC;QAE7B,MAAM,EAAC+C,MAAM,EAAEvB,MAAM,EAAC,GAAG,MAAMpC,YAAYQ,sBAAsB;YAAC;SAAa;QAE/EL,OAAOsB,YAAYc,oBAAoB,CAAC;YACtCqB,SAAS;gBACP;oBACEL,MAAM;oBACNM,OAAO;gBACT;gBACA;oBACEN,MAAM;oBACNM,OAAO;gBACT;aACD;YACDnB,SAAS;QACX;QACAvC,OAAOmC,WAAWL,QAAQ,CAACJ,MAAM,EAAEU,oBAAoB,CAAC,cAAc;YACpEC,SAAS;QACX;QACArC,OAAOiC,QAAQK,SAAS,CAAC;QACzBtC,OAAOwD,QAAQlB,SAAS,CAAC;IAC3B;IAEAvC,SAAS,4BAA4B;QACnCE,KAAK0D,IAAI,CAAC;YACR;gBACEC,iBAAiB;gBACjBC,eAAe;gBACfC,mBAAmB;gBACnBC,UAAU;gBACVC,YAAY;YACd;YACA;gBACEJ,iBAAiB;gBACjBC,eAAe;gBACfC,mBAAmB;gBACnBC,UAAU;gBACVC,YAAY;YACd;YACA;gBACEJ,iBAAiB;gBACjBC,eAAe;gBACfC,mBAAmB;gBACnBC,UAAU;gBACVC,YAAY;YACd;YACA;gBACEJ,iBAAiB;gBACjBC,eAAe;gBACfC,mBAAmB;gBACnBC,UAAU;gBACVC,YAAY;YACd;YACA;gBACEJ,iBAAiB;gBACjBC,eAAe;gBACfC,mBAAmB;gBACnBC,UAAU;gBACVC,YAAY;YACd;YACA;gBACEJ,iBAAiB;gBACjBC,eAAe;gBACfC,mBAAmB;gBACnBC,UAAU;gBACVC,YAAY;YACd;SACD,EAAE,aAAa,OAAO,EAACJ,eAAe,EAAEC,aAAa,EAAEC,iBAAiB,EAAEE,UAAU,EAAC;YACpF,MAAM7B,aAAaZ,iBAAiB;gBAClCQ,SAAS7B,GAAGM,EAAE,GAAGC,iBAAiB,CAACqD,oBAAoB;oBAAC;iBAAiB,GAAG,EAAE;YAChF;YACA5C,wBAAwBT,iBAAiB,CAAC0B;YAE1C,MAAM,EAACqB,MAAM,EAAEvB,MAAM,EAAC,GAAG,MAAMpC,YAAYQ,sBAAsB;gBAC/D;gBACA;gBACA2D;aACD;YAEDhE,OAAOmC,WAAWL,QAAQ,CAACJ,MAAM,EAAEU,oBAAoB,CAAC,cAAc;gBACpEC,SAASuB;YACX;YACA5D,OAAOiC,QAAQK,SAAS,CAAC;YAEzB,IAAIuB,eAAe;gBACjB7D,OAAOwD,QAAQlB,SAAS,CAAC;YAC3B;QACF;IACF;IAEArC,KAAK,kEAAkE;QACrE,MAAMkC,aAAaZ,iBAAiB;YAClCO,UAAU;gBACRJ,QAAQxB,GAAGM,EAAE;gBACboB,MAAM1B,GAAGM,EAAE,GAAGC,iBAAiB,CAAC,EAAE;YACpC;YACAsB,SAAS7B,GAAGM,EAAE,GAAG8C,iBAAiB,CAAC,IAAIC,MAAM;QAC/C;QACArC,wBAAwBT,iBAAiB,CAAC0B;QAE1C,MAAM,EAACQ,KAAK,EAAC,GAAG,MAAM9C,YAAYQ,sBAAsB;YAAC;SAAa;QAEtEL,OAAO2C,OAAOJ,SAASD,SAAS,CAAC;QACjCtC,OAAO2C,OAAOC,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEA7C,KAAK,sCAAsC;QACzCmB,iBAAiB6C,qBAAqB,CAAC;YACrCpD,KAAKc;QACP;QAEA,MAAM,EAACgB,KAAK,EAAC,GAAG,MAAM9C,YAAYQ,sBAAsB;YAAC;SAAa;QAEtEL,OAAO2C,OAAOJ,SAASD,SAAS,CAAC;QACjCtC,OAAO2C,OAAOC,OAAOC,MAAMC,IAAI,CAAC;IAClC;AACF"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/commands/dataset/__tests__/create.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {input, select} from '@sanity/cli-core/ux'\nimport {createTestClient, mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {PROJECT_FEATURES_API_VERSION} from '../../../services/getProjectFeatures.js'\nimport {CreateDatasetCommand} from '../create.js'\n\nconst mockListDatasets = vi.hoisted(() => vi.fn())\nconst mockCreateDataset = vi.hoisted(() => vi.fn())\nconst testProjectId = vi.hoisted(() => 'test-project')\nconst testToken = vi.hoisted(() => 'test-token')\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual('@sanity/cli-core')\n\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 create: mockCreateDataset,\n list: mockListDatasets,\n } as never,\n request: testClient.request,\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 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('#dataset: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', async () => {\n const {stdout} = await runCommand(['dataset create', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Create a new dataset within your project\n\n USAGE\n $ sanity dataset create [NAME] [--visibility custom|private|public]\n\n ARGUMENTS\n [NAME] Name of the dataset to create\n\n FLAGS\n --visibility=<option> Set visibility for this dataset (custom/private/public)\n <options: custom|private|public>\n\n DESCRIPTION\n Create a new dataset within your project\n\n EXAMPLES\n Interactively create a dataset\n\n $ sanity dataset create\n\n Create a dataset named \"my-dataset\"\n\n $ sanity dataset create my-dataset\n\n Create a private dataset named \"my-dataset\"\n\n $ sanity dataset create my-dataset --visibility private\n\n \"\n `)\n })\n\n test('creates dataset with provided name', 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, [])\n mockCreateDataset.mockResolvedValue(undefined as never)\n\n const {stdout} = await testCommand(CreateDatasetCommand, ['my-dataset'], {\n mocks: defaultMocks,\n })\n\n expect(mockCreateDataset).toHaveBeenCalledWith('my-dataset', {\n aclMode: 'public',\n })\n expect(stdout).toContain('Dataset created successfully')\n })\n\n test('prompts for dataset name when not provided', async () => {\n mockListDatasets.mockResolvedValue([])\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 mockCreateDataset.mockResolvedValue(undefined as never)\n mockInput.mockResolvedValue('test-dataset')\n\n const {stdout} = await testCommand(CreateDatasetCommand, [], {\n mocks: defaultMocks,\n })\n\n expect(mockInput).toHaveBeenCalledWith({\n message: 'Dataset name:',\n validate: expect.any(Function),\n })\n expect(mockCreateDataset).toHaveBeenCalledWith('test-dataset', {\n aclMode: 'public',\n })\n expect(stdout).toContain('Dataset created successfully')\n })\n\n test('errors when dataset name is invalid', async () => {\n const {error} = await testCommand(CreateDatasetCommand, ['Invalid-Dataset-Name'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('must be all lowercase')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('errors when dataset already exists', async () => {\n mockListDatasets.mockResolvedValue([\n {\n aclMode: 'public',\n addonFor: null,\n createdAt: '2023-01-01T00:00:00Z',\n createdByUserId: 'user1',\n datasetProfile: 'default',\n features: [],\n name: 'production',\n tags: [],\n },\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(CreateDatasetCommand, ['production'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Dataset \"production\" already exists')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('errors with invalid visibility flag', async () => {\n const {error} = await testCommand(\n CreateDatasetCommand,\n ['my-dataset', '--visibility', 'invalid'],\n {mocks: defaultMocks},\n )\n\n expect(error?.message).toContain(\n 'Expected --visibility=invalid to be one of: custom, private, public',\n )\n expect(error?.oclif?.exit).toBe(2)\n })\n\n test('handles dataset creation errors', async () => {\n mockListDatasets.mockResolvedValue([])\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 mockCreateDataset.mockRejectedValue(new Error('API Error'))\n\n const {error} = await testCommand(CreateDatasetCommand, ['my-dataset'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Dataset creation failed: API Error')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('prompts for dataset visibility when private datasets available and no flag provided', async () => {\n mockListDatasets.mockResolvedValue([])\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: '/features',\n }).reply(200, ['privateDataset'])\n mockCreateDataset.mockResolvedValue(undefined as never)\n mockSelect.mockResolvedValue('private')\n\n const {stderr, stdout} = await testCommand(CreateDatasetCommand, ['my-dataset'], {\n mocks: defaultMocks,\n })\n\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {\n name: 'Public (world readable)',\n value: 'public',\n },\n {\n name: 'Private (Authenticated user or token needed)',\n value: 'private',\n },\n ],\n message: 'Dataset visibility',\n })\n expect(mockCreateDataset).toHaveBeenCalledWith('my-dataset', {\n aclMode: 'private',\n })\n expect(stdout).toContain('Dataset created successfully')\n expect(stderr).toContain('Please note that while documents are private')\n })\n\n describe('visibility flag handling', () => {\n test.each([\n {\n expectedAclMode: 'public',\n expectWarning: false,\n hasPrivateFeature: true,\n testName: 'creates public dataset when privateDataset feature available',\n visibility: 'public',\n },\n {\n expectedAclMode: 'private',\n expectWarning: false,\n hasPrivateFeature: true,\n testName: 'creates private dataset when privateDataset feature available',\n visibility: 'private',\n },\n {\n expectedAclMode: 'custom',\n expectWarning: false,\n hasPrivateFeature: true,\n testName: 'creates custom dataset when privateDataset feature available',\n visibility: 'custom',\n },\n {\n expectedAclMode: 'public',\n expectWarning: false,\n hasPrivateFeature: false,\n testName: 'creates public dataset when privateDataset feature not available',\n visibility: 'public',\n },\n {\n expectedAclMode: 'public',\n expectWarning: true,\n hasPrivateFeature: false,\n testName: 'creates public dataset with warning when private requested but not available',\n visibility: 'private',\n },\n {\n expectedAclMode: 'custom',\n expectWarning: false,\n hasPrivateFeature: false,\n testName: 'creates custom dataset when privateDataset feature not available',\n visibility: 'custom',\n },\n ])('$testName', async ({expectedAclMode, expectWarning, hasPrivateFeature, visibility}) => {\n mockListDatasets.mockResolvedValue([])\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: '/features',\n }).reply(200, hasPrivateFeature ? ['privateDataset'] : [])\n mockCreateDataset.mockResolvedValue(undefined as never)\n\n const {stderr, stdout} = await testCommand(\n CreateDatasetCommand,\n ['my-dataset', '--visibility', visibility],\n {mocks: defaultMocks},\n )\n\n expect(mockCreateDataset).toHaveBeenCalledWith('my-dataset', {\n aclMode: expectedAclMode,\n })\n expect(stdout).toContain('Dataset created successfully')\n\n if (expectWarning) {\n expect(stderr).toContain('Private datasets are not available for this project')\n }\n })\n })\n\n test('handles client request failure independently from listDatasets', async () => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: '/features',\n }).reply(500, {error: 'Features API error'})\n\n const {error} = await testCommand(CreateDatasetCommand, ['my-dataset'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Failed to fetch project data: Features API error')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('errors when no project ID is found', async () => {\n const {error} = await testCommand(CreateDatasetCommand, ['my-dataset'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: undefined},\n },\n })\n\n expect(error?.message).toContain('sanity.cli.ts does not contain a project identifier')\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","input","select","createTestClient","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","PROJECT_FEATURES_API_VERSION","CreateDatasetCommand","mockListDatasets","hoisted","fn","mockCreateDataset","testProjectId","testToken","mock","actual","importActual","testClient","apiVersion","projectId","token","getProjectCliClient","mockResolvedValue","datasets","create","list","request","defaultMocks","cliConfig","api","projectRoot","directory","path","type","mockInput","mocked","mockSelect","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","apiHost","method","uri","reply","undefined","mocks","toHaveBeenCalledWith","aclMode","toContain","message","validate","any","Function","error","oclif","exit","toBe","addonFor","createdAt","createdByUserId","datasetProfile","features","name","tags","mockRejectedValue","Error","stderr","choices","value","each","expectedAclMode","expectWarning","hasPrivateFeature","testName","visibility"],"mappings":"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"}
|