Skip to content

Commit 7f67976

Browse files
committed
feat: Review
1 parent cfeeb6d commit 7f67976

File tree

5 files changed

+73
-84
lines changed

5 files changed

+73
-84
lines changed

src/apitypes/rest/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { compareRestOperationsData } from './rest.changes'
2222
import { buildRestOperations } from './rest.operations'
2323
import { parseRestFile } from './rest.parser'
2424
import { ApiBuilder } from '../../types'
25-
import { createNormalizedOperationId } from '../../utils'
25+
import { calculateNormalizedOperationId } from '../../utils'
2626

2727
export * from './rest.consts'
2828

@@ -34,6 +34,6 @@ export const restApiBuilder: ApiBuilder<OpenAPIV3.Document> = {
3434
buildOperations: buildRestOperations,
3535
dumpDocument: dumpRestDocument,
3636
compareOperationsData: compareRestOperationsData,
37-
createNormalizedOperationId: createNormalizedOperationId,
37+
createNormalizedOperationId: calculateNormalizedOperationId,
3838
createExportDocument: createRestExportDocument,
3939
}

src/apitypes/rest/rest.operation.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import {
3333
buildSearchScope,
3434
calculateOperationId,
3535
capitalize,
36-
copySymbolIfDefined,
36+
extractSymbolProperty,
3737
getKeyValue,
3838
getSplittedVersionKey,
3939
getSymbolValueIfDefined,
@@ -344,7 +344,7 @@ const createSingleOperationSpec = (
344344
: {
345345
...extractCommonPathItemProperties(pathData),
346346
[method]: { ...pathData[method] },
347-
...copySymbolIfDefined(pathData, INLINE_REFS_FLAG),
347+
...extractSymbolProperty(pathData, INLINE_REFS_FLAG),
348348
},
349349
},
350350
components: {

src/utils/objects.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ export const getSymbolValueIfDefined = <T extends object>(
7575
return symbol in symbolObj ? symbolObj[symbol] : undefined
7676
}
7777

78-
export const copySymbolIfDefined = <T extends object>(
78+
export const extractSymbolProperty = <T extends object>(
7979
obj: T,
8080
symbol: symbol,
8181
): { [key: symbol]: unknown } => {

src/utils/operations.utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export const isValidHttpMethod = (method: string): method is OpenAPIV3.HttpMetho
8888
return HTTP_METHODS_SET.has(method)
8989
}
9090

91-
export const createNormalizedOperationId: OperationIdNormalizer = (operation) => {
91+
export const calculateNormalizedOperationId: OperationIdNormalizer = (operation) => {
9292
const { metadata: { path, method } } = operation
9393
return slugify(`${path}-${method}`, [], IGNORE_PATH_PARAM_UNIFIED_PLACEHOLDER)
9494
}

test/document-group.test.ts

Lines changed: 67 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616

1717
import { Editor, loadFileAsString, LocalRegistry, VERSIONS_PATH } from './helpers'
18-
import { BUILD_TYPE, PACKAGE, PackageNotifications, REST_API_TYPE } from '../src'
18+
import { BUILD_TYPE, BuildConfigAggregator, BuildResult, PACKAGE, PackageNotifications, REST_API_TYPE } from '../src'
1919
import { load } from 'js-yaml'
2020

2121
const GROUP_NAME = 'manualGroup'
@@ -76,15 +76,12 @@ describe('Document Group test', () => {
7676
})
7777

7878
test('should have components schema object which is referenced', async () => {
79-
const pkg = LocalRegistry.openPackage(`document-group/${BASE_OPERATION_PATH}/referenced-json-schema-object`, groupToOnePathOperationIdsMap)
80-
const editor = await Editor.openProject(pkg.packageId, pkg)
81-
await pkg.publish(pkg.packageId, { packageId: pkg.packageId })
79+
const result = await runWithPackage(
80+
`document-group/${BASE_OPERATION_PATH}/referenced-json-schema-object`,
81+
groupToOnePathOperationIdsMap,
82+
{ buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS },
83+
)
8284

83-
const result = await editor.run({
84-
packageId: pkg.packageId,
85-
groupName: GROUP_NAME,
86-
buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS,
87-
})
8885
for (const document of Array.from(result.documents.values())) {
8986
expect(document.data).toHaveProperty(['components', 'schemas', 'MySchema'])
9087
}
@@ -148,15 +145,11 @@ describe('Document Group test', () => {
148145
})
149146

150147
test('should have save pathItems in components', async () => {
151-
const pkg = LocalRegistry.openPackage(`document-group/${PATH_ITEMS_OPERATION_PATH}/multiple-pathitems-operations`, groupToOperationIdsMap)
152-
const editor = await Editor.openProject(pkg.packageId, pkg)
153-
await pkg.publish(pkg.packageId, { packageId: pkg.packageId })
154-
155-
const result = await editor.run({
156-
packageId: pkg.packageId,
157-
groupName: GROUP_NAME,
158-
buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS,
159-
})
148+
const result = await runWithPackage(
149+
`document-group/${PATH_ITEMS_OPERATION_PATH}/multiple-pathitems-operations`,
150+
groupToOperationIdsMap,
151+
{ buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS },
152+
)
160153

161154
for (const document of Array.from(result.documents.values())) {
162155
expect(Object.keys(document.data.components.pathItems).length).toEqual(document.operationIds.length)
@@ -184,32 +177,27 @@ describe('Document Group test', () => {
184177

185178
describe('Chain pathItems Refs', () => {
186179
const COMPONENTS_ITEM_1_PATH = ['components', 'pathItems', 'componentsPathItem1']
180+
187181
test('should have documents with keep pathItems in components', async () => {
188-
const pkg = LocalRegistry.openPackage(`document-group/${PATH_ITEMS_OPERATION_PATH}/define-pathitems-via-reference-object-chain`, groupToOnePathOperationIdsMap)
189-
const editor = await Editor.openProject(pkg.packageId, pkg)
190-
await pkg.publish(pkg.packageId, { packageId: pkg.packageId })
191-
192-
const result = await editor.run({
193-
packageId: pkg.packageId,
194-
groupName: GROUP_NAME,
195-
buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS,
196-
})
182+
const result = await runWithPackage(
183+
`document-group/${PATH_ITEMS_OPERATION_PATH}/define-pathitems-via-reference-object-chain`,
184+
groupToOnePathOperationIdsMap,
185+
{ buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS },
186+
)
187+
197188
for (const document of Array.from(result.documents.values())) {
198189
expect(document.data).toHaveProperty([...COMPONENTS_ITEM_1_PATH, 'post'])
199190
expect(document.data).toHaveProperty([...COMPONENTS_ITEM_1_PATH, 'get'])
200191
}
201192
})
202193

203194
test('should have documents stripped of operations other than from provided group', async () => {
204-
const pkg = LocalRegistry.openPackage(`document-group/${PATH_ITEMS_OPERATION_PATH}/define-pathitems-via-reference-object-chain`, groupWithOneOperationIdsMap)
205-
const editor = await Editor.openProject(pkg.packageId, pkg)
206-
await pkg.publish(pkg.packageId, { packageId: pkg.packageId })
207-
208-
const result = await editor.run({
209-
packageId: pkg.packageId,
210-
groupName: GROUP_NAME,
211-
buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS,
212-
})
195+
const result = await runWithPackage(
196+
`document-group/${PATH_ITEMS_OPERATION_PATH}/define-pathitems-via-reference-object-chain`,
197+
groupWithOneOperationIdsMap,
198+
{ buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS },
199+
)
200+
213201
for (const document of Array.from(result.documents.values())) {
214202
expect(document.data).toHaveProperty([...COMPONENTS_ITEM_1_PATH, 'post'])
215203
expect(document.data).not.toHaveProperty([...COMPONENTS_ITEM_1_PATH, 'get'])
@@ -220,15 +208,12 @@ describe('Document Group test', () => {
220208

221209
function runCommonTests(folder: DOCUMENT_GROUP_PATHS): void {
222210
test('should have keep a multiple operations in one path', async () => {
223-
const pkg = LocalRegistry.openPackage(`document-group/${folder}/multiple-operations-in-one-path`, groupToOnePathOperationIdsMap)
224-
const editor = await Editor.openProject(pkg.packageId, pkg)
225-
await pkg.publish(pkg.packageId, { packageId: pkg.packageId })
211+
const result = await runWithPackage(
212+
`document-group/${folder}/multiple-operations-in-one-path`,
213+
groupToOnePathOperationIdsMap,
214+
{ buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS },
215+
)
226216

227-
const result = await editor.run({
228-
packageId: pkg.packageId,
229-
groupName: GROUP_NAME,
230-
buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS,
231-
})
232217
for (const document of Array.from(result.documents.values())) {
233218
folder === PATH_ITEMS_OPERATION_PATH
234219
? expect(Object.keys(document.data.components.pathItems['pathItem1']).length).toEqual(document.operationIds.length)
@@ -237,30 +222,23 @@ describe('Document Group test', () => {
237222
})
238223

239224
test('should define operations with servers prefix', async () => {
240-
const pkg = LocalRegistry.openPackage(`document-group/${folder}/define-operations-with-servers-prefix`, groupToOneServerPrefixPathOperationIdsMap)
241-
const editor = await Editor.openProject(pkg.packageId, pkg)
242-
await pkg.publish(pkg.packageId, { packageId: pkg.packageId })
225+
const result = await runWithPackage(
226+
`document-group/${folder}/define-operations-with-servers-prefix`,
227+
groupToOneServerPrefixPathOperationIdsMap,
228+
{ buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS },
229+
)
243230

244-
const result = await editor.run({
245-
packageId: pkg.packageId,
246-
groupName: GROUP_NAME,
247-
buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS,
248-
})
249231
for (const document of Array.from(result.documents.values())) {
250232
expect(Object.keys(document.data.paths).length).toEqual(document.operationIds.length)
251233
}
252234
})
253235

254236
test('should delete pathItems object which is not referenced', async () => {
255-
const pkg = LocalRegistry.openPackage(`document-group/${folder}/not-referenced-object`, groupToOperationIdsMap)
256-
const editor = await Editor.openProject(pkg.packageId, pkg)
257-
await pkg.publish(pkg.packageId, { packageId: pkg.packageId })
258-
259-
const result = await editor.run({
260-
packageId: pkg.packageId,
261-
groupName: GROUP_NAME,
262-
buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS,
263-
})
237+
const result = await runWithPackage(
238+
`document-group/${folder}/not-referenced-object`,
239+
groupToOperationIdsMap,
240+
{ buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS },
241+
)
264242

265243
for (const document of Array.from(result.documents.values())) {
266244
folder === PATH_ITEMS_OPERATION_PATH
@@ -270,30 +248,23 @@ describe('Document Group test', () => {
270248
})
271249

272250
test('should have documents stripped of operations other than from provided group', async () => {
273-
const pkg = LocalRegistry.openPackage(`document-group/${folder}/stripped-of-operations`, groupToOperationIdsMap)
274-
const editor = await Editor.openProject(pkg.packageId, pkg)
275-
await pkg.publish(pkg.packageId, { packageId: pkg.packageId })
251+
const result = await runWithPackage(
252+
`document-group/${folder}/stripped-of-operations`,
253+
groupToOperationIdsMap,
254+
{ buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS },
255+
)
276256

277-
const result = await editor.run({
278-
packageId: pkg.packageId,
279-
groupName: GROUP_NAME,
280-
buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS,
281-
})
282257
for (const document of Array.from(result.documents.values())) {
283258
expect(Object.keys(document.data.paths).length).toEqual(document.operationIds.length)
284259
}
285260
})
286261

287262
test('should not hang up when processing for response which points to itself', async () => {
288-
const pkg = LocalRegistry.openPackage(`document-group/${folder}/not-hang-up-when-processing-for-response-which-points-to-itself`, groupToOnePathOperationIdsMap)
289-
const editor = await Editor.openProject(pkg.packageId, pkg)
290-
await pkg.publish(pkg.packageId, { packageId: pkg.packageId })
291-
292-
const result = await editor.run({
293-
packageId: pkg.packageId,
294-
groupName: GROUP_NAME,
295-
buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS,
296-
})
263+
const result = await runWithPackage(
264+
`document-group/${folder}/not-hang-up-when-processing-for-response-which-points-to-itself`,
265+
groupToOnePathOperationIdsMap,
266+
{ buildType: BUILD_TYPE.REDUCED_SOURCE_SPECIFICATIONS },
267+
)
297268

298269
expect(result.documents.size).toEqual(0)
299270
})
@@ -342,4 +313,22 @@ describe('Document Group test', () => {
342313

343314
expect(result.merged?.data).toEqual(expectedResult)
344315
}
316+
317+
async function runWithPackage(
318+
packageId: string,
319+
groupOperationIds: Record<string, string[]>,
320+
options: Partial<BuildConfigAggregator> = {},
321+
): Promise<BuildResult> {
322+
const pkg = LocalRegistry.openPackage(packageId, groupOperationIds)
323+
const editor = await Editor.openProject(pkg.packageId, pkg)
324+
await pkg.publish(pkg.packageId, { packageId: pkg.packageId })
325+
326+
return editor.run({
327+
...{
328+
packageId: pkg.packageId,
329+
groupName: GROUP_NAME,
330+
},
331+
...options,
332+
})
333+
}
345334
})

0 commit comments

Comments
 (0)