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

Commit 3c11b70

Browse files
authored
Merge pull request #175 from coord-e/fix-notice-falsy-example-and-default
fix: don't ignore "0" example value
2 parents 80e540e + f08ee7f commit 3c11b70

File tree

6 files changed

+75
-5
lines changed

6 files changed

+75
-5
lines changed

src/compile-uri/compile-params.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ module.exports = function compileParams(hrefVariablesElement) {
88
const typeAttributes = memberElement.attributes.getValue('typeAttributes') || [];
99
const values = valueElement.attributes.getValue('enumerations') || [];
1010

11+
const example = valueElement.toValue();
1112
params[name] = {
1213
required: Array.from(typeAttributes).includes('required'),
1314
default: valueElement.attributes.getValue('default'),
14-
example: valueElement.toValue() || values[0],
15+
example: typeof example === 'undefined' || example === null ? values[0] : example,
1516
values
1617
};
1718

src/compile-uri/expand-uri-template.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ Parameter not defined in API description document: ${uriParameter}\
4545
uriParameters.forEach((uriParameter) => {
4646
param = params[uriParameter];
4747

48-
if (param.example) {
48+
if (typeof param.example !== 'undefined' && param.example !== '') {
4949
toExpand[uriParameter] = param.example;
50-
} else if (param.default) {
50+
} else if (typeof param.default !== 'undefined' && param.default !== '') {
5151
toExpand[uriParameter] = param.default;
5252
} else if (param.required) {
5353
ambiguous = true;
@@ -58,7 +58,7 @@ document: ${uriParameter}\
5858
`);
5959
}
6060

61-
if (param.required && param.default) {
61+
if (param.required && typeof param.default !== 'undefined' && param.default !== '') {
6262
result.warnings.push(`\
6363
Required URI parameter '${uriParameter}' has a default value.
6464
Default value for a required parameter doesn't make sense from \

src/compile-uri/validate-params.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ module.exports = function validateParams(params) {
55
let text;
66
const param = params[paramName];
77

8-
if (param.required && !param.example && !param.default) {
8+
if (param.required && !(typeof param.example !== 'undefined' && param.example !== '') && !(typeof param.default !== 'undefined' && param.default !== '')) {
99
text = `Required URI parameter '${paramName}' has no example or default value.`;
1010
result.errors.push(text);
1111
}

test/unit/compile-uri/compile-params-test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,22 @@ describe('compileParams', () => {
7171
});
7272
});
7373

74+
it('should compile a primitive example variable which its value is 0', () => {
75+
const hrefVariables = new fury.minim.elements.HrefVariables();
76+
hrefVariables.set('example', 0);
77+
78+
const parameters = compileParams(hrefVariables);
79+
80+
assert.deepEqual(parameters, {
81+
example: {
82+
default: undefined,
83+
example: 0,
84+
required: false,
85+
values: []
86+
}
87+
});
88+
});
89+
7490
it('should compile an array href variable', () => {
7591
const hrefVariables = new fury.minim.elements.HrefVariables();
7692
hrefVariables.set('names', []);

test/unit/compile-uri/expand-uri-template-test.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,41 @@ describe('expandUriTemplate', () => {
5252
it('it should return some errror', () => assert.notEqual(data.errors.length, 0));
5353
});
5454

55+
describe('when "example" is zero', () => {
56+
before(() => {
57+
uriTemplate = '/machines{/id}';
58+
parameters = {
59+
id: {
60+
description: 'Machine id',
61+
type: 'number',
62+
required: true,
63+
example: 0
64+
}
65+
};
66+
67+
data = expandUriTemplate(uriTemplate, parameters);
68+
});
69+
70+
it('should return expandend URI', () => assert.equal(data.uri, '/machines/0'));
71+
});
72+
73+
describe('when "default" is zero', () => {
74+
before(() => {
75+
uriTemplate = '/machines{/id}';
76+
parameters = {
77+
id: {
78+
description: 'Machine id',
79+
type: 'number',
80+
required: true,
81+
default: 0
82+
}
83+
};
84+
85+
data = expandUriTemplate(uriTemplate, parameters);
86+
});
87+
88+
it('should return expandend URI', () => assert.equal(data.uri, '/machines/0'));
89+
});
5590

5691
describe('when URI with no URI template expression given', () => {
5792
before(() => {

test/unit/compile-uri/validate-parameters-test.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,24 @@ describe('validateParams', () => {
3737
})
3838
);
3939

40+
describe('when type is number and example is zero', () =>
41+
it('should set no error', () => {
42+
const params = {
43+
name: {
44+
description: 'Machine name',
45+
type: 'number',
46+
required: true,
47+
example: 0,
48+
default: '',
49+
values: []
50+
}
51+
};
52+
53+
const result = validateParams(params);
54+
assert.equal(result.errors.length, 0);
55+
})
56+
);
57+
4058
// Based on bug report:
4159
// https://github.com/apiaryio/dredd/issues/106
4260
describe('when type is string and example is a string but starting with a number', () =>

0 commit comments

Comments
 (0)