Skip to content

Commit

Permalink
Merge pull request #183 from amarzavery/release
Browse files Browse the repository at this point in the history
validating examples for parameters in formData
  • Loading branch information
amarzavery authored Nov 19, 2017
2 parents b6bd9f0 + 92f8d57 commit 28fe64e
Show file tree
Hide file tree
Showing 9 changed files with 675 additions and 122 deletions.
29 changes: 29 additions & 0 deletions .npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Node #
node_modules

# vs code #
.vscode/

# Git #
.git*

# Tests #
test/
tests/

# Tools and dev scripts #
tools/
tasks/
scripts/
gruntfile.js
gulpfile.js
gulpFile.js

# Nuget packages #
.nuget/
packages/
packages.config

# VS #
.ntvs_analysis.*
*.sln
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
language: node_js
sudo: false
node_js:
- "6"
- "8"
3 changes: 3 additions & 0 deletions ChangeLog.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
### 11/20/2017 0.4.19
- Added support for validating examples for parameters `"in": "formData"`.

### 11/09/2017 0.4.18
- Ensure scheme, host and basePath are used to construct the base url #180.

Expand Down
34 changes: 33 additions & 1 deletion lib/validators/specValidator.js
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,7 @@ class SpecValidator {
let parameters = operation.getParameters();
let result = { request: null, validationResult: { errors: [], warnings: [] } }, foundIssues = false;
let options = {};
let formDataFiles = null;
if (operation.pathObject && operation.pathObject.api && operation.pathObject.api.host) {
let scheme = 'https';
let basePath = '';
Expand Down Expand Up @@ -638,6 +639,31 @@ class SpecValidator {
} else if (location === 'header') {
if (!options.headers) options.headers = {};
options.headers[parameter.name] = parameterValue;
} else if (location === 'formData') {
// helper function
function isFormUrlEncoded(consumes) {
return consumes.some((contentType) => {
return contentType === 'application/x-www-form-urlencoded';
});
}

if (!options.formData) options.formData = {};
options.formData[parameter.name] = parameterValue;

// set Content-Type correctly
if (operation.consumes && isFormUrlEncoded(operation.consumes)) {
if (!options.headers) options.headers = {};
options.headers['Content-Type'] = 'application/x-www-form-urlencoded';
} else {
// default to formData
options.headers['Content-Type'] = 'multipart/form-data';
}
// keep track of parameter type 'file' as sway expects such parameter types to be set
// differently in the request object given for validation.
if (parameter.type === 'file') {
if (!formDataFiles) formDataFiles = {};
formDataFiles[parameter.name] = parameterValue;
}
}
}

Expand All @@ -661,8 +687,14 @@ class SpecValidator {
try {
request = new HttpRequest()
request = request.prepare(options);
self.sampleRequest = request;
// set formData in the way sway expects it.
if (formDataFiles) {
request.files = formDataFiles;
} else if (options.formData) {
request.body = options.formData;
}
validationResult = operation.validateRequest(request);
self.sampleRequest = request;
} catch (err) {
request = null;
let e = self.constructErrorObject(ErrorCodes.ErrorInPreparingRequest, err.message, [err]);
Expand Down
Loading

0 comments on commit 28fe64e

Please sign in to comment.