update dependencies
This commit is contained in:
parent
01ce8bc396
commit
b539c4d53d
4
Makefile
4
Makefile
|
@ -7,7 +7,7 @@ CLEANCSS = ./node_modules/.bin/cleancss
|
||||||
MOCHA = ./node_modules/.bin/mocha
|
MOCHA = ./node_modules/.bin/mocha
|
||||||
BIN = ./bin/burnchart.js
|
BIN = ./bin/burnchart.js
|
||||||
|
|
||||||
MOCHA-OPTS = --compilers js:babel-register --ui exports --timeout 5000 --bail
|
MOCHA-OPTS = --require babel-register --ui exports --timeout 5000 --bail
|
||||||
|
|
||||||
start:
|
start:
|
||||||
${BIN}
|
${BIN}
|
||||||
|
@ -28,7 +28,7 @@ build-js:
|
||||||
${BROWSERIFY} -e -s burnchart ./src/js/index.jsx -t babelify > public/js/bundle.js
|
${BROWSERIFY} -e -s burnchart ./src/js/index.jsx -t babelify > public/js/bundle.js
|
||||||
|
|
||||||
build-css:
|
build-css:
|
||||||
${LESS} src/less/burnchart.less > public/css/bundle.css
|
${LESS} --js src/less/burnchart.less > public/css/bundle.css
|
||||||
|
|
||||||
build: build-js build-css
|
build: build-js build-css
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
86
package.json
86
package.json
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "burnchart",
|
"name": "burnchart",
|
||||||
"version": "3.2.4",
|
"version": "3.3.0",
|
||||||
"description": "GitHub Burndown Chart as a Service",
|
"description": "GitHub Burndown Chart as a Service",
|
||||||
"author": "Radek Stepan <dev@radekstepan.com> (http://radekstepan.com)",
|
"author": "Radek Stepan <dev@radekstepan.com> (http://radekstepan.com)",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
|
@ -11,51 +11,55 @@
|
||||||
"start": "make start",
|
"start": "make start",
|
||||||
"test": "make test"
|
"test": "make test"
|
||||||
},
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "~8.11.0",
|
||||||
|
"npm": "~5.8.0"
|
||||||
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"argparse": "^1.0.4",
|
"argparse": "1.0.10",
|
||||||
"colors": "^1.1.2",
|
"colors": "1.2.1",
|
||||||
"node-static": "^0.7.7"
|
"node-static": "0.7.10"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"async": "^1.5.2",
|
"async": "2.6.0",
|
||||||
"babel": "^6.3.26",
|
"babel": "6.23.0",
|
||||||
"babel-preset-es2015": "^6.3.13",
|
"babel-preset-es2015": "6.24.1",
|
||||||
"babel-preset-react": "^6.3.13",
|
"babel-preset-react": "6.24.1",
|
||||||
"babel-preset-stage-0": "^6.5.0",
|
"babel-preset-stage-0": "6.24.1",
|
||||||
"babel-register": "^6.4.3",
|
"babel-register": "6.26.0",
|
||||||
"babelify": "^7.2.0",
|
"babelify": "8.0.0",
|
||||||
"browserify": "^13.0.0",
|
"browserify": "13.0.0",
|
||||||
"chai": "^3.4.1",
|
"chai": "4.1.2",
|
||||||
"classnames": "^2.2.3",
|
"classnames": "2.2.5",
|
||||||
"clean-css": "^3.4.9",
|
"clean-css": "3.4.9",
|
||||||
"d3": "^3.5.12",
|
"d3": "3.5.12",
|
||||||
"d3-tip": "^0.6.7",
|
"d3-tip": "0.6.7",
|
||||||
"deep-diff": "^0.3.3",
|
"deep-diff": "1.0.0",
|
||||||
"firebase": "^3.4.1",
|
"firebase": "3.4.1",
|
||||||
"less": "^2.5.3",
|
"less": "3.0.1",
|
||||||
"lesshat": "^3.0.2",
|
"lesshat": "4.1.0",
|
||||||
"lodash": "^3.10.1",
|
"lodash": "4.17.5",
|
||||||
"lscache": "^1.0.5",
|
"lscache": "1.0.5",
|
||||||
"marked": "^0.3.5",
|
"marked": "0.3.19",
|
||||||
"mocha": "^2.3.4",
|
"mocha": "5.1.1",
|
||||||
"moment": "^2.11.1",
|
"moment": "2.22.1",
|
||||||
"normalize.less": "^1.0.0",
|
"normalize.less": "1.0.0",
|
||||||
"object-assign": "^4.0.1",
|
"object-assign": "4.1.1",
|
||||||
"object-path": "^0.9.2",
|
"object-path": "0.11.4",
|
||||||
"proxyquire": "^1.7.3",
|
"proxyquire": "2.0.1",
|
||||||
"qs": "^6.2.0",
|
"qs": "6.5.1",
|
||||||
"react": "^0.14.6",
|
"react": "0.14.7",
|
||||||
"react-addons-css-transition-group": "^0.14.6",
|
"react-addons-css-transition-group": "0.14.6",
|
||||||
"react-autosuggest": "^3.3.5",
|
"react-autosuggest": "3.3.5",
|
||||||
"react-dom": "^0.14.7",
|
"react-dom": "0.14.7",
|
||||||
"react-mini-router": "^2.0.0",
|
"react-mini-router": "2.0.0",
|
||||||
"semver": "^5.1.0",
|
"semver": "5.5.0",
|
||||||
"sortedindex-compare": "0.0.1",
|
"sortedindex-compare": "0.0.1",
|
||||||
"superagent": "^1.6.1",
|
"superagent": "3.8.2",
|
||||||
"uglify-js": "^2.6.1",
|
"uglify-js": "3.3.22",
|
||||||
"watch": "^0.17.1",
|
"watch": "1.0.2",
|
||||||
"watch-less": "0.0.4",
|
"watch-less": "0.0.4",
|
||||||
"watchify": "^3.7.0"
|
"watchify": "3.11.0"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|
|
@ -398,7 +398,9 @@ lesshat-selector {
|
||||||
@-webkit-keyframes spin{ from { -webkit-transform: rotate(0deg); } to { -webkit-transform: rotate(360deg); }}
|
@-webkit-keyframes spin{ from { -webkit-transform: rotate(0deg); } to { -webkit-transform: rotate(360deg); }}
|
||||||
@-moz-keyframes spin{ from { -moz-transform: rotate(0deg); } to { -moz-transform: rotate(360deg); }}
|
@-moz-keyframes spin{ from { -moz-transform: rotate(0deg); } to { -moz-transform: rotate(360deg); }}
|
||||||
@-o-keyframes spin{ from { -o-transform: rotate(0deg); } to { -o-transform: rotate(360deg); }}
|
@-o-keyframes spin{ from { -o-transform: rotate(0deg); } to { -o-transform: rotate(360deg); }}
|
||||||
@keyframes spin{ from {-webkit-transform: rotate(0deg);-moz-transform: rotate(0deg);-ms-transform: rotate(0deg);transform: rotate(0deg); } to {-webkit-transform: rotate(360deg);-moz-transform: rotate(360deg);-ms-transform: rotate(360deg);transform: rotate(360deg); };
|
@keyframes spin{ from {-webkit-transform: rotate(0deg);-moz-transform: rotate(0deg);-ms-transform: rotate(0deg);transform: rotate(0deg); } to {-webkit-transform: rotate(360deg);-moz-transform: rotate(360deg);-ms-transform: rotate(360deg);transform: rotate(360deg); }}
|
||||||
|
[not-existing] {
|
||||||
|
zoom: 1;
|
||||||
}
|
}
|
||||||
#chart {
|
#chart {
|
||||||
height: 300px;
|
height: 300px;
|
||||||
|
@ -590,8 +592,8 @@ ul li {
|
||||||
width: 500px;
|
width: 500px;
|
||||||
-webkit-transform: translateX(-50%) translateY(-50%);
|
-webkit-transform: translateX(-50%) translateY(-50%);
|
||||||
-moz-transform: translateX(-50%) translateY(-50%);
|
-moz-transform: translateX(-50%) translateY(-50%);
|
||||||
-o-transform: translateX(-50%) translateY(-50%);
|
|
||||||
-ms-transform: translateX(-50%) translateY(-50%);
|
-ms-transform: translateX(-50%) translateY(-50%);
|
||||||
|
-o-transform: translateX(-50%) translateY(-50%);
|
||||||
transform: translateX(-50%) translateY(-50%);
|
transform: translateX(-50%) translateY(-50%);
|
||||||
}
|
}
|
||||||
#notify.system p {
|
#notify.system p {
|
||||||
|
|
File diff suppressed because one or more lines are too long
33343
public/js/bundle.js
33343
public/js/bundle.js
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -33,7 +33,7 @@ let find = ({ to, params, query }) => {
|
||||||
let re = /:[^\/]+/g;
|
let re = /:[^\/]+/g;
|
||||||
|
|
||||||
// Skip empty objects.
|
// Skip empty objects.
|
||||||
[ params, query ] = [ _.isObject(params) ? params : {}, query ].map(o => _.pick(o, _.identity));
|
[ params, query ] = [ _.isObject(params) ? params : {}, query ].map(o => _.pick(o, _.keys(o)));
|
||||||
|
|
||||||
// Find among the routes.
|
// Find among the routes.
|
||||||
_.find(routes, (name, url) => {
|
_.find(routes, (name, url) => {
|
||||||
|
|
|
@ -154,7 +154,9 @@ export default class Chart extends React.Component {
|
||||||
.attr("cx", ({ date }) => x(new Date(date)))
|
.attr("cx", ({ date }) => x(new Date(date)))
|
||||||
.attr("cy", ({ points }) => y(points))
|
.attr("cy", ({ points }) => y(points))
|
||||||
.attr("r", ({ radius }) => 5)
|
.attr("r", ({ radius }) => 5)
|
||||||
.on('mouseover', tooltip.show)
|
.on('mouseover', function(d, i) {
|
||||||
|
tooltip.show(d, this);
|
||||||
|
})
|
||||||
.on('mouseout', tooltip.hide);
|
.on('mouseout', tooltip.hide);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ export default class Footer extends React.Component {
|
||||||
return (
|
return (
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div className="wrap">
|
<div className="wrap">
|
||||||
© 2012-2016 <a href="https:/radekstepan.com" target="_blank">Radek Stepan</a>
|
© 2012-2018 <a href="https:/radekstepan.com" target="_blank">Radek Stepan</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -33,13 +33,14 @@ export default class MilestonePage extends Page {
|
||||||
'open': { 'list': [], 'size': 0 }
|
'open': { 'list': [], 'size': 0 }
|
||||||
};
|
};
|
||||||
// Merge all the milestone issues together.
|
// Merge all the milestone issues together.
|
||||||
_(obj.milestones).filter((m) => !m.stats.isEmpty).each((m) => {
|
_(obj.milestones).filter((m) => !m.stats.isEmpty).map(m => {
|
||||||
if (m.created_at < created_at) created_at = m.created_at;
|
if (m.created_at < created_at) created_at = m.created_at;
|
||||||
if (m.due_on > due_on) due_on = m.due_on;
|
if (m.due_on > due_on) due_on = m.due_on;
|
||||||
_.each([ 'closed', 'open' ], (k) => {
|
_.each([ 'closed', 'open' ], (k) => {
|
||||||
issues[k].list = issues[k].list.concat(m.issues[k].list);
|
issues[k].list = issues[k].list.concat(m.issues[k].list);
|
||||||
issues[k].size += m.issues[k].size;
|
issues[k].size += m.issues[k].size;
|
||||||
});
|
});
|
||||||
|
return m;
|
||||||
}).value();
|
}).value();
|
||||||
|
|
||||||
issues.closed.list = _.sortBy(issues.closed.list, 'closed_at');
|
issues.closed.list = _.sortBy(issues.closed.list, 'closed_at');
|
||||||
|
|
|
@ -89,7 +89,7 @@ class ProjectsStore extends Store {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// For all projects.
|
// For all projects.
|
||||||
_.each(projects, _.partial(this.getProject, user), this);
|
_.each(projects, project => this.getProject(user, project));
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
@import "node_modules/normalize.less/normalize.less";
|
@import "node_modules/normalize.less/normalize.less";
|
||||||
|
|
||||||
// LESS Mixins.
|
// LESS Mixins.
|
||||||
@import "node_modules/lesshat/build/lesshat.less";
|
@import "node_modules/lesshat/lesshat.less";
|
||||||
|
|
||||||
// Now our app.
|
// Now our app.
|
||||||
@import "fonts.less";
|
@import "fonts.less";
|
||||||
|
|
|
@ -2,91 +2,89 @@ import { assert } from 'chai';
|
||||||
|
|
||||||
import EventEmitter from '../src/js/lib/EventEmitter.js';
|
import EventEmitter from '../src/js/lib/EventEmitter.js';
|
||||||
|
|
||||||
export default {
|
describe('EventEmitter', () => {
|
||||||
EventEmitter: {
|
it('on', done => {
|
||||||
on(done) {
|
let m = new EventEmitter();
|
||||||
let m = new EventEmitter();
|
|
||||||
|
|
||||||
let i = 0;
|
let i = 0;
|
||||||
|
|
||||||
// Plain string.
|
// Plain string.
|
||||||
m.on('A', (o, e) => {
|
m.on('A', (o, e) => {
|
||||||
assert.equal(1, o);
|
assert.equal(1, o);
|
||||||
assert.equal('A', e);
|
assert.equal('A', e);
|
||||||
i += o;
|
i += o;
|
||||||
});
|
});
|
||||||
m.emit('A', 1);
|
m.emit('A', 1);
|
||||||
|
|
||||||
// Namespaced path.
|
// Namespaced path.
|
||||||
m.on(/^A\./, (o, e) => {
|
m.on(/^A\./, (o, e) => {
|
||||||
assert.equal(2, o);
|
assert.equal(2, o);
|
||||||
assert(/^A\.B/.test(e));
|
assert(/^A\.B/.test(e));
|
||||||
i += o;
|
i += o;
|
||||||
});
|
});
|
||||||
m.emit('A.B', 2);
|
m.emit('A.B', 2);
|
||||||
m.emit('A.B.C', 2);
|
m.emit('A.B.C', 2);
|
||||||
|
|
||||||
m.emit('C.A.B', 3); // should not register
|
m.emit('C.A.B', 3); // should not register
|
||||||
|
|
||||||
assert.equal(5, i);
|
assert.equal(5, i);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
onAny(done) {
|
it('onAny', done => {
|
||||||
let m = new EventEmitter();
|
let m = new EventEmitter();
|
||||||
|
|
||||||
let i = 0;
|
let i = 0;
|
||||||
|
|
||||||
m.onAny((o, e) => i += o);
|
m.onAny((o, e) => i += o);
|
||||||
|
|
||||||
m.emit('A', 1);
|
m.emit('A', 1);
|
||||||
m.emit('A.B', 2);
|
m.emit('A.B', 2);
|
||||||
m.emit('', 3); // should not register
|
m.emit('', 3); // should not register
|
||||||
|
|
||||||
assert.equal(3, i);
|
assert.equal(3, i);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
off(done) {
|
it('off', done => {
|
||||||
let m = new EventEmitter();
|
let m = new EventEmitter();
|
||||||
|
|
||||||
let map = { A: 0, B: 0 };
|
let map = { A: 0, B: 0 };
|
||||||
|
|
||||||
let cb = (o, e) => map[e] += 1;
|
let cb = (o, e) => map[e] += 1;
|
||||||
|
|
||||||
m.on('A', cb);
|
m.on('A', cb);
|
||||||
m.on('B', cb);
|
m.on('B', cb);
|
||||||
|
|
||||||
m.emit('A');
|
m.emit('A');
|
||||||
m.off('A', cb);
|
m.off('A', cb);
|
||||||
m.emit('A');
|
m.emit('A');
|
||||||
m.emit('B');
|
m.emit('B');
|
||||||
|
|
||||||
assert.deepEqual({ A: 1, B: 1 }, map);
|
assert.deepEqual({ A: 1, B: 1 }, map);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
offAny(done) {
|
it('offAny', done => {
|
||||||
let m = new EventEmitter();
|
let m = new EventEmitter();
|
||||||
|
|
||||||
let map = { A: 0, B: 0 };
|
let map = { A: 0, B: 0 };
|
||||||
|
|
||||||
let cb = (o, e) => map[e] += 1;
|
let cb = (o, e) => map[e] += 1;
|
||||||
|
|
||||||
m.on('A', cb);
|
m.on('A', cb);
|
||||||
m.on('B', cb);
|
m.on('B', cb);
|
||||||
|
|
||||||
m.emit('A');
|
m.emit('A');
|
||||||
m.offAny(cb);
|
m.offAny(cb);
|
||||||
m.emit('A');
|
m.emit('A');
|
||||||
m.emit('B');
|
m.emit('B');
|
||||||
|
|
||||||
assert.deepEqual({ A: 1, B: 0 }, map);
|
assert.deepEqual({ A: 1, B: 0 }, map);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
}
|
});
|
||||||
}
|
});
|
||||||
};
|
|
||||||
|
|
|
@ -3,8 +3,8 @@ import { assert } from 'chai';
|
||||||
import Store from '../src/js/lib/Store.js';
|
import Store from '../src/js/lib/Store.js';
|
||||||
import actions from '../src/js/actions/appActions.js';
|
import actions from '../src/js/actions/appActions.js';
|
||||||
|
|
||||||
export default {
|
describe('Store', () => {
|
||||||
'store - set': (done) => {
|
it('set', done => {
|
||||||
let s = new Store();
|
let s = new Store();
|
||||||
|
|
||||||
s.set('A.B', 1); // key as a string
|
s.set('A.B', 1); // key as a string
|
||||||
|
@ -13,9 +13,9 @@ export default {
|
||||||
assert.deepEqual({ A: { B: 1, C: 2 }}, s.get());
|
assert.deepEqual({ A: { B: 1, C: 2 }}, s.get());
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'store - push': (done) => {
|
it('push', done => {
|
||||||
let s = new Store({ 'list': [ 'A' ] });
|
let s = new Store({ 'list': [ 'A' ] });
|
||||||
|
|
||||||
s.push('list', 'B'); // key as a string
|
s.push('list', 'B'); // key as a string
|
||||||
|
@ -24,9 +24,9 @@ export default {
|
||||||
assert.deepEqual({ 'list': [ 'A', 'B', 'C' ] }, s.get());
|
assert.deepEqual({ 'list': [ 'A', 'B', 'C' ] }, s.get());
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'store - push with init': (done) => {
|
it('push with init', done => {
|
||||||
let s = new Store();
|
let s = new Store();
|
||||||
|
|
||||||
s.push('list', 'A');
|
s.push('list', 'A');
|
||||||
|
@ -34,18 +34,18 @@ export default {
|
||||||
assert.deepEqual({ 'list': [ 'A' ] }, s.get());
|
assert.deepEqual({ 'list': [ 'A' ] }, s.get());
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'store - get': (done) => {
|
it('get', done => {
|
||||||
let s = new Store({ 'A': [ 1, 2 ], 'B': { 'C': 3 } });
|
let s = new Store({ 'A': [ 1, 2 ], 'B': { 'C': 3 } });
|
||||||
|
|
||||||
assert.equal(2, s.get('A.1')); // key as a string
|
assert.equal(2, s.get('A.1')); // key as a string
|
||||||
assert.equal(3, s.get([ 'B', 'C' ])); // key as an array
|
assert.equal(3, s.get([ 'B', 'C' ])); // key as an array
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'store - get with callback': (done) => {
|
it('get with callback', done => {
|
||||||
let s = new Store({ 'A': 1 });
|
let s = new Store({ 'A': 1 });
|
||||||
|
|
||||||
let vals = [];
|
let vals = [];
|
||||||
|
@ -58,9 +58,9 @@ export default {
|
||||||
assert.deepEqual([ 1, 2 ], vals);
|
assert.deepEqual([ 1, 2 ], vals);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'store - setSilent': (done) => {
|
it('setSilent', done => {
|
||||||
let s = new Store();
|
let s = new Store();
|
||||||
|
|
||||||
let val;
|
let val;
|
||||||
|
@ -74,9 +74,9 @@ export default {
|
||||||
assert.equal(1, val);
|
assert.equal(1, val);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'store - assign': (done) => {
|
it('assign', done => {
|
||||||
let s = new Store({ A: 1 });
|
let s = new Store({ A: 1 });
|
||||||
|
|
||||||
s.set({ B: 1 });
|
s.set({ B: 1 });
|
||||||
|
@ -84,9 +84,9 @@ export default {
|
||||||
assert.deepEqual({ A: 1, B: 1 }, s.get());
|
assert.deepEqual({ A: 1, B: 1 }, s.get());
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'store - changes': (done) => {
|
it('changes', done => {
|
||||||
let s = new Store({ A: { B: { C: 1 } } });
|
let s = new Store({ A: { B: { C: 1 } } });
|
||||||
|
|
||||||
let key;
|
let key;
|
||||||
|
@ -98,9 +98,9 @@ export default {
|
||||||
assert.equal('A.B.C', key);
|
assert.equal('A.B.C', key);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'store - cb called': (done) => {
|
it('cb called', done => {
|
||||||
let s = new Store();
|
let s = new Store();
|
||||||
|
|
||||||
let events = [];
|
let events = [];
|
||||||
|
@ -115,9 +115,9 @@ export default {
|
||||||
assert.deepEqual([ true, false ], events);
|
assert.deepEqual([ true, false ], events);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'store - cb cancelled': (done) => {
|
it('cb cancelled', done => {
|
||||||
let s = new Store();
|
let s = new Store();
|
||||||
|
|
||||||
let events = [];
|
let events = [];
|
||||||
|
@ -135,5 +135,5 @@ export default {
|
||||||
assert.deepEqual([ true, false ], events);
|
assert.deepEqual([ true, false ], events);
|
||||||
done();
|
done();
|
||||||
}, 20);
|
}, 20);
|
||||||
}
|
});
|
||||||
};
|
});
|
||||||
|
|
|
@ -15,15 +15,15 @@ let repo = {
|
||||||
'milestone': 1
|
'milestone': 1
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
describe('issues', () => {
|
||||||
'issues - time format': (done) => {
|
it('time format', done => {
|
||||||
// ISO 8601 dates are in UTC timezone.
|
// ISO 8601 dates are in UTC timezone.
|
||||||
let utc = moment(json[0].created_at).toDate().toUTCString();
|
let utc = moment(json[0].created_at).toDate().toUTCString();
|
||||||
assert(utc, 'Fri, 22 Apr 2011 13:33:48 GMT');
|
assert(utc, 'Fri, 22 Apr 2011 13:33:48 GMT');
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'issues - all empty': (done) => {
|
it('all empty', done => {
|
||||||
let called = 0;
|
let called = 0;
|
||||||
request.allIssues = (user, repo, opts, cb) => {
|
request.allIssues = (user, repo, opts, cb) => {
|
||||||
called += 1;
|
called += 1;
|
||||||
|
@ -39,9 +39,9 @@ export default {
|
||||||
assert.strictEqual(closed.size, 0);
|
assert.strictEqual(closed.size, 0);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'issues - open empty': (done) => {
|
it('open empty', done => {
|
||||||
let called = 0;
|
let called = 0;
|
||||||
request.allIssues = (user, repo, opts, cb) => {
|
request.allIssues = (user, repo, opts, cb) => {
|
||||||
called += 1;
|
called += 1;
|
||||||
|
@ -59,9 +59,9 @@ export default {
|
||||||
assert(closed.list.length, 1);
|
assert(closed.list.length, 1);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'issues - closed empty': (done) => {
|
it('closed empty', done => {
|
||||||
let called = 0;
|
let called = 0;
|
||||||
request.allIssues = (user, repo, opts, cb) => {
|
request.allIssues = (user, repo, opts, cb) => {
|
||||||
called += 1;
|
called += 1;
|
||||||
|
@ -77,9 +77,9 @@ export default {
|
||||||
assert.strictEqual(closed.size, 0);
|
assert.strictEqual(closed.size, 0);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'issues - both not empty': (done) => {
|
it('both not empty', done => {
|
||||||
let called = 0;
|
let called = 0;
|
||||||
request.allIssues = (user, repo, opts, cb) => {
|
request.allIssues = (user, repo, opts, cb) => {
|
||||||
called += 1;
|
called += 1;
|
||||||
|
@ -95,9 +95,9 @@ export default {
|
||||||
assert(closed.size, 1);
|
assert(closed.size, 1);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'issues - 99 results on a page': (done) => {
|
it('99 results on a page', done => {
|
||||||
let called = 0;
|
let called = 0;
|
||||||
request.allIssues = (user, repo, opts, cb) => {
|
request.allIssues = (user, repo, opts, cb) => {
|
||||||
called += 1;
|
called += 1;
|
||||||
|
@ -113,9 +113,9 @@ export default {
|
||||||
assert(closed.size, 99);
|
assert(closed.size, 99);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'issues - 100 results on a page': (done) => {
|
it('100 results on a page', done => {
|
||||||
let called = 0;
|
let called = 0;
|
||||||
request.allIssues = (user, repo, opts, cb) => {
|
request.allIssues = (user, repo, opts, cb) => {
|
||||||
called += 1;
|
called += 1;
|
||||||
|
@ -138,9 +138,9 @@ export default {
|
||||||
assert(closed.size, 100);
|
assert(closed.size, 100);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'issues - 101 total results': (done) => {
|
it('101 total results', done => {
|
||||||
let called = 0;
|
let called = 0;
|
||||||
request.allIssues = (user, repo, opts, cb) => {
|
request.allIssues = (user, repo, opts, cb) => {
|
||||||
called += 1;
|
called += 1;
|
||||||
|
@ -165,9 +165,9 @@ export default {
|
||||||
assert.deepEqual(closed.list[100], { 'number': 100, 'size': 1 });
|
assert.deepEqual(closed.list[100], { 'number': 100, 'size': 1 });
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'issues - 201 total results': (done) => {
|
it('201 total results', done => {
|
||||||
let called = 0;
|
let called = 0;
|
||||||
request.allIssues = (user, repo, opts, cb) => {
|
request.allIssues = (user, repo, opts, cb) => {
|
||||||
called += 1;
|
called += 1;
|
||||||
|
@ -197,9 +197,9 @@ export default {
|
||||||
});
|
});
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'issues - get all when not found': (done) => {
|
it('get all when not found', done => {
|
||||||
let called = 0;
|
let called = 0;
|
||||||
request.allIssues = (user, repo, opts, cb) => {
|
request.allIssues = (user, repo, opts, cb) => {
|
||||||
called += 1;
|
called += 1;
|
||||||
|
@ -213,9 +213,9 @@ export default {
|
||||||
assert(called, 1);
|
assert(called, 1);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'issues - size based on a label': (done) => {
|
it('size based on a label', done => {
|
||||||
opa.set(config, 'chart.points', 'LABELS');
|
opa.set(config, 'chart.points', 'LABELS');
|
||||||
|
|
||||||
request.allIssues = (user, repo, opts, cb) => {
|
request.allIssues = (user, repo, opts, cb) => {
|
||||||
|
@ -232,9 +232,9 @@ export default {
|
||||||
assert(open.list[0].size, 2);
|
assert(open.list[0].size, 2);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'issues - filter when no labels': (done) => {
|
it('filter when no labels', done => {
|
||||||
opa.set(config, 'chart.points', 'LABELS');
|
opa.set(config, 'chart.points', 'LABELS');
|
||||||
|
|
||||||
request.allIssues = (user, repo, opts, cb) => cb(null, [{}]);
|
request.allIssues = (user, repo, opts, cb) => cb(null, [{}]);
|
||||||
|
@ -244,9 +244,9 @@ export default {
|
||||||
assert.strictEqual(open.size, 0);
|
assert.strictEqual(open.size, 0);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'issues - filter when empty labels': (done) => {
|
it('filter when empty labels', done => {
|
||||||
opa.set(config, 'chart.points', 'LABELS');
|
opa.set(config, 'chart.points', 'LABELS');
|
||||||
|
|
||||||
request.allIssues = (user, repo, opts, cb) => {
|
request.allIssues = (user, repo, opts, cb) => {
|
||||||
|
@ -258,9 +258,9 @@ export default {
|
||||||
assert.strictEqual(open.size, 0);
|
assert.strictEqual(open.size, 0);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'issues - filter when not matching regex': (done) => {
|
it('filter when not matching regex', done => {
|
||||||
opa.set(config, 'chart.points', 'LABELS');
|
opa.set(config, 'chart.points', 'LABELS');
|
||||||
|
|
||||||
request.allIssues = (user, repo, opts, cb) => {
|
request.allIssues = (user, repo, opts, cb) => {
|
||||||
|
@ -272,9 +272,9 @@ export default {
|
||||||
assert.strictEqual(open.size, 0);
|
assert.strictEqual(open.size, 0);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'issues - filter when multiple match the regex': (done) => {
|
it('filter when multiple match the regex', done => {
|
||||||
opa.set(config, 'chart.points', 'LABELS');
|
opa.set(config, 'chart.points', 'LABELS');
|
||||||
|
|
||||||
request.allIssues = (user, repo, opts, cb) => {
|
request.allIssues = (user, repo, opts, cb) => {
|
||||||
|
@ -292,5 +292,5 @@ export default {
|
||||||
assert(b.size, 4);
|
assert(b.size, 4);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
};
|
});
|
||||||
|
|
|
@ -4,8 +4,8 @@ import _ from 'lodash';
|
||||||
|
|
||||||
import lines from '../src/js/modules/chart/lines.js';
|
import lines from '../src/js/modules/chart/lines.js';
|
||||||
|
|
||||||
export default {
|
describe('lines', () => {
|
||||||
'lines - actual': (done) => {
|
it('actual', done => {
|
||||||
let issues = [
|
let issues = [
|
||||||
{ 'size': 3, 'date': 2 },
|
{ 'size': 3, 'date': 2 },
|
||||||
{ 'size': 2, 'date': 3 },
|
{ 'size': 2, 'date': 3 },
|
||||||
|
@ -17,9 +17,9 @@ export default {
|
||||||
assert.deepEqual(points, [6, 3, 1, 0]);
|
assert.deepEqual(points, [6, 3, 1, 0]);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'lines - ideal': (done) => {
|
it('ideal', done => {
|
||||||
let a = '2011-04-01T00:00:00Z';
|
let a = '2011-04-01T00:00:00Z';
|
||||||
let b = '2011-04-03T00:00:00Z';
|
let b = '2011-04-03T00:00:00Z';
|
||||||
|
|
||||||
|
@ -32,9 +32,9 @@ export default {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'lines - trend': (done) => {
|
it('trend', done => {
|
||||||
let issues = [
|
let issues = [
|
||||||
{ 'date': '2011-04-02T00:00:00.000Z', 'points': 4 },
|
{ 'date': '2011-04-02T00:00:00.000Z', 'points': 4 },
|
||||||
{ 'date': '2011-04-03T00:00:00.000Z', 'points': 1 },
|
{ 'date': '2011-04-03T00:00:00.000Z', 'points': 1 },
|
||||||
|
@ -52,5 +52,5 @@ export default {
|
||||||
assert.deepEqual(line, [2, 1]);
|
assert.deepEqual(line, [2, 1]);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
}
|
});
|
||||||
};
|
});
|
||||||
|
|
|
@ -3,11 +3,11 @@ import moment from 'moment';
|
||||||
|
|
||||||
import json from './fixtures/milestones.json';
|
import json from './fixtures/milestones.json';
|
||||||
|
|
||||||
export default {
|
describe('milestones', () => {
|
||||||
'milestones - time format': (done) => {
|
it('time format', done => {
|
||||||
// ISO 8601 dates are in UTC timezone.
|
// ISO 8601 dates are in UTC timezone.
|
||||||
let utc = moment(json[0].created_at).toDate().toUTCString();
|
let utc = moment(json[0].created_at).toDate().toUTCString();
|
||||||
assert(utc, 'Sun, 10 Apr 2011 20:09:31 GMT');
|
assert(utc, 'Sun, 10 Apr 2011 20:09:31 GMT');
|
||||||
done();
|
done();
|
||||||
}
|
});
|
||||||
};
|
});
|
||||||
|
|
|
@ -16,13 +16,13 @@ let projects = proxy(lib, {
|
||||||
lscache, '../modules/github/request.js': request
|
lscache, '../modules/github/request.js': request
|
||||||
}).default;
|
}).default;
|
||||||
|
|
||||||
export default {
|
describe('projects', () => {
|
||||||
'projects - initializes empty': (done) => {
|
it('initializes empty', done => {
|
||||||
assert.deepEqual(projects.get('list'), []);
|
assert.deepEqual(projects.get('list'), []);
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'projects - sorts on new milestones': (done) => {
|
it('sorts on new milestones', done => {
|
||||||
projects.set({ 'list': [], 'index': [] });
|
projects.set({ 'list': [], 'index': [] });
|
||||||
|
|
||||||
let project = {
|
let project = {
|
||||||
|
@ -40,9 +40,9 @@ export default {
|
||||||
assert.deepEqual(projects.get('index'), [[0, 0]]);
|
assert.deepEqual(projects.get('index'), [[0, 0]]);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'projects - sort by progress': (done) => {
|
it('sort by progress', done => {
|
||||||
projects.set({ 'list': [], 'index': [], 'sortBy': 'progress' });
|
projects.set({ 'list': [], 'index': [], 'sortBy': 'progress' });
|
||||||
|
|
||||||
let project = {
|
let project = {
|
||||||
|
@ -73,9 +73,9 @@ export default {
|
||||||
assert.deepEqual(projects.get('index'), [[0, 1], [0, 0]]);
|
assert.deepEqual(projects.get('index'), [[0, 1], [0, 0]]);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'projects - sort by priority': (done) => {
|
it('sort by priority', done => {
|
||||||
projects.set({ 'list': [], 'index': [], 'sortBy': 'priority' });
|
projects.set({ 'list': [], 'index': [], 'sortBy': 'priority' });
|
||||||
|
|
||||||
let project = {
|
let project = {
|
||||||
|
@ -121,9 +121,9 @@ export default {
|
||||||
assert.deepEqual(projects.get('index'), [[0, 2], [0, 0], [0, 1]]);
|
assert.deepEqual(projects.get('index'), [[0, 2], [0, 0], [0, 1]]);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'projects - sort by priority defaults': (done) => {
|
it('sort by priority defaults', done => {
|
||||||
projects.set({ 'list': [], 'index': [], 'sortBy': 'priority' });
|
projects.set({ 'list': [], 'index': [], 'sortBy': 'priority' });
|
||||||
|
|
||||||
let project = {
|
let project = {
|
||||||
|
@ -163,9 +163,9 @@ export default {
|
||||||
assert.deepEqual(projects.get('index'), [[0, 2], [0, 1], [0, 0]]);
|
assert.deepEqual(projects.get('index'), [[0, 2], [0, 1], [0, 0]]);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'projects - sort by name': (done) => {
|
it('sort by name', done => {
|
||||||
projects.set({ 'list': [], 'index': [], 'sortBy': 'name' });
|
projects.set({ 'list': [], 'index': [], 'sortBy': 'name' });
|
||||||
|
|
||||||
let project = {
|
let project = {
|
||||||
|
@ -188,9 +188,9 @@ export default {
|
||||||
assert.deepEqual(projects.get('index'), [[0, 1], [0, 0]]);
|
assert.deepEqual(projects.get('index'), [[0, 1], [0, 0]]);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'projects - sort by name semver': (done) => {
|
it('sort by name semver', done => {
|
||||||
projects.set({ 'list': [], 'index': [], 'sortBy': 'name' });
|
projects.set({ 'list': [], 'index': [], 'sortBy': 'name' });
|
||||||
|
|
||||||
let project = {
|
let project = {
|
||||||
|
@ -218,9 +218,9 @@ export default {
|
||||||
assert.deepEqual(projects.get('index'), [[0, 2], [0, 1], [0, 0]]);
|
assert.deepEqual(projects.get('index'), [[0, 2], [0, 1], [0, 0]]);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'projects - search': (done) => {
|
it('search', done => {
|
||||||
projects.set({ 'list': [
|
projects.set({ 'list': [
|
||||||
{ 'owner': 'radek', 'name': 'A' }
|
{ 'owner': 'radek', 'name': 'A' }
|
||||||
], 'index': [], 'sortBy': 'name', 'user': null });
|
], 'index': [], 'sortBy': 'name', 'user': null });
|
||||||
|
@ -249,9 +249,9 @@ export default {
|
||||||
assert.deepEqual(projects.get('suggestions'), [ 'radek/aA' ]);
|
assert.deepEqual(projects.get('suggestions'), [ 'radek/aA' ]);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
'projects - delete': (done) => {
|
it('delete', done => {
|
||||||
let a = { 'owner': 'company', 'name': 'netflix', 'milestones': [ { 'title': 'A', 'stats': {} } ] };
|
let a = { 'owner': 'company', 'name': 'netflix', 'milestones': [ { 'title': 'A', 'stats': {} } ] };
|
||||||
let b = { 'owner': 'company', 'name': 'space-x' };
|
let b = { 'owner': 'company', 'name': 'space-x' };
|
||||||
let c = { 'owner': 'company', 'name': 'tesla-m', 'milestones': [ { 'title': 'C', 'stats': {} } ] };
|
let c = { 'owner': 'company', 'name': 'tesla-m', 'milestones': [ { 'title': 'C', 'stats': {} } ] };
|
||||||
|
@ -269,10 +269,10 @@ export default {
|
||||||
assert.deepEqual(projects.get('index'), [ [ 0, 0 ], [ 1, 0 ] ]);
|
assert.deepEqual(projects.get('index'), [ [ 0, 0 ], [ 1, 0 ] ]);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
},
|
});
|
||||||
|
|
||||||
// Issue #116.
|
// Issue #116.
|
||||||
'projects - add milestone (project behind the scenes)': (done) => {
|
it('add milestone (project behind the scenes)', done => {
|
||||||
projects.set({ 'list': [], 'index': [], 'sortBy': 'progress' });
|
projects.set({ 'list': [], 'index': [], 'sortBy': 'progress' });
|
||||||
|
|
||||||
let p = { 'name': 'zcash', 'owner': 'zcash' };
|
let p = { 'name': 'zcash', 'owner': 'zcash' };
|
||||||
|
@ -288,5 +288,5 @@ export default {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
}
|
});
|
||||||
};
|
});
|
||||||
|
|
|
@ -36,8 +36,8 @@ let superagent = new Sa();
|
||||||
let lib = path.resolve(__dirname, '../src/js/modules/github/request.js');
|
let lib = path.resolve(__dirname, '../src/js/modules/github/request.js');
|
||||||
let request = proxy(lib, { superagent }).default;
|
let request = proxy(lib, { superagent }).default;
|
||||||
|
|
||||||
export default {
|
describe('request', () => {
|
||||||
'request - all milestones (ok)': (done) => {
|
it('all milestones (ok)', done => {
|
||||||
superagent.response = {
|
superagent.response = {
|
||||||
'statusType': 2,
|
'statusType': 2,
|
||||||
'error': false,
|
'error': false,
|
||||||
|
@ -57,9 +57,9 @@ export default {
|
||||||
assert.deepEqual(data, [null]);
|
assert.deepEqual(data, [null]);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'request - all milestones (403)': (done) => {
|
it('all milestones (403)', done => {
|
||||||
superagent.response = {
|
superagent.response = {
|
||||||
'statusType': 4,
|
'statusType': 4,
|
||||||
'error': false,
|
'error': false,
|
||||||
|
@ -76,9 +76,9 @@ export default {
|
||||||
assert(err, 'Error');
|
assert(err, 'Error');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'request - one milestone (ok)': (done) => {
|
it('one milestone (ok)', done => {
|
||||||
superagent.response = {
|
superagent.response = {
|
||||||
'statusType': 2,
|
'statusType': 2,
|
||||||
'error': false,
|
'error': false,
|
||||||
|
@ -99,9 +99,9 @@ export default {
|
||||||
assert.deepEqual(data, [null]);
|
assert.deepEqual(data, [null]);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'request - one milestone (404)': (done) => {
|
it('one milestone (404)', done => {
|
||||||
superagent.response = {
|
superagent.response = {
|
||||||
'statusType': 4,
|
'statusType': 4,
|
||||||
'error': Error("cannot GET undefined (404)"),
|
'error': Error("cannot GET undefined (404)"),
|
||||||
|
@ -119,9 +119,9 @@ export default {
|
||||||
assert(err, 'Not Found');
|
assert(err, 'Not Found');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'request - one milestone (500)': (done) => {
|
it('one milestone (500)', done => {
|
||||||
superagent.response = {
|
superagent.response = {
|
||||||
'statusType': 5,
|
'statusType': 5,
|
||||||
'error': Error("Error"),
|
'error': Error("Error"),
|
||||||
|
@ -136,9 +136,9 @@ export default {
|
||||||
assert(err, 'Error');
|
assert(err, 'Error');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'request - all issues (ok)': (done) => {
|
it('all issues (ok)', done => {
|
||||||
superagent.response = {
|
superagent.response = {
|
||||||
'statusType': 2,
|
'statusType': 2,
|
||||||
'error': false,
|
'error': false,
|
||||||
|
@ -159,9 +159,9 @@ export default {
|
||||||
assert.deepEqual(data, [ null ]);
|
assert.deepEqual(data, [ null ]);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'request - timeout': (done) => {
|
it('timeout', done => {
|
||||||
opa.set(config, 'request.timeout', 10);
|
opa.set(config, 'request.timeout', 10);
|
||||||
|
|
||||||
superagent.timeout = 20;
|
superagent.timeout = 20;
|
||||||
|
@ -179,9 +179,9 @@ export default {
|
||||||
assert(err, 'Request has timed out');
|
assert(err, 'Request has timed out');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
},
|
});
|
||||||
|
|
||||||
'request - use tokens': (done) => {
|
it('use tokens', done => {
|
||||||
superagent.response = {};
|
superagent.response = {};
|
||||||
|
|
||||||
let user = { 'credential': { 'accessToken': 'ABC' }};
|
let user = { 'credential': { 'accessToken': 'ABC' }};
|
||||||
|
@ -192,5 +192,5 @@ export default {
|
||||||
assert(superagent.params.Authorization, 'token ABC');
|
assert(superagent.params.Authorization, 'token ABC');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
};
|
});
|
||||||
|
|
Loading…
Reference in New Issue