@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,6 +1,6 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import { runCommand } from '@oclif/test';
|
|
3
|
-
import {
|
|
3
|
+
import { getProjectCliClient } from '@sanity/cli-core';
|
|
4
4
|
import { input, select } from '@sanity/cli-core/ux';
|
|
5
5
|
import { testCommand } from '@sanity/cli-test';
|
|
6
6
|
import { exportDataset } from '@sanity/export';
|
|
@@ -18,34 +18,24 @@ vi.mock('@sanity/cli-core/ux', async ()=>{
|
|
|
18
18
|
select: vi.fn()
|
|
19
19
|
};
|
|
20
20
|
});
|
|
21
|
-
vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
|
|
22
|
-
findProjectRoot: vi.fn().mockResolvedValue({
|
|
23
|
-
directory: '/test/path',
|
|
24
|
-
root: '/test/path',
|
|
25
|
-
type: 'studio'
|
|
26
|
-
})
|
|
27
|
-
}));
|
|
28
|
-
vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
|
|
29
|
-
getCliConfig: vi.fn()
|
|
30
|
-
}));
|
|
31
|
-
vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
|
|
32
|
-
getCliToken: vi.fn().mockResolvedValue('test-token')
|
|
33
|
-
}));
|
|
34
|
-
vi.mock('../../../../../cli-core/src/services/apiClient.js', ()=>({
|
|
35
|
-
getProjectCliClient: vi.fn()
|
|
36
|
-
}));
|
|
37
21
|
vi.mock('node:fs/promises', ()=>({
|
|
38
22
|
default: {
|
|
39
23
|
mkdir: vi.fn().mockResolvedValue(undefined),
|
|
40
24
|
stat: vi.fn()
|
|
41
25
|
}
|
|
42
26
|
}));
|
|
27
|
+
vi.mock('@sanity/cli-core', async ()=>{
|
|
28
|
+
const actual = await vi.importActual('@sanity/cli-core');
|
|
29
|
+
return {
|
|
30
|
+
...actual,
|
|
31
|
+
getProjectCliClient: vi.fn()
|
|
32
|
+
};
|
|
33
|
+
});
|
|
43
34
|
const mockExportDataset = vi.mocked(exportDataset);
|
|
44
35
|
const mockInput = vi.mocked(input);
|
|
45
36
|
const mockSelect = vi.mocked(select);
|
|
46
|
-
const mockGetCliConfig = vi.mocked(getCliConfig);
|
|
47
|
-
const mockGetProjectCliClient = vi.mocked(getProjectCliClient);
|
|
48
37
|
const mockFs = vi.mocked(fs);
|
|
38
|
+
const mockGetProjectCliClient = vi.mocked(getProjectCliClient);
|
|
49
39
|
const TEST_CONFIG = {
|
|
50
40
|
DATASET: 'production',
|
|
51
41
|
PROJECT_ID: 'test-project'
|
|
@@ -61,6 +51,20 @@ const ERROR_MESSAGES = {
|
|
|
61
51
|
EXPORT_FAILED: 'Export failed',
|
|
62
52
|
USE_OVERWRITE: '--overwrite'
|
|
63
53
|
};
|
|
54
|
+
const defaultMocks = {
|
|
55
|
+
cliConfig: {
|
|
56
|
+
api: {
|
|
57
|
+
dataset: TEST_CONFIG.DATASET,
|
|
58
|
+
projectId: TEST_CONFIG.PROJECT_ID
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
projectRoot: {
|
|
62
|
+
directory: '/test/path',
|
|
63
|
+
path: '/test/path/sanity.config.ts',
|
|
64
|
+
type: 'studio'
|
|
65
|
+
},
|
|
66
|
+
token: 'test-token'
|
|
67
|
+
};
|
|
64
68
|
const createTestContext = (overrides = {})=>{
|
|
65
69
|
const defaults = {
|
|
66
70
|
dataset: TEST_CONFIG.DATASET,
|
|
@@ -80,20 +84,6 @@ const createTestContext = (overrides = {})=>{
|
|
|
80
84
|
...defaults,
|
|
81
85
|
...overrides
|
|
82
86
|
};
|
|
83
|
-
// Setup CLI config
|
|
84
|
-
const apiConfig = {
|
|
85
|
-
projectId: context.projectId
|
|
86
|
-
};
|
|
87
|
-
if (context.dataset) apiConfig.dataset = context.dataset;
|
|
88
|
-
mockGetCliConfig.mockResolvedValue({
|
|
89
|
-
api: apiConfig
|
|
90
|
-
});
|
|
91
|
-
// Setup project client
|
|
92
|
-
mockGetProjectCliClient.mockResolvedValue({
|
|
93
|
-
datasets: {
|
|
94
|
-
list: vi.fn().mockResolvedValue(context.datasets)
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
87
|
// Setup file system
|
|
98
88
|
if (context.fileExists) {
|
|
99
89
|
mockFs.stat.mockResolvedValue({
|
|
@@ -110,7 +100,23 @@ const createTestContext = (overrides = {})=>{
|
|
|
110
100
|
if (context.inputValue) {
|
|
111
101
|
mockInput.mockResolvedValueOnce(context.inputValue);
|
|
112
102
|
}
|
|
113
|
-
|
|
103
|
+
const apiConfig = {
|
|
104
|
+
projectId: context.projectId
|
|
105
|
+
};
|
|
106
|
+
if (context.dataset) apiConfig.dataset = context.dataset;
|
|
107
|
+
mockGetProjectCliClient.mockResolvedValue({
|
|
108
|
+
datasets: {
|
|
109
|
+
list: vi.fn().mockResolvedValue(context.datasets)
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
mocks: {
|
|
114
|
+
...defaultMocks,
|
|
115
|
+
cliConfig: {
|
|
116
|
+
api: apiConfig
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
};
|
|
114
120
|
};
|
|
115
121
|
describe('#dataset:export', ()=>{
|
|
116
122
|
afterEach(()=>{
|
|
@@ -147,7 +153,7 @@ describe('#dataset:export', ()=>{
|
|
|
147
153
|
shouldShowDetails: false
|
|
148
154
|
}
|
|
149
155
|
])('exports dataset $description', async ({ args, expectedPathPattern, inputValue, shouldShowDetails })=>{
|
|
150
|
-
createTestContext({
|
|
156
|
+
const { mocks } = createTestContext({
|
|
151
157
|
datasets: [
|
|
152
158
|
{
|
|
153
159
|
name: 'production'
|
|
@@ -155,7 +161,9 @@ describe('#dataset:export', ()=>{
|
|
|
155
161
|
],
|
|
156
162
|
inputValue
|
|
157
163
|
});
|
|
158
|
-
const { stdout } = await testCommand(DatasetExportCommand, args
|
|
164
|
+
const { stdout } = await testCommand(DatasetExportCommand, args, {
|
|
165
|
+
mocks
|
|
166
|
+
});
|
|
159
167
|
expect(mockExportDataset).toHaveBeenCalledWith(expect.objectContaining({
|
|
160
168
|
assetConcurrency: 8,
|
|
161
169
|
assets: true,
|
|
@@ -176,7 +184,7 @@ describe('#dataset:export', ()=>{
|
|
|
176
184
|
}
|
|
177
185
|
});
|
|
178
186
|
test('exports to stdout with dash', async ()=>{
|
|
179
|
-
createTestContext({
|
|
187
|
+
const { mocks } = createTestContext({
|
|
180
188
|
datasets: [
|
|
181
189
|
{
|
|
182
190
|
name: 'production'
|
|
@@ -186,13 +194,15 @@ describe('#dataset:export', ()=>{
|
|
|
186
194
|
await testCommand(DatasetExportCommand, [
|
|
187
195
|
'production',
|
|
188
196
|
'-'
|
|
189
|
-
]
|
|
197
|
+
], {
|
|
198
|
+
mocks
|
|
199
|
+
});
|
|
190
200
|
expect(mockExportDataset).toHaveBeenCalledWith(expect.objectContaining({
|
|
191
201
|
outputPath: process.stdout
|
|
192
202
|
}));
|
|
193
203
|
});
|
|
194
204
|
test('prompts for destination when not provided as argument', async ()=>{
|
|
195
|
-
createTestContext({
|
|
205
|
+
const { mocks } = createTestContext({
|
|
196
206
|
datasets: [
|
|
197
207
|
{
|
|
198
208
|
name: 'production'
|
|
@@ -202,7 +212,9 @@ describe('#dataset:export', ()=>{
|
|
|
202
212
|
});
|
|
203
213
|
await testCommand(DatasetExportCommand, [
|
|
204
214
|
'production'
|
|
205
|
-
]
|
|
215
|
+
], {
|
|
216
|
+
mocks
|
|
217
|
+
});
|
|
206
218
|
expect(mockInput).toHaveBeenCalledWith({
|
|
207
219
|
default: expect.stringMatching(/production\.tar\.gz$/),
|
|
208
220
|
message: 'Output path:',
|
|
@@ -216,12 +228,14 @@ describe('#dataset:export', ()=>{
|
|
|
216
228
|
});
|
|
217
229
|
describe('dataset selection', ()=>{
|
|
218
230
|
test('prompts for dataset selection when none specified', async ()=>{
|
|
219
|
-
createTestContext({
|
|
231
|
+
const { mocks } = createTestContext({
|
|
220
232
|
dataset: null,
|
|
221
233
|
inputValue: 'staging.tar.gz',
|
|
222
234
|
selectValue: 'staging'
|
|
223
235
|
});
|
|
224
|
-
await testCommand(DatasetExportCommand, []
|
|
236
|
+
await testCommand(DatasetExportCommand, [], {
|
|
237
|
+
mocks
|
|
238
|
+
});
|
|
225
239
|
expect(mockSelect).toHaveBeenCalledWith({
|
|
226
240
|
choices: [
|
|
227
241
|
{
|
|
@@ -240,7 +254,7 @@ describe('#dataset:export', ()=>{
|
|
|
240
254
|
}));
|
|
241
255
|
});
|
|
242
256
|
test('uses and announces default dataset from config', async ()=>{
|
|
243
|
-
createTestContext({
|
|
257
|
+
const { mocks } = createTestContext({
|
|
244
258
|
dataset: 'staging',
|
|
245
259
|
datasets: [
|
|
246
260
|
{
|
|
@@ -249,14 +263,16 @@ describe('#dataset:export', ()=>{
|
|
|
249
263
|
],
|
|
250
264
|
inputValue: 'staging.tar.gz'
|
|
251
265
|
});
|
|
252
|
-
const { stdout } = await testCommand(DatasetExportCommand, []
|
|
266
|
+
const { stdout } = await testCommand(DatasetExportCommand, [], {
|
|
267
|
+
mocks
|
|
268
|
+
});
|
|
253
269
|
expect(stdout).toContain('Using default dataset: staging');
|
|
254
270
|
expect(mockExportDataset).toHaveBeenCalledWith(expect.objectContaining({
|
|
255
271
|
dataset: 'staging'
|
|
256
272
|
}));
|
|
257
273
|
});
|
|
258
274
|
test('validates dataset exists in project', async ()=>{
|
|
259
|
-
createTestContext({
|
|
275
|
+
const { mocks } = createTestContext({
|
|
260
276
|
datasets: [
|
|
261
277
|
{
|
|
262
278
|
name: 'production'
|
|
@@ -266,14 +282,16 @@ describe('#dataset:export', ()=>{
|
|
|
266
282
|
const { error } = await testCommand(DatasetExportCommand, [
|
|
267
283
|
'staging',
|
|
268
284
|
TEST_OUTPUTS.TAR_GZ
|
|
269
|
-
]
|
|
285
|
+
], {
|
|
286
|
+
mocks
|
|
287
|
+
});
|
|
270
288
|
expect(error?.message).toContain(`${ERROR_MESSAGES.DATASET_NOT_FOUND} "staging" not found`);
|
|
271
289
|
expect(error?.oclif?.exit).toBe(1);
|
|
272
290
|
});
|
|
273
291
|
});
|
|
274
292
|
describe('file operations', ()=>{
|
|
275
293
|
test('creates parent directory for nested output paths', async ()=>{
|
|
276
|
-
createTestContext({
|
|
294
|
+
const { mocks } = createTestContext({
|
|
277
295
|
datasets: [
|
|
278
296
|
{
|
|
279
297
|
name: 'production'
|
|
@@ -283,13 +301,15 @@ describe('#dataset:export', ()=>{
|
|
|
283
301
|
await testCommand(DatasetExportCommand, [
|
|
284
302
|
'production',
|
|
285
303
|
TEST_OUTPUTS.SUBDIR
|
|
286
|
-
]
|
|
304
|
+
], {
|
|
305
|
+
mocks
|
|
306
|
+
});
|
|
287
307
|
expect(mockFs.mkdir).toHaveBeenCalledWith(expect.stringMatching(/subdir$/), {
|
|
288
308
|
recursive: true
|
|
289
309
|
});
|
|
290
310
|
});
|
|
291
311
|
test('prevents overwrite without flag', async ()=>{
|
|
292
|
-
createTestContext({
|
|
312
|
+
const { mocks } = createTestContext({
|
|
293
313
|
datasets: [
|
|
294
314
|
{
|
|
295
315
|
name: 'production'
|
|
@@ -300,13 +320,15 @@ describe('#dataset:export', ()=>{
|
|
|
300
320
|
const { error } = await testCommand(DatasetExportCommand, [
|
|
301
321
|
'production',
|
|
302
322
|
TEST_OUTPUTS.EXISTING
|
|
303
|
-
]
|
|
323
|
+
], {
|
|
324
|
+
mocks
|
|
325
|
+
});
|
|
304
326
|
expect(error?.message).toContain(ERROR_MESSAGES.ALREADY_EXISTS);
|
|
305
327
|
expect(error?.message).toContain(ERROR_MESSAGES.USE_OVERWRITE);
|
|
306
328
|
expect(error?.oclif?.exit).toBe(1);
|
|
307
329
|
});
|
|
308
330
|
test('allows overwrite with flag', async ()=>{
|
|
309
|
-
createTestContext({
|
|
331
|
+
const { mocks } = createTestContext({
|
|
310
332
|
datasets: [
|
|
311
333
|
{
|
|
312
334
|
name: 'production'
|
|
@@ -318,11 +340,13 @@ describe('#dataset:export', ()=>{
|
|
|
318
340
|
'production',
|
|
319
341
|
TEST_OUTPUTS.EXISTING,
|
|
320
342
|
'--overwrite'
|
|
321
|
-
]
|
|
343
|
+
], {
|
|
344
|
+
mocks
|
|
345
|
+
});
|
|
322
346
|
expect(mockExportDataset).toHaveBeenCalled();
|
|
323
347
|
});
|
|
324
348
|
test('handles directory creation errors gracefully', async ()=>{
|
|
325
|
-
createTestContext({
|
|
349
|
+
const { mocks } = createTestContext({
|
|
326
350
|
datasets: [
|
|
327
351
|
{
|
|
328
352
|
name: 'production'
|
|
@@ -336,13 +360,15 @@ describe('#dataset:export', ()=>{
|
|
|
336
360
|
const { error } = await testCommand(DatasetExportCommand, [
|
|
337
361
|
'production',
|
|
338
362
|
TEST_OUTPUTS.SUBDIR
|
|
339
|
-
]
|
|
363
|
+
], {
|
|
364
|
+
mocks
|
|
365
|
+
});
|
|
340
366
|
expect(error?.message).toContain('Permission denied: Cannot create directory');
|
|
341
367
|
expect(error?.message).toContain('Please check write permissions');
|
|
342
368
|
expect(error?.oclif?.exit).toBe(1);
|
|
343
369
|
});
|
|
344
370
|
test('handles other directory creation errors gracefully', async ()=>{
|
|
345
|
-
createTestContext({
|
|
371
|
+
const { mocks } = createTestContext({
|
|
346
372
|
datasets: [
|
|
347
373
|
{
|
|
348
374
|
name: 'production'
|
|
@@ -355,7 +381,9 @@ describe('#dataset:export', ()=>{
|
|
|
355
381
|
const { error } = await testCommand(DatasetExportCommand, [
|
|
356
382
|
'production',
|
|
357
383
|
TEST_OUTPUTS.SUBDIR
|
|
358
|
-
]
|
|
384
|
+
], {
|
|
385
|
+
mocks
|
|
386
|
+
});
|
|
359
387
|
expect(error?.message).toContain('Failed to create directory');
|
|
360
388
|
expect(error?.message).toContain('Disk full');
|
|
361
389
|
expect(error?.oclif?.exit).toBe(1);
|
|
@@ -363,7 +391,7 @@ describe('#dataset:export', ()=>{
|
|
|
363
391
|
});
|
|
364
392
|
describe('export options', ()=>{
|
|
365
393
|
test('sets assets:false when --no-assets flag is used', async ()=>{
|
|
366
|
-
createTestContext({
|
|
394
|
+
const { mocks } = createTestContext({
|
|
367
395
|
datasets: [
|
|
368
396
|
{
|
|
369
397
|
name: 'production'
|
|
@@ -374,13 +402,15 @@ describe('#dataset:export', ()=>{
|
|
|
374
402
|
'production',
|
|
375
403
|
TEST_OUTPUTS.TAR_GZ,
|
|
376
404
|
'--no-assets'
|
|
377
|
-
]
|
|
405
|
+
], {
|
|
406
|
+
mocks
|
|
407
|
+
});
|
|
378
408
|
expect(mockExportDataset).toHaveBeenCalledWith(expect.objectContaining({
|
|
379
409
|
assets: false
|
|
380
410
|
}));
|
|
381
411
|
});
|
|
382
412
|
test('parses comma-separated types with --types flag', async ()=>{
|
|
383
|
-
createTestContext({
|
|
413
|
+
const { mocks } = createTestContext({
|
|
384
414
|
datasets: [
|
|
385
415
|
{
|
|
386
416
|
name: 'production'
|
|
@@ -392,7 +422,9 @@ describe('#dataset:export', ()=>{
|
|
|
392
422
|
TEST_OUTPUTS.TAR_GZ,
|
|
393
423
|
'--types',
|
|
394
424
|
'post,author'
|
|
395
|
-
]
|
|
425
|
+
], {
|
|
426
|
+
mocks
|
|
427
|
+
});
|
|
396
428
|
expect(mockExportDataset).toHaveBeenCalledWith(expect.objectContaining({
|
|
397
429
|
types: [
|
|
398
430
|
'post',
|
|
@@ -401,7 +433,7 @@ describe('#dataset:export', ()=>{
|
|
|
401
433
|
}));
|
|
402
434
|
});
|
|
403
435
|
test('sets raw:true when --raw flag is used', async ()=>{
|
|
404
|
-
createTestContext({
|
|
436
|
+
const { mocks } = createTestContext({
|
|
405
437
|
datasets: [
|
|
406
438
|
{
|
|
407
439
|
name: 'production'
|
|
@@ -412,13 +444,15 @@ describe('#dataset:export', ()=>{
|
|
|
412
444
|
'production',
|
|
413
445
|
TEST_OUTPUTS.TAR_GZ,
|
|
414
446
|
'--raw'
|
|
415
|
-
]
|
|
447
|
+
], {
|
|
448
|
+
mocks
|
|
449
|
+
});
|
|
416
450
|
expect(mockExportDataset).toHaveBeenCalledWith(expect.objectContaining({
|
|
417
451
|
raw: true
|
|
418
452
|
}));
|
|
419
453
|
});
|
|
420
454
|
test('sets mode to cursor with --mode flag', async ()=>{
|
|
421
|
-
createTestContext({
|
|
455
|
+
const { mocks } = createTestContext({
|
|
422
456
|
datasets: [
|
|
423
457
|
{
|
|
424
458
|
name: 'production'
|
|
@@ -430,7 +464,9 @@ describe('#dataset:export', ()=>{
|
|
|
430
464
|
TEST_OUTPUTS.TAR_GZ,
|
|
431
465
|
'--mode',
|
|
432
466
|
'cursor'
|
|
433
|
-
]
|
|
467
|
+
], {
|
|
468
|
+
mocks
|
|
469
|
+
});
|
|
434
470
|
expect(mockExportDataset).toHaveBeenCalledWith(expect.objectContaining({
|
|
435
471
|
mode: 'cursor'
|
|
436
472
|
}));
|
|
@@ -438,28 +474,32 @@ describe('#dataset:export', ()=>{
|
|
|
438
474
|
});
|
|
439
475
|
describe('error handling', ()=>{
|
|
440
476
|
test('fails without project ID', async ()=>{
|
|
441
|
-
createTestContext({
|
|
477
|
+
const { mocks } = createTestContext({
|
|
442
478
|
projectId: undefined
|
|
443
479
|
});
|
|
444
480
|
const { error } = await testCommand(DatasetExportCommand, [
|
|
445
481
|
'production',
|
|
446
482
|
TEST_OUTPUTS.TAR_GZ
|
|
447
|
-
]
|
|
483
|
+
], {
|
|
484
|
+
mocks
|
|
485
|
+
});
|
|
448
486
|
expect(error?.message).toEqual(NO_PROJECT_ID);
|
|
449
487
|
expect(error?.oclif?.exit).toBe(1);
|
|
450
488
|
});
|
|
451
489
|
test('handles cancelled dataset selection gracefully', async ()=>{
|
|
452
|
-
createTestContext({
|
|
490
|
+
const { mocks } = createTestContext({
|
|
453
491
|
dataset: null
|
|
454
492
|
});
|
|
455
493
|
// Mock select to simulate user cancellation (Ctrl+C throws an error)
|
|
456
494
|
mockSelect.mockRejectedValueOnce(new Error('User cancelled'));
|
|
457
|
-
const { error } = await testCommand(DatasetExportCommand, []
|
|
495
|
+
const { error } = await testCommand(DatasetExportCommand, [], {
|
|
496
|
+
mocks
|
|
497
|
+
});
|
|
458
498
|
expect(error?.message).toContain('User cancelled');
|
|
459
499
|
expect(error?.oclif?.exit).toBe(1);
|
|
460
500
|
});
|
|
461
501
|
test('handles export errors with detailed error message', async ()=>{
|
|
462
|
-
createTestContext({
|
|
502
|
+
const { mocks } = createTestContext({
|
|
463
503
|
datasets: [
|
|
464
504
|
{
|
|
465
505
|
name: 'production'
|
|
@@ -471,12 +511,14 @@ describe('#dataset:export', ()=>{
|
|
|
471
511
|
const { error } = await testCommand(DatasetExportCommand, [
|
|
472
512
|
'production',
|
|
473
513
|
TEST_OUTPUTS.TAR_GZ
|
|
474
|
-
]
|
|
514
|
+
], {
|
|
515
|
+
mocks
|
|
516
|
+
});
|
|
475
517
|
expect(error?.message).toBe(`${ERROR_MESSAGES.EXPORT_FAILED}: Network timeout during export`);
|
|
476
518
|
expect(error?.oclif?.exit).toBe(1);
|
|
477
519
|
});
|
|
478
520
|
test('validates dataset name format', async ()=>{
|
|
479
|
-
createTestContext({
|
|
521
|
+
const { mocks } = createTestContext({
|
|
480
522
|
datasets: [
|
|
481
523
|
{
|
|
482
524
|
name: 'production'
|
|
@@ -486,19 +528,13 @@ describe('#dataset:export', ()=>{
|
|
|
486
528
|
const { error } = await testCommand(DatasetExportCommand, [
|
|
487
529
|
'INVALID-DATASET',
|
|
488
530
|
TEST_OUTPUTS.TAR_GZ
|
|
489
|
-
]
|
|
531
|
+
], {
|
|
532
|
+
mocks
|
|
533
|
+
});
|
|
490
534
|
expect(error?.message).toContain('lowercase');
|
|
491
535
|
expect(error?.oclif?.exit).toBe(1);
|
|
492
536
|
});
|
|
493
537
|
test('handles dataset listing errors gracefully', async ()=>{
|
|
494
|
-
// Setup basic context but override the datasets.list to throw an error
|
|
495
|
-
createTestContext({
|
|
496
|
-
datasets: [
|
|
497
|
-
{
|
|
498
|
-
name: 'production'
|
|
499
|
-
}
|
|
500
|
-
]
|
|
501
|
-
});
|
|
502
538
|
const listError = new Error('Network error: Unable to connect to API');
|
|
503
539
|
mockGetProjectCliClient.mockResolvedValue({
|
|
504
540
|
datasets: {
|
|
@@ -508,13 +544,15 @@ describe('#dataset:export', ()=>{
|
|
|
508
544
|
const { error } = await testCommand(DatasetExportCommand, [
|
|
509
545
|
'production',
|
|
510
546
|
TEST_OUTPUTS.TAR_GZ
|
|
511
|
-
]
|
|
547
|
+
], {
|
|
548
|
+
mocks: defaultMocks
|
|
549
|
+
});
|
|
512
550
|
expect(error?.message).toContain('Failed to list datasets:');
|
|
513
551
|
expect(error?.message).toContain('Network error: Unable to connect to API');
|
|
514
552
|
expect(error?.oclif?.exit).toBe(1);
|
|
515
553
|
});
|
|
516
554
|
test('handles progress updates correctly', async ()=>{
|
|
517
|
-
createTestContext({
|
|
555
|
+
const { mocks } = createTestContext({
|
|
518
556
|
datasets: [
|
|
519
557
|
{
|
|
520
558
|
name: 'production'
|
|
@@ -550,7 +588,9 @@ describe('#dataset:export', ()=>{
|
|
|
550
588
|
const { stdout } = await testCommand(DatasetExportCommand, [
|
|
551
589
|
'production',
|
|
552
590
|
TEST_OUTPUTS.TAR_GZ
|
|
553
|
-
]
|
|
591
|
+
], {
|
|
592
|
+
mocks
|
|
593
|
+
});
|
|
554
594
|
// Verify command completed successfully
|
|
555
595
|
expect(stdout).toContain('Export finished');
|
|
556
596
|
expect(mockExportDataset).toHaveBeenCalled();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/commands/dataset/__tests__/export.test.ts"],"sourcesContent":["import fs from 'node:fs/promises'\n\nimport {runCommand} from '@oclif/test'\nimport {type CliConfig, getCliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {input, select} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport {exportDataset, type ExportResult} from '@sanity/export'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {DatasetExportCommand} from '../export.js'\n\nvi.mock('@sanity/export', () => ({\n exportDataset: vi.fn().mockResolvedValue(undefined),\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\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn(),\n}))\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\nvi.mock('../../../../../cli-core/src/services/apiClient.js', () => ({\n getProjectCliClient: vi.fn(),\n}))\n\nvi.mock('node:fs/promises', () => ({\n default: {\n mkdir: vi.fn().mockResolvedValue(undefined),\n stat: vi.fn(),\n },\n}))\n\nconst mockExportDataset = vi.mocked(exportDataset)\nconst mockInput = vi.mocked(input)\nconst mockSelect = vi.mocked(select)\nconst mockGetCliConfig = vi.mocked(getCliConfig)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\nconst mockFs = vi.mocked(fs)\n\nconst TEST_CONFIG = {\n DATASET: 'production',\n PROJECT_ID: 'test-project',\n} as const\n\nconst TEST_OUTPUTS = {\n EXISTING: 'existing.tar.gz',\n SUBDIR: 'subdir/output.tar.gz',\n TAR_GZ: 'output.tar.gz',\n} as const\n\nconst ERROR_MESSAGES = {\n ALREADY_EXISTS: 'already exists',\n DATASET_NOT_FOUND: 'Dataset with name',\n EXPORT_FAILED: 'Export failed',\n USE_OVERWRITE: '--overwrite',\n} as const\n\nconst createTestContext = (\n overrides: {\n dataset?: string | null\n datasets?: Array<{name: string}>\n fileExists?: boolean\n inputValue?: string\n isFile?: boolean\n projectId?: string\n selectValue?: string\n } = {},\n) => {\n const defaults = {\n dataset: TEST_CONFIG.DATASET,\n datasets: [{name: 'production'}, {name: 'staging'}],\n fileExists: false,\n isFile: true,\n projectId: TEST_CONFIG.PROJECT_ID,\n }\n\n const context = {...defaults, ...overrides}\n\n // Setup CLI config\n const apiConfig: CliConfig['api'] = {projectId: context.projectId}\n if (context.dataset) apiConfig.dataset = context.dataset\n\n mockGetCliConfig.mockResolvedValue({api: apiConfig})\n\n // Setup project client\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n list: vi.fn().mockResolvedValue(context.datasets),\n },\n } as never)\n\n // Setup file system\n if (context.fileExists) {\n mockFs.stat.mockResolvedValue({\n isFile: () => context.isFile,\n } as never)\n } else {\n mockFs.stat.mockRejectedValue(new Error('File not found'))\n }\n\n // Setup select if provided\n if (context.selectValue) {\n mockSelect.mockResolvedValueOnce(context.selectValue)\n }\n\n // Setup input if provided\n if (context.inputValue) {\n mockInput.mockResolvedValueOnce(context.inputValue)\n }\n\n return context\n}\n\ndescribe('#dataset:export', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['dataset:export', '--help'])\n\n expect(stdout).toContain('Export dataset to local filesystem as a gzipped tarball')\n expect(stdout).toContain('ARGUMENTS')\n expect(stdout).toContain('EXAMPLES')\n expect(stdout).toContain('--no-assets')\n })\n\n describe('successful exports', () => {\n test.each([\n {\n args: ['production', TEST_OUTPUTS.TAR_GZ],\n description: 'with specified file',\n expectedPathPattern: /output\\.tar\\.gz$/,\n shouldShowDetails: true,\n },\n {\n args: ['production'],\n description: 'with auto-generated filename when no destination provided via prompt',\n expectedPathPattern: /custom-output\\.tar\\.gz$/,\n inputValue: 'custom-output.tar.gz',\n shouldShowDetails: false,\n },\n ])(\n 'exports dataset $description',\n async ({args, expectedPathPattern, inputValue, shouldShowDetails}) => {\n createTestContext({datasets: [{name: 'production'}], inputValue})\n\n const {stdout} = await testCommand(DatasetExportCommand, args)\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n assetConcurrency: 8,\n assets: true,\n client: expect.any(Object),\n compress: true,\n dataset: 'production',\n drafts: true,\n mode: 'stream',\n onProgress: expect.any(Function),\n outputPath: expect.stringMatching(expectedPathPattern),\n raw: false,\n types: undefined,\n }),\n )\n\n if (shouldShowDetails) {\n expect(stdout).toContain('projectId: test-project')\n expect(stdout).toContain('dataset: production')\n expect(stdout).toContain('Export finished')\n }\n },\n )\n\n test('exports to stdout with dash', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', '-'])\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n outputPath: process.stdout,\n }),\n )\n })\n\n test('prompts for destination when not provided as argument', async () => {\n createTestContext({\n datasets: [{name: 'production'}],\n inputValue: '/custom/path/export.tar.gz',\n })\n\n await testCommand(DatasetExportCommand, ['production'])\n\n expect(mockInput).toHaveBeenCalledWith({\n default: expect.stringMatching(/production\\.tar\\.gz$/),\n message: 'Output path:',\n transformer: expect.any(Function),\n validate: expect.any(Function),\n })\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n outputPath: '/custom/path/export.tar.gz',\n }),\n )\n })\n })\n\n describe('dataset selection', () => {\n test('prompts for dataset selection when none specified', async () => {\n createTestContext({\n dataset: null, // No default dataset\n inputValue: 'staging.tar.gz', // Mock destination input\n selectValue: 'staging',\n })\n\n await testCommand(DatasetExportCommand, [])\n\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {name: 'production', value: 'production'},\n {name: 'staging', value: 'staging'},\n ],\n message: 'Select the dataset name:',\n })\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n }),\n )\n })\n\n test('uses and announces default dataset from config', async () => {\n createTestContext({\n dataset: 'staging',\n datasets: [{name: 'staging'}],\n inputValue: 'staging.tar.gz', // Mock destination input\n })\n\n const {stdout} = await testCommand(DatasetExportCommand, [])\n\n expect(stdout).toContain('Using default dataset: staging')\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n }),\n )\n })\n\n test('validates dataset exists in project', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n const {error} = await testCommand(DatasetExportCommand, ['staging', TEST_OUTPUTS.TAR_GZ])\n\n expect(error?.message).toContain(`${ERROR_MESSAGES.DATASET_NOT_FOUND} \"staging\" not found`)\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n\n describe('file operations', () => {\n test('creates parent directory for nested output paths', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.SUBDIR])\n\n expect(mockFs.mkdir).toHaveBeenCalledWith(expect.stringMatching(/subdir$/), {\n recursive: true,\n })\n })\n\n test('prevents overwrite without flag', async () => {\n createTestContext({\n datasets: [{name: 'production'}],\n fileExists: true,\n })\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.EXISTING])\n\n expect(error?.message).toContain(ERROR_MESSAGES.ALREADY_EXISTS)\n expect(error?.message).toContain(ERROR_MESSAGES.USE_OVERWRITE)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('allows overwrite with flag', async () => {\n createTestContext({\n datasets: [{name: 'production'}],\n fileExists: true,\n })\n\n await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.EXISTING, '--overwrite'])\n\n expect(mockExportDataset).toHaveBeenCalled()\n })\n\n test('handles directory creation errors gracefully', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n // Mock mkdir to throw a permission error\n const permissionError = new Error('Permission denied') as Error & {code: string}\n permissionError.code = 'EACCES'\n mockFs.mkdir.mockRejectedValueOnce(permissionError)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.SUBDIR])\n\n expect(error?.message).toContain('Permission denied: Cannot create directory')\n expect(error?.message).toContain('Please check write permissions')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles other directory creation errors gracefully', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n // Mock mkdir to throw a generic error\n const genericError = new Error('Disk full')\n mockFs.mkdir.mockRejectedValueOnce(genericError)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.SUBDIR])\n\n expect(error?.message).toContain('Failed to create directory')\n expect(error?.message).toContain('Disk full')\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n\n describe('export options', () => {\n test('sets assets:false when --no-assets flag is used', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ, '--no-assets'])\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n assets: false,\n }),\n )\n })\n\n test('parses comma-separated types with --types flag', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, [\n 'production',\n TEST_OUTPUTS.TAR_GZ,\n '--types',\n 'post,author',\n ])\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n types: ['post', 'author'],\n }),\n )\n })\n\n test('sets raw:true when --raw flag is used', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ, '--raw'])\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n raw: true,\n }),\n )\n })\n\n test('sets mode to cursor with --mode flag', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, [\n 'production',\n TEST_OUTPUTS.TAR_GZ,\n '--mode',\n 'cursor',\n ])\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n mode: 'cursor',\n }),\n )\n })\n })\n\n describe('error handling', () => {\n test('fails without project ID', async () => {\n createTestContext({projectId: undefined as never})\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ])\n\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles cancelled dataset selection gracefully', async () => {\n createTestContext({\n dataset: null, // No default dataset\n })\n\n // Mock select to simulate user cancellation (Ctrl+C throws an error)\n mockSelect.mockRejectedValueOnce(new Error('User cancelled'))\n\n const {error} = await testCommand(DatasetExportCommand, [])\n\n expect(error?.message).toContain('User cancelled')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles export errors with detailed error message', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n const exportError = new Error('Network timeout during export')\n mockExportDataset.mockRejectedValueOnce(exportError)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ])\n\n expect(error?.message).toBe(`${ERROR_MESSAGES.EXPORT_FAILED}: Network timeout during export`)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('validates dataset name format', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n const {error} = await testCommand(DatasetExportCommand, [\n 'INVALID-DATASET',\n TEST_OUTPUTS.TAR_GZ,\n ])\n\n expect(error?.message).toContain('lowercase')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles dataset listing errors gracefully', async () => {\n // Setup basic context but override the datasets.list to throw an error\n createTestContext({datasets: [{name: 'production'}]})\n\n const listError = new Error('Network error: Unable to connect to API')\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n list: vi.fn().mockRejectedValue(listError),\n },\n } as never)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ])\n\n expect(error?.message).toContain('Failed to list datasets:')\n expect(error?.message).toContain('Network error: Unable to connect to API')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles progress updates correctly', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n let progressHandler: (progress: {\n current: number\n step: string\n total: number\n update?: boolean\n }) => void\n\n mockExportDataset.mockImplementationOnce(async (options): Promise<ExportResult> => {\n progressHandler = options.onProgress!\n // Simulate progress updates to test that they don't crash\n progressHandler({current: 10, step: 'Exporting documents...', total: 100})\n progressHandler({current: 5, step: 'Exporting assets...', total: 20})\n progressHandler({current: 10, step: 'Exporting assets...', total: 20, update: true})\n return {\n assetCount: 20,\n documentCount: 100,\n outputPath: '/tmp/export.tar.gz',\n }\n })\n\n const {stdout} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ])\n\n // Verify command completed successfully\n expect(stdout).toContain('Export finished')\n expect(mockExportDataset).toHaveBeenCalled()\n })\n })\n})\n"],"names":["fs","runCommand","getCliConfig","getProjectCliClient","input","select","testCommand","exportDataset","afterEach","describe","expect","test","vi","NO_PROJECT_ID","DatasetExportCommand","mock","fn","mockResolvedValue","undefined","actual","importActual","findProjectRoot","directory","root","type","getCliToken","default","mkdir","stat","mockExportDataset","mocked","mockInput","mockSelect","mockGetCliConfig","mockGetProjectCliClient","mockFs","TEST_CONFIG","DATASET","PROJECT_ID","TEST_OUTPUTS","EXISTING","SUBDIR","TAR_GZ","ERROR_MESSAGES","ALREADY_EXISTS","DATASET_NOT_FOUND","EXPORT_FAILED","USE_OVERWRITE","createTestContext","overrides","defaults","dataset","datasets","name","fileExists","isFile","projectId","context","apiConfig","api","list","mockRejectedValue","Error","selectValue","mockResolvedValueOnce","inputValue","clearAllMocks","stdout","toContain","each","args","description","expectedPathPattern","shouldShowDetails","toHaveBeenCalledWith","objectContaining","assetConcurrency","assets","client","any","Object","compress","drafts","mode","onProgress","Function","outputPath","stringMatching","raw","types","process","message","transformer","validate","choices","value","error","oclif","exit","toBe","recursive","toHaveBeenCalled","permissionError","code","mockRejectedValueOnce","genericError","toEqual","exportError","listError","progressHandler","mockImplementationOnce","options","current","step","total","update","assetCount","documentCount"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/commands/dataset/__tests__/export.test.ts"],"sourcesContent":["import fs from 'node:fs/promises'\n\nimport {runCommand} from '@oclif/test'\nimport {type CliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {input, select} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport {exportDataset, type ExportResult} from '@sanity/export'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {DatasetExportCommand} from '../export.js'\n\nvi.mock('@sanity/export', () => ({\n exportDataset: vi.fn().mockResolvedValue(undefined),\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\nvi.mock('node:fs/promises', () => ({\n default: {\n mkdir: vi.fn().mockResolvedValue(undefined),\n stat: vi.fn(),\n },\n}))\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual('@sanity/cli-core')\n return {\n ...actual,\n getProjectCliClient: vi.fn(),\n }\n})\n\nconst mockExportDataset = vi.mocked(exportDataset)\nconst mockInput = vi.mocked(input)\nconst mockSelect = vi.mocked(select)\nconst mockFs = vi.mocked(fs)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\n\nconst TEST_CONFIG = {\n DATASET: 'production',\n PROJECT_ID: 'test-project',\n} as const\n\nconst TEST_OUTPUTS = {\n EXISTING: 'existing.tar.gz',\n SUBDIR: 'subdir/output.tar.gz',\n TAR_GZ: 'output.tar.gz',\n} as const\n\nconst ERROR_MESSAGES = {\n ALREADY_EXISTS: 'already exists',\n DATASET_NOT_FOUND: 'Dataset with name',\n EXPORT_FAILED: 'Export failed',\n USE_OVERWRITE: '--overwrite',\n} as const\n\nconst defaultMocks = {\n cliConfig: {api: {dataset: TEST_CONFIG.DATASET, projectId: TEST_CONFIG.PROJECT_ID}},\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\ninterface TestContextOptions {\n dataset?: string | null\n datasets?: Array<{name: string}>\n fileExists?: boolean\n inputValue?: string\n isFile?: boolean\n projectId?: string\n selectValue?: string\n}\n\nconst createTestContext = (overrides: TestContextOptions = {}) => {\n const defaults = {\n dataset: TEST_CONFIG.DATASET,\n datasets: [{name: 'production'}, {name: 'staging'}],\n fileExists: false,\n isFile: true,\n projectId: TEST_CONFIG.PROJECT_ID,\n }\n\n const context = {...defaults, ...overrides}\n\n // Setup file system\n if (context.fileExists) {\n mockFs.stat.mockResolvedValue({\n isFile: () => context.isFile,\n } as never)\n } else {\n mockFs.stat.mockRejectedValue(new Error('File not found'))\n }\n\n // Setup select if provided\n if (context.selectValue) {\n mockSelect.mockResolvedValueOnce(context.selectValue)\n }\n\n // Setup input if provided\n if (context.inputValue) {\n mockInput.mockResolvedValueOnce(context.inputValue)\n }\n\n const apiConfig: CliConfig['api'] = {projectId: context.projectId}\n if (context.dataset) apiConfig.dataset = context.dataset\n\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n list: vi.fn().mockResolvedValue(context.datasets),\n },\n } as never)\n\n return {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: apiConfig},\n },\n }\n}\n\ndescribe('#dataset:export', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['dataset:export', '--help'])\n\n expect(stdout).toContain('Export dataset to local filesystem as a gzipped tarball')\n expect(stdout).toContain('ARGUMENTS')\n expect(stdout).toContain('EXAMPLES')\n expect(stdout).toContain('--no-assets')\n })\n\n describe('successful exports', () => {\n test.each([\n {\n args: ['production', TEST_OUTPUTS.TAR_GZ],\n description: 'with specified file',\n expectedPathPattern: /output\\.tar\\.gz$/,\n shouldShowDetails: true,\n },\n {\n args: ['production'],\n description: 'with auto-generated filename when no destination provided via prompt',\n expectedPathPattern: /custom-output\\.tar\\.gz$/,\n inputValue: 'custom-output.tar.gz',\n shouldShowDetails: false,\n },\n ])(\n 'exports dataset $description',\n async ({args, expectedPathPattern, inputValue, shouldShowDetails}) => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}], inputValue})\n\n const {stdout} = await testCommand(DatasetExportCommand, args, {mocks})\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n assetConcurrency: 8,\n assets: true,\n client: expect.any(Object),\n compress: true,\n dataset: 'production',\n drafts: true,\n mode: 'stream',\n onProgress: expect.any(Function),\n outputPath: expect.stringMatching(expectedPathPattern),\n raw: false,\n types: undefined,\n }),\n )\n\n if (shouldShowDetails) {\n expect(stdout).toContain('projectId: test-project')\n expect(stdout).toContain('dataset: production')\n expect(stdout).toContain('Export finished')\n }\n },\n )\n\n test('exports to stdout with dash', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', '-'], {mocks})\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n outputPath: process.stdout,\n }),\n )\n })\n\n test('prompts for destination when not provided as argument', async () => {\n const {mocks} = createTestContext({\n datasets: [{name: 'production'}],\n inputValue: '/custom/path/export.tar.gz',\n })\n\n await testCommand(DatasetExportCommand, ['production'], {mocks})\n\n expect(mockInput).toHaveBeenCalledWith({\n default: expect.stringMatching(/production\\.tar\\.gz$/),\n message: 'Output path:',\n transformer: expect.any(Function),\n validate: expect.any(Function),\n })\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n outputPath: '/custom/path/export.tar.gz',\n }),\n )\n })\n })\n\n describe('dataset selection', () => {\n test('prompts for dataset selection when none specified', async () => {\n const {mocks} = createTestContext({\n dataset: null, // No default dataset\n inputValue: 'staging.tar.gz', // Mock destination input\n selectValue: 'staging',\n })\n\n await testCommand(DatasetExportCommand, [], {mocks})\n\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {name: 'production', value: 'production'},\n {name: 'staging', value: 'staging'},\n ],\n message: 'Select the dataset name:',\n })\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n }),\n )\n })\n\n test('uses and announces default dataset from config', async () => {\n const {mocks} = createTestContext({\n dataset: 'staging',\n datasets: [{name: 'staging'}],\n inputValue: 'staging.tar.gz', // Mock destination input\n })\n\n const {stdout} = await testCommand(DatasetExportCommand, [], {mocks})\n\n expect(stdout).toContain('Using default dataset: staging')\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n }),\n )\n })\n\n test('validates dataset exists in project', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n const {error} = await testCommand(DatasetExportCommand, ['staging', TEST_OUTPUTS.TAR_GZ], {\n mocks,\n })\n\n expect(error?.message).toContain(`${ERROR_MESSAGES.DATASET_NOT_FOUND} \"staging\" not found`)\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n\n describe('file operations', () => {\n test('creates parent directory for nested output paths', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.SUBDIR], {mocks})\n\n expect(mockFs.mkdir).toHaveBeenCalledWith(expect.stringMatching(/subdir$/), {\n recursive: true,\n })\n })\n\n test('prevents overwrite without flag', async () => {\n const {mocks} = createTestContext({\n datasets: [{name: 'production'}],\n fileExists: true,\n })\n\n const {error} = await testCommand(\n DatasetExportCommand,\n ['production', TEST_OUTPUTS.EXISTING],\n {mocks},\n )\n\n expect(error?.message).toContain(ERROR_MESSAGES.ALREADY_EXISTS)\n expect(error?.message).toContain(ERROR_MESSAGES.USE_OVERWRITE)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('allows overwrite with flag', async () => {\n const {mocks} = createTestContext({\n datasets: [{name: 'production'}],\n fileExists: true,\n })\n\n await testCommand(\n DatasetExportCommand,\n ['production', TEST_OUTPUTS.EXISTING, '--overwrite'],\n {mocks},\n )\n\n expect(mockExportDataset).toHaveBeenCalled()\n })\n\n test('handles directory creation errors gracefully', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n // Mock mkdir to throw a permission error\n const permissionError = new Error('Permission denied') as Error & {code: string}\n permissionError.code = 'EACCES'\n mockFs.mkdir.mockRejectedValueOnce(permissionError)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.SUBDIR], {\n mocks,\n })\n\n expect(error?.message).toContain('Permission denied: Cannot create directory')\n expect(error?.message).toContain('Please check write permissions')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles other directory creation errors gracefully', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n // Mock mkdir to throw a generic error\n const genericError = new Error('Disk full')\n mockFs.mkdir.mockRejectedValueOnce(genericError)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.SUBDIR], {\n mocks,\n })\n\n expect(error?.message).toContain('Failed to create directory')\n expect(error?.message).toContain('Disk full')\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n\n describe('export options', () => {\n test('sets assets:false when --no-assets flag is used', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ, '--no-assets'], {\n mocks,\n })\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n assets: false,\n }),\n )\n })\n\n test('parses comma-separated types with --types flag', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(\n DatasetExportCommand,\n ['production', TEST_OUTPUTS.TAR_GZ, '--types', 'post,author'],\n {mocks},\n )\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n types: ['post', 'author'],\n }),\n )\n })\n\n test('sets raw:true when --raw flag is used', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ, '--raw'], {mocks})\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n raw: true,\n }),\n )\n })\n\n test('sets mode to cursor with --mode flag', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(\n DatasetExportCommand,\n ['production', TEST_OUTPUTS.TAR_GZ, '--mode', 'cursor'],\n {mocks},\n )\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n mode: 'cursor',\n }),\n )\n })\n })\n\n describe('error handling', () => {\n test('fails without project ID', async () => {\n const {mocks} = createTestContext({projectId: undefined as never})\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ], {\n mocks,\n })\n\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles cancelled dataset selection gracefully', async () => {\n const {mocks} = createTestContext({\n dataset: null, // No default dataset\n })\n\n // Mock select to simulate user cancellation (Ctrl+C throws an error)\n mockSelect.mockRejectedValueOnce(new Error('User cancelled'))\n\n const {error} = await testCommand(DatasetExportCommand, [], {mocks})\n\n expect(error?.message).toContain('User cancelled')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles export errors with detailed error message', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n const exportError = new Error('Network timeout during export')\n mockExportDataset.mockRejectedValueOnce(exportError)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ], {\n mocks,\n })\n\n expect(error?.message).toBe(`${ERROR_MESSAGES.EXPORT_FAILED}: Network timeout during export`)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('validates dataset name format', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n const {error} = await testCommand(\n DatasetExportCommand,\n ['INVALID-DATASET', TEST_OUTPUTS.TAR_GZ],\n {mocks},\n )\n\n expect(error?.message).toContain('lowercase')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles dataset listing errors gracefully', async () => {\n const listError = new Error('Network error: Unable to connect to API')\n\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n list: vi.fn().mockRejectedValue(listError),\n },\n } as never)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Failed to list datasets:')\n expect(error?.message).toContain('Network error: Unable to connect to API')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles progress updates correctly', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n let progressHandler: (progress: {\n current: number\n step: string\n total: number\n update?: boolean\n }) => void\n\n mockExportDataset.mockImplementationOnce(async (options): Promise<ExportResult> => {\n progressHandler = options.onProgress!\n // Simulate progress updates to test that they don't crash\n progressHandler({current: 10, step: 'Exporting documents...', total: 100})\n progressHandler({current: 5, step: 'Exporting assets...', total: 20})\n progressHandler({current: 10, step: 'Exporting assets...', total: 20, update: true})\n return {\n assetCount: 20,\n documentCount: 100,\n outputPath: '/tmp/export.tar.gz',\n }\n })\n\n const {stdout} = await testCommand(\n DatasetExportCommand,\n ['production', TEST_OUTPUTS.TAR_GZ],\n {mocks},\n )\n\n // Verify command completed successfully\n expect(stdout).toContain('Export finished')\n expect(mockExportDataset).toHaveBeenCalled()\n })\n })\n})\n"],"names":["fs","runCommand","getProjectCliClient","input","select","testCommand","exportDataset","afterEach","describe","expect","test","vi","NO_PROJECT_ID","DatasetExportCommand","mock","fn","mockResolvedValue","undefined","actual","importActual","default","mkdir","stat","mockExportDataset","mocked","mockInput","mockSelect","mockFs","mockGetProjectCliClient","TEST_CONFIG","DATASET","PROJECT_ID","TEST_OUTPUTS","EXISTING","SUBDIR","TAR_GZ","ERROR_MESSAGES","ALREADY_EXISTS","DATASET_NOT_FOUND","EXPORT_FAILED","USE_OVERWRITE","defaultMocks","cliConfig","api","dataset","projectId","projectRoot","directory","path","type","token","createTestContext","overrides","defaults","datasets","name","fileExists","isFile","context","mockRejectedValue","Error","selectValue","mockResolvedValueOnce","inputValue","apiConfig","list","mocks","clearAllMocks","stdout","toContain","each","args","description","expectedPathPattern","shouldShowDetails","toHaveBeenCalledWith","objectContaining","assetConcurrency","assets","client","any","Object","compress","drafts","mode","onProgress","Function","outputPath","stringMatching","raw","types","process","message","transformer","validate","choices","value","error","oclif","exit","toBe","recursive","toHaveBeenCalled","permissionError","code","mockRejectedValueOnce","genericError","toEqual","exportError","listError","progressHandler","mockImplementationOnce","options","current","step","total","update","assetCount","documentCount"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { describe, expect, test } from 'vitest';
|
|
|
3
3
|
describe('#dataset:import', ()=>{
|
|
4
4
|
test('should print datasets:import help', async ()=>{
|
|
5
5
|
const { stdout } = await runCommand('dataset import --help');
|
|
6
|
-
expect(stdout).toMatchInlineSnapshot(`
|
|
6
|
+
expect(stdout).toMatchInlineSnapshot(String.raw`
|
|
7
7
|
"Import documents to a Sanity dataset
|
|
8
8
|
|
|
9
9
|
USAGE
|
|
@@ -38,7 +38,7 @@ describe('#dataset:import', ()=>{
|
|
|
38
38
|
EXAMPLES
|
|
39
39
|
Import "./my-dataset.ndjson" into dataset "staging"
|
|
40
40
|
|
|
41
|
-
$ sanity dataset import -p myPrOj -d staging -t someSecretToken
|
|
41
|
+
$ sanity dataset import -p myPrOj -d staging -t someSecretToken \
|
|
42
42
|
my-dataset.ndjson
|
|
43
43
|
|
|
44
44
|
Import into dataset "test" from stdin, read token from env var
|