@strapi/plugin-documentation 5.0.0-beta.0 → 5.0.0-beta.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/README.md +0 -1
- package/dist/_chunks/{index-7xstUX8_.mjs → App-ig-uE4do.mjs} +48 -14
- package/dist/_chunks/App-ig-uE4do.mjs.map +1 -0
- package/dist/_chunks/{index-D1KkfApT.js → App-o4uH8gaQ.js} +73 -20
- package/dist/_chunks/App-o4uH8gaQ.js.map +1 -0
- package/dist/_chunks/{index-VpLAJXMs.mjs → Settings-3hsPOP_b.mjs} +64 -33
- package/dist/_chunks/Settings-3hsPOP_b.mjs.map +1 -0
- package/dist/_chunks/{index-NbPCucJl.js → Settings-XmOzLTUn.js} +69 -37
- package/dist/_chunks/Settings-XmOzLTUn.js.map +1 -0
- package/dist/_chunks/getTrad-bnElvR8_.js +5 -0
- package/dist/_chunks/getTrad-bnElvR8_.js.map +1 -0
- package/dist/_chunks/getTrad-md7Tjpcv.mjs +6 -0
- package/dist/_chunks/getTrad-md7Tjpcv.mjs.map +1 -0
- package/{server/public/index.html → dist/_chunks/index-MKWIGajW.mjs} +9 -4
- package/dist/_chunks/index-MKWIGajW.mjs.map +1 -0
- package/dist/_chunks/index-WbbYm9_u.js +75 -0
- package/dist/_chunks/index-WbbYm9_u.js.map +1 -0
- package/dist/_chunks/{index-NvJ4m2q5.mjs → index-jpDwTC-Q.mjs} +121 -117
- package/dist/_chunks/index-jpDwTC-Q.mjs.map +1 -0
- package/dist/_chunks/{index-r7HsQTou.js → index-vNbIS1u2.js} +119 -115
- package/dist/_chunks/index-vNbIS1u2.js.map +1 -0
- package/dist/_chunks/login-HAajOKpu.js +150 -0
- package/dist/_chunks/login-HAajOKpu.js.map +1 -0
- package/{server/public/login.html → dist/_chunks/login-slUa679p.mjs} +6 -1
- package/dist/_chunks/login-slUa679p.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +2 -2
- package/dist/admin/src/components/SettingsForm.d.ts +8 -0
- package/dist/admin/src/constants.d.ts +18 -0
- package/dist/admin/src/index.d.ts +14 -0
- package/dist/admin/src/pages/App.d.ts +2 -0
- package/dist/admin/src/pages/Settings.d.ts +2 -0
- package/dist/admin/src/pluginId.d.ts +1 -0
- package/dist/admin/src/services/api.d.ts +25 -0
- package/dist/admin/src/types.d.ts +16 -0
- package/dist/admin/src/utils/baseQuery.d.ts +20 -0
- package/dist/admin/src/utils/getTrad.d.ts +1 -0
- package/dist/admin/src/utils/index.d.ts +2 -0
- package/dist/admin/src/utils/prefixPluginTranslations.d.ts +2 -0
- package/dist/server/index.js +1263 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/index.mjs +1238 -0
- package/dist/server/index.mjs.map +1 -0
- package/dist/server/src/bootstrap.d.ts +5 -0
- package/dist/server/src/bootstrap.d.ts.map +1 -0
- package/dist/server/src/config/default-plugin-config.d.ts +3 -0
- package/dist/server/src/config/default-plugin-config.d.ts.map +1 -0
- package/dist/server/src/config/index.d.ts +4 -0
- package/dist/server/src/config/index.d.ts.map +1 -0
- package/dist/server/src/controllers/documentation.d.ts +12 -0
- package/dist/server/src/controllers/documentation.d.ts.map +1 -0
- package/dist/server/src/controllers/index.d.ts +14 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -0
- package/dist/server/src/index.d.ts +91 -0
- package/dist/server/src/index.d.ts.map +1 -0
- package/dist/server/src/middlewares/documentation.d.ts +5 -0
- package/dist/server/src/middlewares/documentation.d.ts.map +1 -0
- package/dist/server/src/middlewares/restrict-access.d.ts +4 -0
- package/dist/server/src/middlewares/restrict-access.d.ts.map +1 -0
- package/dist/server/src/register.d.ts +5 -0
- package/dist/server/src/register.d.ts.map +1 -0
- package/dist/server/src/routes/index.d.ts +36 -0
- package/dist/server/src/routes/index.d.ts.map +1 -0
- package/dist/server/src/services/__mocks__/mock-content-types.d.ts +449 -0
- package/dist/server/src/services/__mocks__/mock-content-types.d.ts.map +1 -0
- package/dist/server/src/services/__mocks__/mock-strapi-data.d.ts +592 -0
- package/dist/server/src/services/__mocks__/mock-strapi-data.d.ts.map +1 -0
- package/dist/server/src/services/documentation.d.ts +36 -0
- package/dist/server/src/services/documentation.d.ts.map +1 -0
- package/dist/server/src/services/helpers/build-api-endpoint-path.d.ts +7 -0
- package/dist/server/src/services/helpers/build-api-endpoint-path.d.ts.map +1 -0
- package/dist/server/src/services/helpers/build-component-schema.d.ts +4 -0
- package/dist/server/src/services/helpers/build-component-schema.d.ts.map +1 -0
- package/dist/server/src/services/helpers/index.d.ts +4 -0
- package/dist/server/src/services/helpers/index.d.ts.map +1 -0
- package/dist/server/src/services/helpers/utils/clean-schema-attributes.d.ts +15 -0
- package/dist/server/src/services/helpers/utils/clean-schema-attributes.d.ts.map +1 -0
- package/dist/server/src/services/helpers/utils/get-api-responses.d.ts +15 -0
- package/dist/server/src/services/helpers/utils/get-api-responses.d.ts.map +1 -0
- package/dist/server/src/services/helpers/utils/get-schema-data.d.ts +12 -0
- package/dist/server/src/services/helpers/utils/get-schema-data.d.ts.map +1 -0
- package/dist/server/src/services/helpers/utils/loop-content-type-names.d.ts +7 -0
- package/dist/server/src/services/helpers/utils/loop-content-type-names.d.ts.map +1 -0
- package/dist/server/src/services/helpers/utils/pascal-case.d.ts +3 -0
- package/dist/server/src/services/helpers/utils/pascal-case.d.ts.map +1 -0
- package/dist/server/src/services/helpers/utils/query-params.d.ts +4 -0
- package/dist/server/src/services/helpers/utils/query-params.d.ts.map +1 -0
- package/dist/server/src/services/helpers/utils/routes.d.ts +3 -0
- package/dist/server/src/services/helpers/utils/routes.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +43 -0
- package/dist/server/src/services/index.d.ts.map +1 -0
- package/dist/server/src/services/override.d.ts +21 -0
- package/dist/server/src/services/override.d.ts.map +1 -0
- package/dist/server/src/services/utils/get-plugins-that-need-documentation.d.ts +4 -0
- package/dist/server/src/services/utils/get-plugins-that-need-documentation.d.ts.map +1 -0
- package/dist/server/src/types.d.ts +28 -0
- package/dist/server/src/types.d.ts.map +1 -0
- package/dist/server/src/utils.d.ts +12 -0
- package/dist/server/src/utils.d.ts.map +1 -0
- package/package.json +33 -15
- package/strapi-server.js +1 -1
- package/.eslintignore +0 -1
- package/.eslintrc +0 -17
- package/admin/src/constants.js +0 -17
- package/admin/src/hooks/useDocumentation.js +0 -81
- package/admin/src/index.js +0 -62
- package/admin/src/pages/PluginPage/index.jsx +0 -212
- package/admin/src/pages/PluginPage/tests/index.test.jsx +0 -160
- package/admin/src/pages/SettingsPage/index.jsx +0 -202
- package/admin/src/pages/SettingsPage/tests/index.test.jsx +0 -72
- package/admin/src/pluginId.js +0 -5
- package/admin/src/translations/ar.json +0 -20
- package/admin/src/translations/cs.json +0 -21
- package/admin/src/translations/de.json +0 -26
- package/admin/src/translations/dk.json +0 -39
- package/admin/src/translations/en.json +0 -39
- package/admin/src/translations/es.json +0 -39
- package/admin/src/translations/fr.json +0 -26
- package/admin/src/translations/id.json +0 -24
- package/admin/src/translations/it.json +0 -26
- package/admin/src/translations/ko.json +0 -39
- package/admin/src/translations/ms.json +0 -23
- package/admin/src/translations/nl.json +0 -21
- package/admin/src/translations/pl.json +0 -39
- package/admin/src/translations/pt-BR.json +0 -21
- package/admin/src/translations/pt.json +0 -21
- package/admin/src/translations/ru.json +0 -39
- package/admin/src/translations/sk.json +0 -24
- package/admin/src/translations/sv.json +0 -39
- package/admin/src/translations/th.json +0 -24
- package/admin/src/translations/tr.json +0 -39
- package/admin/src/translations/uk.json +0 -23
- package/admin/src/translations/vi.json +0 -24
- package/admin/src/translations/zh-Hans.json +0 -28
- package/admin/src/translations/zh.json +0 -39
- package/admin/src/utils/getTrad.js +0 -5
- package/admin/src/utils/index.js +0 -2
- package/admin/src/utils/prefixPluginTranslations.js +0 -13
- package/dist/_chunks/index-7xstUX8_.mjs.map +0 -1
- package/dist/_chunks/index-D1KkfApT.js.map +0 -1
- package/dist/_chunks/index-NbPCucJl.js.map +0 -1
- package/dist/_chunks/index-NvJ4m2q5.mjs.map +0 -1
- package/dist/_chunks/index-VpLAJXMs.mjs.map +0 -1
- package/dist/_chunks/index-r7HsQTou.js.map +0 -1
- package/dist/_chunks/useDocumentation-6Ks-_Ms6.mjs +0 -68
- package/dist/_chunks/useDocumentation-6Ks-_Ms6.mjs.map +0 -1
- package/dist/_chunks/useDocumentation-S0e4mU-U.js +0 -67
- package/dist/_chunks/useDocumentation-S0e4mU-U.js.map +0 -1
- package/jest.config.front.js +0 -7
- package/jest.config.js +0 -6
- package/packup.config.ts +0 -22
- package/server/bootstrap.js +0 -54
- package/server/config/default-plugin-config.js +0 -35
- package/server/config/index.js +0 -7
- package/server/controllers/documentation.js +0 -241
- package/server/controllers/index.js +0 -7
- package/server/index.js +0 -17
- package/server/middlewares/documentation.js +0 -25
- package/server/middlewares/index.js +0 -7
- package/server/middlewares/restrict-access.js +0 -24
- package/server/register.js +0 -11
- package/server/routes/index.js +0 -84
- package/server/services/__mocks__/mock-content-types.js +0 -264
- package/server/services/__mocks__/mock-strapi-data.js +0 -183
- package/server/services/__tests__/build-component-schema.test.js +0 -761
- package/server/services/__tests__/documentation.test.js +0 -481
- package/server/services/__tests__/override.test.js +0 -85
- package/server/services/documentation.js +0 -246
- package/server/services/helpers/build-api-endpoint-path.js +0 -186
- package/server/services/helpers/build-component-schema.js +0 -254
- package/server/services/helpers/index.js +0 -9
- package/server/services/helpers/utils/clean-schema-attributes.js +0 -246
- package/server/services/helpers/utils/get-api-responses.js +0 -105
- package/server/services/helpers/utils/get-schema-data.js +0 -32
- package/server/services/helpers/utils/loop-content-type-names.js +0 -55
- package/server/services/helpers/utils/pascal-case.js +0 -9
- package/server/services/helpers/utils/query-params.js +0 -105
- package/server/services/helpers/utils/routes.js +0 -10
- package/server/services/index.js +0 -9
- package/server/services/override.js +0 -52
- package/server/services/utils/default-openapi-components.js +0 -40
- package/server/services/utils/get-plugins-that-need-documentation.js +0 -24
- package/tests/server.js +0 -37
- package/tests/setup.js +0 -15
|
@@ -1,481 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const _ = require('lodash/fp');
|
|
4
|
-
const fse = require('fs-extra');
|
|
5
|
-
const SwaggerParser = require('@apidevtools/swagger-parser');
|
|
6
|
-
const { api, plugins, components, contentTypes } = require('../__mocks__/mock-strapi-data');
|
|
7
|
-
const documentation = require('../documentation');
|
|
8
|
-
const override = require('../override');
|
|
9
|
-
const defaultConfig = require('../../config/default-plugin-config');
|
|
10
|
-
|
|
11
|
-
const mockStrapiInstance = {
|
|
12
|
-
dirs: {
|
|
13
|
-
app: {
|
|
14
|
-
api: './',
|
|
15
|
-
extensions: './',
|
|
16
|
-
},
|
|
17
|
-
},
|
|
18
|
-
contentTypes,
|
|
19
|
-
components,
|
|
20
|
-
api,
|
|
21
|
-
plugins,
|
|
22
|
-
config: {
|
|
23
|
-
get: () => defaultConfig,
|
|
24
|
-
},
|
|
25
|
-
log: {
|
|
26
|
-
info: jest.fn(),
|
|
27
|
-
warn: jest.fn(),
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
jest.mock('fs-extra', () => ({
|
|
32
|
-
...jest.requireActual('fs-extra'),
|
|
33
|
-
writeJson: jest.fn(),
|
|
34
|
-
ensureFile: jest.fn(),
|
|
35
|
-
}));
|
|
36
|
-
|
|
37
|
-
describe('Documentation plugin | Documentation service', () => {
|
|
38
|
-
beforeAll(() => {
|
|
39
|
-
global.strapi = mockStrapiInstance;
|
|
40
|
-
global.strapi.contentType = jest.fn((uid) => {
|
|
41
|
-
// Only deal with mocked data, return empty attributes for unmocked relations
|
|
42
|
-
if (!global.strapi.contentTypes[uid]) return { attributes: {} };
|
|
43
|
-
|
|
44
|
-
return global.strapi.contentTypes[uid];
|
|
45
|
-
});
|
|
46
|
-
global.strapi.plugin = jest.fn((name) => global.strapi.plugins[name]);
|
|
47
|
-
|
|
48
|
-
global.strapi.plugins.documentation = {
|
|
49
|
-
service: jest.fn((name) => {
|
|
50
|
-
const mockServices = {
|
|
51
|
-
override: override({ strapi: global.strapi }),
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
return mockServices[name];
|
|
55
|
-
}),
|
|
56
|
-
};
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
afterAll(() => {
|
|
60
|
-
// Teardown the mocked strapi instance
|
|
61
|
-
global.strapi = {};
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
afterEach(() => {
|
|
65
|
-
// Reset the mocked strapi config
|
|
66
|
-
global.strapi.config.get = () => defaultConfig;
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
it('generates a valid openapi schema', async () => {
|
|
70
|
-
const docService = documentation({ strapi: global.strapi });
|
|
71
|
-
await docService.generateFullDoc();
|
|
72
|
-
const lastMockCall = fse.writeJson.mock.calls[fse.writeJson.mock.calls.length - 1];
|
|
73
|
-
const mockFinalDoc = lastMockCall[1];
|
|
74
|
-
|
|
75
|
-
// The final documenation is read only, clone deep for this test
|
|
76
|
-
const validatePromise = SwaggerParser.validate(_.cloneDeep(mockFinalDoc));
|
|
77
|
-
|
|
78
|
-
await expect(validatePromise).resolves.not.toThrow();
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it('generates the correct response component schema for a single type', async () => {
|
|
82
|
-
const docService = documentation({ strapi: global.strapi });
|
|
83
|
-
await docService.generateFullDoc();
|
|
84
|
-
const lastMockCall = fse.writeJson.mock.calls[fse.writeJson.mock.calls.length - 1];
|
|
85
|
-
const mockFinalDoc = lastMockCall[1];
|
|
86
|
-
const expected = {
|
|
87
|
-
description: 'OK',
|
|
88
|
-
content: {
|
|
89
|
-
'application/json': {
|
|
90
|
-
schema: {
|
|
91
|
-
$ref: '#/components/schemas/HomepageResponse',
|
|
92
|
-
},
|
|
93
|
-
},
|
|
94
|
-
},
|
|
95
|
-
};
|
|
96
|
-
expect(mockFinalDoc.paths['/homepage'].get.responses['200']).toEqual(expected);
|
|
97
|
-
expect(mockFinalDoc.paths['/homepage'].put.responses['200']).toEqual(expected);
|
|
98
|
-
expect(mockFinalDoc.paths['/homepage'].post.responses['200']).toEqual(expected);
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
it('generates the correct response component schema for a collection type', async () => {
|
|
102
|
-
const docService = documentation({ strapi: global.strapi });
|
|
103
|
-
await docService.generateFullDoc();
|
|
104
|
-
const lastMockCall = fse.writeJson.mock.calls[fse.writeJson.mock.calls.length - 1];
|
|
105
|
-
const mockFinalDoc = lastMockCall[1];
|
|
106
|
-
const expectedList = {
|
|
107
|
-
description: 'OK',
|
|
108
|
-
content: {
|
|
109
|
-
'application/json': {
|
|
110
|
-
schema: {
|
|
111
|
-
$ref: '#/components/schemas/KitchensinkListResponse',
|
|
112
|
-
},
|
|
113
|
-
},
|
|
114
|
-
},
|
|
115
|
-
};
|
|
116
|
-
const expectedOne = {
|
|
117
|
-
description: 'OK',
|
|
118
|
-
content: {
|
|
119
|
-
'application/json': {
|
|
120
|
-
schema: {
|
|
121
|
-
$ref: '#/components/schemas/KitchensinkResponse',
|
|
122
|
-
},
|
|
123
|
-
},
|
|
124
|
-
},
|
|
125
|
-
};
|
|
126
|
-
expect(mockFinalDoc.paths['/kitchensinks'].get.responses['200']).toEqual(expectedList);
|
|
127
|
-
expect(mockFinalDoc.paths['/kitchensinks'].post.responses['200']).toEqual(expectedOne);
|
|
128
|
-
expect(mockFinalDoc.paths['/kitchensinks/{id}'].get.responses['200']).toEqual(expectedOne);
|
|
129
|
-
expect(mockFinalDoc.paths['/kitchensinks/{id}'].put.responses['200']).toEqual(expectedOne);
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
describe('Determines the plugins that need documentation', () => {
|
|
133
|
-
it('generates documentation for the default plugins if the user provided nothing in the config', async () => {
|
|
134
|
-
const docService = documentation({ strapi: global.strapi });
|
|
135
|
-
|
|
136
|
-
await docService.generateFullDoc();
|
|
137
|
-
const lastMockCall = fse.writeJson.mock.calls[fse.writeJson.mock.calls.length - 1];
|
|
138
|
-
const mockFinalDoc = lastMockCall[1];
|
|
139
|
-
|
|
140
|
-
expect(mockFinalDoc['x-strapi-config'].plugins).toEqual(['upload', 'users-permissions']);
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
it("generates documentation only for plugins in the user's config", async () => {
|
|
144
|
-
global.strapi.config.get = () => ({
|
|
145
|
-
...defaultConfig,
|
|
146
|
-
'x-strapi-config': { ...defaultConfig['x-strapi-config'], plugins: ['upload'] },
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
const docService = documentation({ strapi: global.strapi });
|
|
150
|
-
|
|
151
|
-
await docService.generateFullDoc();
|
|
152
|
-
const lastMockCall = fse.writeJson.mock.calls[fse.writeJson.mock.calls.length - 1];
|
|
153
|
-
const mockFinalDoc = lastMockCall[1];
|
|
154
|
-
expect(mockFinalDoc['x-strapi-config'].plugins).toEqual(['upload']);
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
it('does not generate documentation for any plugins', async () => {
|
|
158
|
-
global.strapi.config.get = () => ({
|
|
159
|
-
...defaultConfig,
|
|
160
|
-
'x-strapi-config': { ...defaultConfig['x-strapi-config'], plugins: [] },
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
const docService = documentation({ strapi: global.strapi });
|
|
164
|
-
|
|
165
|
-
await docService.generateFullDoc();
|
|
166
|
-
const lastMockCall = fse.writeJson.mock.calls[fse.writeJson.mock.calls.length - 1];
|
|
167
|
-
const mockFinalDoc = lastMockCall[1];
|
|
168
|
-
expect(mockFinalDoc['x-strapi-config'].plugins).toEqual([]);
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
describe('Handles user config and overrides', () => {
|
|
173
|
-
it('replaces default config with the user config', async () => {
|
|
174
|
-
const userConfig = {
|
|
175
|
-
info: {
|
|
176
|
-
version: '4.0.0',
|
|
177
|
-
title: 'custom-documentation',
|
|
178
|
-
description: 'custom description',
|
|
179
|
-
termsOfService: 'custom terms of service',
|
|
180
|
-
contact: {
|
|
181
|
-
name: 'custom-team',
|
|
182
|
-
email: 'custom-contact-email@something.io',
|
|
183
|
-
url: 'custom-mywebsite.io',
|
|
184
|
-
},
|
|
185
|
-
license: {
|
|
186
|
-
name: 'custom Apache 2.0',
|
|
187
|
-
url: 'custom https://www.apache.org/licenses/LICENSE-2.0.html',
|
|
188
|
-
},
|
|
189
|
-
},
|
|
190
|
-
'x-strapi-config': {
|
|
191
|
-
path: 'custom-documentation',
|
|
192
|
-
plugins: [],
|
|
193
|
-
},
|
|
194
|
-
servers: [{ server: 'custom-server' }],
|
|
195
|
-
externalDocs: {
|
|
196
|
-
description: 'custom Find out more',
|
|
197
|
-
url: 'custom-doc-url',
|
|
198
|
-
},
|
|
199
|
-
webhooks: {
|
|
200
|
-
test: {},
|
|
201
|
-
},
|
|
202
|
-
security: [
|
|
203
|
-
{
|
|
204
|
-
bearerAuth: ['custom'],
|
|
205
|
-
},
|
|
206
|
-
],
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
global.strapi.config.get = () => ({ ...userConfig });
|
|
210
|
-
const docService = documentation({ strapi: global.strapi });
|
|
211
|
-
await docService.generateFullDoc();
|
|
212
|
-
const lastMockCall = fse.writeJson.mock.calls[fse.writeJson.mock.calls.length - 1];
|
|
213
|
-
const mockFinalDoc = lastMockCall[1];
|
|
214
|
-
// The generation data is dynamically added, it cannot be modified by the user
|
|
215
|
-
const { 'x-generation-date': generationConfig, ...mockFinalDocInfo } = mockFinalDoc.info;
|
|
216
|
-
expect(mockFinalDocInfo).toEqual(userConfig.info);
|
|
217
|
-
expect(mockFinalDoc['x-strapi-config']).toEqual(userConfig['x-strapi-config']);
|
|
218
|
-
expect(mockFinalDoc.externalDocs).toEqual(userConfig.externalDocs);
|
|
219
|
-
expect(mockFinalDoc.security).toEqual(userConfig.security);
|
|
220
|
-
expect(mockFinalDoc.webhooks).toEqual(userConfig.webhooks);
|
|
221
|
-
expect(mockFinalDoc.servers).toEqual(userConfig.servers);
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
it("does not apply an override if the plugin providing the override isn't specified in the x-strapi-config.plugins", async () => {
|
|
225
|
-
global.strapi.config.get = () => ({
|
|
226
|
-
...defaultConfig,
|
|
227
|
-
'x-strapi-config': { ...defaultConfig['x-strapi-config'], plugins: [] },
|
|
228
|
-
});
|
|
229
|
-
const docService = documentation({ strapi: global.strapi });
|
|
230
|
-
const overrideService = override({ strapi: global.strapi });
|
|
231
|
-
|
|
232
|
-
overrideService.registerOverride(
|
|
233
|
-
{
|
|
234
|
-
paths: {
|
|
235
|
-
'/test': {
|
|
236
|
-
get: {
|
|
237
|
-
tags: ['Users-Permissions - Users & Roles'],
|
|
238
|
-
summary: 'Get list of users',
|
|
239
|
-
responses: {},
|
|
240
|
-
},
|
|
241
|
-
},
|
|
242
|
-
},
|
|
243
|
-
},
|
|
244
|
-
{ pluginOrigin: 'users-permissions' }
|
|
245
|
-
);
|
|
246
|
-
|
|
247
|
-
await docService.generateFullDoc();
|
|
248
|
-
const lastMockCall = fse.writeJson.mock.calls[fse.writeJson.mock.calls.length - 1];
|
|
249
|
-
const mockFinalDoc = lastMockCall[1];
|
|
250
|
-
expect(mockFinalDoc.paths['/test']).toBeUndefined();
|
|
251
|
-
});
|
|
252
|
-
|
|
253
|
-
it('overrides (extends) Tags', async () => {
|
|
254
|
-
const overrideService = override({ strapi: global.strapi });
|
|
255
|
-
// Simulate override from users-permissions plugin
|
|
256
|
-
overrideService.registerOverride(
|
|
257
|
-
{
|
|
258
|
-
tags: ['users-permissions-tag'],
|
|
259
|
-
},
|
|
260
|
-
{ pluginOrigin: 'users-permissions' }
|
|
261
|
-
);
|
|
262
|
-
// Simulate override from upload plugin
|
|
263
|
-
overrideService.registerOverride(
|
|
264
|
-
{
|
|
265
|
-
tags: ['upload-tag'],
|
|
266
|
-
},
|
|
267
|
-
{ pluginOrigin: 'upload' }
|
|
268
|
-
);
|
|
269
|
-
// Use the override service in the documentation service
|
|
270
|
-
global.strapi.plugins.documentation = {
|
|
271
|
-
service: jest.fn((name) => {
|
|
272
|
-
const mockServices = {
|
|
273
|
-
override: overrideService,
|
|
274
|
-
};
|
|
275
|
-
|
|
276
|
-
return mockServices[name];
|
|
277
|
-
}),
|
|
278
|
-
};
|
|
279
|
-
const docService = documentation({ strapi: global.strapi });
|
|
280
|
-
await docService.generateFullDoc();
|
|
281
|
-
const lastMockCall = fse.writeJson.mock.calls[fse.writeJson.mock.calls.length - 1];
|
|
282
|
-
const mockFinalDoc = lastMockCall[1];
|
|
283
|
-
|
|
284
|
-
expect(mockFinalDoc.tags).toEqual(['users-permissions-tag', 'upload-tag']);
|
|
285
|
-
});
|
|
286
|
-
|
|
287
|
-
it('overrides (replaces existing or adds new) Paths', async () => {
|
|
288
|
-
const overrideService = override({ strapi: global.strapi });
|
|
289
|
-
// Simulate override from upload plugin
|
|
290
|
-
overrideService.registerOverride(
|
|
291
|
-
{
|
|
292
|
-
paths: {
|
|
293
|
-
// This path exists after generating with mock data, replace it
|
|
294
|
-
'/upload/files': {
|
|
295
|
-
get: {
|
|
296
|
-
responses: ['existing-path-test'],
|
|
297
|
-
},
|
|
298
|
-
},
|
|
299
|
-
// This path does not exist after generating with mock data, add it
|
|
300
|
-
'/upload/new-path': {
|
|
301
|
-
get: {
|
|
302
|
-
responses: ['new-path-test'],
|
|
303
|
-
},
|
|
304
|
-
},
|
|
305
|
-
},
|
|
306
|
-
},
|
|
307
|
-
{ pluginOrigin: 'upload' }
|
|
308
|
-
);
|
|
309
|
-
global.strapi.plugins.documentation = {
|
|
310
|
-
service: jest.fn((name) => {
|
|
311
|
-
const mockServices = {
|
|
312
|
-
override: overrideService,
|
|
313
|
-
};
|
|
314
|
-
|
|
315
|
-
return mockServices[name];
|
|
316
|
-
}),
|
|
317
|
-
};
|
|
318
|
-
const docService = documentation({ strapi: global.strapi });
|
|
319
|
-
await docService.generateFullDoc();
|
|
320
|
-
const lastMockCall = fse.writeJson.mock.calls[fse.writeJson.mock.calls.length - 1];
|
|
321
|
-
const mockFinalDoc = lastMockCall[1];
|
|
322
|
-
|
|
323
|
-
expect(mockFinalDoc.paths['/upload/files'].get.responses).toEqual(['existing-path-test']);
|
|
324
|
-
expect(Object.keys(mockFinalDoc.paths['/upload/files'].get)).toEqual(['responses']);
|
|
325
|
-
expect(mockFinalDoc.paths['/upload/new-path'].get.responses).toEqual(['new-path-test']);
|
|
326
|
-
});
|
|
327
|
-
|
|
328
|
-
it('overrides (replaces existing or adds new) Components', async () => {
|
|
329
|
-
const overrideService = override({ strapi: global.strapi });
|
|
330
|
-
// Simulate override from upload plugin
|
|
331
|
-
overrideService.registerOverride(
|
|
332
|
-
{
|
|
333
|
-
components: {
|
|
334
|
-
schemas: {
|
|
335
|
-
// This component schema exists after generating with mock data, replace it
|
|
336
|
-
UploadFileResponse: {
|
|
337
|
-
properties: {
|
|
338
|
-
data: { $ref: 'test-existing-component' },
|
|
339
|
-
meta: { type: 'object' },
|
|
340
|
-
},
|
|
341
|
-
},
|
|
342
|
-
// This component schema does not exist after generating with mock data, add it
|
|
343
|
-
UploadFileMockCompo: {
|
|
344
|
-
properties: {
|
|
345
|
-
data: { $ref: 'test-new-component' },
|
|
346
|
-
meta: { type: 'object' },
|
|
347
|
-
},
|
|
348
|
-
},
|
|
349
|
-
},
|
|
350
|
-
},
|
|
351
|
-
},
|
|
352
|
-
{ pluginOrigin: 'upload' }
|
|
353
|
-
);
|
|
354
|
-
global.strapi.plugins.documentation = {
|
|
355
|
-
service: jest.fn((name) => {
|
|
356
|
-
const mockServices = {
|
|
357
|
-
override: overrideService,
|
|
358
|
-
};
|
|
359
|
-
|
|
360
|
-
return mockServices[name];
|
|
361
|
-
}),
|
|
362
|
-
};
|
|
363
|
-
const docService = documentation({ strapi: global.strapi });
|
|
364
|
-
await docService.generateFullDoc();
|
|
365
|
-
const lastMockCall = fse.writeJson.mock.calls[fse.writeJson.mock.calls.length - 1];
|
|
366
|
-
const mockFinalDoc = lastMockCall[1];
|
|
367
|
-
|
|
368
|
-
expect(mockFinalDoc.components.schemas.UploadFileResponse.properties.data.$ref).toEqual(
|
|
369
|
-
'test-existing-component'
|
|
370
|
-
);
|
|
371
|
-
expect(mockFinalDoc.components.schemas.UploadFileMockCompo.properties.data.$ref).toEqual(
|
|
372
|
-
'test-new-component'
|
|
373
|
-
);
|
|
374
|
-
});
|
|
375
|
-
it('overrides only the specified version', async () => {
|
|
376
|
-
const overrideService = override({ strapi: global.strapi });
|
|
377
|
-
// Simulate override from upload plugin
|
|
378
|
-
overrideService.registerOverride(
|
|
379
|
-
{
|
|
380
|
-
// Only override for version 1.0.0
|
|
381
|
-
info: { version: '1.0.0' },
|
|
382
|
-
components: {
|
|
383
|
-
schemas: {
|
|
384
|
-
// This component schema exists after generating with mock data, replace it
|
|
385
|
-
ShouldNotBeAdded: {},
|
|
386
|
-
},
|
|
387
|
-
},
|
|
388
|
-
},
|
|
389
|
-
{ pluginOrigin: 'upload' }
|
|
390
|
-
);
|
|
391
|
-
// Simulate override from upload plugin
|
|
392
|
-
overrideService.registerOverride(
|
|
393
|
-
{
|
|
394
|
-
// Only override for version 2.0.0
|
|
395
|
-
info: { version: '2.0.0' },
|
|
396
|
-
components: {
|
|
397
|
-
schemas: {
|
|
398
|
-
// This component schema exists after generating with mock data, replace it
|
|
399
|
-
ShouldBeAdded: {},
|
|
400
|
-
},
|
|
401
|
-
},
|
|
402
|
-
},
|
|
403
|
-
{ pluginOrigin: 'upload' }
|
|
404
|
-
);
|
|
405
|
-
// Simulate override from upload plugin
|
|
406
|
-
overrideService.registerOverride(
|
|
407
|
-
{
|
|
408
|
-
components: {
|
|
409
|
-
schemas: {
|
|
410
|
-
// This component schema exists after generating with mock data, replace it
|
|
411
|
-
ShouldAlsoBeAdded: {},
|
|
412
|
-
},
|
|
413
|
-
},
|
|
414
|
-
},
|
|
415
|
-
{ pluginOrigin: 'upload' }
|
|
416
|
-
);
|
|
417
|
-
global.strapi.plugins.documentation = {
|
|
418
|
-
service: jest.fn((name) => {
|
|
419
|
-
const mockServices = {
|
|
420
|
-
override: overrideService,
|
|
421
|
-
};
|
|
422
|
-
|
|
423
|
-
return mockServices[name];
|
|
424
|
-
}),
|
|
425
|
-
};
|
|
426
|
-
const docService = documentation({ strapi: global.strapi });
|
|
427
|
-
await docService.generateFullDoc('2.0.0');
|
|
428
|
-
const lastMockCall = fse.writeJson.mock.calls[fse.writeJson.mock.calls.length - 1];
|
|
429
|
-
const mockFinalDoc = lastMockCall[1];
|
|
430
|
-
|
|
431
|
-
expect(mockFinalDoc.components.schemas.ShouldNotBeAdded).toBeUndefined();
|
|
432
|
-
expect(mockFinalDoc.components.schemas.ShouldBeAdded).toBeDefined();
|
|
433
|
-
expect(mockFinalDoc.components.schemas.ShouldAlsoBeAdded).toBeDefined();
|
|
434
|
-
});
|
|
435
|
-
it('excludes apis and plugins from generation', async () => {
|
|
436
|
-
const overrideService = override({ strapi: global.strapi });
|
|
437
|
-
|
|
438
|
-
overrideService.excludeFromGeneration('kitchensink');
|
|
439
|
-
|
|
440
|
-
global.strapi.plugins.documentation = {
|
|
441
|
-
service: jest.fn((name) => {
|
|
442
|
-
const mockServices = {
|
|
443
|
-
override: overrideService,
|
|
444
|
-
};
|
|
445
|
-
|
|
446
|
-
return mockServices[name];
|
|
447
|
-
}),
|
|
448
|
-
};
|
|
449
|
-
|
|
450
|
-
const docService = documentation({ strapi: global.strapi });
|
|
451
|
-
await docService.generateFullDoc();
|
|
452
|
-
const lastMockCall = fse.writeJson.mock.calls[fse.writeJson.mock.calls.length - 1];
|
|
453
|
-
const mockFinalDoc = lastMockCall[1];
|
|
454
|
-
|
|
455
|
-
expect(
|
|
456
|
-
Object.keys(mockFinalDoc.paths).find((path) => path.includes('kitchensink'))
|
|
457
|
-
).toBeUndefined();
|
|
458
|
-
expect(
|
|
459
|
-
Object.keys(mockFinalDoc.components.schemas).find((compo) => compo.includes('Kitchensink'))
|
|
460
|
-
).toBeUndefined();
|
|
461
|
-
});
|
|
462
|
-
it("applies a user's mutateDocumentation function", async () => {
|
|
463
|
-
global.strapi.config.get = () => ({
|
|
464
|
-
...defaultConfig,
|
|
465
|
-
'x-strapi-config': {
|
|
466
|
-
...defaultConfig['x-strapi-config'],
|
|
467
|
-
mutateDocumentation(draft) {
|
|
468
|
-
draft.paths['/kitchensinks'] = { get: { responses: { 200: { description: 'test' } } } };
|
|
469
|
-
},
|
|
470
|
-
},
|
|
471
|
-
});
|
|
472
|
-
const docService = documentation({ strapi: global.strapi });
|
|
473
|
-
await docService.generateFullDoc();
|
|
474
|
-
const lastMockCall = fse.writeJson.mock.calls[fse.writeJson.mock.calls.length - 1];
|
|
475
|
-
const mockFinalDoc = lastMockCall[1];
|
|
476
|
-
expect(mockFinalDoc.paths['/kitchensinks']).toEqual({
|
|
477
|
-
get: { responses: { 200: { description: 'test' } } },
|
|
478
|
-
});
|
|
479
|
-
});
|
|
480
|
-
});
|
|
481
|
-
});
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const override = require('../override');
|
|
4
|
-
|
|
5
|
-
const strapiMock = {
|
|
6
|
-
config: {
|
|
7
|
-
get: () => ({
|
|
8
|
-
'x-strapi-config': {
|
|
9
|
-
plugins: null,
|
|
10
|
-
},
|
|
11
|
-
}),
|
|
12
|
-
},
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
let strapi = strapiMock;
|
|
16
|
-
describe('Documentation plugin | Override service', () => {
|
|
17
|
-
afterEach(() => {
|
|
18
|
-
// Reset strapi after each test
|
|
19
|
-
strapi = strapiMock;
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('should register an override', () => {
|
|
23
|
-
const mockOverride = {
|
|
24
|
-
openapi: '3.0.0',
|
|
25
|
-
info: {
|
|
26
|
-
title: 'My API',
|
|
27
|
-
version: '1.0.0',
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
const overrideService = override({ strapi });
|
|
31
|
-
overrideService.registerOverride(mockOverride);
|
|
32
|
-
|
|
33
|
-
expect(overrideService.registeredOverrides).toEqual([mockOverride]);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('should not register an override from a plugin that is not in the config', () => {
|
|
37
|
-
const mockOverride = {
|
|
38
|
-
openapi: '3.0.0',
|
|
39
|
-
info: {
|
|
40
|
-
title: 'My API',
|
|
41
|
-
version: '1.0.0',
|
|
42
|
-
},
|
|
43
|
-
};
|
|
44
|
-
const overrideService = override({ strapi });
|
|
45
|
-
overrideService.registerOverride(mockOverride, { pluginOrigin: 'test' });
|
|
46
|
-
|
|
47
|
-
expect(overrideService.registeredOverrides).toEqual([]);
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
it('should register an override from a plugin that is in the config and exclude it from generation', () => {
|
|
51
|
-
const mockOverride = {
|
|
52
|
-
openapi: '3.0.0',
|
|
53
|
-
info: {
|
|
54
|
-
title: 'My API',
|
|
55
|
-
version: '1.0.0',
|
|
56
|
-
},
|
|
57
|
-
};
|
|
58
|
-
strapi.config.get = () => ({
|
|
59
|
-
'x-strapi-config': {
|
|
60
|
-
plugins: ['test'],
|
|
61
|
-
},
|
|
62
|
-
});
|
|
63
|
-
const overrideService = override({ strapi });
|
|
64
|
-
overrideService.registerOverride(mockOverride, {
|
|
65
|
-
pluginOrigin: 'test',
|
|
66
|
-
excludeFromGeneration: ['test', 'some-other-api-to-exclude'],
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
expect(overrideService.registeredOverrides).toEqual([mockOverride]);
|
|
70
|
-
expect(overrideService.excludedFromGeneration).toEqual(['test', 'some-other-api-to-exclude']);
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
it('should register an api or plugin to exclude from generation', () => {
|
|
74
|
-
const overrideService = override({ strapi });
|
|
75
|
-
overrideService.excludeFromGeneration('my-api');
|
|
76
|
-
overrideService.excludeFromGeneration(['my-other-api', 'my-plugin', 'my-other-plugin']);
|
|
77
|
-
|
|
78
|
-
expect(overrideService.excludedFromGeneration).toEqual([
|
|
79
|
-
'my-api',
|
|
80
|
-
'my-other-api',
|
|
81
|
-
'my-plugin',
|
|
82
|
-
'my-other-plugin',
|
|
83
|
-
]);
|
|
84
|
-
});
|
|
85
|
-
});
|