insomnia/app/__mocks__/node-libcurl.js
Gregory Schier cb2e720c5c A bunch of fixes with OAuth and minor network bugs (#155)
* A bunch of fixes with OAuth and minor network bugs

* Handle charsets and only autocomplete constants if exact prefix

* Fix head requests

* Fix double submisson of request

* Fixed tests
2017-04-19 18:37:40 -07:00

119 lines
2.6 KiB
JavaScript

import {EventEmitter} from 'events';
class Curl extends EventEmitter {
constructor () {
super();
this._options = {};
}
setOpt (name, value) {
if (!name) {
throw new Error(`Invalid option ${name} ${value}`);
}
if (name === Curl.option.CAINFO) {
// Just ignore this because it's platform-specific
return;
}
if (name === Curl.option.COOKIELIST) {
// This can be set multiple times
this._options[name] = this._options[name] || [];
this._options[name].push(value);
} else {
this._options[name] = value;
}
}
getInfo (name) {
switch (name) {
case Curl.info.COOKIELIST:
return [`#HttpOnly_.insomnia.rest\tTRUE\t/url/path\tTRUE\t${Date.now() / 1000}\tfoo\tbar`];
case Curl.info.EFFECTIVE_URL:
return this._options[Curl.option.URL];
case Curl.info.TOTAL_TIME:
return 700;
case Curl.info.SIZE_DOWNLOAD:
return 800;
default:
throw new Error(`Invalid info ${name}`);
}
}
perform () {
process.nextTick(() => {
const data = Buffer.from(JSON.stringify({
options: this._options
}));
this.emit('data', data);
process.nextTick(() => {
this.emit('end', 'NOT_USED', 'NOT_USED', [{
'Content-Length': `${data.length}`,
'Content-Type': 'application/json',
result: {code: 200, reason: 'OK'}
}]);
});
});
}
close () {
}
}
Curl.info = {
COOKIELIST: 'COOKIELIST',
EFFECTIVE_URL: 'EFFECTIVE_URL',
SIZE_DOWNLOAD: 'SIZE_DOWNLOAD',
TOTAL_TIME: 'TOTAL_TIME',
debug: {
DATA_IN: 'DATA_IN',
DATA_OUT: 'DATA_OUT',
SSL_DATA_IN: 'SSL_DATA_IN',
SSL_DATA_OUT: 'SSL_DATA_OUT',
TEXT: 'TEXT'
}
};
Curl.auth = {
ANY: 'ANY'
};
Curl.option = {
CAINFO: 'CAINFO',
COOKIEFILE: 'COOKIEFILE',
COOKIELIST: 'COOKIELIST',
CUSTOMREQUEST: 'CUSTOMREQUEST',
DEBUGFUNCTION: 'DEBUGFUNCTION',
ACCEPT_ENCODING: 'ACCEPT_ENCODING',
FOLLOWLOCATION: 'FOLLOWLOCATION',
NOBODY: 'NOBODY',
HTTPAUTH: 'HTTPAUTH',
HTTPHEADER: 'HTTPHEADER',
HTTPPOST: 'HTTPPOST',
KEYPASSWD: 'KEYPASSWD',
NOPROGRESS: 'NOPROGRESS',
PASSWORD: 'PASSWORD',
POSTFIELDS: 'POSTFIELDS',
PROXY: 'PROXY',
PROXYAUTH: 'PROXYAUTH',
READDATA: 'READDATA',
SSLCERT: 'SSLCERT',
SSLCERTTYPE: 'SSLCERTTYPE',
SSLKEY: 'SSLKEY',
SSL_VERIFYHOST: 'SSL_VERIFYHOST',
SSL_VERIFYPEER: 'SSL_VERIFYPEER',
TIMEOUT_MS: 'TIMEOUT_MS',
UPLOAD: 'UPLOAD',
URL: 'URL',
USERAGENT: 'USERAGENT',
USERNAME: 'USERNAME',
VERBOSE: 'VERBOSE',
XFERINFOFUNCTION: 'XFERINFOFUNCTION'
};
module.exports = {
Curl: Curl
};