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