@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,30 +1,24 @@
|
|
|
1
1
|
import { runCommand } from '@oclif/test';
|
|
2
|
-
import { getCliConfig } from '@sanity/cli-core';
|
|
3
2
|
import { mockApi, testCommand } from '@sanity/cli-test';
|
|
4
3
|
import nock from 'nock';
|
|
5
4
|
import { afterEach, describe, expect, test, vi } from 'vitest';
|
|
6
5
|
import { GRAPHQL_API_VERSION } from '../../../services/graphql.js';
|
|
7
6
|
import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
|
|
8
7
|
import { List } from '../list.js';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}));
|
|
24
|
-
vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
|
|
25
|
-
getCliToken: vi.fn().mockResolvedValue('test-token')
|
|
26
|
-
}));
|
|
27
|
-
const mockGetCliConfig = vi.mocked(getCliConfig);
|
|
8
|
+
const testProjectId = 'test-project';
|
|
9
|
+
const defaultMocks = {
|
|
10
|
+
cliConfig: {
|
|
11
|
+
api: {
|
|
12
|
+
projectId: testProjectId
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
projectRoot: {
|
|
16
|
+
directory: '/test/path',
|
|
17
|
+
path: '/test/path/sanity.config.ts',
|
|
18
|
+
type: 'studio'
|
|
19
|
+
},
|
|
20
|
+
token: 'test-token'
|
|
21
|
+
};
|
|
28
22
|
describe('#list', ()=>{
|
|
29
23
|
afterEach(()=>{
|
|
30
24
|
vi.clearAllMocks();
|
|
@@ -56,7 +50,7 @@ describe('#list', ()=>{
|
|
|
56
50
|
});
|
|
57
51
|
test('displays GraphQL endpoints correctly with multiple endpoints', async ()=>{
|
|
58
52
|
mockApi({
|
|
59
|
-
apiHost:
|
|
53
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
60
54
|
apiVersion: GRAPHQL_API_VERSION,
|
|
61
55
|
uri: '/apis/graphql'
|
|
62
56
|
}).reply(200, [
|
|
@@ -64,18 +58,20 @@ describe('#list', ()=>{
|
|
|
64
58
|
dataset: 'production',
|
|
65
59
|
generation: 'gen2',
|
|
66
60
|
playgroundEnabled: true,
|
|
67
|
-
projectId:
|
|
61
|
+
projectId: testProjectId,
|
|
68
62
|
tag: 'default'
|
|
69
63
|
},
|
|
70
64
|
{
|
|
71
65
|
dataset: 'staging',
|
|
72
66
|
generation: 'gen3',
|
|
73
67
|
playgroundEnabled: false,
|
|
74
|
-
projectId:
|
|
68
|
+
projectId: testProjectId,
|
|
75
69
|
tag: 'latest'
|
|
76
70
|
}
|
|
77
71
|
]);
|
|
78
|
-
const { stdout } = await testCommand(List
|
|
72
|
+
const { stdout } = await testCommand(List, [], {
|
|
73
|
+
mocks: defaultMocks
|
|
74
|
+
});
|
|
79
75
|
expect(stdout).toMatchInlineSnapshot(`
|
|
80
76
|
"Here are the GraphQL endpoints deployed for this project:
|
|
81
77
|
1. Dataset: production
|
|
@@ -95,7 +91,7 @@ describe('#list', ()=>{
|
|
|
95
91
|
});
|
|
96
92
|
test('displays single GraphQL endpoint correctly', async ()=>{
|
|
97
93
|
mockApi({
|
|
98
|
-
apiHost:
|
|
94
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
99
95
|
apiVersion: GRAPHQL_API_VERSION,
|
|
100
96
|
uri: '/apis/graphql'
|
|
101
97
|
}).reply(200, [
|
|
@@ -103,11 +99,13 @@ describe('#list', ()=>{
|
|
|
103
99
|
dataset: 'production',
|
|
104
100
|
generation: 'gen2',
|
|
105
101
|
playgroundEnabled: true,
|
|
106
|
-
projectId:
|
|
102
|
+
projectId: testProjectId,
|
|
107
103
|
tag: 'default'
|
|
108
104
|
}
|
|
109
105
|
]);
|
|
110
|
-
const { stdout } = await testCommand(List
|
|
106
|
+
const { stdout } = await testCommand(List, [], {
|
|
107
|
+
mocks: defaultMocks
|
|
108
|
+
});
|
|
111
109
|
expect(stdout).toMatchInlineSnapshot(`
|
|
112
110
|
"Here are the GraphQL endpoints deployed for this project:
|
|
113
111
|
1. Dataset: production
|
|
@@ -121,20 +119,24 @@ describe('#list', ()=>{
|
|
|
121
119
|
});
|
|
122
120
|
test('handles empty GraphQL endpoints list', async ()=>{
|
|
123
121
|
mockApi({
|
|
124
|
-
apiHost:
|
|
122
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
125
123
|
apiVersion: GRAPHQL_API_VERSION,
|
|
126
124
|
uri: '/apis/graphql'
|
|
127
125
|
}).reply(200, []);
|
|
128
|
-
const { stdout } = await testCommand(List
|
|
126
|
+
const { stdout } = await testCommand(List, [], {
|
|
127
|
+
mocks: defaultMocks
|
|
128
|
+
});
|
|
129
129
|
expect(stdout).toBe("This project doesn't have any GraphQL endpoints deployed.\n");
|
|
130
130
|
});
|
|
131
131
|
test('handles null/undefined GraphQL endpoints response', async ()=>{
|
|
132
132
|
mockApi({
|
|
133
|
-
apiHost:
|
|
133
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
134
134
|
apiVersion: GRAPHQL_API_VERSION,
|
|
135
135
|
uri: '/apis/graphql'
|
|
136
136
|
}).reply(200, undefined);
|
|
137
|
-
const { stdout } = await testCommand(List
|
|
137
|
+
const { stdout } = await testCommand(List, [], {
|
|
138
|
+
mocks: defaultMocks
|
|
139
|
+
});
|
|
138
140
|
expect(stdout).toBe("This project doesn't have any GraphQL endpoints deployed.\n");
|
|
139
141
|
});
|
|
140
142
|
test.each([
|
|
@@ -148,32 +150,38 @@ describe('#list', ()=>{
|
|
|
148
150
|
]
|
|
149
151
|
])('displays error when API request fails with %i status and message "%s"', async (status, message)=>{
|
|
150
152
|
mockApi({
|
|
151
|
-
apiHost:
|
|
153
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
152
154
|
apiVersion: GRAPHQL_API_VERSION,
|
|
153
155
|
uri: '/apis/graphql'
|
|
154
156
|
}).reply(status, {
|
|
155
157
|
message
|
|
156
158
|
});
|
|
157
|
-
const { error } = await testCommand(List
|
|
159
|
+
const { error } = await testCommand(List, [], {
|
|
160
|
+
mocks: defaultMocks
|
|
161
|
+
});
|
|
158
162
|
expect(error).toBeInstanceOf(Error);
|
|
159
163
|
expect(error?.message).toContain('GraphQL endpoints list retrieval failed');
|
|
160
164
|
expect(error?.message).toContain(message);
|
|
161
165
|
expect(error?.oclif?.exit).toBe(1);
|
|
162
166
|
});
|
|
163
167
|
test('throws error when project ID is not defined', async ()=>{
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
168
|
+
const { error } = await testCommand(List, [], {
|
|
169
|
+
mocks: {
|
|
170
|
+
...defaultMocks,
|
|
171
|
+
cliConfig: {
|
|
172
|
+
api: {
|
|
173
|
+
projectId: undefined
|
|
174
|
+
}
|
|
175
|
+
}
|
|
167
176
|
}
|
|
168
177
|
});
|
|
169
|
-
const { error } = await testCommand(List);
|
|
170
178
|
expect(error).toBeInstanceOf(Error);
|
|
171
179
|
expect(error?.message).toEqual(NO_PROJECT_ID);
|
|
172
180
|
expect(error?.oclif?.exit).toBe(1);
|
|
173
181
|
});
|
|
174
182
|
test('displays endpoints correctly when dataset names contain special characters', async ()=>{
|
|
175
183
|
mockApi({
|
|
176
|
-
apiHost:
|
|
184
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
177
185
|
apiVersion: GRAPHQL_API_VERSION,
|
|
178
186
|
uri: '/apis/graphql'
|
|
179
187
|
}).reply(200, [
|
|
@@ -181,18 +189,20 @@ describe('#list', ()=>{
|
|
|
181
189
|
dataset: 'my-dataset-123',
|
|
182
190
|
generation: 'gen2',
|
|
183
191
|
playgroundEnabled: true,
|
|
184
|
-
projectId:
|
|
192
|
+
projectId: testProjectId,
|
|
185
193
|
tag: 'v1.0.0'
|
|
186
194
|
},
|
|
187
195
|
{
|
|
188
196
|
dataset: 'test_dataset',
|
|
189
197
|
generation: 'gen3',
|
|
190
198
|
playgroundEnabled: false,
|
|
191
|
-
projectId:
|
|
199
|
+
projectId: testProjectId,
|
|
192
200
|
tag: 'beta-2'
|
|
193
201
|
}
|
|
194
202
|
]);
|
|
195
|
-
const { stdout } = await testCommand(List
|
|
203
|
+
const { stdout } = await testCommand(List, [], {
|
|
204
|
+
mocks: defaultMocks
|
|
205
|
+
});
|
|
196
206
|
expect(stdout).toContain('Dataset: my-dataset-123');
|
|
197
207
|
expect(stdout).toContain('Tag: v1.0.0');
|
|
198
208
|
expect(stdout).toContain('Dataset: test_dataset');
|
|
@@ -200,7 +210,7 @@ describe('#list', ()=>{
|
|
|
200
210
|
});
|
|
201
211
|
test('displays endpoints with various generation values correctly', async ()=>{
|
|
202
212
|
mockApi({
|
|
203
|
-
apiHost:
|
|
213
|
+
apiHost: `https://${testProjectId}.api.sanity.io`,
|
|
204
214
|
apiVersion: GRAPHQL_API_VERSION,
|
|
205
215
|
uri: '/apis/graphql'
|
|
206
216
|
}).reply(200, [
|
|
@@ -208,18 +218,20 @@ describe('#list', ()=>{
|
|
|
208
218
|
dataset: 'production',
|
|
209
219
|
generation: 'gen1',
|
|
210
220
|
playgroundEnabled: true,
|
|
211
|
-
projectId:
|
|
221
|
+
projectId: testProjectId,
|
|
212
222
|
tag: 'default'
|
|
213
223
|
},
|
|
214
224
|
{
|
|
215
225
|
dataset: 'staging',
|
|
216
226
|
generation: 'gen3',
|
|
217
227
|
playgroundEnabled: false,
|
|
218
|
-
projectId:
|
|
228
|
+
projectId: testProjectId,
|
|
219
229
|
tag: 'default'
|
|
220
230
|
}
|
|
221
231
|
]);
|
|
222
|
-
const { stdout } = await testCommand(List
|
|
232
|
+
const { stdout } = await testCommand(List, [], {
|
|
233
|
+
mocks: defaultMocks
|
|
234
|
+
});
|
|
223
235
|
expect(stdout).toContain('Generation: gen1');
|
|
224
236
|
expect(stdout).toContain('Generation: gen3');
|
|
225
237
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/commands/graphql/__tests__/list.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 {GRAPHQL_API_VERSION} from '../../../services/graphql.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {List} from '../list.js'\n\n// Mock the config functions with relative paths\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\nconst mockGetCliConfig = vi.mocked(getCliConfig)\n\ndescribe('#list', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['graphql list', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"List all GraphQL endpoints deployed for this project\n\n USAGE\n $ sanity graphql list\n\n DESCRIPTION\n List all GraphQL endpoints deployed for this project\n\n EXAMPLES\n List GraphQL endpoints for the current project\n\n $ sanity graphql list\n\n \"\n `)\n })\n\n test('displays GraphQL endpoints correctly with multiple endpoints', async () => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, [\n {\n dataset: 'production',\n generation: 'gen2',\n playgroundEnabled: true,\n projectId: 'test-project',\n tag: 'default',\n },\n {\n dataset: 'staging',\n generation: 'gen3',\n playgroundEnabled: false,\n projectId: 'test-project',\n tag: 'latest',\n },\n ])\n\n const {stdout} = await testCommand(List)\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Here are the GraphQL endpoints deployed for this project:\n 1. Dataset: production\n Tag: default\n Generation: gen2\n Playground: true\n URL: https://test-project.api.sanity.io/v2025-09-19/graphql/production/default\n\n 2. Dataset: staging\n Tag: latest\n Generation: gen3\n Playground: false\n URL: https://test-project.api.sanity.io/v2025-09-19/graphql/staging/latest\n\n \"\n `)\n })\n\n test('displays single GraphQL endpoint correctly', async () => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, [\n {\n dataset: 'production',\n generation: 'gen2',\n playgroundEnabled: true,\n projectId: 'test-project',\n tag: 'default',\n },\n ])\n\n const {stdout} = await testCommand(List)\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Here are the GraphQL endpoints deployed for this project:\n 1. Dataset: production\n Tag: default\n Generation: gen2\n Playground: true\n URL: https://test-project.api.sanity.io/v2025-09-19/graphql/production/default\n\n \"\n `)\n })\n\n test('handles empty GraphQL endpoints list', async () => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, [])\n\n const {stdout} = await testCommand(List)\n\n expect(stdout).toBe(\"This project doesn't have any GraphQL endpoints deployed.\\n\")\n })\n\n test('handles null/undefined GraphQL endpoints response', async () => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, undefined)\n\n const {stdout} = await testCommand(List)\n\n expect(stdout).toBe(\"This project doesn't have any GraphQL endpoints deployed.\\n\")\n })\n\n test.each([\n [404, 'Project not found'],\n [500, 'Internal Server Error'],\n ])(\n 'displays error when API request fails with %i status and message \"%s\"',\n async (status, message) => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(status, {message})\n\n const {error} = await testCommand(List)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('GraphQL endpoints list retrieval failed')\n expect(error?.message).toContain(message)\n expect(error?.oclif?.exit).toBe(1)\n },\n )\n\n test('throws error when project ID is not defined', async () => {\n mockGetCliConfig.mockResolvedValueOnce({\n api: {\n projectId: undefined,\n },\n })\n\n const {error} = await testCommand(List)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('displays endpoints correctly when dataset names contain special characters', async () => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, [\n {\n dataset: 'my-dataset-123',\n generation: 'gen2',\n playgroundEnabled: true,\n projectId: 'test-project',\n tag: 'v1.0.0',\n },\n {\n dataset: 'test_dataset',\n generation: 'gen3',\n playgroundEnabled: false,\n projectId: 'test-project',\n tag: 'beta-2',\n },\n ])\n\n const {stdout} = await testCommand(List)\n\n expect(stdout).toContain('Dataset: my-dataset-123')\n expect(stdout).toContain('Tag: v1.0.0')\n expect(stdout).toContain('Dataset: test_dataset')\n expect(stdout).toContain('Tag: beta-2')\n })\n\n test('displays endpoints with various generation values correctly', async () => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, [\n {\n dataset: 'production',\n generation: 'gen1',\n playgroundEnabled: true,\n projectId: 'test-project',\n tag: 'default',\n },\n {\n dataset: 'staging',\n generation: 'gen3',\n playgroundEnabled: false,\n projectId: 'test-project',\n tag: 'default',\n },\n ])\n\n const {stdout} = await testCommand(List)\n\n expect(stdout).toContain('Generation: gen1')\n expect(stdout).toContain('Generation: gen3')\n })\n})\n"],"names":["runCommand","getCliConfig","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","GRAPHQL_API_VERSION","NO_PROJECT_ID","List","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","api","projectId","getCliToken","mockGetCliConfig","mocked","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","apiHost","apiVersion","uri","reply","dataset","generation","playgroundEnabled","tag","toBe","undefined","each","status","message","error","toBeInstanceOf","Error","toContain","oclif","exit","mockResolvedValueOnce"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/commands/graphql/__tests__/list.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {GRAPHQL_API_VERSION} from '../../../services/graphql.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {List} from '../list.js'\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\ndescribe('#list', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['graphql list', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"List all GraphQL endpoints deployed for this project\n\n USAGE\n $ sanity graphql list\n\n DESCRIPTION\n List all GraphQL endpoints deployed for this project\n\n EXAMPLES\n List GraphQL endpoints for the current project\n\n $ sanity graphql list\n\n \"\n `)\n })\n\n test('displays GraphQL endpoints correctly with multiple endpoints', async () => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, [\n {\n dataset: 'production',\n generation: 'gen2',\n playgroundEnabled: true,\n projectId: testProjectId,\n tag: 'default',\n },\n {\n dataset: 'staging',\n generation: 'gen3',\n playgroundEnabled: false,\n projectId: testProjectId,\n tag: 'latest',\n },\n ])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Here are the GraphQL endpoints deployed for this project:\n 1. Dataset: production\n Tag: default\n Generation: gen2\n Playground: true\n URL: https://test-project.api.sanity.io/v2025-09-19/graphql/production/default\n\n 2. Dataset: staging\n Tag: latest\n Generation: gen3\n Playground: false\n URL: https://test-project.api.sanity.io/v2025-09-19/graphql/staging/latest\n\n \"\n `)\n })\n\n test('displays single GraphQL endpoint correctly', async () => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, [\n {\n dataset: 'production',\n generation: 'gen2',\n playgroundEnabled: true,\n projectId: testProjectId,\n tag: 'default',\n },\n ])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Here are the GraphQL endpoints deployed for this project:\n 1. Dataset: production\n Tag: default\n Generation: gen2\n Playground: true\n URL: https://test-project.api.sanity.io/v2025-09-19/graphql/production/default\n\n \"\n `)\n })\n\n test('handles empty GraphQL endpoints list', async () => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, [])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toBe(\"This project doesn't have any GraphQL endpoints deployed.\\n\")\n })\n\n test('handles null/undefined GraphQL endpoints response', async () => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, undefined)\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toBe(\"This project doesn't have any GraphQL endpoints deployed.\\n\")\n })\n\n test.each([\n [404, 'Project not found'],\n [500, 'Internal Server Error'],\n ])(\n 'displays error when API request fails with %i status and message \"%s\"',\n async (status, message) => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(status, {message})\n\n const {error} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('GraphQL endpoints list retrieval failed')\n expect(error?.message).toContain(message)\n expect(error?.oclif?.exit).toBe(1)\n },\n )\n\n test('throws error when project ID is not defined', async () => {\n const {error} = await testCommand(List, [], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {projectId: undefined}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('displays endpoints correctly when dataset names contain special characters', async () => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, [\n {\n dataset: 'my-dataset-123',\n generation: 'gen2',\n playgroundEnabled: true,\n projectId: testProjectId,\n tag: 'v1.0.0',\n },\n {\n dataset: 'test_dataset',\n generation: 'gen3',\n playgroundEnabled: false,\n projectId: testProjectId,\n tag: 'beta-2',\n },\n ])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('Dataset: my-dataset-123')\n expect(stdout).toContain('Tag: v1.0.0')\n expect(stdout).toContain('Dataset: test_dataset')\n expect(stdout).toContain('Tag: beta-2')\n })\n\n test('displays endpoints with various generation values correctly', async () => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, [\n {\n dataset: 'production',\n generation: 'gen1',\n playgroundEnabled: true,\n projectId: testProjectId,\n tag: 'default',\n },\n {\n dataset: 'staging',\n generation: 'gen3',\n playgroundEnabled: false,\n projectId: testProjectId,\n tag: 'default',\n },\n ])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('Generation: gen1')\n expect(stdout).toContain('Generation: gen3')\n })\n})\n"],"names":["runCommand","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","GRAPHQL_API_VERSION","NO_PROJECT_ID","List","testProjectId","defaultMocks","cliConfig","api","projectId","projectRoot","directory","path","type","token","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","apiHost","apiVersion","uri","reply","dataset","generation","playgroundEnabled","tag","mocks","toBe","undefined","each","status","message","error","toBeInstanceOf","Error","toContain","oclif","exit"],"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 { mockApi, testCommand } from '@sanity/cli-test';
|
|
4
3
|
import nock from 'nock';
|
|
5
4
|
import { createSchema } from 'sanity';
|
|
@@ -8,50 +7,41 @@ import { getGraphQLAPIs } from '../../../actions/graphql/getGraphQLAPIs.js';
|
|
|
8
7
|
import { GRAPHQL_API_VERSION } from '../../../services/graphql.js';
|
|
9
8
|
import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
|
|
10
9
|
import { Undeploy } from '../undeploy.js';
|
|
11
|
-
// Mock the config functions
|
|
12
|
-
vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
|
|
13
|
-
findProjectRoot: vi.fn().mockResolvedValue({
|
|
14
|
-
directory: '/test/path',
|
|
15
|
-
root: '/test/path',
|
|
16
|
-
type: 'studio'
|
|
17
|
-
})
|
|
18
|
-
}));
|
|
19
|
-
vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
|
|
20
|
-
getCliConfig: vi.fn().mockResolvedValue({
|
|
21
|
-
api: {
|
|
22
|
-
dataset: 'production',
|
|
23
|
-
projectId: 'test-project'
|
|
24
|
-
}
|
|
25
|
-
})
|
|
26
|
-
}));
|
|
27
|
-
vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
|
|
28
|
-
getCliToken: vi.fn().mockResolvedValue('test-token')
|
|
29
|
-
}));
|
|
30
10
|
// Mock getGraphQLAPIs
|
|
31
11
|
vi.mock('../../../actions/graphql/getGraphQLAPIs.js', ()=>({
|
|
32
12
|
getGraphQLAPIs: vi.fn()
|
|
33
13
|
}));
|
|
34
|
-
const
|
|
14
|
+
const testProjectId = 'test-project';
|
|
15
|
+
const defaultMocks = {
|
|
16
|
+
cliConfig: {
|
|
17
|
+
api: {
|
|
18
|
+
dataset: 'production',
|
|
19
|
+
projectId: testProjectId
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
projectRoot: {
|
|
23
|
+
directory: '/test/path',
|
|
24
|
+
path: '/test/path/sanity.config.ts',
|
|
25
|
+
type: 'studio'
|
|
26
|
+
},
|
|
27
|
+
token: 'test-token'
|
|
28
|
+
};
|
|
35
29
|
const mockGetGraphQLAPIs = vi.mocked(getGraphQLAPIs);
|
|
36
30
|
const mockConfirm = vi.hoisted(()=>vi.fn());
|
|
37
31
|
const schema = createSchema({
|
|
38
32
|
name: 'default',
|
|
39
33
|
types: []
|
|
40
34
|
});
|
|
41
|
-
|
|
42
|
-
vi.
|
|
35
|
+
vi.mock('@sanity/cli-core/ux', async ()=>{
|
|
36
|
+
const actual = await vi.importActual('@sanity/cli-core/ux');
|
|
37
|
+
return {
|
|
38
|
+
...actual,
|
|
43
39
|
confirm: mockConfirm
|
|
44
|
-
}
|
|
40
|
+
};
|
|
41
|
+
});
|
|
45
42
|
describe('graphql undeploy', ()=>{
|
|
46
43
|
beforeEach(()=>{
|
|
47
44
|
vi.clearAllMocks();
|
|
48
|
-
// Reset getCliConfig to default values for each test
|
|
49
|
-
mockGetCliConfig.mockResolvedValue({
|
|
50
|
-
api: {
|
|
51
|
-
dataset: 'production',
|
|
52
|
-
projectId: 'test-project'
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
45
|
});
|
|
56
46
|
afterEach(()=>{
|
|
57
47
|
const pending = nock.pendingMocks();
|
|
@@ -113,7 +103,9 @@ describe('graphql undeploy', ()=>{
|
|
|
113
103
|
method: 'delete',
|
|
114
104
|
uri: '/apis/graphql/production/default'
|
|
115
105
|
}).reply(204);
|
|
116
|
-
const { stdout } = await testCommand(Undeploy
|
|
106
|
+
const { stdout } = await testCommand(Undeploy, [], {
|
|
107
|
+
mocks: defaultMocks
|
|
108
|
+
});
|
|
117
109
|
expect(mockConfirm).toHaveBeenCalledWith({
|
|
118
110
|
default: false,
|
|
119
111
|
message: 'Are you absolutely sure you want to delete the current GraphQL API connected to the "production" dataset in project test-project?'
|
|
@@ -131,7 +123,9 @@ describe('graphql undeploy', ()=>{
|
|
|
131
123
|
const { stdout } = await testCommand(Undeploy, [
|
|
132
124
|
'--tag',
|
|
133
125
|
'beta'
|
|
134
|
-
]
|
|
126
|
+
], {
|
|
127
|
+
mocks: defaultMocks
|
|
128
|
+
});
|
|
135
129
|
expect(mockConfirm).toHaveBeenCalledWith({
|
|
136
130
|
default: false,
|
|
137
131
|
message: 'Are you absolutely sure you want to delete the GraphQL API connected to the "production" dataset in project test-project, tagged "beta"?'
|
|
@@ -149,7 +143,9 @@ describe('graphql undeploy', ()=>{
|
|
|
149
143
|
const { stdout } = await testCommand(Undeploy, [
|
|
150
144
|
'--dataset',
|
|
151
145
|
'staging'
|
|
152
|
-
]
|
|
146
|
+
], {
|
|
147
|
+
mocks: defaultMocks
|
|
148
|
+
});
|
|
153
149
|
expect(stdout).toBe('GraphQL API deleted\n');
|
|
154
150
|
});
|
|
155
151
|
test('uses --project flag when specified', async ()=>{
|
|
@@ -164,7 +160,9 @@ describe('graphql undeploy', ()=>{
|
|
|
164
160
|
'--project',
|
|
165
161
|
'custom-project',
|
|
166
162
|
'--force'
|
|
167
|
-
]
|
|
163
|
+
], {
|
|
164
|
+
mocks: defaultMocks
|
|
165
|
+
});
|
|
168
166
|
expect(stdout).toBe('GraphQL API deleted\n');
|
|
169
167
|
});
|
|
170
168
|
test('successfully undeploys with all flags combined', async ()=>{
|
|
@@ -182,7 +180,9 @@ describe('graphql undeploy', ()=>{
|
|
|
182
180
|
'staging',
|
|
183
181
|
'--tag',
|
|
184
182
|
'experimental'
|
|
185
|
-
]
|
|
183
|
+
], {
|
|
184
|
+
mocks: defaultMocks
|
|
185
|
+
});
|
|
186
186
|
expect(stdout).toBe('GraphQL API deleted\n');
|
|
187
187
|
expect(mockConfirm).toHaveBeenCalledWith({
|
|
188
188
|
default: false,
|
|
@@ -198,13 +198,17 @@ describe('graphql undeploy', ()=>{
|
|
|
198
198
|
}).reply(204);
|
|
199
199
|
const { stdout } = await testCommand(Undeploy, [
|
|
200
200
|
'--force'
|
|
201
|
-
]
|
|
201
|
+
], {
|
|
202
|
+
mocks: defaultMocks
|
|
203
|
+
});
|
|
202
204
|
expect(stdout).toBe('GraphQL API deleted\n');
|
|
203
205
|
expect(mockConfirm).not.toHaveBeenCalled();
|
|
204
206
|
});
|
|
205
207
|
test('cancels deletion when user declines confirmation', async ()=>{
|
|
206
208
|
mockConfirm.mockResolvedValue(false);
|
|
207
|
-
const { stdout } = await testCommand(Undeploy
|
|
209
|
+
const { stdout } = await testCommand(Undeploy, [], {
|
|
210
|
+
mocks: defaultMocks
|
|
211
|
+
});
|
|
208
212
|
expect(stdout).toBe('Operation cancelled\n');
|
|
209
213
|
expect(nock.pendingMocks()).toHaveLength(0); // No API call should be made
|
|
210
214
|
});
|
|
@@ -228,7 +232,9 @@ describe('graphql undeploy', ()=>{
|
|
|
228
232
|
const { stdout } = await testCommand(Undeploy, [
|
|
229
233
|
'--api',
|
|
230
234
|
'ios'
|
|
231
|
-
]
|
|
235
|
+
], {
|
|
236
|
+
mocks: defaultMocks
|
|
237
|
+
});
|
|
232
238
|
expect(stdout).toBe('GraphQL API deleted\n');
|
|
233
239
|
expect(mockGetGraphQLAPIs).toHaveBeenCalledWith(process.cwd());
|
|
234
240
|
});
|
|
@@ -245,7 +251,9 @@ describe('graphql undeploy', ()=>{
|
|
|
245
251
|
const { error } = await testCommand(Undeploy, [
|
|
246
252
|
'--api',
|
|
247
253
|
'ios'
|
|
248
|
-
]
|
|
254
|
+
], {
|
|
255
|
+
mocks: defaultMocks
|
|
256
|
+
});
|
|
249
257
|
expect(error).toBeInstanceOf(Error);
|
|
250
258
|
expect(error?.message).toContain('GraphQL API "ios" not found');
|
|
251
259
|
expect(error?.oclif?.exit).toBe(1);
|
|
@@ -272,7 +280,9 @@ describe('graphql undeploy', ()=>{
|
|
|
272
280
|
'ios',
|
|
273
281
|
'--dataset',
|
|
274
282
|
'staging'
|
|
275
|
-
]
|
|
283
|
+
], {
|
|
284
|
+
mocks: defaultMocks
|
|
285
|
+
});
|
|
276
286
|
expect(stdout).toBe('GraphQL API deleted\n');
|
|
277
287
|
expect(stderr).toContain('Both --api and --dataset specified, using --dataset staging');
|
|
278
288
|
});
|
|
@@ -298,7 +308,9 @@ describe('graphql undeploy', ()=>{
|
|
|
298
308
|
'ios',
|
|
299
309
|
'--project',
|
|
300
310
|
'test-project'
|
|
301
|
-
]
|
|
311
|
+
], {
|
|
312
|
+
mocks: defaultMocks
|
|
313
|
+
});
|
|
302
314
|
expect(stdout).toBe('GraphQL API deleted\n');
|
|
303
315
|
expect(stderr).toContain('Both --api and --project specified, using --project test-project');
|
|
304
316
|
});
|
|
@@ -324,34 +336,44 @@ describe('graphql undeploy', ()=>{
|
|
|
324
336
|
'ios',
|
|
325
337
|
'--tag',
|
|
326
338
|
'beta'
|
|
327
|
-
]
|
|
339
|
+
], {
|
|
340
|
+
mocks: defaultMocks
|
|
341
|
+
});
|
|
328
342
|
expect(stdout).toBe('GraphQL API deleted\n');
|
|
329
343
|
expect(stderr).toContain('Both --api and --tag specified, using --tag beta');
|
|
330
344
|
});
|
|
331
345
|
test('throws error when project ID is not defined', async ()=>{
|
|
332
|
-
mockGetCliConfig.mockResolvedValue({
|
|
333
|
-
api: {
|
|
334
|
-
dataset: 'production',
|
|
335
|
-
projectId: undefined
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
346
|
const { error } = await testCommand(Undeploy, [
|
|
339
347
|
'--force'
|
|
340
|
-
]
|
|
348
|
+
], {
|
|
349
|
+
mocks: {
|
|
350
|
+
...defaultMocks,
|
|
351
|
+
cliConfig: {
|
|
352
|
+
api: {
|
|
353
|
+
dataset: 'production',
|
|
354
|
+
projectId: undefined
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
});
|
|
341
359
|
expect(error).toBeInstanceOf(Error);
|
|
342
360
|
expect(error?.message).toEqual(NO_PROJECT_ID);
|
|
343
361
|
expect(error?.oclif?.exit).toBe(1);
|
|
344
362
|
});
|
|
345
363
|
test('throws error when dataset is not defined and not in config', async ()=>{
|
|
346
|
-
mockGetCliConfig.mockResolvedValue({
|
|
347
|
-
api: {
|
|
348
|
-
dataset: undefined,
|
|
349
|
-
projectId: 'test-project'
|
|
350
|
-
}
|
|
351
|
-
});
|
|
352
364
|
const { error } = await testCommand(Undeploy, [
|
|
353
365
|
'--force'
|
|
354
|
-
]
|
|
366
|
+
], {
|
|
367
|
+
mocks: {
|
|
368
|
+
...defaultMocks,
|
|
369
|
+
cliConfig: {
|
|
370
|
+
api: {
|
|
371
|
+
dataset: undefined,
|
|
372
|
+
projectId: testProjectId
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
});
|
|
355
377
|
expect(error).toBeInstanceOf(Error);
|
|
356
378
|
expect(error?.message).toContain('Dataset is required. Specify it with --dataset or configure it in your project.');
|
|
357
379
|
expect(error?.oclif?.exit).toBe(1);
|
|
@@ -366,7 +388,9 @@ describe('graphql undeploy', ()=>{
|
|
|
366
388
|
}).reply(404, {
|
|
367
389
|
message: 'GraphQL API not found'
|
|
368
390
|
});
|
|
369
|
-
const { error } = await testCommand(Undeploy
|
|
391
|
+
const { error } = await testCommand(Undeploy, [], {
|
|
392
|
+
mocks: defaultMocks
|
|
393
|
+
});
|
|
370
394
|
expect(error).toBeInstanceOf(Error);
|
|
371
395
|
expect(error?.message).toContain('GraphQL API deletion failed');
|
|
372
396
|
expect(error?.message).toContain('GraphQL API not found');
|
|
@@ -374,7 +398,9 @@ describe('graphql undeploy', ()=>{
|
|
|
374
398
|
});
|
|
375
399
|
test('handles user cancelling confirmation prompt', async ()=>{
|
|
376
400
|
mockConfirm.mockRejectedValue(new Error('User cancelled'));
|
|
377
|
-
const { error } = await testCommand(Undeploy
|
|
401
|
+
const { error } = await testCommand(Undeploy, [], {
|
|
402
|
+
mocks: defaultMocks
|
|
403
|
+
});
|
|
378
404
|
expect(error).toBeInstanceOf(Error);
|
|
379
405
|
expect(error?.message).toBe('Operation cancelled');
|
|
380
406
|
expect(error?.oclif?.exit).toBe(1);
|