added more unit tests on frontexpress package - did some clean-up

This commit is contained in:
Camel Aissani 2016-07-09 02:58:41 +02:00
parent 401135e124
commit 6bfd3d42e9
7 changed files with 119 additions and 46 deletions

View File

@ -6,7 +6,7 @@ export default class Application {
constructor() {
this.routers = [];
this.requester = new Requester();
this.lastVisited = null;
this.DOMLoading = false;
this.settingsDef = {
'http-requester': (requester) => {this.requester = requester}
@ -73,8 +73,12 @@ export default class Application {
// listen dom events
if (document.readyState === 'loading') {
this.DOMLoading = true;
this._callMiddlewareEntered(currentRoutes, request)
} else if (document.readyState === 'interactive') {
if (!this.DOMLoading) {
this._callMiddlewareEntered(currentRoutes, request);
}
this._callMiddlewareUpdated(currentRoutes, request, response);
if (callback) {
callback(request, response);

View File

@ -2,10 +2,7 @@ import Application from './application';
import Router from './router';
import Middleware from './middleware';
function frontexpress() {
return new Application();
}
const frontexpress = () => new Application();
frontexpress.Router = (baseUri) => new Router(baseUri);
frontexpress.Middleware = (name) => new Middleware(name);

View File

@ -1,5 +1,3 @@
import Application from './application';
export default class Middleware {
constructor(name='') {
this.name = name;

View File

@ -32,14 +32,18 @@ class Route {
}
export default class Router {
constructor(baseUri) {
if (baseUri) {
this._baseUri = baseUri;
constructor(uri) {
if (uri) {
this._baseUri = uri;
}
this._routes = [];
}
set baseUri(uri) {
if (!uri) {
return;
}
if (!this._baseUri) {
this._baseUri = uri;
return;

View File

@ -1,7 +1,6 @@
/*eslint-env mocha*/
import {assert} from 'chai';
import chai, {assert} from 'chai';
import sinon from 'sinon';
import chai from 'chai';
import frontexpress from '../lib/frontexpress';
import Requester from '../lib/requester';
@ -56,7 +55,7 @@ describe('Application', () => {
it('with middleware object readyState===loading', (done) => {
const app = frontexpress();
const m = new frontexpress.Middleware();
const m = frontexpress.Middleware();
sinon.stub(m, 'entered', () => {
done();
});
@ -71,7 +70,7 @@ describe('Application', () => {
it('with middleware object readyState===interactive', (done) => {
const app = frontexpress();
const m = new frontexpress.Middleware();
const m = frontexpress.Middleware();
sinon.stub(m, 'updated', () => {
done();
});
@ -86,7 +85,7 @@ describe('Application', () => {
it('with middleware object event beforeunload', (done) => {
const app = frontexpress();
const m = new frontexpress.Middleware();
const m = frontexpress.Middleware();
sinon.stub(m, 'exited', () => {
done();
});
@ -209,7 +208,7 @@ describe('Application', () => {
});
it('middleware as object on path /', (done) => {
const middleware = new frontexpress.Middleware('on path /');
const middleware = frontexpress.Middleware('on path /');
const spy = sinon.spy(middleware, 'updated');
const app = frontexpress();
@ -227,7 +226,7 @@ describe('Application', () => {
});
it('middleware as object on path /route1', (done) => {
const middleware = new frontexpress.Middleware('on path /route1');
const middleware = frontexpress.Middleware('on path /route1');
const spy = sinon.spy(middleware, 'updated');
const app = frontexpress();
@ -253,7 +252,7 @@ describe('Application', () => {
);
});
const middleware = new frontexpress.Middleware('on path /');
const middleware = frontexpress.Middleware('on path /');
const spy = sinon.spy(middleware, 'failed');
const app = frontexpress();
@ -310,7 +309,7 @@ describe('Application', () => {
});
it('router with base uri', (done)=> {
const middleware = new frontexpress.Middleware('get middleware');
const middleware = frontexpress.Middleware('get middleware');
const spy = sinon.spy(middleware, 'updated');
const app = frontexpress();
@ -329,6 +328,43 @@ describe('Application', () => {
done(response);
});
});
it('use two routers', (done)=> {
const router1 = frontexpress.Router();
const m1 = frontexpress.Middleware();
const spy1 = sinon.spy(m1, 'updated');
router1.get('/subroute1', m1);
const router2 = frontexpress.Router();
const m2 = frontexpress.Middleware();
const spy2 = sinon.spy(m2, 'updated');
router2.get('/subroute2', m2);
assert(router1 !== router2);
const app = frontexpress();
app.set('http-requester', requester);
app.use(/^\/route1/, router1);
app.use(/^\/route2/, router2);
app.httpGet('/route1/subroute1',
(request, response) => {
assert(spy1.calledOnce);
app.httpGet('/route2/subroute2', (request, response) => {
assert(spy2.calledOnce);
done();
},
(request, response) => {
done(response);
});
},
(request, response) => {
done(response);
});
});
});
describe('get method', () => {
@ -391,7 +427,7 @@ describe('Application', () => {
});
it('middleware as object on path /', (done) => {
const middleware = new frontexpress.Middleware('on path /');
const middleware = frontexpress.Middleware('on path /');
const spy = sinon.spy(middleware, 'updated');
const app = frontexpress();
@ -409,7 +445,7 @@ describe('Application', () => {
});
it('middleware as object on path /route1', (done) => {
const middleware = new frontexpress.Middleware('on path /route1');
const middleware = frontexpress.Middleware('on path /route1');
const spy = sinon.spy(middleware, 'updated');
const app = frontexpress();
@ -553,7 +589,7 @@ describe('Application', () => {
const app = frontexpress();
app.set('http-requester', requester);
const getMiddleware = new frontexpress.Middleware('get middleware');
const getMiddleware = frontexpress.Middleware('get middleware');
const spy_get_entered = sinon.spy(getMiddleware, 'entered');
const spy_get_updated = sinon.spy(getMiddleware, 'updated');
const spy_get_exited = sinon.spy(getMiddleware, 'exited');
@ -581,17 +617,17 @@ describe('Application', () => {
const app = frontexpress();
app.set('http-requester', requester);
const allMiddleware = new frontexpress.Middleware('all middleware');
const allMiddleware = frontexpress.Middleware('all middleware');
const spy_all_entered = sinon.spy(allMiddleware, 'entered');
const spy_all_updated = sinon.spy(allMiddleware, 'updated');
const spy_all_exited = sinon.spy(allMiddleware, 'exited');
const getMiddleware = new frontexpress.Middleware('get middleware');
const getMiddleware = frontexpress.Middleware('get middleware');
const spy_get_entered = sinon.spy(getMiddleware, 'entered');
const spy_get_updated = sinon.spy(getMiddleware, 'updated');
const spy_get_exited = sinon.spy(getMiddleware, 'exited');
const postMiddleware = new frontexpress.Middleware('post middleware');
const postMiddleware = frontexpress.Middleware('post middleware');
const spy_post_entered = sinon.spy(postMiddleware, 'entered');
const spy_post_updated = sinon.spy(postMiddleware, 'updated');
const spy_post_exited = sinon.spy(postMiddleware, 'exited');
@ -664,7 +700,7 @@ describe('Application', () => {
const app = frontexpress();
app.set('http-requester', requester);
const getMiddleware = new frontexpress.Middleware('get middleware');
const getMiddleware = frontexpress.Middleware('get middleware');
const spy_get_failed = sinon.spy(getMiddleware, 'failed');
@ -683,10 +719,10 @@ describe('Application', () => {
const app = frontexpress();
app.set('http-requester', requester);
const m1 = new frontexpress.Middleware('m1');
const m2 = new frontexpress.Middleware('m2');
const m1 = frontexpress.Middleware('m1');
const m2 = frontexpress.Middleware('m2');
m2.next = () => false;
const m3 = new frontexpress.Middleware('m3');
const m3 = frontexpress.Middleware('m3');
const spy_m1 = sinon.spy(m1, 'updated');
const spy_m2 = sinon.spy(m2, 'updated');

35
test/frontexpress-test.js Normal file
View File

@ -0,0 +1,35 @@
import {assert} from 'chai';
import sinon from 'sinon';
import frontexpress from '../lib/frontexpress';
import Application from '../lib/application';
import Router from '../lib/router';
import Middleware from '../lib/middleware';
describe('frontexpress', () => {
it('test Router class exposed', () => {
assert(frontexpress.Router);
assert(frontexpress.Router() instanceof Router);
const router1 = frontexpress.Router();
const router2 = frontexpress.Router();
assert(router1 !== router2);
});
it('test Middleware class exposed', () => {
assert(frontexpress.Middleware);
assert(frontexpress.Middleware() instanceof Middleware);
const m1 = frontexpress.Middleware();
const m2 = frontexpress.Middleware();
assert(m1 !== m2);
});
it('test Application class exposed', () => {
assert(frontexpress);
assert(frontexpress() instanceof Application);
const app1 = frontexpress();
const app2 = frontexpress();
assert(app1 !== app2);
});
});

View File

@ -1,7 +1,6 @@
/*eslint-env mocha*/
import {assert} from 'chai';
import chai, {assert} from 'chai';
import sinon from 'sinon';
import chai from 'chai';
import frontexpress from '../lib/frontexpress';
import {HTTP_METHODS} from '../lib/requester';
@ -94,7 +93,7 @@ describe('Router', () => {
it('no root path and regexp uri', ()=> {
const router = frontexpress.Router();
const middleware = new frontexpress.Middleware();
const middleware = frontexpress.Middleware();
router.get(/^\/route1/, middleware);
@ -109,7 +108,7 @@ describe('Router', () => {
it('with root path /route1 and path /subroute', () => {
const router = frontexpress.Router('/route1');
router.get('/subroute', new frontexpress.Middleware());
router.get('/subroute', frontexpress.Middleware());
const r = router.routes('/route1/subroute', 'GET');
assert(r.length === 1);
@ -119,7 +118,7 @@ describe('Router', () => {
it('with root path /route1 and no path uri', () => {
const router = frontexpress.Router('/route1');
router.get(new frontexpress.Middleware());
router.get(frontexpress.Middleware());
const r = router.routes('/route1', 'GET');
assert(r.length === 1);
@ -129,7 +128,7 @@ describe('Router', () => {
it('duplicate / in route', () => {
const router = frontexpress.Router('/route1/');
router.get('/subroute', new frontexpress.Middleware());
router.get('/subroute', frontexpress.Middleware());
const r = router.routes('/route1/subroute', 'GET');
assert(r.length === 1);
@ -139,7 +138,7 @@ describe('Router', () => {
it('spaces in route', () => {
let router = frontexpress.Router(' /route1 ');
router.get('/subroute ', new frontexpress.Middleware());
router.get('/subroute ', frontexpress.Middleware());
let r = router.routes('/route1/subroute', 'GET');
assert(r.length === 1);
@ -149,7 +148,7 @@ describe('Router', () => {
router = frontexpress.Router(' /route1 ');
router.get(new frontexpress.Middleware());
router.get(frontexpress.Middleware());
r = router.routes('/route1', 'GET');
assert(r.length === 1);
@ -159,7 +158,7 @@ describe('Router', () => {
it('route with query string', () => {
let router = frontexpress.Router('/route1 ');
router.get('/subroute', new frontexpress.Middleware());
router.get('/subroute', frontexpress.Middleware());
let r = router.routes('/route1/subroute?a=b&c=d', 'GET');
assert(r.length === 1);
@ -170,7 +169,7 @@ describe('Router', () => {
it('route with anchor', () => {
let router = frontexpress.Router('/route1 ');
router.get('/subroute', new frontexpress.Middleware());
router.get('/subroute', frontexpress.Middleware());
let r = router.routes('/route1/subroute#a=b&c=d', 'GET');
assert(r.length === 1);
@ -181,7 +180,7 @@ describe('Router', () => {
it('route with query string and anchor', () => {
let router = frontexpress.Router('/route1 ');
router.get('/subroute', new frontexpress.Middleware());
router.get('/subroute', frontexpress.Middleware());
let r = router.routes('/route1/subroute?a=b&c=d#anchor1', 'GET');
assert(r.length === 1);
@ -205,7 +204,7 @@ describe('Router', () => {
it('only middleware as argument', () => {
const router = frontexpress.Router('/route1');
const middleware = new frontexpress.Middleware();
const middleware = frontexpress.Middleware();
const spied_methods = [];
for (const method of Object.keys(HTTP_METHODS)) {
@ -221,7 +220,7 @@ describe('Router', () => {
it('with path /route1 and middleware as arguments', () => {
const router = frontexpress.Router();
const middleware = new frontexpress.Middleware();
const middleware = frontexpress.Middleware();
const spied_methods = [];
for (const method of Object.keys(HTTP_METHODS)) {
@ -251,7 +250,7 @@ describe('Router', () => {
it('only middleware as argument', () => {
const router = frontexpress.Router('/');
const middleware = new frontexpress.Middleware();
const middleware = frontexpress.Middleware();
router.get(middleware);
@ -264,7 +263,7 @@ describe('Router', () => {
it('with path /route1 and middleware as arguments', () => {
const router = frontexpress.Router();
const middleware = new frontexpress.Middleware();
const middleware = frontexpress.Middleware();
router.get('/route1', middleware);
@ -277,13 +276,13 @@ describe('Router', () => {
it('router with regexp and route with /route1', () => {
const router = frontexpress.Router(/^\//);
const middleware = new frontexpress.Middleware();
const middleware = frontexpress.Middleware();
chai.expect(() => router.get('/route1', middleware)).to.throw(TypeError);
});
it('router with regexp and route without uri', () => {
const router = frontexpress.Router(/^\/part/);
const middleware = new frontexpress.Middleware();
const middleware = frontexpress.Middleware();
router.get(middleware);
const r = router.routes('/part1', 'GET');