Skip to content

Commit cb81e63

Browse files
committed
Merging develop into feature/newman-test
2 parents 387ccb0 + dcc6952 commit cb81e63

File tree

45 files changed

+460
-139
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+460
-139
lines changed

codegens/csharp-restsharp/lib/parseRequest.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ function parseBody (request, trimFields) {
6262
`${JSON.stringify(requestBody[requestBody.mode])}, ParameterType.RequestBody);\n`;
6363
/* istanbul ignore next */
6464
case 'file':
65-
return `request.AddFile("file", "${sanitize(requestBody[requestBody.mode].src, trimFields)}");\n`;
65+
return `request.AddParameter("${parseContentType(request)}", ` +
66+
'"<file contents here>", ParameterType.RequestBody);\n';
6667
default:
6768
return '';
6869
}

codegens/curl/lib/index.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ self = module.exports = {
1313
}
1414
options = sanitizeOptions(options, self.getOptions());
1515

16-
var indent, trim, headersData, body, text, redirect, timeout, multiLine, format, snippet, silent, url;
16+
var indent, trim, headersData, body, text, redirect, timeout, multiLine,
17+
format, snippet, silent, url;
18+
1719
redirect = options.followRedirect;
1820
timeout = options.requestTimeout;
1921
multiLine = options.multiLine;
@@ -43,6 +45,12 @@ self = module.exports = {
4345
snippet += ` ${form('-X', format)} ${request.method} "${url}"`;
4446
}
4547

