mirror of
https://gitlab.silvrtree.co.uk/martind2000/frontexpress.git
synced 2025-02-11 09:49:17 +00:00
better usage of settings
This commit is contained in:
parent
117e5c6974
commit
bf423fb19c
@ -1,26 +1,19 @@
|
|||||||
|
import HTTP_METHODS from './methods';
|
||||||
|
import Settings from './settings';
|
||||||
import Router, {Route} from './router';
|
import Router, {Route} from './router';
|
||||||
import Middleware from './middleware';
|
import Middleware from './middleware';
|
||||||
import Requester, {HTTP_METHODS} from './requester';
|
|
||||||
|
|
||||||
export default class Application {
|
export default class Application {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.routers = [];
|
this.routers = [];
|
||||||
this.requester = new Requester();
|
|
||||||
this.DOMLoading = false;
|
this.DOMLoading = false;
|
||||||
|
this.settings = new Settings();
|
||||||
this.settingsDef = {
|
|
||||||
'http-requester': (requester) => {this.requester = requester;}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////
|
||||||
// Setting
|
// Settings
|
||||||
set(name, value) {
|
set(name, value) {
|
||||||
const settingFn = this.settingsDef[name];
|
this.settings.set(name, value);
|
||||||
if (!settingFn) {
|
|
||||||
throw new ReferenceError(`unsupported setting ${name}`);
|
|
||||||
}
|
|
||||||
settingFn(value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////
|
||||||
@ -86,7 +79,7 @@ export default class Application {
|
|||||||
} else {
|
} else {
|
||||||
middleware = which;
|
middleware = which;
|
||||||
router = new Router(baseUri);
|
router = new Router(baseUri);
|
||||||
for (const method of Object.keys(HTTP_METHODS)) {
|
for (const method of HTTP_METHODS) {
|
||||||
router[method.toLowerCase()](middleware);
|
router[method.toLowerCase()](middleware);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -174,6 +167,14 @@ export default class Application {
|
|||||||
///////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////
|
||||||
// Ajax request
|
// Ajax request
|
||||||
_fetch({method, uri, headers, data}, resolve, reject) {
|
_fetch({method, uri, headers, data}, resolve, reject) {
|
||||||
|
|
||||||
|
const httpMethodTransformer = this.get(`http ${method} transformer`);
|
||||||
|
if (httpMethodTransformer) {
|
||||||
|
uri = httpMethodTransformer.uri ? httpMethodTransformer.uri({uri, headers, data}) : uri;
|
||||||
|
headers = httpMethodTransformer.headers ? httpMethodTransformer.headers({uri, headers, data}) : headers;
|
||||||
|
data = httpMethodTransformer.data ? httpMethodTransformer.data({uri, headers, data}) : data;
|
||||||
|
}
|
||||||
|
|
||||||
// calls middleware exited method
|
// calls middleware exited method
|
||||||
this._callMiddlewareExited();
|
this._callMiddlewareExited();
|
||||||
|
|
||||||
@ -184,7 +185,7 @@ export default class Application {
|
|||||||
this._callMiddlewareEntered(currentRoutes, {method, uri, headers, data});
|
this._callMiddlewareEntered(currentRoutes, {method, uri, headers, data});
|
||||||
|
|
||||||
// invokes http request
|
// invokes http request
|
||||||
this.requester.fetch({uri, method},
|
this.settings.get('http requester').fetch({method, uri, headers, data},
|
||||||
(request, response) => {
|
(request, response) => {
|
||||||
this._callMiddlewareUpdated(currentRoutes, request, response);
|
this._callMiddlewareUpdated(currentRoutes, request, response);
|
||||||
if (resolve) {
|
if (resolve) {
|
||||||
@ -200,12 +201,21 @@ export default class Application {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Object.keys(HTTP_METHODS).reduce((reqProto, method) => {
|
HTTP_METHODS.reduce((reqProto, method) => {
|
||||||
// Middleware methods
|
// Middleware methods
|
||||||
const middlewareMethodeName = method.toLowerCase();
|
const middlewareMethodName = method.toLowerCase();
|
||||||
reqProto[middlewareMethodeName] = function(...args) {
|
reqProto[middlewareMethodName] = function(...args) {
|
||||||
if (args.length === 0) {
|
if (middlewareMethodName === 'get') {
|
||||||
throw new TypeError(`${middlewareMethodeName} method takes at least a middleware`);
|
if (args.length === 0) {
|
||||||
|
throw new TypeError(`${middlewareMethodName} method takes at least a string or a middleware`);
|
||||||
|
} else if (args.length === 1) {
|
||||||
|
const [name] = args;
|
||||||
|
if (typeof name === 'string') {
|
||||||
|
return this.settings.get(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (args.length === 0) {
|
||||||
|
throw new TypeError(`${middlewareMethodName} method takes at least a middleware`);
|
||||||
}
|
}
|
||||||
|
|
||||||
let baseUri, middleware, which;
|
let baseUri, middleware, which;
|
||||||
@ -217,12 +227,12 @@ Object.keys(HTTP_METHODS).reduce((reqProto, method) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!(which instanceof Middleware) && (typeof which !== 'function')) {
|
if (!(which instanceof Middleware) && (typeof which !== 'function')) {
|
||||||
throw new TypeError(`${middlewareMethodeName} method takes at least a middleware`);
|
throw new TypeError(`${middlewareMethodName} method takes at least a middleware`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const router = new Router();
|
const router = new Router();
|
||||||
middleware = which;
|
middleware = which;
|
||||||
router[middlewareMethodeName](baseUri, middleware);
|
router[middlewareMethodName](baseUri, middleware);
|
||||||
|
|
||||||
this.routers.push(router);
|
this.routers.push(router);
|
||||||
};
|
};
|
||||||
|
1
lib/methods.js
Normal file
1
lib/methods.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
export default ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH'];
|
120
lib/requester.js
120
lib/requester.js
@ -1,76 +1,6 @@
|
|||||||
export const HTTP_METHODS = {
|
|
||||||
'GET': {
|
|
||||||
uri({uri, headers, data}) {
|
|
||||||
if (!data) {
|
|
||||||
return uri;
|
|
||||||
}
|
|
||||||
|
|
||||||
let anchor = '';
|
|
||||||
let uriWithoutAnchor = uri;
|
|
||||||
const hashIndex = uri.indexOf('#');
|
|
||||||
if (hashIndex >=1) {
|
|
||||||
uriWithoutAnchor = uri.slice(0, hashIndex);
|
|
||||||
anchor = uri.slice(hashIndex, uri.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
uriWithoutAnchor = Object.keys(data).reduce((gUri, d, index) => {
|
|
||||||
if (index === 0 && gUri.indexOf('?') === -1) {
|
|
||||||
gUri += '?';
|
|
||||||
} else {
|
|
||||||
gUri += '&';
|
|
||||||
}
|
|
||||||
gUri += `${d}=${data[d]}`;
|
|
||||||
return gUri;
|
|
||||||
}, uriWithoutAnchor);
|
|
||||||
|
|
||||||
return uriWithoutAnchor + anchor;
|
|
||||||
},
|
|
||||||
data({uri, headers, data}) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'POST': {
|
|
||||||
headers({uri, headers, data}) {
|
|
||||||
const postHeaders = {};
|
|
||||||
postHeaders['Content-type'] = 'application/x-www-form-urlencoded';
|
|
||||||
if (headers) {
|
|
||||||
Object.keys(headers).reduce((phds, headKey) => {
|
|
||||||
phds[headKey] = headers[headKey];
|
|
||||||
return phds;
|
|
||||||
}, postHeaders);
|
|
||||||
}
|
|
||||||
return postHeaders;
|
|
||||||
},
|
|
||||||
data({uri, headers, data}) {
|
|
||||||
if (!data) {
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
return Object.keys(data).reduce((newData, d, index) => {
|
|
||||||
if (index !== 0) {
|
|
||||||
newData += '&';
|
|
||||||
}
|
|
||||||
newData += `${d}=${data[d]}`;
|
|
||||||
return newData;
|
|
||||||
}, '');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'PUT': {
|
|
||||||
//TODO
|
|
||||||
},
|
|
||||||
'DELETE': {
|
|
||||||
//TODO
|
|
||||||
}
|
|
||||||
// non exhaustive list
|
|
||||||
};
|
|
||||||
|
|
||||||
export default class Requester {
|
export default class Requester {
|
||||||
|
|
||||||
fetch({method, uri, headers, data}, resolve, reject) {
|
fetch({method, uri, headers, data}, resolve, reject) {
|
||||||
const transformer = HTTP_METHODS[method];
|
|
||||||
uri = transformer.uri ? transformer.uri({uri, headers, data}) : uri;
|
|
||||||
headers = transformer.headers ? transformer.headers({uri, headers, data}) : headers;
|
|
||||||
data = transformer.data ? transformer.data({uri, headers, data}) : data;
|
|
||||||
|
|
||||||
const success = (responseText) => {
|
const success = (responseText) => {
|
||||||
resolve(
|
resolve(
|
||||||
{method, uri, headers, data},
|
{method, uri, headers, data},
|
||||||
@ -114,30 +44,36 @@ export default class Requester {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_analyzeErrors(response) {
|
_analyzeErrors(response) {
|
||||||
let error = '';
|
// manage exceptions
|
||||||
if (response.status === 0) {
|
if (response.errorThrown) {
|
||||||
error = 'Server access problem. Check your network connection';
|
|
||||||
} else if (response.status === 401) {
|
|
||||||
error = 'Your session has expired, Please reconnect. [code: 401]';
|
|
||||||
} else if (response.status === 404) {
|
|
||||||
error = 'Page not found on server. [code: 404]';
|
|
||||||
} else if (response.status === 500) {
|
|
||||||
error = 'Internal server error. [code: 500]';
|
|
||||||
} else if (response.errorThrown) {
|
|
||||||
if (response.errorThrown.name === 'SyntaxError') {
|
if (response.errorThrown.name === 'SyntaxError') {
|
||||||
error = 'Problem during data decoding [JSON]';
|
return 'Problem during data decoding [JSON]';
|
||||||
} else if (response.errorThrown.name === 'TimeoutError') {
|
|
||||||
error = 'Server is taking too long to reply';
|
|
||||||
} else if (response.errorThrown.name === 'AbortError') {
|
|
||||||
error = 'Request cancelled on server';
|
|
||||||
} else if (response.errorThrown.name === 'NetworkError') {
|
|
||||||
error = 'A network error occurred';
|
|
||||||
} else {
|
|
||||||
error = `${response.errorThrown.name} ${response.errorThrown.message}`;
|
|
||||||
}
|
}
|
||||||
} else {
|
if (response.errorThrown.name === 'TimeoutError') {
|
||||||
error = `Unknown error. ${response.statusText?response.statusText:''}`;
|
return 'Server is taking too long to reply';
|
||||||
|
}
|
||||||
|
if (response.errorThrown.name === 'AbortError') {
|
||||||
|
return 'Request cancelled on server';
|
||||||
|
}
|
||||||
|
if (response.errorThrown.name === 'NetworkError') {
|
||||||
|
return 'A network error occurred';
|
||||||
|
}
|
||||||
|
throw response.errorThrown;
|
||||||
}
|
}
|
||||||
return error;
|
|
||||||
|
// manage status
|
||||||
|
if (response.status === 0) {
|
||||||
|
return 'Server access problem. Check your network connection';
|
||||||
|
}
|
||||||
|
if (response.status === 401) {
|
||||||
|
return 'Your session has expired, Please reconnect. [code: 401]';
|
||||||
|
}
|
||||||
|
if (response.status === 404) {
|
||||||
|
return 'Page not found on server. [code: 404]';
|
||||||
|
}
|
||||||
|
if (response.status === 500) {
|
||||||
|
return 'Internal server error. [code: 500]';
|
||||||
|
}
|
||||||
|
return `Unknown error. ${response.statusText?response.statusText:''}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
import {HTTP_METHODS} from './requester';
|
import HTTP_METHODS from './methods';
|
||||||
import Middleware from './middleware';
|
import Middleware from './middleware';
|
||||||
|
|
||||||
class Route {
|
class Route {
|
||||||
@ -138,14 +138,14 @@ export default class Router {
|
|||||||
throw new TypeError('use all method takes at least a middleware');
|
throw new TypeError('use all method takes at least a middleware');
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const method of Object.keys(HTTP_METHODS)) {
|
for (const method of HTTP_METHODS) {
|
||||||
this[method.toLowerCase()](...args);
|
this[method.toLowerCase()](...args);
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const method of Object.keys(HTTP_METHODS)) {
|
for (const method of HTTP_METHODS) {
|
||||||
const methodName = method.toLowerCase();
|
const methodName = method.toLowerCase();
|
||||||
Router.prototype[methodName] = function(...args) {
|
Router.prototype[methodName] = function(...args) {
|
||||||
if (args.length === 0) {
|
if (args.length === 0) {
|
||||||
|
87
lib/settings.js
Normal file
87
lib/settings.js
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
import Requester from './requester';
|
||||||
|
|
||||||
|
export default class {
|
||||||
|
constructor() {
|
||||||
|
// default settings
|
||||||
|
this.settings = {
|
||||||
|
'http requester': new Requester(),
|
||||||
|
|
||||||
|
'http GET transformer': {
|
||||||
|
uri({uri, headers, data}) {
|
||||||
|
if (!data) {
|
||||||
|
return uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
let anchor = '';
|
||||||
|
let uriWithoutAnchor = uri;
|
||||||
|
const hashIndex = uri.indexOf('#');
|
||||||
|
if (hashIndex >=1) {
|
||||||
|
uriWithoutAnchor = uri.slice(0, hashIndex);
|
||||||
|
anchor = uri.slice(hashIndex, uri.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
uriWithoutAnchor = Object.keys(data).reduce((gUri, d, index) => {
|
||||||
|
if (index === 0 && gUri.indexOf('?') === -1) {
|
||||||
|
gUri += '?';
|
||||||
|
} else {
|
||||||
|
gUri += '&';
|
||||||
|
}
|
||||||
|
gUri += `${d}=${data[d]}`;
|
||||||
|
return gUri;
|
||||||
|
}, uriWithoutAnchor);
|
||||||
|
|
||||||
|
return uriWithoutAnchor + anchor;
|
||||||
|
},
|
||||||
|
data({uri, headers, data}) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'http POST transformer': {
|
||||||
|
headers({uri, headers, data}) {
|
||||||
|
const postHeaders = {};
|
||||||
|
postHeaders['Content-type'] = 'application/x-www-form-urlencoded';
|
||||||
|
if (headers) {
|
||||||
|
Object.keys(headers).reduce((phds, headKey) => {
|
||||||
|
phds[headKey] = headers[headKey];
|
||||||
|
return phds;
|
||||||
|
}, postHeaders);
|
||||||
|
}
|
||||||
|
return postHeaders;
|
||||||
|
},
|
||||||
|
data({uri, headers, data}) {
|
||||||
|
if (!data) {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
return Object.keys(data).reduce((newData, d, index) => {
|
||||||
|
if (index !== 0) {
|
||||||
|
newData += '&';
|
||||||
|
}
|
||||||
|
newData += `${d}=${data[d]}`;
|
||||||
|
return newData;
|
||||||
|
}, '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.rules = {
|
||||||
|
'http requester': (requester) => {
|
||||||
|
if(typeof requester.fetch !== 'function') {
|
||||||
|
throw new TypeError('setting http requester has no fetch method');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
set(name, value) {
|
||||||
|
const checkRules = this.rules[name];
|
||||||
|
if (checkRules) {
|
||||||
|
checkRules(value);
|
||||||
|
}
|
||||||
|
this.settings[name] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
get(name) {
|
||||||
|
return this.settings[name];
|
||||||
|
}
|
||||||
|
};
|
@ -37,7 +37,6 @@
|
|||||||
"chai": "^3.5.0",
|
"chai": "^3.5.0",
|
||||||
"eslint": "^2.11.0",
|
"eslint": "^2.11.0",
|
||||||
"eslint-loader": "^1.3.0",
|
"eslint-loader": "^1.3.0",
|
||||||
"fake-xml-http-request": "^1.4.0",
|
|
||||||
"istanbul": "^0.4.3",
|
"istanbul": "^0.4.3",
|
||||||
"mocha": "^2.5.3",
|
"mocha": "^2.5.3",
|
||||||
"rimraf": "^2.5.2",
|
"rimraf": "^2.5.2",
|
||||||
|
@ -102,17 +102,23 @@ describe('Application', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('set method', () => {
|
describe('set/get setting method', () => {
|
||||||
it('unsupported setting', () => {
|
it('custom setting', () => {
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
chai.expect(() => app.set('blabla', 'value')).to.throw(ReferenceError);
|
app.set('blabla', 'value');
|
||||||
|
assert(app.get('blabla') === 'value');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('supported setting', () => {
|
it('core setting', () => {
|
||||||
const requester = new Requester();
|
const requester = new Requester();
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
assert(app.requester === requester);
|
assert(app.get('http requester') === requester);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('bad core setting', () => {
|
||||||
|
const app = frontexpress();
|
||||||
|
chai.expect(() => (app.set('http requester', 'not an object with fetch function'))).to.throw(TypeError);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -129,25 +135,25 @@ describe('Application', () => {
|
|||||||
|
|
||||||
it('no arguments', () => {
|
it('no arguments', () => {
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
assert.throws(app.use, TypeError);
|
assert.throws(app.use, TypeError);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('bad arguments', () => {
|
it('bad arguments', () => {
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
chai.expect(() => app.use('eee')).to.throw(TypeError);
|
chai.expect(() => app.use('eee')).to.throw(TypeError);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('mixing uri and regexp', () => {
|
it('mixing uri and regexp', () => {
|
||||||
let router = frontexpress.Router('/subroute');
|
let router = frontexpress.Router('/subroute');
|
||||||
let app = frontexpress();
|
let app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
chai.expect(() => app.use(/route/, router)).to.throw(TypeError);
|
chai.expect(() => app.use(/route/, router)).to.throw(TypeError);
|
||||||
|
|
||||||
router = frontexpress.Router(/subroute/);
|
router = frontexpress.Router(/subroute/);
|
||||||
app = frontexpress();
|
app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
chai.expect(() => app.use('/route', router)).to.throw(TypeError);
|
chai.expect(() => app.use('/route', router)).to.throw(TypeError);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -155,7 +161,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy();
|
const spy = sinon.spy();
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.use((request, response, next) => {spy();});
|
app.use((request, response, next) => {spy();});
|
||||||
|
|
||||||
app.httpGet('/', (request, response) => {
|
app.httpGet('/', (request, response) => {
|
||||||
@ -172,7 +178,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy();
|
const spy = sinon.spy();
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.use('/route1', (request, response, next) => {spy();});
|
app.use('/route1', (request, response, next) => {spy();});
|
||||||
|
|
||||||
app.httpGet('/route1', (request, response) => {
|
app.httpGet('/route1', (request, response) => {
|
||||||
@ -197,7 +203,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy();
|
const spy = sinon.spy();
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.use((request, response, next) => {spy();});
|
app.use((request, response, next) => {spy();});
|
||||||
|
|
||||||
app.httpGet('/', null, (request, response) => {
|
app.httpGet('/', null, (request, response) => {
|
||||||
@ -212,7 +218,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy(middleware, 'updated');
|
const spy = sinon.spy(middleware, 'updated');
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.use(middleware);
|
app.use(middleware);
|
||||||
|
|
||||||
app.httpGet('/', (request, response) => {
|
app.httpGet('/', (request, response) => {
|
||||||
@ -230,7 +236,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy(middleware, 'updated');
|
const spy = sinon.spy(middleware, 'updated');
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.use('/route1', middleware);
|
app.use('/route1', middleware);
|
||||||
|
|
||||||
app.httpGet('/route1', (request, response) => {
|
app.httpGet('/route1', (request, response) => {
|
||||||
@ -256,7 +262,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy(middleware, 'failed');
|
const spy = sinon.spy(middleware, 'failed');
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.use(middleware);
|
app.use(middleware);
|
||||||
|
|
||||||
app.httpGet('/', null, (request, response) => {
|
app.httpGet('/', null, (request, response) => {
|
||||||
@ -274,7 +280,7 @@ describe('Application', () => {
|
|||||||
.post((request, response, next) => {spy();});
|
.post((request, response, next) => {spy();});
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.use(router);
|
app.use(router);
|
||||||
|
|
||||||
app.httpGet('/', (request, response) => {
|
app.httpGet('/', (request, response) => {
|
||||||
@ -295,7 +301,7 @@ describe('Application', () => {
|
|||||||
.post((request, response, next) => {spy();});
|
.post((request, response, next) => {spy();});
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.use('/route1', router);
|
app.use('/route1', router);
|
||||||
|
|
||||||
app.httpGet('/route1', (request, response) => {
|
app.httpGet('/route1', (request, response) => {
|
||||||
@ -313,7 +319,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy(middleware, 'updated');
|
const spy = sinon.spy(middleware, 'updated');
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
|
|
||||||
const router = frontexpress.Router();
|
const router = frontexpress.Router();
|
||||||
router.get('/subroute1', middleware);
|
router.get('/subroute1', middleware);
|
||||||
@ -345,7 +351,7 @@ describe('Application', () => {
|
|||||||
|
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.use(/^\/route1/, router1);
|
app.use(/^\/route1/, router1);
|
||||||
app.use(/^\/route2/, router2);
|
app.use(/^\/route2/, router2);
|
||||||
|
|
||||||
@ -379,14 +385,13 @@ describe('Application', () => {
|
|||||||
|
|
||||||
it('no arguments', () => {
|
it('no arguments', () => {
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
assert.throws(app.get, TypeError);
|
assert.throws(app.get, TypeError);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('bad arguments', () => {
|
it('bad arguments', () => {
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
chai.expect(() => app.get('eee')).to.throw(TypeError);
|
|
||||||
chai.expect(() => app.get(frontexpress.Router())).to.throw(TypeError);
|
chai.expect(() => app.get(frontexpress.Router())).to.throw(TypeError);
|
||||||
chai.expect(() => app.get('/route1', frontexpress.Router())).to.throw(TypeError);
|
chai.expect(() => app.get('/route1', frontexpress.Router())).to.throw(TypeError);
|
||||||
});
|
});
|
||||||
@ -395,7 +400,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy();
|
const spy = sinon.spy();
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.get((request, respons, next) => {spy();});
|
app.get((request, respons, next) => {spy();});
|
||||||
|
|
||||||
app.httpGet('/', (request, response) => {
|
app.httpGet('/', (request, response) => {
|
||||||
@ -412,7 +417,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy();
|
const spy = sinon.spy();
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.get('/route1', (request, response, next) => {spy();});
|
app.get('/route1', (request, response, next) => {spy();});
|
||||||
|
|
||||||
app.httpGet('/route1', (request, response) => {
|
app.httpGet('/route1', (request, response) => {
|
||||||
@ -430,7 +435,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy(middleware, 'updated');
|
const spy = sinon.spy(middleware, 'updated');
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.get(middleware);
|
app.get(middleware);
|
||||||
|
|
||||||
app.httpGet('/', (request, response) => {
|
app.httpGet('/', (request, response) => {
|
||||||
@ -448,7 +453,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy(middleware, 'updated');
|
const spy = sinon.spy(middleware, 'updated');
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.get(middleware);
|
app.get(middleware);
|
||||||
|
|
||||||
app.httpGet('/route1', (request, response) => {
|
app.httpGet('/route1', (request, response) => {
|
||||||
@ -462,6 +467,24 @@ describe('Application', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('post method', () => {
|
||||||
|
beforeEach(()=>{
|
||||||
|
requester = new Requester();
|
||||||
|
sinon.stub(requester, 'fetch', ({uri, method, headers, data}, resolve, reject) => {
|
||||||
|
resolve(
|
||||||
|
{uri, method, headers, data},
|
||||||
|
{status: 200, statusText: 'OK', responseText:''}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('no arguments', () => {
|
||||||
|
const app = frontexpress();
|
||||||
|
app.set('http requester', requester);
|
||||||
|
assert.throws(app.post, TypeError);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('route method', () => {
|
describe('route method', () => {
|
||||||
beforeEach(()=>{
|
beforeEach(()=>{
|
||||||
requester = new Requester();
|
requester = new Requester();
|
||||||
@ -477,7 +500,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy();
|
const spy = sinon.spy();
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.route().get((request, response, next) => {spy();});
|
app.route().get((request, response, next) => {spy();});
|
||||||
|
|
||||||
app.httpGet('/', (request, response) => {
|
app.httpGet('/', (request, response) => {
|
||||||
@ -494,7 +517,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy();
|
const spy = sinon.spy();
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.route('/').get((request, response, next) => {spy();});
|
app.route('/').get((request, response, next) => {spy();});
|
||||||
|
|
||||||
app.httpGet('/', (request, response) => {
|
app.httpGet('/', (request, response) => {
|
||||||
@ -511,7 +534,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy();
|
const spy = sinon.spy();
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.route('/route1').get((request, response, next) => {spy();});
|
app.route('/route1').get((request, response, next) => {spy();});
|
||||||
|
|
||||||
app.httpGet('/route1', (request, response) => {
|
app.httpGet('/route1', (request, response) => {
|
||||||
@ -528,7 +551,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy();
|
const spy = sinon.spy();
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.route().get('/subroute1', (request, response, next) => {spy();});
|
app.route().get('/subroute1', (request, response, next) => {spy();});
|
||||||
|
|
||||||
app.httpGet('/subroute1', (request, response) => {
|
app.httpGet('/subroute1', (request, response) => {
|
||||||
@ -544,7 +567,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy();
|
const spy = sinon.spy();
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.route('/').get('/subroute1', (request, response, next) => {spy();});
|
app.route('/').get('/subroute1', (request, response, next) => {spy();});
|
||||||
|
|
||||||
app.httpGet('/subroute1', (request, response) => {
|
app.httpGet('/subroute1', (request, response) => {
|
||||||
@ -560,7 +583,7 @@ describe('Application', () => {
|
|||||||
const spy = sinon.spy();
|
const spy = sinon.spy();
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.route('/route1').get('/subroute1', (request, response, next) => {spy();});
|
app.route('/route1').get('/subroute1', (request, response, next) => {spy();});
|
||||||
|
|
||||||
app.httpGet('/route1/subroute1', (request, response) => {
|
app.httpGet('/route1/subroute1', (request, response) => {
|
||||||
@ -586,7 +609,7 @@ describe('Application', () => {
|
|||||||
|
|
||||||
it('http GET request', (done) => {
|
it('http GET request', (done) => {
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
|
|
||||||
const getMiddleware = frontexpress.Middleware('get middleware');
|
const getMiddleware = frontexpress.Middleware('get middleware');
|
||||||
const spy_get_entered = sinon.spy(getMiddleware, 'entered');
|
const spy_get_entered = sinon.spy(getMiddleware, 'entered');
|
||||||
@ -614,7 +637,7 @@ describe('Application', () => {
|
|||||||
|
|
||||||
it('http GET followed by http POST requests', (done) => {
|
it('http GET followed by http POST requests', (done) => {
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
|
|
||||||
const allMiddleware = frontexpress.Middleware('all middleware');
|
const allMiddleware = frontexpress.Middleware('all middleware');
|
||||||
const spy_all_entered = sinon.spy(allMiddleware, 'entered');
|
const spy_all_entered = sinon.spy(allMiddleware, 'entered');
|
||||||
@ -697,7 +720,7 @@ describe('Application', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
|
|
||||||
const getMiddleware = frontexpress.Middleware('get middleware');
|
const getMiddleware = frontexpress.Middleware('get middleware');
|
||||||
const spy_get_failed = sinon.spy(getMiddleware, 'failed');
|
const spy_get_failed = sinon.spy(getMiddleware, 'failed');
|
||||||
@ -716,7 +739,7 @@ describe('Application', () => {
|
|||||||
|
|
||||||
it('next method', (done) => {
|
it('next method', (done) => {
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
|
|
||||||
const m1 = frontexpress.Middleware('m1');
|
const m1 = frontexpress.Middleware('m1');
|
||||||
const m2 = frontexpress.Middleware('m2');
|
const m2 = frontexpress.Middleware('m2');
|
||||||
@ -750,7 +773,7 @@ describe('Application', () => {
|
|||||||
|
|
||||||
it('next method', (done) => {
|
it('next method', (done) => {
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
|
|
||||||
const m1 = (req, res, next) => {next();};
|
const m1 = (req, res, next) => {next();};
|
||||||
const m2 = (req, res, next) => {};
|
const m2 = (req, res, next) => {};
|
||||||
|
31
test/method-transformer-test.js
Normal file
31
test/method-transformer-test.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/*eslint-env mocha*/
|
||||||
|
import {assert} from 'chai';
|
||||||
|
import Settings from '../lib/settings';
|
||||||
|
|
||||||
|
describe('HTTP_METHODS', () => {
|
||||||
|
const settings = new Settings();
|
||||||
|
|
||||||
|
it('GET method simple uri', () => {
|
||||||
|
const uriFn = settings.get('http GET transformer').uri;
|
||||||
|
const dataFn = settings.get('http GET transformer').data;
|
||||||
|
|
||||||
|
assert(uriFn({uri: '/route', data:{a:'b', c:'d'}}) === '/route?a=b&c=d');
|
||||||
|
assert(dataFn({uri: '/route', data:{a:'b', c:'d'}}) === undefined);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('GET method uri with query string', () => {
|
||||||
|
const uriFn = settings.get('http GET transformer').uri;
|
||||||
|
const dataFn = settings.get('http GET transformer').data;
|
||||||
|
|
||||||
|
assert(uriFn({uri: '/route?x=y&z=a', data:{a:'b', c:'d'}}) === '/route?x=y&z=a&a=b&c=d');
|
||||||
|
assert(dataFn({uri: '/route?x=y&z=a', data:{a:'b', c:'d'}}) === undefined);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('GET method uri with query string and anchor', () => {
|
||||||
|
const uriFn = settings.get('http GET transformer').uri;
|
||||||
|
const dataFn = settings.get('http GET transformer').data;
|
||||||
|
|
||||||
|
assert(uriFn({uri: '/route?x=y&z=a#anchor1', data:{a:'b', c:'d'}}) === '/route?x=y&z=a&a=b&c=d#anchor1');
|
||||||
|
assert(dataFn({uri: '/route?x=y&z=a#anchor1', data:{a:'b', c:'d'}}) === undefined);
|
||||||
|
});
|
||||||
|
});
|
@ -50,7 +50,7 @@ describe('Test sample from README', () => {
|
|||||||
const h3 = (req, res, next) => { spy_log('h3!'); next(); };
|
const h3 = (req, res, next) => { spy_log('h3!'); next(); };
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
|
|
||||||
app.get('/example/a', h1);
|
app.get('/example/a', h1);
|
||||||
app.get('/example/a', h2);
|
app.get('/example/a', h2);
|
||||||
@ -77,7 +77,7 @@ describe('Test sample from README', () => {
|
|||||||
const spy_log = sinon.spy();
|
const spy_log = sinon.spy();
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
|
|
||||||
app.route('/book')
|
app.route('/book')
|
||||||
.get((req, res) => { spy_log('Get a random book');})
|
.get((req, res) => { spy_log('Get a random book');})
|
||||||
@ -128,7 +128,7 @@ describe('Test sample from README', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const app = frontexpress();
|
const app = frontexpress();
|
||||||
app.set('http-requester', requester);
|
app.set('http requester', requester);
|
||||||
app.use('/birds', router);
|
app.use('/birds', router);
|
||||||
|
|
||||||
// make an ajax request on /birds
|
// make an ajax request on /birds
|
||||||
|
@ -1,35 +1,8 @@
|
|||||||
/*eslint-env mocha*/
|
/*eslint-env mocha*/
|
||||||
/*global global*/
|
/*global global*/
|
||||||
import {assert} from 'chai';
|
import chai, {assert} from 'chai';
|
||||||
import sinon from 'sinon';
|
import sinon from 'sinon';
|
||||||
import FakeXMLHttpRequest from 'fake-xml-http-request';
|
import Requester from '../lib/requester';
|
||||||
import Requester, {HTTP_METHODS} from '../lib/requester';
|
|
||||||
|
|
||||||
describe('HTTP_METHODS', () => {
|
|
||||||
it('GET method simple uri', () => {
|
|
||||||
const uriFn = HTTP_METHODS['GET'].uri;
|
|
||||||
const dataFn = HTTP_METHODS['GET'].data;
|
|
||||||
|
|
||||||
assert(uriFn({uri: '/route', data:{a:'b', c:'d'}}) === '/route?a=b&c=d');
|
|
||||||
assert(dataFn({uri: '/route', data:{a:'b', c:'d'}}) === undefined);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('GET method uri with query string', () => {
|
|
||||||
const uriFn = HTTP_METHODS['GET'].uri;
|
|
||||||
const dataFn = HTTP_METHODS['GET'].data;
|
|
||||||
|
|
||||||
assert(uriFn({uri: '/route?x=y&z=a', data:{a:'b', c:'d'}}) === '/route?x=y&z=a&a=b&c=d');
|
|
||||||
assert(dataFn({uri: '/route?x=y&z=a', data:{a:'b', c:'d'}}) === undefined);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('GET method uri with query string and anchor', () => {
|
|
||||||
const uriFn = HTTP_METHODS['GET'].uri;
|
|
||||||
const dataFn = HTTP_METHODS['GET'].data;
|
|
||||||
|
|
||||||
assert(uriFn({uri: '/route?x=y&z=a#anchor1', data:{a:'b', c:'d'}}) === '/route?x=y&z=a&a=b&c=d#anchor1');
|
|
||||||
assert(dataFn({uri: '/route?x=y&z=a#anchor1', data:{a:'b', c:'d'}}) === undefined);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Requester', () => {
|
describe('Requester', () => {
|
||||||
function xHttpWillRespond(xhttp, readyState, status, statusText, responseText) {
|
function xHttpWillRespond(xhttp, readyState, status, statusText, responseText) {
|
||||||
@ -51,13 +24,17 @@ describe('Requester', () => {
|
|||||||
function xHttpWillThrow(xhttp, sendErrorName, openErrorName) {
|
function xHttpWillThrow(xhttp, sendErrorName, openErrorName) {
|
||||||
const stub_send = sinon.stub(xhttp, 'send', function() {
|
const stub_send = sinon.stub(xhttp, 'send', function() {
|
||||||
if (sendErrorName) {
|
if (sendErrorName) {
|
||||||
throw {name: sendErrorName};
|
const e = new Error(sendErrorName);
|
||||||
|
e.name = sendErrorName;
|
||||||
|
throw e;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const stub_open = sinon.stub(xhttp, 'open', function() {
|
const stub_open = sinon.stub(xhttp, 'open', function() {
|
||||||
if (openErrorName) {
|
if (openErrorName) {
|
||||||
throw {name: openErrorName};
|
const e = new Error(openErrorName);
|
||||||
|
e.name = openErrorName;
|
||||||
|
throw e;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -67,8 +44,11 @@ describe('Requester', () => {
|
|||||||
let xhttp;
|
let xhttp;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
// Stub XMLHttpRequest
|
xhttp = {
|
||||||
xhttp = new FakeXMLHttpRequest();
|
setRequestHeader(){},
|
||||||
|
open(){},
|
||||||
|
send(){}
|
||||||
|
};
|
||||||
global.XMLHttpRequest = () => {
|
global.XMLHttpRequest = () => {
|
||||||
return xhttp;
|
return xhttp;
|
||||||
};
|
};
|
||||||
@ -79,15 +59,27 @@ describe('Requester', () => {
|
|||||||
it('with data', (done) => {
|
it('with data', (done) => {
|
||||||
const requester = new Requester();
|
const requester = new Requester();
|
||||||
|
|
||||||
const {stub_open, stub_send} = xHttpWillRespond(xhttp, 4, 200, '', '<p>content!</p>');
|
xHttpWillRespond(xhttp, 4, 200, '', '<p>content!</p>');
|
||||||
|
|
||||||
requester.fetch({method: 'GET', uri:'/route1', data:{p1: 'a', p2: 'b', p3: 'c'}},
|
requester.fetch({method: 'GET', uri:'/route1', data:{p1: 'a', p2: 'b', p3: 'c'}},
|
||||||
(request, response) => {
|
(request, response) => {
|
||||||
assert(request.uri === '/route1?p1=a&p2=b&p3=c');
|
assert(request.method === 'GET');
|
||||||
|
assert(request.uri === '/route1');
|
||||||
|
assert(request.data !== undefined);
|
||||||
|
assert(request.data.p1 === 'a');
|
||||||
|
assert(request.data.p2 === 'b');
|
||||||
|
assert(request.data.p3 === 'c');
|
||||||
|
|
||||||
|
assert(response.status === 200);
|
||||||
|
assert(response.statusText === 'OK');
|
||||||
|
assert(response.responseText === '<p>content!</p>');
|
||||||
|
assert(response.errorThrown === undefined);
|
||||||
|
assert(response.errors === undefined);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
},
|
||||||
(err) => {
|
(request, response) => {
|
||||||
done(err);
|
done(response.error);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -101,8 +93,8 @@ describe('Requester', () => {
|
|||||||
assert(stub_send.calledOnce);
|
assert(stub_send.calledOnce);
|
||||||
assert(stub_open.calledBefore(stub_send));
|
assert(stub_open.calledBefore(stub_send));
|
||||||
|
|
||||||
assert(request.uri === '/route1');
|
|
||||||
assert(request.method === 'GET');
|
assert(request.method === 'GET');
|
||||||
|
assert(request.uri === '/route1');
|
||||||
assert(request.data === undefined);
|
assert(request.data === undefined);
|
||||||
|
|
||||||
assert(response.status === 200);
|
assert(response.status === 200);
|
||||||
@ -113,8 +105,8 @@ describe('Requester', () => {
|
|||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
},
|
||||||
(error) => {
|
(request, response) => {
|
||||||
done(error);
|
done(response.error);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -126,7 +118,7 @@ describe('Requester', () => {
|
|||||||
|
|
||||||
const {stub_open, stub_send, stub_setRequestHeader} = xHttpWillRespond(xhttp, 4, 200, '', '<p>content!</p>');
|
const {stub_open, stub_send, stub_setRequestHeader} = xHttpWillRespond(xhttp, 4, 200, '', '<p>content!</p>');
|
||||||
|
|
||||||
requester.fetch({method: 'POST', uri:'/route1', data:{p1: 'a', p2: 'b', p3: 'c'}},
|
requester.fetch({method: 'POST', uri:'/route1', headers:{'head1':'value1'}, data:{p1: 'a', p2: 'b', p3: 'c'}},
|
||||||
(request, response) => {
|
(request, response) => {
|
||||||
assert(stub_open.calledOnce);
|
assert(stub_open.calledOnce);
|
||||||
assert(stub_setRequestHeader.calledOnce);
|
assert(stub_setRequestHeader.calledOnce);
|
||||||
@ -135,13 +127,23 @@ describe('Requester', () => {
|
|||||||
assert(stub_setRequestHeader.calledAfter(stub_open));
|
assert(stub_setRequestHeader.calledAfter(stub_open));
|
||||||
assert(stub_setRequestHeader.calledBefore(stub_send));
|
assert(stub_setRequestHeader.calledBefore(stub_send));
|
||||||
|
|
||||||
|
assert(request.method === 'POST');
|
||||||
assert(request.uri === '/route1');
|
assert(request.uri === '/route1');
|
||||||
assert(request.headers['Content-type'] === 'application/x-www-form-urlencoded');
|
assert(request.data !== undefined);
|
||||||
assert(request.data === 'p1=a&p2=b&p3=c');
|
assert(request.data.p1 === 'a');
|
||||||
|
assert(request.data.p2 === 'b');
|
||||||
|
assert(request.data.p3 === 'c');
|
||||||
|
|
||||||
|
assert(response.status === 200);
|
||||||
|
assert(response.statusText === 'OK');
|
||||||
|
assert(response.responseText === '<p>content!</p>');
|
||||||
|
assert(response.errorThrown === undefined);
|
||||||
|
assert(response.errors === undefined);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
},
|
||||||
(err) => {
|
(request, response) => {
|
||||||
done(err);
|
done(response.error);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -153,19 +155,18 @@ describe('Requester', () => {
|
|||||||
requester.fetch({method: 'POST', uri:'/route1'},
|
requester.fetch({method: 'POST', uri:'/route1'},
|
||||||
(request, response) => {
|
(request, response) => {
|
||||||
assert(stub_open.calledOnce);
|
assert(stub_open.calledOnce);
|
||||||
assert(stub_setRequestHeader.calledOnce);
|
assert(stub_setRequestHeader.callCount === 0);
|
||||||
assert(stub_send.calledOnce);
|
assert(stub_send.calledOnce);
|
||||||
assert(stub_open.calledBefore(stub_send));
|
assert(stub_open.calledBefore(stub_send));
|
||||||
assert(stub_setRequestHeader.calledAfter(stub_open));
|
|
||||||
assert(stub_setRequestHeader.calledBefore(stub_send));
|
|
||||||
|
|
||||||
|
assert(request.method === 'POST');
|
||||||
assert(request.uri === '/route1');
|
assert(request.uri === '/route1');
|
||||||
assert(request.headers['Content-type'] === 'application/x-www-form-urlencoded');
|
|
||||||
assert(request.data === undefined);
|
assert(request.data === undefined);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
},
|
||||||
(err) => {
|
(request, response) => {
|
||||||
done(err);
|
done(response.error);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -177,20 +178,20 @@ describe('Requester', () => {
|
|||||||
requester.fetch({method: 'POST', uri:'/route1', headers: {'Accept-Charset': 'utf-8'}},
|
requester.fetch({method: 'POST', uri:'/route1', headers: {'Accept-Charset': 'utf-8'}},
|
||||||
(request, response) => {
|
(request, response) => {
|
||||||
assert(stub_open.calledOnce);
|
assert(stub_open.calledOnce);
|
||||||
assert(stub_setRequestHeader.calledTwice);
|
assert(stub_setRequestHeader.calledOnce);
|
||||||
assert(stub_send.calledOnce);
|
assert(stub_send.calledOnce);
|
||||||
assert(stub_open.calledBefore(stub_send));
|
assert(stub_open.calledBefore(stub_send));
|
||||||
assert(stub_setRequestHeader.calledAfter(stub_open));
|
assert(stub_setRequestHeader.calledAfter(stub_open));
|
||||||
assert(stub_setRequestHeader.calledBefore(stub_send));
|
assert(stub_setRequestHeader.calledBefore(stub_send));
|
||||||
|
|
||||||
|
assert(request.method === 'POST');
|
||||||
assert(request.uri === '/route1');
|
assert(request.uri === '/route1');
|
||||||
assert(request.headers['Content-type'] === 'application/x-www-form-urlencoded');
|
|
||||||
assert(request.headers['Accept-Charset'] === 'utf-8');
|
assert(request.headers['Accept-Charset'] === 'utf-8');
|
||||||
assert(request.data === undefined);
|
assert(request.data === undefined);
|
||||||
done();
|
done();
|
||||||
},
|
},
|
||||||
(err) => {
|
(request, response) => {
|
||||||
done(err);
|
done(response.error);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -377,24 +378,15 @@ describe('Requester', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('request returns unknown error', (done) => {
|
it('request returns unknown error', () => {
|
||||||
const requester = new Requester();
|
const requester = new Requester();
|
||||||
|
|
||||||
const {stub_open, stub_send} = xHttpWillThrow(xhttp, 'BlaBlaError');
|
const {stub_open, stub_send} = xHttpWillThrow(xhttp, 'BlaBlaError');
|
||||||
|
|
||||||
requester.fetch({method: 'GET', uri:'/route1'}, null,
|
chai.expect(() => {
|
||||||
(request, response) => {
|
requester.fetch({method: 'GET', uri:'/route1'});
|
||||||
assert(stub_send.calledOnce);
|
}).to.throw(/BlaBlaError/);
|
||||||
assert(stub_open.calledOnce);
|
|
||||||
|
|
||||||
assert(response.status === undefined);
|
|
||||||
assert(response.statusText === undefined);
|
|
||||||
assert(response.responseText === undefined);
|
|
||||||
assert(response.errorThrown.name === 'BlaBlaError');
|
|
||||||
assert(response.errors.length !== 0);
|
|
||||||
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
import chai, {assert} from 'chai';
|
import chai, {assert} from 'chai';
|
||||||
import sinon from 'sinon';
|
import sinon from 'sinon';
|
||||||
import frontexpress from '../lib/frontexpress';
|
import frontexpress from '../lib/frontexpress';
|
||||||
import {HTTP_METHODS} from '../lib/requester';
|
import HTTP_METHODS from '../lib/methods';
|
||||||
|
|
||||||
describe('Router', () => {
|
describe('Router', () => {
|
||||||
|
|
||||||
@ -207,7 +207,7 @@ describe('Router', () => {
|
|||||||
const middleware = frontexpress.Middleware();
|
const middleware = frontexpress.Middleware();
|
||||||
|
|
||||||
const spied_methods = [];
|
const spied_methods = [];
|
||||||
for (const method of Object.keys(HTTP_METHODS)) {
|
for (const method of HTTP_METHODS) {
|
||||||
spied_methods.push(sinon.spy(router, method.toLowerCase()));
|
spied_methods.push(sinon.spy(router, method.toLowerCase()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -223,7 +223,7 @@ describe('Router', () => {
|
|||||||
const middleware = frontexpress.Middleware();
|
const middleware = frontexpress.Middleware();
|
||||||
|
|
||||||
const spied_methods = [];
|
const spied_methods = [];
|
||||||
for (const method of Object.keys(HTTP_METHODS)) {
|
for (const method of HTTP_METHODS) {
|
||||||
spied_methods.push(sinon.spy(router, method.toLowerCase()));
|
spied_methods.push(sinon.spy(router, method.toLowerCase()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user