From 6bfd3d42e90fc9f6ef0ad7fe315323124b9e79c8 Mon Sep 17 00:00:00 2001 From: Camel Aissani Date: Sat, 9 Jul 2016 02:58:41 +0200 Subject: [PATCH] added more unit tests on frontexpress package - did some clean-up --- lib/application.js | 6 +++- lib/frontexpress.js | 5 +-- lib/middleware.js | 2 -- lib/router.js | 10 ++++-- test/application-test.js | 74 +++++++++++++++++++++++++++++---------- test/frontexpress-test.js | 35 ++++++++++++++++++ test/router-test.js | 33 +++++++++-------- 7 files changed, 119 insertions(+), 46 deletions(-) create mode 100644 test/frontexpress-test.js diff --git a/lib/application.js b/lib/application.js index ab62a80..c232c19 100755 --- a/lib/application.js +++ b/lib/application.js @@ -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); diff --git a/lib/frontexpress.js b/lib/frontexpress.js index b2c88a4..ceb3a77 100755 --- a/lib/frontexpress.js +++ b/lib/frontexpress.js @@ -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); diff --git a/lib/middleware.js b/lib/middleware.js index e52d34f..1792827 100755 --- a/lib/middleware.js +++ b/lib/middleware.js @@ -1,5 +1,3 @@ -import Application from './application'; - export default class Middleware { constructor(name='') { this.name = name; diff --git a/lib/router.js b/lib/router.js index cb1c300..c2f0269 100755 --- a/lib/router.js +++ b/lib/router.js @@ -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; diff --git a/test/application-test.js b/test/application-test.js index 22b1c2f..e0b2222 100755 --- a/test/application-test.js +++ b/test/application-test.js @@ -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'); diff --git a/test/frontexpress-test.js b/test/frontexpress-test.js new file mode 100644 index 0000000..a67d734 --- /dev/null +++ b/test/frontexpress-test.js @@ -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); + }); +}); \ No newline at end of file diff --git a/test/router-test.js b/test/router-test.js index b42606b..83290bb 100755 --- a/test/router-test.js +++ b/test/router-test.js @@ -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');