Skip to content
This repository was archived by the owner on Nov 8, 2024. It is now read-only.

Commit 148f496

Browse files
committed
fix(apib): respect generateMessageBody{,Schema}
1 parent f618f48 commit 148f496

File tree

3 files changed

+117
-2
lines changed

3 files changed

+117
-2
lines changed

packages/apib-parser/CHANGELOG.md

+9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# API Elements: API Blueprint Parser Changelog
22

3+
## Master
4+
5+
### Enhancements
6+
7+
- The parser can now be configured to disable generation of example message
8+
bodies and message body schemas by providing the adapter options
9+
`generateMessageBody` and/or `generateMessageBodySchema` as `false` during
10+
parse.
11+
312
## 0.20.0 (2020-06-12)
413

514
The package has been updated for compatibility with `@apielements/core`.

packages/apib-parser/lib/adapter.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,14 @@ function validate({ source, requireBlueprintName }) {
3131
/*
3232
* Parse an API Blueprint into refract elements.
3333
*/
34-
function parse({ source, generateSourceMap, requireBlueprintName }) {
34+
function parse({
35+
source, generateSourceMap, generateMessageBody, generateMessageBodySchema,
36+
requireBlueprintName,
37+
}) {
3538
const options = {
3639
exportSourcemap: !!generateSourceMap,
40+
generateMessageBody,
41+
generateMessageBodySchema,
3742
requireBlueprintName,
3843
};
3944

packages/apib-parser/test/adapter-test.js

+102-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@ const adapter = require('../lib/adapter');
99
const fury = new Fury();
1010
fury.use(adapter);
1111

12+
const source = `
13+
# GET /
14+
+ Response 200 (application/json)
15+
+ Attributes
16+
+ message: Hello World
17+
`;
18+
19+
1220
describe('API Blueprint parser adapter', () => {
1321
context('detection', () => {
1422
it('detects FORMAT: 1A', () => {
@@ -28,7 +36,6 @@ describe('API Blueprint parser adapter', () => {
2836
let result;
2937

3038
before((done) => {
31-
const source = 'FORMAT: 1A\n# My API\n## Foo [/foo]\n';
3239
fury.parse({ source }, (err, output) => {
3340
if (err) {
3441
return done(err);
@@ -61,4 +68,98 @@ describe('API Blueprint parser adapter', () => {
6168
done();
6269
});
6370
});
71+
72+
describe('generateMessageBody option', () => {
73+
it('should generate message bodies when generateMessageBody is not set', (done) => {
74+
fury.parse({ source }, (error, parseResult) => {
75+
expect(error).to.be.null;
76+
77+
const resource = parseResult.api.resources.get(0);
78+
const transaction = resource.transitions.get(0).transactions.get(0);
79+
const { response } = transaction;
80+
81+
expect(response.messageBody).to.be.instanceof(fury.minim.elements.Asset);
82+
expect(response.messageBodySchema).to.be.instanceof(fury.minim.elements.Asset);
83+
84+
done();
85+
});
86+
});
87+
88+
it('should generate message bodies when generateMessageBody is enabled', (done) => {
89+
fury.parse({ source, adapterOptions: { generateMessageBody: true } }, (error, parseResult) => {
90+
expect(error).to.be.null;
91+
92+
const resource = parseResult.api.resources.get(0);
93+
const transaction = resource.transitions.get(0).transactions.get(0);
94+
const { response } = transaction;
95+
96+
expect(response.messageBody).to.be.instanceof(fury.minim.elements.Asset);
97+
expect(response.messageBodySchema).to.be.instanceof(fury.minim.elements.Asset);
98+
99+
done();
100+
});
101+
});
102+
103+
it('should not generate message bodies when generateMessageBody is disabled', (done) => {
104+
fury.parse({ source, adapterOptions: { generateMessageBody: false } }, (error, parseResult) => {
105+
expect(error).to.be.null;
106+
107+
const resource = parseResult.api.resources.get(0);
108+
const transaction = resource.transitions.get(0).transactions.get(0);
109+
const { response } = transaction;
110+
111+
expect(response.messageBody).to.be.undefined;
112+
expect(response.messageBodySchema).to.be.instanceof(fury.minim.elements.Asset);
113+
114+
done();
115+
});
116+
});
117+
});
118+
119+
describe('generateMessageBodySchema option', () => {
120+
it('should generate message bodies when generateMessageBodySchema is not set', (done) => {
121+
fury.parse({ source }, (error, parseResult) => {
122+
expect(error).to.be.null;
123+
124+
const resource = parseResult.api.resources.get(0);
125+
const transaction = resource.transitions.get(0).transactions.get(0);
126+
const { response } = transaction;
127+
128+
expect(response.messageBody).to.be.instanceof(fury.minim.elements.Asset);
129+
expect(response.messageBodySchema).to.be.instanceof(fury.minim.elements.Asset);
130+
131+
done();
132+
});
133+
});
134+
135+
it('should generate message bodies when generateMessageBodySchema is enabled', (done) => {
136+
fury.parse({ source, adapterOptions: { generateMessageBodySchema: true } }, (error, parseResult) => {
137+
expect(error).to.be.null;
138+
139+
const resource = parseResult.api.resources.get(0);
140+
const transaction = resource.transitions.get(0).transactions.get(0);
141+
const { response } = transaction;
142+
143+
expect(response.messageBody).to.be.instanceof(fury.minim.elements.Asset);
144+
expect(response.messageBodySchema).to.be.instanceof(fury.minim.elements.Asset);
145+
146+
done();
147+
});
148+
});
149+
150+
it('should not generate message bodies when generateMessageBodySchema is disabled', (done) => {
151+
fury.parse({ source, adapterOptions: { generateMessageBodySchema: false } }, (error, parseResult) => {
152+
expect(error).to.be.null;
153+
154+
const resource = parseResult.api.resources.get(0);
155+
const transaction = resource.transitions.get(0).transactions.get(0);
156+
const { response } = transaction;
157+
158+
expect(response.messageBody).to.be.instanceof(fury.minim.elements.Asset);
159+
expect(response.messageBodySchema).to.be.undefined;
160+
161+
done();
162+
});
163+
});
164+
});
64165
});

0 commit comments

Comments
 (0)