Skip to content

Commit 84d91a7

Browse files
committed
Adding options, skip followRedirect tests, updating ci-requirements
1 parent ebbcc15 commit 84d91a7

File tree

6 files changed

+121
-54
lines changed

6 files changed

+121
-54
lines changed

codegens/r-httr/lib/options.js

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,6 @@ const options = [
3131
description:
3232
'Set number of milliseconds the request should wait for a response' +
3333
' before timing out (use 0 for infinity)'
34-
},
35-
{
36-
name: 'Follow redirects',
37-
id: 'followRedirect',
38-
type: 'boolean',
39-
default: true,
40-
description: 'Automatically follow HTTP redirects'
41-
},
42-
{
43-
name: 'Set communication type',
44-
id: 'asyncType',
45-
type: 'enum',
46-
availableOptions: ['async', 'sync'],
47-
default: 'async',
48-
description: 'Set if the requests will be asynchronous or synchronous'
4934
}
5035
];
5136

codegens/r-httr/lib/rHttr.js

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -169,15 +169,17 @@ function getEncodeSnippetByMode (mode) {
169169
* @param {boolean} hasHeaders - wheter or not include the headers
170170
* @param {string} methodUC - The method upper cased
171171
* @param {string} mode - the request body mode
172+
* @param {number} requestTimeout - The request timeout in the options
172173
* @returns {String} - returns generated snippet
173174
*/
174-
function getSnippetPostPutOrPatchForm (url, hasParams, hasHeaders, methodUC, mode) {
175+
function getSnippetPostPutOrPatchForm (url, hasParams, hasHeaders, methodUC, mode, requestTimeout = 0) {
175176
let paramsSnippet = hasParams ? ', body = body' : '',
176177
headersSnippet = hasHeaders ? ', add_headers(headers)' : '',
177-
encodeSnippet = getEncodeSnippetByMode(mode);
178+
encodeSnippet = getEncodeSnippetByMode(mode),
179+
timeoutSnippet = requestTimeout ? `, timeout(${requestTimeout})` : '';
178180

179181
return `res <- ${methodUC}("${url}"` +
180-
`${paramsSnippet}${headersSnippet}${encodeSnippet})\n`;
182+
`${paramsSnippet}${headersSnippet}${encodeSnippet}${timeoutSnippet})\n`;
181183
}
182184

183185
/**
@@ -188,33 +190,36 @@ function getSnippetPostPutOrPatchForm (url, hasParams, hasHeaders, methodUC, mod
188190
* @param {string} url - string url of the service
189191
* @param {string} hasHeaders - wheter or not include the headers
190192
* @param {string} methodUC - the request method upper cased
193+
* @param {number} requestTimeout - the request timeout from options
191194
* @returns {String} - returns generated snippet
192195
*/
193-
function getSnippetGetOrDeleteURL (url, hasHeaders, methodUC) {
194-
let headersSnippet = hasHeaders ? ', add_headers(headers)' : '';
195-
return `res <- ${methodUC}("${url}"${headersSnippet})\n`;
196+
function getSnippetGetOrDeleteURL (url, hasHeaders, methodUC, requestTimeout = 0) {
197+
let headersSnippet = hasHeaders ? ', add_headers(headers)' : '',
198+
requestTimeoutSnippet = requestTimeout === 0 ? '' : `, timeout(${requestTimeout})`;
199+
return `res <- ${methodUC}("${url}"${headersSnippet}${requestTimeoutSnippet})\n`;
196200
}
197201

198202
/**
199203
* Creates the snippet request for either get ulr or post form
200204
*
201205
* @module convert
202206
*
203-
* @param {string} url - string url of the service
204-
* @param {string} method - request http method
205-
* @param {boolean} hasParams - wheter or not include the params
206-
* @param {boolean} hasHeaders - wheter or not include the headers
207-
* @param {string} mode - the request body mode
207+
* @param {object} requestData - an object that includes:
208+
* {string} method - request http method
209+
* {boolean} hasParams - wheter or not include the params
210+
* {boolean} hasHeaders - wheter or not include the headers
211+
* {string} mode - the request body mode
212+
* {number} requestTimeout - The request timeout from the options
208213
* @returns {String} - returns generated snippet
209214
*/
210-
function getSnippetRequest (url, method, hasParams, hasHeaders, mode) {
215+
function getSnippetRequest ({url, method, hasParams, hasHeaders, mode, requestTimeout}) {
211216
const methodUC = method.toUpperCase();
212217
let snippetRequest = '';
213218
if (methodUC === 'GET' || methodUC === 'DELETE') {
214-
snippetRequest = getSnippetGetOrDeleteURL(url, hasHeaders, methodUC);
219+
snippetRequest = getSnippetGetOrDeleteURL(url, hasHeaders, methodUC, requestTimeout);
215220
}
216221
if (methodUC === 'POST' || methodUC === 'PUT' || methodUC === 'PATCH') {
217-
snippetRequest = getSnippetPostPutOrPatchForm(url, hasParams, hasHeaders, methodUC, mode);
222+
snippetRequest = getSnippetPostPutOrPatchForm(url, hasParams, hasHeaders, methodUC, mode, requestTimeout);
218223
}
219224
return snippetRequest;
220225
}
@@ -258,7 +263,14 @@ function convert (request, options, callback) {
258263
snippetHeader = getSnippetHeader(),
259264
snippetFooter = getSnippetFooter(),
260265
snippetbody = parseBody(request.body, indentation, getBodyTrim(options), request.headers.get('Content-Type')),
261-
snippetRequest = getSnippetRequest(url, method, snippetbody !== '', snippetHeaders !== '', mode);
266+
snippetRequest = getSnippetRequest({
267+
url: url,
268+
method: method,
269+
hasParams: snippetbody !== '',
270+
hasHeaders: snippetHeaders !== '',
271+
mode: mode,
272+
requestTimeout: options.requestTimeout
273+
});
262274

263275
snippet += snippetHeader;
264276
snippet += snippetHeaders;
@@ -283,5 +295,6 @@ module.exports = {
283295
getSnippetHeaders,
284296
getSnippetPostPutOrPatchForm,
285297
getSnippetGetOrDeleteURL,
286-
getSnippetRequest
298+
getSnippetRequest,
299+
getIndentation
287300
};

codegens/r-httr/lib/util/parseBody.js

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -178,24 +178,6 @@ function buildFormDataParamFile (data, indentation, bodyTrim) {
178178
return `${indentation}'${sanitizeString(data.key, bodyTrim)}' = upload_file('${getContentFileFormData(data)}')`;
179179
}
180180

181-
/**
182-
* Groups the params in the request by form, in case that there are multiple forms and multiple files
183-
*
184-
* @param {array} paramsList The params in the request
185-
*/
186-
function groupParamsByForm (paramsList) {
187-
let forms = {};
188-
paramsList.forEach((param) => {
189-
if (forms.hasOwnProperty(param.key)) {
190-
forms[param.key].push(param);
191-
}
192-
else {
193-
forms[param.key] = [param];
194-
}
195-
});
196-
return Object.values(forms);
197-
}
198-
199181
/**
200182
* builds a data param
201183
*

codegens/r-httr/test/newman/newman.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ describe('r-httr Converter', function () {
1212
// filename along with the appropriate version of the file. This file will be used to run the snippet.
1313
fileName: 'snippet.r',
1414
// Run script required to run the generated code snippet
15-
runScript: 'RScript snippet.r'
15+
runScript: 'RScript snippet.r',
16+
skipCollections: ['redirectCollection']
1617
};
1718
runNewmanTest(convert, options, testConfig);
1819
});

codegens/r-httr/test/unit/rHttr.test.js

Lines changed: 81 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ var expect = require('chai').expect,
77
getSnippetHeaders,
88
getSnippetPostPutOrPatchForm,
99
getSnippetGetOrDeleteURL,
10-
getSnippetRequest
10+
getSnippetRequest,
11+
getIndentation
1112
} = require('../../lib/rHttr');
1213

1314
describe('convert function', function () {
@@ -27,6 +28,22 @@ describe('convert function', function () {
2728
done();
2829
});
2930

31+
it('should convert a simple get request with timeout', function (done) {
32+
const collection = new sdk.Collection(JSON.parse(
33+
fs.readFileSync(path.resolve(__dirname, './fixtures/sample_collection.json').toString())));
34+
// collection.items.members.forEach((item) => {
35+
convert(collection.items.members[1].request, { requestTimeout: 3 }, function (err, snippet) {
36+
if (err) {
37+
console.error(err);
38+
}
39+
expect(snippet).to.not.be.empty;
40+
expect(snippet.includes('timeout(3)')).to.be.true;
41+
fs.writeFileSync(path.join(__dirname, './fixtures/snippet.r'), snippet);
42+
});
43+
// });
44+
done();
45+
});
46+
3047
it('should convert a post request with formdata', function (done) {
3148
const collection = new sdk.Collection(JSON.parse(
3249
fs.readFileSync(path.resolve(__dirname, './fixtures/sample_collection.json').toString())));
@@ -172,7 +189,27 @@ describe('getSnippetPostPutOrPatchForm function', function () {
172189
it('should generate postForm snippet without params with headers and post style', function () {
173190
const expected = 'res <- POST("https://postman-echo.com/post"' +
174191
', add_headers(headers), encode = \'form\')\n',
175-
res = getSnippetPostPutOrPatchForm('https://postman-echo.com/post', false, true, 'POST', 'urlencoded');
192+
res = getSnippetPostPutOrPatchForm(
193+
'https://postman-echo.com/post',
194+
false,
195+
true,
196+
'POST',
197+
'urlencoded'
198+
);
199+
expect(res).to.equal(expected);
200+
});
201+
202+
it('should generate postForm snippet without params with headers and post style', function () {
203+
const expected = 'res <- POST("https://postman-echo.com/post"' +
204+
', add_headers(headers), encode = \'form\', timeout(3))\n',
205+
res = getSnippetPostPutOrPatchForm(
206+
'https://postman-echo.com/post',
207+
false,
208+
true,
209+
'POST',
210+
'urlencoded',
211+
3
212+
);
176213
expect(res).to.equal(expected);
177214
});
178215

@@ -191,20 +228,60 @@ describe('getSnippetGetOrDeleteURL function', function () {
191228
res = getSnippetGetOrDeleteURL('https://postman-echo.com/headers', false, 'GET');
192229
expect(res).to.equal(expected);
193230
});
231+
232+
it('should generate GET snippet with timeout', function () {
233+
const expected = 'res <- GET("https://postman-echo.com/headers", timeout(3))\n',
234+
res = getSnippetGetOrDeleteURL('https://postman-echo.com/headers', false, 'GET', 3);
235+
expect(res).to.equal(expected);
236+
});
194237
});
195238

196239
describe('getSnippetRequest function', function () {
197240

198241
it('should generate snippet method GET with headers', function () {
199242
const expected = 'res <- GET("https://postman-echo.com/headers", add_headers(headers))\n',
200-
res = getSnippetRequest('https://postman-echo.com/headers', 'GET', false, true);
243+
res = getSnippetRequest({
244+
url: 'https://postman-echo.com/headers',
245+
method: 'GET',
246+
hasParams: false,
247+
hasHeaders: true
248+
});
201249
expect(res).to.equal(expected);
202250
});
203251

204252
it('should generate snippet method GET without headers', function () {
205253
const expected = 'res <- GET("https://postman-echo.com/headers")\n',
206-
res = getSnippetRequest('https://postman-echo.com/headers', 'GET', false, false);
254+
res = getSnippetRequest({
255+
url: 'https://postman-echo.com/headers',
256+
method: 'GET',
257+
hasParams: false,
258+
hasHeaders: false
259+
});
207260
expect(res).to.equal(expected);
208261
});
209262

263+
it('should generate snippet method GET without headers and timeout', function () {
264+
const expected = 'res <- GET("https://postman-echo.com/headers", timeout(3))\n',
265+
res = getSnippetRequest({
266+
url: 'https://postman-echo.com/headers',
267+
method: 'GET',
268+
hasParams: false,
269+
hasHeaders: false,
270+
requestTimeout: 3
271+
});
272+
expect(res).to.equal(expected);
273+
});
274+
275+
});
276+
277+
describe('getIndentation method', function () {
278+
it('should return two spaces', function () {
279+
const options = {
280+
indentType: 'Space',
281+
indentCount: 2
282+
},
283+
expected = ' ',
284+
result = getIndentation(options);
285+
expect(result).to.be.equal(expected);
286+
});
210287
});

npm/ci-requirements.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,12 @@ echo "Installing dependencies required for tests in codegens/php-guzzle"
8181
php -r "unlink('composer-setup.php');"
8282
sudo mv composer.phar /usr/bin/composer
8383
composer global require guzzlehttp/guzzle:7.4.1
84+
85+
echo "Installing dependencies required for tests in codegens/r-rCurl and r-httr Installing R"
86+
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
87+
sudo add-apt-repository 'deb [arch=amd64,i386] https://cran.rstudio.com/bin/linux/ubuntu xenial-cran40/'
88+
sudo apt-get update
89+
sudo apt-get install r-base
90+
91+
echo "Installing httr"
92+
R --vanilla -e 'install.packages("httr", version="1.4.2", repos="http://cran.us.r-project.org")'

0 commit comments

Comments
 (0)