mirror of
https://gitlab.silvrtree.co.uk/martind2000/frontexpress.git
synced 2025-02-10 17:49:16 +00:00
added more unit tests on frontexpress package - did some clean-up
This commit is contained in:
parent
401135e124
commit
6bfd3d42e9
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -1,5 +1,3 @@
|
||||
import Application from './application';
|
||||
|
||||
export default class Middleware {
|
||||
constructor(name='') {
|
||||
this.name = name;
|
||||
|
@ -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;
|
||||
|
@ -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
35
test/frontexpress-test.js
Normal 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);
|
||||
});
|
||||
});
|
@ -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');
|
||||
|
Loading…
Reference in New Issue
Block a user