Skip to content

Commit 2f189ca

Browse files
Add _computeAllExpects() method (#55)
* chore(models): add async api with multiple messages * feat: add _computeAllExpects() to be able to read multiple expects in asyncapi * test: add test for _computeAllExpects() * 4.5.20 * style: remove whitespace
1 parent 268b6fb commit 2f189ca

File tree

7 files changed

+107
-2
lines changed

7 files changed

+107
-2
lines changed

apis/apis.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"secured-api/secured-api.raml": { "type": "RAML 1.0", "mime": "application/yaml" },
1111
"petstore/petstore.yaml": { "type": "OAS 3.0", "mime": "application/yaml" },
1212
"APIC-483/APIC-483.raml": { "type": "RAML 1.0" },
13+
"multiple-messages/multiple-messages.yaml": "ASYNC 2.0",
1314
"src": "apis",
1415
"dest": "apis"
1516
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
asyncapi: '2.0.0'
2+
info:
3+
title: Multiple messages API
4+
description: API with multiple messages
5+
version: '1.0.0'
6+
7+
channels:
8+
default-channel:
9+
description: Default channel
10+
publish:
11+
description: Publish operation for default channel
12+
message:
13+
oneOf:
14+
- $ref: '#/components/messages/MessageA'
15+
- $ref: '#/components/messages/MessageB'
16+
17+
components:
18+
19+
messages:
20+
MessageA:
21+
contentType: application/json
22+
headers:
23+
type: object
24+
description: Message header
25+
properties:
26+
messageId:
27+
description: Message ID field
28+
type: string
29+
payload:
30+
type: object
31+
description: Message payload
32+
properties:
33+
data1:
34+
description: Data 1 field
35+
type: string
36+
MessageB:
37+
contentType: application/json
38+
headers:
39+
type: object
40+
description: Message header
41+
properties:
42+
messageId:
43+
description: Message ID field
44+
type: string
45+
payload:
46+
type: object
47+
description: Message payload
48+
properties:
49+
data2:
50+
description: Data 2 field
51+
type: string

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@api-components/amf-helper-mixin",
33
"description": "A mixin with common functions user by most AMF components to compute AMF values",
4-
"version": "4.5.19",
4+
"version": "4.5.20",
55
"license": "Apache-2.0",
66
"main": "index.js",
77
"module": "index.js",

src/AmfHelperMixin.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,13 @@ interface AmfHelperMixin {
443443
*/
444444
_computeExpects(method: Operation): Request|undefined;
445445

446+
/**
447+
* Computes all values for the `expects` property.
448+
*
449+
* @param method AMF `supportedOperation` model
450+
*/
451+
_computeAllExpects(method: Operation): Request[]|undefined;
452+
446453
/**
447454
* Tries to find an example value (whether it's default value or from an
448455
* example) to put it into snippet's values.

src/AmfHelperMixin.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -990,6 +990,25 @@ export const AmfHelperMixin = (base) => class extends base {
990990
return undefined;
991991
}
992992

993+
/**
994+
* Computes all values for the `expects` property.
995+
*
996+
* @param {Operation} method AMF `supportedOperation` model
997+
* @returns {Request[]}
998+
*/
999+
_computeAllExpects(method) {
1000+
const operationKey = this.ns.aml.vocabularies.apiContract.Operation;
1001+
const expectsKey = this.ns.aml.vocabularies.apiContract.expects;
1002+
if (this._hasType(method, operationKey)) {
1003+
const key = this._getAmfKey(expectsKey);
1004+
const expects = this._ensureArray(method[key]);
1005+
if (expects) {
1006+
return Array.isArray(expects) ? expects : [expects];
1007+
}
1008+
}
1009+
return undefined;
1010+
}
1011+
9931012
/**
9941013
* Finds an example value (whether it's default value or from an
9951014
* example) to put it into snippet's values.

test/helper/amf-helper-mixin.test.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2154,6 +2154,33 @@ describe('AmfHelperMixin', () => {
21542154
assert.deepEqual(element.amf, expandedElement.amf)
21552155
});
21562156
});
2157+
2158+
describe('Multiple messages Async API', () => {
2159+
const multipleMessagesApi = 'multiple-messages';
2160+
let multipleMessagesModel;
2161+
let operation;
2162+
2163+
before(async () => {
2164+
multipleMessagesModel = await AmfLoader.load(compact, multipleMessagesApi);
2165+
2166+
})
2167+
2168+
beforeEach(async () => {
2169+
element = await modelFixture(multipleMessagesModel);
2170+
const webApi = element._computeApi(multipleMessagesModel);
2171+
const endpoint = element._computeEndpointByPath(webApi, 'default-channel');
2172+
const key = element._getAmfKey(element.ns.aml.vocabularies.apiContract.supportedOperation);
2173+
// eslint-disable-next-line prefer-destructuring
2174+
operation = endpoint[key][0];
2175+
});
2176+
2177+
describe('_computeAllExpects()', () => {
2178+
it('should return two items', () => {
2179+
const expects = element._computeAllExpects(operation)
2180+
assert.lengthOf(expects, 2);
2181+
});
2182+
});
2183+
});
21572184
});
21582185
});
21592186
});

0 commit comments

Comments
 (0)