@redocly/cli 1.7.0 → 1.8.1
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/CHANGELOG.md +17 -0
- package/lib/__tests__/commands/build-docs.test.js +3 -3
- package/lib/__tests__/commands/bundle.test.js +5 -5
- package/lib/__tests__/commands/join.test.js +11 -11
- package/lib/__tests__/commands/lint.test.js +14 -14
- package/lib/__tests__/commands/push-region.test.js +1 -1
- package/lib/__tests__/commands/push.test.js +11 -11
- package/lib/__tests__/fetch-with-timeout.test.js +4 -13
- package/lib/__tests__/spinner.test.js +43 -0
- package/lib/__tests__/utils.test.js +36 -36
- package/lib/__tests__/wrapper.test.js +8 -8
- package/lib/cms/api/__tests__/api-keys.test.d.ts +1 -0
- package/lib/cms/api/__tests__/api-keys.test.js +26 -0
- package/lib/cms/api/__tests__/api.client.test.d.ts +1 -0
- package/lib/cms/api/__tests__/api.client.test.js +217 -0
- package/lib/cms/api/__tests__/domains.test.d.ts +1 -0
- package/lib/cms/api/__tests__/domains.test.js +13 -0
- package/lib/cms/api/api-client.d.ts +50 -0
- package/lib/cms/api/api-client.js +148 -0
- package/lib/cms/api/api-keys.d.ts +1 -0
- package/lib/cms/api/api-keys.js +24 -0
- package/lib/cms/api/domains.d.ts +1 -0
- package/lib/cms/api/domains.js +12 -0
- package/lib/cms/api/index.d.ts +3 -0
- package/lib/cms/api/index.js +19 -0
- package/lib/cms/api/types.d.ts +91 -0
- package/lib/cms/api/types.js +2 -0
- package/lib/cms/commands/__tests__/push-status.test.d.ts +1 -0
- package/lib/cms/commands/__tests__/push-status.test.js +164 -0
- package/lib/cms/commands/__tests__/push.test.d.ts +1 -0
- package/lib/cms/commands/__tests__/push.test.js +226 -0
- package/lib/cms/commands/push-status.d.ts +12 -0
- package/lib/cms/commands/push-status.js +150 -0
- package/lib/cms/commands/push.d.ts +23 -0
- package/lib/cms/commands/push.js +142 -0
- package/lib/cms/utils.d.ts +2 -0
- package/lib/cms/utils.js +6 -0
- package/lib/commands/build-docs/index.js +4 -4
- package/lib/commands/build-docs/utils.js +2 -2
- package/lib/commands/bundle.js +13 -13
- package/lib/commands/join.js +25 -25
- package/lib/commands/lint.js +10 -10
- package/lib/commands/login.js +2 -2
- package/lib/commands/preview-docs/index.js +4 -4
- package/lib/commands/preview-docs/preview-server/preview-server.js +2 -2
- package/lib/commands/preview-project/types.d.ts +1 -1
- package/lib/commands/push.d.ts +5 -0
- package/lib/commands/push.js +25 -17
- package/lib/commands/split/__tests__/index.test.js +2 -2
- package/lib/commands/split/index.js +17 -17
- package/lib/commands/stats.js +4 -4
- package/lib/index.d.ts +1 -1
- package/lib/index.js +130 -17
- package/lib/types.d.ts +8 -1
- package/lib/{__mocks__/utils.js → utils/__mocks__/miscellaneous.js} +1 -1
- package/lib/utils/assert-node-version.d.ts +1 -0
- package/lib/{fetch-with-timeout.js → utils/fetch-with-timeout.js} +2 -7
- package/lib/{utils.d.ts → utils/miscellaneous.d.ts} +1 -1
- package/lib/{utils.js → utils/miscellaneous.js} +2 -2
- package/lib/utils/spinner.d.ts +10 -0
- package/lib/utils/spinner.js +42 -0
- package/lib/{update-version-notifier.js → utils/update-version-notifier.js} +4 -4
- package/lib/wrapper.js +5 -5
- package/package.json +5 -3
- package/src/__tests__/commands/build-docs.test.ts +2 -2
- package/src/__tests__/commands/bundle.test.ts +2 -2
- package/src/__tests__/commands/join.test.ts +2 -2
- package/src/__tests__/commands/lint.test.ts +3 -3
- package/src/__tests__/commands/push-region.test.ts +1 -1
- package/src/__tests__/commands/push.test.ts +2 -2
- package/src/__tests__/fetch-with-timeout.test.ts +4 -16
- package/src/__tests__/spinner.test.ts +51 -0
- package/src/__tests__/utils.test.ts +2 -5
- package/src/__tests__/wrapper.test.ts +2 -2
- package/src/cms/api/__tests__/api-keys.test.ts +37 -0
- package/src/cms/api/__tests__/api.client.test.ts +275 -0
- package/src/cms/api/__tests__/domains.test.ts +15 -0
- package/src/cms/api/api-client.ts +199 -0
- package/src/cms/api/api-keys.ts +26 -0
- package/src/cms/api/domains.ts +11 -0
- package/src/cms/api/index.ts +3 -0
- package/src/cms/api/types.ts +101 -0
- package/src/cms/commands/__tests__/push-status.test.ts +212 -0
- package/src/cms/commands/__tests__/push.test.ts +293 -0
- package/src/cms/commands/push-status.ts +203 -0
- package/src/cms/commands/push.ts +215 -0
- package/src/cms/utils.ts +1 -0
- package/src/commands/build-docs/index.ts +1 -1
- package/src/commands/build-docs/utils.ts +1 -1
- package/src/commands/bundle.ts +2 -2
- package/src/commands/join.ts +2 -2
- package/src/commands/lint.ts +1 -1
- package/src/commands/login.ts +1 -1
- package/src/commands/preview-docs/index.ts +5 -1
- package/src/commands/preview-docs/preview-server/preview-server.ts +1 -1
- package/src/commands/preview-project/types.ts +1 -1
- package/src/commands/push.ts +15 -1
- package/src/commands/split/__tests__/index.test.ts +3 -4
- package/src/commands/split/index.ts +2 -2
- package/src/commands/stats.ts +2 -2
- package/src/index.ts +138 -20
- package/src/types.ts +8 -0
- package/src/{__mocks__/utils.ts → utils/__mocks__/miscellaneous.ts} +1 -1
- package/src/{fetch-with-timeout.ts → utils/fetch-with-timeout.ts} +1 -6
- package/src/{utils.ts → utils/miscellaneous.ts} +2 -2
- package/src/utils/spinner.ts +50 -0
- package/src/{update-version-notifier.ts → utils/update-version-notifier.ts} +2 -2
- package/src/wrapper.ts +7 -2
- package/tsconfig.tsbuildinfo +1 -1
- /package/lib/{assert-node-version.d.ts → __tests__/spinner.test.d.ts} +0 -0
- /package/lib/{__mocks__/utils.d.ts → utils/__mocks__/miscellaneous.d.ts} +0 -0
- /package/lib/{assert-node-version.js → utils/assert-node-version.js} +0 -0
- /package/lib/{fetch-with-timeout.d.ts → utils/fetch-with-timeout.d.ts} +0 -0
- /package/lib/{js-utils.d.ts → utils/js-utils.d.ts} +0 -0
- /package/lib/{js-utils.js → utils/js-utils.js} +0 -0
- /package/lib/{update-version-notifier.d.ts → utils/update-version-notifier.d.ts} +0 -0
- /package/src/{assert-node-version.ts → utils/assert-node-version.ts} +0 -0
- /package/src/{js-utils.ts → utils/js-utils.ts} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @redocly/cli
|
|
2
2
|
|
|
3
|
+
## 1.8.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Added git to the docker image, so the push command can use git metadata.
|
|
8
|
+
- Updated @redocly/openapi-core to v1.8.1.
|
|
9
|
+
|
|
10
|
+
## 1.8.0
|
|
11
|
+
|
|
12
|
+
### Minor Changes
|
|
13
|
+
|
|
14
|
+
- Added a `push` and `push-status` command for use with future Redocly products.
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- Updated @redocly/openapi-core to v1.8.0.
|
|
19
|
+
|
|
3
20
|
## 1.7.0
|
|
4
21
|
|
|
5
22
|
### Minor Changes
|
|
@@ -13,10 +13,10 @@ const redoc_1 = require("redoc");
|
|
|
13
13
|
const server_1 = require("react-dom/server");
|
|
14
14
|
const build_docs_1 = require("../../commands/build-docs");
|
|
15
15
|
const utils_1 = require("../../commands/build-docs/utils");
|
|
16
|
-
const
|
|
16
|
+
const miscellaneous_1 = require("../../utils/miscellaneous");
|
|
17
17
|
jest.mock('redoc');
|
|
18
18
|
jest.mock('fs');
|
|
19
|
-
jest.mock('../../utils');
|
|
19
|
+
jest.mock('../../utils/miscellaneous');
|
|
20
20
|
const config = {
|
|
21
21
|
output: '',
|
|
22
22
|
title: 'Test',
|
|
@@ -50,7 +50,7 @@ describe('build-docs', () => {
|
|
|
50
50
|
api: '../some-path/openapi.yaml',
|
|
51
51
|
}, {});
|
|
52
52
|
expect(redoc_1.loadAndBundleSpec).toBeCalledTimes(1);
|
|
53
|
-
expect(
|
|
53
|
+
expect(miscellaneous_1.getFallbackApisOrExit).toBeCalledTimes(1);
|
|
54
54
|
expect(processExitMock).toBeCalledTimes(0);
|
|
55
55
|
}));
|
|
56
56
|
});
|
|
@@ -11,10 +11,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
const openapi_core_1 = require("@redocly/openapi-core");
|
|
13
13
|
const bundle_1 = require("../../commands/bundle");
|
|
14
|
-
const
|
|
14
|
+
const miscellaneous_1 = require("../../utils/miscellaneous");
|
|
15
15
|
const wrapper_1 = require("../../wrapper");
|
|
16
16
|
jest.mock('@redocly/openapi-core');
|
|
17
|
-
jest.mock('../../utils');
|
|
17
|
+
jest.mock('../../utils/miscellaneous');
|
|
18
18
|
openapi_core_1.getMergedConfig.mockImplementation((config) => config);
|
|
19
19
|
describe('bundle', () => {
|
|
20
20
|
let processExitMock;
|
|
@@ -107,8 +107,8 @@ describe('bundle', () => {
|
|
|
107
107
|
format: 'codeframe',
|
|
108
108
|
lint: false,
|
|
109
109
|
});
|
|
110
|
-
expect(
|
|
111
|
-
expect(
|
|
110
|
+
expect(miscellaneous_1.handleError).toHaveBeenCalledTimes(1);
|
|
111
|
+
expect(miscellaneous_1.handleError).toHaveBeenCalledWith(new Error('Invalid definition'), 'invalid.json');
|
|
112
112
|
}));
|
|
113
113
|
it("handleError isn't called when bundles a valid definition", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
114
114
|
const apis = ['foo.yaml'];
|
|
@@ -123,6 +123,6 @@ describe('bundle', () => {
|
|
|
123
123
|
format: 'codeframe',
|
|
124
124
|
lint: false,
|
|
125
125
|
});
|
|
126
|
-
expect(
|
|
126
|
+
expect(miscellaneous_1.handleError).toHaveBeenCalledTimes(0);
|
|
127
127
|
}));
|
|
128
128
|
});
|
|
@@ -10,19 +10,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
const join_1 = require("../../commands/join");
|
|
13
|
-
const
|
|
13
|
+
const miscellaneous_1 = require("../../utils/miscellaneous");
|
|
14
14
|
const colorette_1 = require("colorette");
|
|
15
15
|
const openapi_core_1 = require("@redocly/openapi-core");
|
|
16
16
|
const openapi_core_2 = require("../../__mocks__/@redocly/openapi-core");
|
|
17
17
|
const config_1 = require("../fixtures/config");
|
|
18
|
-
jest.mock('../../utils');
|
|
18
|
+
jest.mock('../../utils/miscellaneous');
|
|
19
19
|
jest.mock('colorette');
|
|
20
20
|
describe('handleJoin fails', () => {
|
|
21
21
|
const colloreteYellowMock = colorette_1.yellow;
|
|
22
22
|
colloreteYellowMock.mockImplementation((string) => string);
|
|
23
23
|
it('should call exitWithError because only one entrypoint', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
24
|
yield (0, join_1.handleJoin)({ apis: ['first.yaml'] }, {}, 'cli-version');
|
|
25
|
-
expect(
|
|
25
|
+
expect(miscellaneous_1.exitWithError).toHaveBeenCalledWith(`At least 2 apis should be provided. \n\n`);
|
|
26
26
|
}));
|
|
27
27
|
it('should call exitWithError because passed all 3 options for tags', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
28
|
yield (0, join_1.handleJoin)({
|
|
@@ -31,7 +31,7 @@ describe('handleJoin fails', () => {
|
|
|
31
31
|
'without-x-tag-groups': true,
|
|
32
32
|
'prefix-tags-with-filename': true,
|
|
33
33
|
}, {}, 'cli-version');
|
|
34
|
-
expect(
|
|
34
|
+
expect(miscellaneous_1.exitWithError).toHaveBeenCalledWith(`You use prefix-tags-with-filename, prefix-tags-with-info-prop, without-x-tag-groups together.\nPlease choose only one! \n\n`);
|
|
35
35
|
}));
|
|
36
36
|
it('should call exitWithError because passed all 2 options for tags', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
37
37
|
yield (0, join_1.handleJoin)({
|
|
@@ -39,13 +39,13 @@ describe('handleJoin fails', () => {
|
|
|
39
39
|
'without-x-tag-groups': true,
|
|
40
40
|
'prefix-tags-with-filename': true,
|
|
41
41
|
}, {}, 'cli-version');
|
|
42
|
-
expect(
|
|
42
|
+
expect(miscellaneous_1.exitWithError).toHaveBeenCalledWith(`You use prefix-tags-with-filename, without-x-tag-groups together.\nPlease choose only one! \n\n`);
|
|
43
43
|
}));
|
|
44
44
|
it('should call exitWithError because Only OpenAPI 3.0 and OpenAPI 3.1 are supported', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
45
45
|
yield (0, join_1.handleJoin)({
|
|
46
46
|
apis: ['first.yaml', 'second.yaml'],
|
|
47
47
|
}, config_1.ConfigFixture, 'cli-version');
|
|
48
|
-
expect(
|
|
48
|
+
expect(miscellaneous_1.exitWithError).toHaveBeenCalledWith('Only OpenAPI 3.0 and OpenAPI 3.1 are supported: undefined \n\n');
|
|
49
49
|
}));
|
|
50
50
|
it('should call exitWithError if mixing OpenAPI 3.0 and 3.1', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
51
51
|
openapi_core_1.detectSpec
|
|
@@ -54,21 +54,21 @@ describe('handleJoin fails', () => {
|
|
|
54
54
|
yield (0, join_1.handleJoin)({
|
|
55
55
|
apis: ['first.yaml', 'second.yaml'],
|
|
56
56
|
}, config_1.ConfigFixture, 'cli-version');
|
|
57
|
-
expect(
|
|
57
|
+
expect(miscellaneous_1.exitWithError).toHaveBeenCalledWith('All APIs must use the same OpenAPI version: undefined \n\n');
|
|
58
58
|
}));
|
|
59
59
|
it('should call writeToFileByExtension function', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
60
60
|
openapi_core_1.detectSpec.mockReturnValue('oas3_0');
|
|
61
61
|
yield (0, join_1.handleJoin)({
|
|
62
62
|
apis: ['first.yaml', 'second.yaml'],
|
|
63
63
|
}, config_1.ConfigFixture, 'cli-version');
|
|
64
|
-
expect(
|
|
64
|
+
expect(miscellaneous_1.writeToFileByExtension).toHaveBeenCalledWith(expect.any(Object), 'openapi.yaml', expect.any(Boolean));
|
|
65
65
|
}));
|
|
66
66
|
it('should call writeToFileByExtension function for OpenAPI 3.1', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
67
67
|
openapi_core_1.detectSpec.mockReturnValue('oas3_1');
|
|
68
68
|
yield (0, join_1.handleJoin)({
|
|
69
69
|
apis: ['first.yaml', 'second.yaml'],
|
|
70
70
|
}, config_1.ConfigFixture, 'cli-version');
|
|
71
|
-
expect(
|
|
71
|
+
expect(miscellaneous_1.writeToFileByExtension).toHaveBeenCalledWith(expect.any(Object), 'openapi.yaml', expect.any(Boolean));
|
|
72
72
|
}));
|
|
73
73
|
it('should call writeToFileByExtension function with custom output file', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
74
74
|
openapi_core_1.detectSpec.mockReturnValue('oas3_0');
|
|
@@ -76,14 +76,14 @@ describe('handleJoin fails', () => {
|
|
|
76
76
|
apis: ['first.yaml', 'second.yaml'],
|
|
77
77
|
output: 'output.yml',
|
|
78
78
|
}, config_1.ConfigFixture, 'cli-version');
|
|
79
|
-
expect(
|
|
79
|
+
expect(miscellaneous_1.writeToFileByExtension).toHaveBeenCalledWith(expect.any(Object), 'output.yml', expect.any(Boolean));
|
|
80
80
|
}));
|
|
81
81
|
it('should call writeToFileByExtension function with json file extension', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
82
82
|
openapi_core_1.detectSpec.mockReturnValue('oas3_0');
|
|
83
83
|
yield (0, join_1.handleJoin)({
|
|
84
84
|
apis: ['first.json', 'second.yaml'],
|
|
85
85
|
}, config_1.ConfigFixture, 'cli-version');
|
|
86
|
-
expect(
|
|
86
|
+
expect(miscellaneous_1.writeToFileByExtension).toHaveBeenCalledWith(expect.any(Object), 'openapi.json', expect.any(Boolean));
|
|
87
87
|
}));
|
|
88
88
|
it('should call skipDecorators and skipPreprocessors', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
89
89
|
openapi_core_1.detectSpec.mockReturnValue('oas3_0');
|
|
@@ -11,15 +11,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
const lint_1 = require("../../commands/lint");
|
|
13
13
|
const openapi_core_1 = require("@redocly/openapi-core");
|
|
14
|
-
const
|
|
14
|
+
const miscellaneous_1 = require("../../utils/miscellaneous");
|
|
15
15
|
const config_1 = require("../fixtures/config");
|
|
16
16
|
const perf_hooks_1 = require("perf_hooks");
|
|
17
17
|
const wrapper_1 = require("../../wrapper");
|
|
18
18
|
const colorette_1 = require("colorette");
|
|
19
19
|
jest.mock('@redocly/openapi-core');
|
|
20
|
-
jest.mock('../../utils');
|
|
20
|
+
jest.mock('../../utils/miscellaneous');
|
|
21
21
|
jest.mock('perf_hooks');
|
|
22
|
-
jest.mock('../../update-version-notifier', () => ({
|
|
22
|
+
jest.mock('../../utils/update-version-notifier', () => ({
|
|
23
23
|
version: '1.0.0',
|
|
24
24
|
}));
|
|
25
25
|
const argvMock = {
|
|
@@ -48,20 +48,20 @@ describe('handleLint', () => {
|
|
|
48
48
|
describe('loadConfig and getEnrtypoints stage', () => {
|
|
49
49
|
it('should fail if config file does not exist', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
50
50
|
yield (0, wrapper_1.commandWrapper)(lint_1.handleLint)(Object.assign(Object.assign({}, argvMock), { config: 'config.yaml' }));
|
|
51
|
-
expect(
|
|
51
|
+
expect(miscellaneous_1.exitWithError).toHaveBeenCalledWith('Please, provide valid path to the configuration file');
|
|
52
52
|
}));
|
|
53
53
|
it('should call loadConfigAndHandleErrors and getFallbackApisOrExit', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
54
54
|
yield (0, wrapper_1.commandWrapper)(lint_1.handleLint)(argvMock);
|
|
55
|
-
expect(
|
|
55
|
+
expect(miscellaneous_1.loadConfigAndHandleErrors).toHaveBeenCalledWith({
|
|
56
56
|
configPath: undefined,
|
|
57
57
|
customExtends: undefined,
|
|
58
58
|
processRawConfig: undefined,
|
|
59
59
|
});
|
|
60
|
-
expect(
|
|
60
|
+
expect(miscellaneous_1.getFallbackApisOrExit).toHaveBeenCalled();
|
|
61
61
|
}));
|
|
62
62
|
it('should call loadConfig with args if such exist', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
63
63
|
yield (0, wrapper_1.commandWrapper)(lint_1.handleLint)(Object.assign(Object.assign({}, argvMock), { config: 'redocly.yaml', extends: ['some/path'] }));
|
|
64
|
-
expect(
|
|
64
|
+
expect(miscellaneous_1.loadConfigAndHandleErrors).toHaveBeenCalledWith({
|
|
65
65
|
configPath: 'redocly.yaml',
|
|
66
66
|
customExtends: ['some/path'],
|
|
67
67
|
processRawConfig: undefined,
|
|
@@ -73,12 +73,12 @@ describe('handleLint', () => {
|
|
|
73
73
|
}));
|
|
74
74
|
it('should check if ruleset exist', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
75
75
|
yield (0, wrapper_1.commandWrapper)(lint_1.handleLint)(argvMock);
|
|
76
|
-
expect(
|
|
76
|
+
expect(miscellaneous_1.checkIfRulesetExist).toHaveBeenCalledTimes(1);
|
|
77
77
|
}));
|
|
78
78
|
it('should fail if apis not provided', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
79
79
|
yield (0, wrapper_1.commandWrapper)(lint_1.handleLint)(Object.assign(Object.assign({}, argvMock), { apis: [] }));
|
|
80
|
-
expect(
|
|
81
|
-
expect(
|
|
80
|
+
expect(miscellaneous_1.getFallbackApisOrExit).toHaveBeenCalledTimes(1);
|
|
81
|
+
expect(miscellaneous_1.exitWithError).toHaveBeenCalledWith('No APIs were provided');
|
|
82
82
|
}));
|
|
83
83
|
});
|
|
84
84
|
describe('loop through entrypoints and lint stage', () => {
|
|
@@ -104,21 +104,21 @@ describe('handleLint', () => {
|
|
|
104
104
|
totals: { errors: 0 },
|
|
105
105
|
version: '1.0.0',
|
|
106
106
|
});
|
|
107
|
-
expect(
|
|
107
|
+
expect(miscellaneous_1.getExecutionTime).toHaveBeenCalledWith(42);
|
|
108
108
|
}));
|
|
109
109
|
it('should catch error in handleError if something fails', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
110
110
|
openapi_core_1.lint.mockRejectedValueOnce('error');
|
|
111
111
|
yield (0, wrapper_1.commandWrapper)(lint_1.handleLint)(argvMock);
|
|
112
|
-
expect(
|
|
112
|
+
expect(miscellaneous_1.handleError).toHaveBeenCalledWith('error', 'openapi.yaml');
|
|
113
113
|
}));
|
|
114
114
|
});
|
|
115
115
|
describe('erros and warning handle after lint stage', () => {
|
|
116
116
|
it('should call printLintTotals and printLintTotals', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
117
117
|
yield (0, wrapper_1.commandWrapper)(lint_1.handleLint)(argvMock);
|
|
118
|
-
expect(
|
|
118
|
+
expect(miscellaneous_1.printUnusedWarnings).toHaveBeenCalled();
|
|
119
119
|
}));
|
|
120
120
|
it('should call exit with 0 if no errors', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
121
|
-
|
|
121
|
+
miscellaneous_1.loadConfigAndHandleErrors.mockImplementation(() => {
|
|
122
122
|
return Object.assign({}, config_1.ConfigFixture);
|
|
123
123
|
});
|
|
124
124
|
yield (0, wrapper_1.commandWrapper)(lint_1.handleLint)(argvMock);
|
|
@@ -22,7 +22,7 @@ jest.mock('node-fetch', () => ({
|
|
|
22
22
|
}));
|
|
23
23
|
jest.mock('@redocly/openapi-core');
|
|
24
24
|
jest.mock('../../commands/login');
|
|
25
|
-
jest.mock('../../utils');
|
|
25
|
+
jest.mock('../../utils/miscellaneous');
|
|
26
26
|
openapi_core_1.getMergedConfig.mockImplementation((config) => config);
|
|
27
27
|
const mockPromptClientToken = login_1.promptClientToken;
|
|
28
28
|
describe('push-with-region', () => {
|
|
@@ -11,7 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
const fs = require("fs");
|
|
13
13
|
const openapi_core_1 = require("@redocly/openapi-core");
|
|
14
|
-
const
|
|
14
|
+
const miscellaneous_1 = require("../../utils/miscellaneous");
|
|
15
15
|
const push_1 = require("../../commands/push");
|
|
16
16
|
const config_1 = require("../fixtures/config");
|
|
17
17
|
const colorette_1 = require("colorette");
|
|
@@ -23,7 +23,7 @@ jest.mock('node-fetch', () => ({
|
|
|
23
23
|
})),
|
|
24
24
|
}));
|
|
25
25
|
jest.mock('@redocly/openapi-core');
|
|
26
|
-
jest.mock('../../utils');
|
|
26
|
+
jest.mock('../../utils/miscellaneous');
|
|
27
27
|
openapi_core_1.getMergedConfig.mockImplementation((config) => config);
|
|
28
28
|
describe('push', () => {
|
|
29
29
|
const redoclyClient = require('@redocly/openapi-core').__redoclyClient;
|
|
@@ -65,7 +65,7 @@ describe('push', () => {
|
|
|
65
65
|
'job-id': ' ',
|
|
66
66
|
'batch-size': 2,
|
|
67
67
|
}, config_1.ConfigFixture);
|
|
68
|
-
expect(
|
|
68
|
+
expect(miscellaneous_1.exitWithError).toBeCalledTimes(1);
|
|
69
69
|
}));
|
|
70
70
|
it('fails if batchSize value is less than 2', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
71
71
|
yield (0, push_1.handlePush)({
|
|
@@ -77,7 +77,7 @@ describe('push', () => {
|
|
|
77
77
|
'job-id': '123',
|
|
78
78
|
'batch-size': 1,
|
|
79
79
|
}, config_1.ConfigFixture);
|
|
80
|
-
expect(
|
|
80
|
+
expect(miscellaneous_1.exitWithError).toBeCalledTimes(1);
|
|
81
81
|
}));
|
|
82
82
|
it('push with --files', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
83
83
|
const mockConfig = Object.assign(Object.assign({}, config_1.ConfigFixture), { files: ['./resouces/1.md', './resouces/2.md'] });
|
|
@@ -112,8 +112,8 @@ describe('push', () => {
|
|
|
112
112
|
'job-id': '123',
|
|
113
113
|
'batch-size': 2,
|
|
114
114
|
}, config_1.ConfigFixture);
|
|
115
|
-
expect(
|
|
116
|
-
expect(
|
|
115
|
+
expect(miscellaneous_1.exitWithError).toBeCalledTimes(1);
|
|
116
|
+
expect(miscellaneous_1.exitWithError).toBeCalledWith(`No organization provided, please use --organization option or specify the 'organization' field in the config file.`);
|
|
117
117
|
}));
|
|
118
118
|
it('push should work with organization in config', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
119
119
|
const mockConfig = Object.assign(Object.assign({}, config_1.ConfigFixture), { organization: 'test_org' });
|
|
@@ -160,8 +160,8 @@ describe('push', () => {
|
|
|
160
160
|
'job-id': '123',
|
|
161
161
|
'batch-size': 2,
|
|
162
162
|
}, mockConfig);
|
|
163
|
-
expect(
|
|
164
|
-
expect(
|
|
163
|
+
expect(miscellaneous_1.exitWithError).toBeCalledTimes(1);
|
|
164
|
+
expect(miscellaneous_1.exitWithError).toHaveBeenLastCalledWith('Api not found. Please make sure you have provided the correct data in the config file.');
|
|
165
165
|
}));
|
|
166
166
|
it('push should fail if destination not provided', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
167
167
|
const mockConfig = { organization: 'test_org', apis: {} };
|
|
@@ -173,8 +173,8 @@ describe('push', () => {
|
|
|
173
173
|
'job-id': '123',
|
|
174
174
|
'batch-size': 2,
|
|
175
175
|
}, mockConfig);
|
|
176
|
-
expect(
|
|
177
|
-
expect(
|
|
176
|
+
expect(miscellaneous_1.exitWithError).toBeCalledTimes(1);
|
|
177
|
+
expect(miscellaneous_1.exitWithError).toHaveBeenLastCalledWith('No destination provided, please use --destination option to provide destination.');
|
|
178
178
|
}));
|
|
179
179
|
it('push should fail if destination format is not valid', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
180
180
|
const mockConfig = { organization: 'test_org', apis: {} };
|
|
@@ -186,7 +186,7 @@ describe('push', () => {
|
|
|
186
186
|
'job-id': '123',
|
|
187
187
|
'batch-size': 2,
|
|
188
188
|
}, mockConfig);
|
|
189
|
-
expect(
|
|
189
|
+
expect(miscellaneous_1.exitWithError).toHaveBeenCalledWith(`Destination argument value is not valid, please use the right format: ${(0, colorette_1.yellow)('<api-name@api-version>')}`);
|
|
190
190
|
}));
|
|
191
191
|
it('push should work and encode name with spaces', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
192
192
|
const encodeURIComponentSpy = jest.spyOn(global, 'encodeURIComponent');
|
|
@@ -9,30 +9,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const
|
|
12
|
+
const abort_controller_1 = require("abort-controller");
|
|
13
|
+
const fetch_with_timeout_1 = require("../utils/fetch-with-timeout");
|
|
13
14
|
const node_fetch_1 = require("node-fetch");
|
|
14
15
|
jest.mock('node-fetch');
|
|
15
16
|
describe('fetchWithTimeout', () => {
|
|
16
17
|
afterEach(() => {
|
|
17
18
|
jest.clearAllMocks();
|
|
18
19
|
});
|
|
19
|
-
it('should
|
|
20
|
-
// @ts-ignore
|
|
21
|
-
global.AbortController = undefined;
|
|
22
|
-
// @ts-ignore
|
|
23
|
-
global.setTimeout = jest.fn();
|
|
24
|
-
yield (0, fetch_with_timeout_1.default)('url', { method: 'GET' });
|
|
25
|
-
expect(node_fetch_1.default).toHaveBeenCalledWith('url', { method: 'GET' });
|
|
26
|
-
expect(global.setTimeout).toHaveBeenCalledTimes(0);
|
|
27
|
-
}));
|
|
28
|
-
it('should call node-fetch with signal if AbortController is available', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
29
|
-
global.AbortController = jest.fn().mockImplementation(() => ({ signal: 'something' }));
|
|
20
|
+
it('should call node-fetch with signal', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
30
21
|
// @ts-ignore
|
|
31
22
|
global.setTimeout = jest.fn();
|
|
32
23
|
global.clearTimeout = jest.fn();
|
|
33
24
|
yield (0, fetch_with_timeout_1.default)('url');
|
|
34
25
|
expect(global.setTimeout).toHaveBeenCalledTimes(1);
|
|
35
|
-
expect(node_fetch_1.default).toHaveBeenCalledWith('url', { signal:
|
|
26
|
+
expect(node_fetch_1.default).toHaveBeenCalledWith('url', { signal: new abort_controller_1.default().signal });
|
|
36
27
|
expect(global.clearTimeout).toHaveBeenCalledTimes(1);
|
|
37
28
|
}));
|
|
38
29
|
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const spinner_1 = require("../utils/spinner");
|
|
4
|
+
const process = require("process");
|
|
5
|
+
jest.useFakeTimers();
|
|
6
|
+
describe('Spinner', () => {
|
|
7
|
+
const IS_TTY = process.stdout.isTTY;
|
|
8
|
+
let writeMock;
|
|
9
|
+
let spinner;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
process.stdout.isTTY = true;
|
|
12
|
+
writeMock = jest.spyOn(process.stdout, 'write').mockImplementation(jest.fn());
|
|
13
|
+
spinner = new spinner_1.Spinner();
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
writeMock.mockRestore();
|
|
17
|
+
jest.clearAllTimers();
|
|
18
|
+
});
|
|
19
|
+
afterAll(() => {
|
|
20
|
+
process.stdout.isTTY = IS_TTY;
|
|
21
|
+
});
|
|
22
|
+
it('starts the spinner', () => {
|
|
23
|
+
spinner.start('Loading');
|
|
24
|
+
jest.advanceTimersByTime(100);
|
|
25
|
+
expect(writeMock).toHaveBeenCalledWith('\r⠋ Loading');
|
|
26
|
+
});
|
|
27
|
+
it('stops the spinner', () => {
|
|
28
|
+
spinner.start('Loading');
|
|
29
|
+
spinner.stop();
|
|
30
|
+
expect(writeMock).toHaveBeenCalledWith('\r');
|
|
31
|
+
});
|
|
32
|
+
it('should write 3 frames', () => {
|
|
33
|
+
spinner.start('Loading');
|
|
34
|
+
jest.advanceTimersByTime(300);
|
|
35
|
+
expect(writeMock).toHaveBeenCalledTimes(3);
|
|
36
|
+
});
|
|
37
|
+
it('should call write 1 times if CI set to true', () => {
|
|
38
|
+
process.stdout.isTTY = false;
|
|
39
|
+
spinner.start('Loading');
|
|
40
|
+
jest.advanceTimersByTime(300);
|
|
41
|
+
expect(writeMock).toHaveBeenCalledTimes(1);
|
|
42
|
+
});
|
|
43
|
+
});
|