48+
if (request.body && request.body.mode === 'file' && !request.headers.has('Content-Type')) {
49+
request.addHeader({
50+
key: 'Content-Type',
51+
value: 'text/plain'
52+
});
53+
}
4654
headersData = request.getHeaders({ enabled: true });
4755
_.forEach(headersData, function (value, key) {
4856
snippet += indent + `${form('-H', format)} "${sanitize(key, trim)}: ${sanitize(value, trim)}"`;
@@ -81,7 +89,7 @@ self = module.exports = {
8189
break;
8290
case 'file':
8391
snippet += indent + `${form('--data-binary', format)}`;
84-
snippet += ` "${sanitize(body.key, trim)}=@${sanitize(body.value, trim)}"`;
92+
snippet += ` "@${sanitize(body[body.mode].src, trim)}"`;
8593
break;
8694
default:
8795
snippet += `${form('-d', format)} ""`;

codegens/golang/lib/index.js

+17-14
Original file line numberDiff line numberDiff line change
@@ -69,19 +69,17 @@ function parseFormData (body, trim, indent) {
6969
/**
7070
* Parses file body from the Request
7171
*
72-
* @param {Object} body body object from request.
73-
* @param {boolean} trim trim body option
74-
* @param {string} indent indent string
7572
*/
76-
function parseFile (body, trim, indent) {
77-
var bodySnippet = `payload := &bytes.Buffer{}\n${indent}writer := multipart.NewWriter(payload)\n`;
78-
isFile = true;
79-
bodySnippet += `${indent}// add your file name in the next statement in place of path\n`;
80-
bodySnippet += `${indent}file, err := os.Open(path)\n`;
81-
bodySnippet += `${indent}defer file.Close()\n`;
82-
bodySnippet += `${indent}part, err := writer.CreateFormFile("file", filepath.Base(path))\n`;
83-
bodySnippet += `${indent}_, err := io.Copy(part, file)\n`;
84-
bodySnippet += `${indent}err := writer.Close()\n${indent}if err != nil {${indent}fmt.Println(err)}\n`;
73+
function parseFile () {
74+
// var bodySnippet = `payload := &bytes.Buffer{}\n${indent}writer := multipart.NewWriter(payload)\n`;
75+
// isFile = true;
76+
// bodySnippet += `${indent}// add your file name in the next statement in place of path\n`;
77+
// bodySnippet += `${indent}file, err := os.Open(path)\n`;
78+
// bodySnippet += `${indent}defer file.Close()\n`;
79+
// bodySnippet += `${indent}part, err := writer.CreateFormFile("file", filepath.Base(path))\n`;
80+
// bodySnippet += `${indent}_, err := io.Copy(part, file)\n`;
81+
// bodySnippet += `${indent}err := writer.Close()\n${indent}if err != nil {${indent}fmt.Println(err)}\n`;
82+
var bodySnippet = 'payload := strings.NewReader("<file contents here>")\n';
8583
return bodySnippet;
8684
}
8785

@@ -194,14 +192,19 @@ self = module.exports = {
194192
codeSnippet += `${indent}req, err := http.NewRequest(method, url, nil)\n\n`;
195193
}
196194
codeSnippet += `${indent}if err != nil {\n${indent.repeat(2)}fmt.Println(err)\n${indent}}\n`;
195+
if (request.body && request.body.mode === 'file' && !request.headers.has('Content-Type')) {
196+
request.addHeader({
197+
key: 'Content-Type',
198+
value: 'text/plain'
199+
});
200+
}
197201
headerSnippet = parseHeaders(request.getHeaders({enabled: true}), indent);
198202
if (headerSnippet !== '') {
199203
codeSnippet += headerSnippet + '\n';
200204
}
201-
if (request.body && (request.body.toJSON().mode === 'formdata' || request.body.toJSON().mode === 'file')) {
205+
if (request.body && (request.body.toJSON().mode === 'formdata')) {
202206
codeSnippet += `${indent}req.Header.Set("Content-Type", writer.FormDataContentType())\n`;
203207
}
204-
205208
responseSnippet = `${indent}res, err := client.Do(req)\n`;
206209
responseSnippet += `${indent}defer res.Body.Close()\n${indent}body, err := ioutil.ReadAll(res.Body)\n\n`;
207210
responseSnippet += `${indent}fmt.Println(string(body))\n}`;

codegens/http/lib/code-http-converter.js

+6
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ function convert (request, options, callback) {
3131
options = utils.sanitizeOptions(options, getOptions());
3232
snippet = `${request.method} ${utils.getEndPoint(request)} HTTP/1.1\n`;
3333
snippet += `Host: ${utils.getHost(request)}\n`;
34+
if (request.body && request.body.mode === 'file' && !request.headers.has('Content-Type')) {
35+
request.addHeader({
36+
key: 'Content-Type',
37+
value: 'text/plain'
38+
});
39+
}
3440
snippet += `${utils.getHeaders(request)}\n`;
3541
snippet += `\n${utils.getBody(request, options.trimRequestBody)}`;
3642

codegens/http/lib/util.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ function getBody (request, trimRequestBody) {
238238
return trimRequestBody ? requestBody.trim() : requestBody;
239239

240240
case FILE:
241-
return JSON.stringify(request.body[request.body.mode]);
241+
return '"<file contents here>"';
242242
default:
243243
return requestBody;
244244
}

codegens/http/test/resources/expected-http-messages.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"PURGE / HTTP/1.1\nHost: 9c76407d-5b8d-4b22-99fb-8c47a85d9848.mock.pstmn.io\n\n\n",
2727
"COPY / HTTP/1.1\nHost: 9c76407d-5b8d-4b22-99fb-8c47a85d9848.mock.pstmn.io\n\n\n",
2828
"POST /post HTTP/1.1\nHost: postman-echo.com\nContent-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW\n\n----WebKitFormBoundary7MA4YWxkTrZu0gW\nContent-Disposition: form-data; name=\"file\"; filename=\"file.txt\"\nContent-Type: text/plain\n\n(data)\n----WebKitFormBoundary7MA4YWxkTrZu0gW\n",
29-
"POST /post HTTP/1.1\nHost: postman-echo.com\n\n\n{}",
29+
"POST /post HTTP/1.1\nHost: postman-echo.com\nContent-Type: text/plain\n\n\"<file contents here>\"",
3030
"GET / HTTP/1.1\nHost: localhost:5050\n\n\n",
3131
"GET /knockknock HTTP/1.1\nHost: localhost:5050\n\n\n"
3232
],

codegens/java-okhttp/lib/parseRequest.js

+5-4
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,11 @@ function parseBody (requestBody, indentString, trimFields) {
7474
`${parseFormData(requestBody, indentString, trimFields)};\n`;
7575
/* istanbul ignore next */
7676
case 'file':
77-
return 'RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)\n' +
78-
indentString + `.addFormDataPart("file", "${requestBody[requestBody.mode].src}",\n` +
79-
indentString + 'RequestBody.create(MediaType.parse("application/octet-stream"),\n' +
80-
indentString + `new File("${requestBody[requestBody.mode].src}"))).build();\n`;
77+
// return 'RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)\n' +
78+
// indentString + `.addFormDataPart("file", "${requestBody[requestBody.mode].src}",\n` +
79+
// indentString + 'RequestBody.create(MediaType.parse("application/octet-stream"),\n' +
80+
// indentString + `new File("${requestBody[requestBody.mode].src}"))).build();\n`;
81+
return 'RequestBody body = RequestBody.create(mediaType, "<file contents here>");\n';
8182
default:
8283
return 'RequestBody body = RequestBody.create(mediaType, "");\n';
8384
}

codegens/java-unirest/lib/parseRequest.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ function parseBody (request, indentString, trimField) {
8787
case 'formdata':
8888
return parseFormData(request.body.toJSON(), indentString, trimField);
8989
case 'file':
90-
return indentString + `.field("file", "new File(${request.body[request.body.mode].src})")\n`;
90+
return indentString + '.body("<file contents here>")\n';
9191
default:
9292
return '';
9393
}

codegens/js-fetch/lib/index.js

+3-4
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,10 @@ function parseRawBody (body, trim) {
6969

7070
/* istanbul ignore next */
7171
/**
72-
*
73-
* @param {Object} body File body.
72+
* parses binamry file data
7473
*/
75-
function parseFileData (body) {
76-
var bodySnippet = `var file = "${body.content}";\n`;
74+
function parseFileData () {
75+
var bodySnippet = 'var file = "<file contents here>";\n';
7776
return bodySnippet;
7877
}
7978

codegens/js-jquery/lib/js-jquery.js

+6
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,12 @@ self = module.exports = {
132132
jQueryCode += `${indent}"url": "${sanitize(request.url.toString(), 'url')}",\n`;
133133
jQueryCode += `${indent}"method": "${request.method}",\n`;
134134
jQueryCode += `${indent}"timeout": ${options.requestTimeout},\n`;
135+
if (request.body && request.body.mode === 'file' && !request.headers.has('Content-Type')) {
136+
request.addHeader({
137+
key: 'Content-Type',
138+
value: 'text/plain'
139+
});
140+
}
135141
jQueryCode += `${getHeaders(request, indent)}`;
136142
jQueryCode += `${parseBody(request.toJSON(), options.trimRequestBody, indent)}};\n\n`;
137143
jQueryCode += `$.ajax(settings).done(function (response) {\n${indent}console.log(response);\n});`;

codegens/js-jquery/lib/util/parseBody.js

+3
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ module.exports = function (request, trimRequestBody, indentation) {
3939
`${indentation}"contentType": false,\n` +
4040
`${indentation}"data": form\n`;
4141
return requestBody;
42+
case 'file':
43+
requestBody = `${indentation} "data": "<file contents here>"\n`;
44+
return requestBody;
4245
default:
4346
return requestBody;
4447

codegens/js-xhr/lib/index.js

+7-8
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,12 @@ function parseFormData (body, trim) {
6262
/**
6363
* Parses file body from the Request
6464
*
65-
* @param {*} body body object from request.
66-
* @param {*} trim trim body option
6765
*/
68-
function parseFile (body, trim) {
69-
var bodySnippet = 'var data = new FormData();\n';
70-
bodySnippet += `data.append("${sanitize(body.key, trim)}", "${sanitize(body.src, trim)}", `;
71-
bodySnippet += `"${sanitize(body.key, trim)}");\n`;
66+
function parseFile () {
67+
// var bodySnippet = 'var data = new FormData();\n';
68+
// bodySnippet += `data.append("${sanitize(body.key, trim)}", "${sanitize(body.src, trim)}", `;
69+
// bodySnippet += `"${sanitize(body.key, trim)}");\n`;
70+
var bodySnippet = 'var data = "<file contents here>";\n';
7271
return bodySnippet;
7372
}
7473

@@ -174,7 +173,7 @@ function convert (request, options, callback) {
174173
indent = indent.repeat(options.indentCount);
175174
trim = options.trimRequestBody;
176175

177-
bodySnippet = request.body ? parseBody(request.body.toJSON(), trim, indent) : '';
176+
bodySnippet = request.body && !_.isEmpty(request.body.toJSON()) ? parseBody(request.body.toJSON(), trim, indent) : '';
178177

179178
codeSnippet += bodySnippet + '\n';
180179

@@ -197,7 +196,7 @@ function convert (request, options, callback) {
197196

198197
codeSnippet += headerSnippet + '\n';
199198

200-
codeSnippet += request.body ? 'xhr.send(data)' : 'xhr.send();';
199+
codeSnippet += request.body && !_.isEmpty(request.body.toJSON()) ? 'xhr.send(data);' : 'xhr.send();';
201200
callback(null, codeSnippet);
202201
}
203202

codegens/js-xhr/test/unit/convert.test.js

+39
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,46 @@ describe('js-xhr convert function', function () {
195195
});
196196
});
197197
});
198+
describe('Request with empty body', function () {
199+
var req = {
200+
'method': 'GET',
201+
'body': {},
202+
'url': {
203+
'raw': 'https://postman-echo.com/get',
204+
'protocol': 'https',
205+
'host': [
206+
'postman-echo',
207+
'com'
208+
],
209+
'path': [
210+
'get'
211+
]
212+
},
213+
'description': 'Request without a body'
214+
},
198215

216+
request = new sdk.Request(req),
217+
options = {
218+
indentCount: 2,
219+
indentType: 'Space'
220+
};
221+
convert(request, options, function (error, snippet) {
222+
if (error) {
223+
expect.fail(null, null, error);
224+
return;
225+
}
226+
227+
it('should not be empty', function () {
228+
expect(snippet).not.to.equal('');
229+
});
230+
it('should not contain var data =', function () {
231+
expect(snippet).to.deep.not.include('var data =');
232+
});
233+
it('should contain xhr.send();', function () {
234+
expect(snippet).to.deep.include('xhr.send();');
235+
});
236+
});
237+
});
199238
describe('getOptions function', function () {
200239
var options = getOptions();
201240
it('should return an array of specific options', function () {

codegens/libcurl/lib/index.js

+9-3
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ self = module.exports = {
4343
snippet += indentString + `curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "${protocol}");\n`;
4444
snippet += indentString + 'struct curl_slist *headers = NULL;\n';
4545
headersData = request.getHeaders({ enabled: true });
46+
if (request.body && request.body.mode === 'file' && !request.headers.has('Content-Type')) {
47+
request.addHeader({
48+
key: 'Content-Type',
49+
value: 'text/plain'
50+
});
51+
}
4652
_.forEach(headersData, function (value, key) {
4753
snippet += indentString + `headers = curl_slist_append(headers, "${sanitize(key)}: ${sanitize(value)}");\n`;
4854
});
@@ -114,9 +120,9 @@ self = module.exports = {
114120
}
115121
break;
116122
case 'file':
117-
snippet += indentString +
118-
`const char *data = "${sanitize(body.key, trim)}=@${sanitize(body.value, trim)}";\n`;
119-
snippet += indentString + 'curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);\n';
123+
snippet += indentString + 'curl_easy_setopt(curl,CURLOPT_POSTFIELDS,"<file contents here>");\n';
124+
// `const char *data = "${sanitize(body.key, trim)}=@${sanitize(body.value, trim)}";\n`;
125+
// snippet += indentString + 'curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);\n';
120126
break;
121127
default:
122128
snippet = String(snippet);

codegens/nodejs-native/lib/parseRequest.js

+19
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ function parseBody (requestbody, indentString, trimBody) {
8181
case 'urlencoded':
8282
return `qs.stringify({\n${extractFormData(requestbody[requestbody.mode], indentString, trimBody)}` +
8383
'\n})';
84+
case 'file':
85+
return '"<file contents here>"';
8486
default:
8587
return '';
8688
}
@@ -139,6 +141,22 @@ function parseHost (request, indentString) {
139141
return hostSnippet;
140142
}
141143

144+
/**
145+
* parses port of request object and returns code snippet of nodejs native to add port
146+
*
147+
* @param {Object} request - Postman SDK request object
148+
* @param {String} indentString - indentation required in code snippet
149+
* @returns {String} - code snippet of nodejs native to add port
150+
*/
151+
function parsePort (request, indentString) {
152+
var port = _.get(request, 'url.port', ''),
153+
portSnippet = '';
154+
if (port) {
155+
portSnippet += `${indentString}'port': ${port}`;
156+
}
157+
return portSnippet;
158+
}
159+
142160
/**
143161
* parses path of request object and returns code snippet of nodejs native to add path
144162
*
@@ -219,6 +237,7 @@ module.exports = {
219237
parseBody: parseBody,
220238
parseHeader: parseHeader,
221239
parseHost: parseHost,
240+
parsePort: parsePort,
222241
parsePath: parsePath,
223242
parseURLVariable: parseURLVariable
224243
};

codegens/nodejs-native/lib/request.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,22 @@ function makeSnippet (request, indentString, options) {
4343
if (request.body && request.body[request.body.mode]) {
4444
postData.push(parseRequest.parseBody(request.body.toJSON(), indentString, options.trimRequestBody));
4545
}
46+
if (request.body && request.body.mode === 'file' && !request.headers.has('Content-Type')) {
47+
request.addHeader({
48+
key: 'Content-Type',
49+
value: 'text/plain'
50+
});
51+
}
4652

4753
parseRequest.parseURLVariable(request);
4854

4955
optionsArray.push(indentString + `'method': '${request.method}'`);
5056
optionsArray.push(parseRequest.parseHost(request, indentString));
57+
if (request.url.port) {
58+
optionsArray.push(parseRequest.parsePort(request, indentString));
59+
}
5160
optionsArray.push(parseRequest.parsePath(request, indentString));
5261
optionsArray.push(parseRequest.parseHeader(request, indentString));
53-
5462
if (options.followRedirect) {
5563
optionsArray.push(indentString + '\'maxRedirects\': 20');
5664
}

codegens/nodejs-native/test/unit/snippet.test.js

+26
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,30 @@ describe('nodejs-native convert function', function () {
8080
expect(snippet).to.include('\'path\': \'/?query1=1&query2=2\'');
8181
});
8282
});
83+
84+
it('should add port in the options when host has port specified', function () {
85+
var request = new sdk.Request({
86+
'method': 'GET',
87+
'header': [],
88+
'url': {
89+
'raw': 'https://localhost:3000/getSelfBody',
90+
'protocol': 'https',
91+
'host': [
92+
'localhost'
93+
],
94+
'port': '3000',
95+
'path': [
96+
'getSelfBody'
97+
]
98+
}
99+
}),
100+
options = {};
101+
convert(request, options, function (error, snippet) {
102+
if (error) {
103+
expect.fail(null, null, error);
104+
}
105+
expect(snippet).to.be.a('string');
106+
expect(snippet).to.include('\'port\': 3000');
107+
});
108+
});
83109
});

0 commit comments

Comments
 (0)