update dependencies

This commit is contained in:
Radek Stepan 2018-04-21 12:47:51 -04:00
parent 01ce8bc396
commit b539c4d53d
24 changed files with 29276 additions and 10908 deletions

2
.nvmrc
View File

@ -1 +1 @@
v0.12.9
v8.11.1

View File

@ -7,7 +7,7 @@ CLEANCSS = ./node_modules/.bin/cleancss
MOCHA = ./node_modules/.bin/mocha
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:
${BIN}
@ -28,7 +28,7 @@ build-js:
${BROWSERIFY} -e -s burnchart ./src/js/index.jsx -t babelify > public/js/bundle.js
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

5955
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "burnchart",
"version": "3.2.4",
"version": "3.3.0",
"description": "GitHub Burndown Chart as a Service",
"author": "Radek Stepan <dev@radekstepan.com> (http://radekstepan.com)",
"license": "AGPL-3.0",
@ -11,51 +11,55 @@
"start": "make start",
"test": "make test"
},
"engines": {
"node": "~8.11.0",
"npm": "~5.8.0"
},
"dependencies": {
"argparse": "^1.0.4",
"colors": "^1.1.2",
"node-static": "^0.7.7"
"argparse": "1.0.10",
"colors": "1.2.1",
"node-static": "0.7.10"
},
"devDependencies": {
"async": "^1.5.2",
"babel": "^6.3.26",
"babel-preset-es2015": "^6.3.13",
"babel-preset-react": "^6.3.13",
"babel-preset-stage-0": "^6.5.0",
"babel-register": "^6.4.3",
"babelify": "^7.2.0",
"browserify": "^13.0.0",
"chai": "^3.4.1",
"classnames": "^2.2.3",
"clean-css": "^3.4.9",
"d3": "^3.5.12",
"d3-tip": "^0.6.7",
"deep-diff": "^0.3.3",
"firebase": "^3.4.1",
"less": "^2.5.3",
"lesshat": "^3.0.2",
"lodash": "^3.10.1",
"lscache": "^1.0.5",
"marked": "^0.3.5",
"mocha": "^2.3.4",
"moment": "^2.11.1",
"normalize.less": "^1.0.0",
"object-assign": "^4.0.1",
"object-path": "^0.9.2",
"proxyquire": "^1.7.3",
"qs": "^6.2.0",
"react": "^0.14.6",
"react-addons-css-transition-group": "^0.14.6",
"react-autosuggest": "^3.3.5",
"react-dom": "^0.14.7",
"react-mini-router": "^2.0.0",
"semver": "^5.1.0",
"async": "2.6.0",
"babel": "6.23.0",
"babel-preset-es2015": "6.24.1",
"babel-preset-react": "6.24.1",
"babel-preset-stage-0": "6.24.1",
"babel-register": "6.26.0",
"babelify": "8.0.0",
"browserify": "13.0.0",
"chai": "4.1.2",
"classnames": "2.2.5",
"clean-css": "3.4.9",
"d3": "3.5.12",
"d3-tip": "0.6.7",
"deep-diff": "1.0.0",
"firebase": "3.4.1",
"less": "3.0.1",
"lesshat": "4.1.0",
"lodash": "4.17.5",
"lscache": "1.0.5",
"marked": "0.3.19",
"mocha": "5.1.1",
"moment": "2.22.1",
"normalize.less": "1.0.0",
"object-assign": "4.1.1",
"object-path": "0.11.4",
"proxyquire": "2.0.1",
"qs": "6.5.1",
"react": "0.14.7",
"react-addons-css-transition-group": "0.14.6",
"react-autosuggest": "3.3.5",
"react-dom": "0.14.7",
"react-mini-router": "2.0.0",
"semver": "5.5.0",
"sortedindex-compare": "0.0.1",
"superagent": "^1.6.1",
"uglify-js": "^2.6.1",
"watch": "^0.17.1",
"superagent": "3.8.2",
"uglify-js": "3.3.22",
"watch": "1.0.2",
"watch-less": "0.0.4",
"watchify": "^3.7.0"
"watchify": "3.11.0"
},
"repository": {
"type": "git",

View File

@ -398,7 +398,9 @@ lesshat-selector {
@-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); }}
@-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 {
height: 300px;
@ -590,8 +592,8 @@ ul li {
width: 500px;
-webkit-transform: translateX(-50%) translateY(-50%);
-moz-transform: translateX(-50%) translateY(-50%);
-o-transform: translateX(-50%) translateY(-50%);
-ms-transform: translateX(-50%) translateY(-50%);
-o-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
}
#notify.system p {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -33,7 +33,7 @@ let find = ({ to, params, query }) => {
let re = /:[^\/]+/g;
// 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(routes, (name, url) => {

View File

@ -154,7 +154,9 @@ export default class Chart extends React.Component {
.attr("cx", ({ date }) => x(new Date(date)))
.attr("cy", ({ points }) => y(points))
.attr("r", ({ radius }) => 5)
.on('mouseover', tooltip.show)
.on('mouseover', function(d, i) {
tooltip.show(d, this);
})
.on('mouseout', tooltip.hide);
}

View File

@ -12,7 +12,7 @@ export default class Footer extends React.Component {
return (
<div id="footer">
<div className="wrap">
&copy; 2012-2016 <a href="https:/radekstepan.com" target="_blank">Radek Stepan</a>
&copy; 2012-2018 <a href="https:/radekstepan.com" target="_blank">Radek Stepan</a>
</div>
</div>
);

View File

@ -33,13 +33,14 @@ export default class MilestonePage extends Page {
'open': { 'list': [], 'size': 0 }
};
// 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.due_on > due_on) due_on = m.due_on;
_.each([ 'closed', 'open' ], (k) => {
issues[k].list = issues[k].list.concat(m.issues[k].list);
issues[k].size += m.issues[k].size;
});
return m;
}).value();
issues.closed.list = _.sortBy(issues.closed.list, 'closed_at');

View File

@ -5,7 +5,7 @@ _.mixin({
if (!_.isArray(keys)) {
throw '`keys` needs to be an Array';
}
return _.map(source, (item) => {
let obj = {};
for (let key of keys) {

View File

@ -89,7 +89,7 @@ class ProjectsStore extends Store {
}
} else {
// For all projects.
_.each(projects, _.partial(this.getProject, user), this);
_.each(projects, project => this.getProject(user, project));
}
}));
}

View File

@ -2,7 +2,7 @@
@import "node_modules/normalize.less/normalize.less";
// LESS Mixins.
@import "node_modules/lesshat/build/lesshat.less";
@import "node_modules/lesshat/lesshat.less";
// Now our app.
@import "fonts.less";

View File

@ -16,4 +16,4 @@
}
}
.keyframes(~'spin, from { transform: rotate(0deg); } to { transform: rotate(360deg); }');
.keyframes(~'spin, from { transform: rotate(0deg); } to { transform: rotate(360deg); }');

View File

@ -2,91 +2,89 @@ import { assert } from 'chai';
import EventEmitter from '../src/js/lib/EventEmitter.js';
export default {
EventEmitter: {
on(done) {
let m = new EventEmitter();
describe('EventEmitter', () => {
it('on', done => {
let m = new EventEmitter();
let i = 0;
let i = 0;
// Plain string.
m.on('A', (o, e) => {
assert.equal(1, o);
assert.equal('A', e);
i += o;
});
m.emit('A', 1);
// Plain string.
m.on('A', (o, e) => {
assert.equal(1, o);
assert.equal('A', e);
i += o;
});
m.emit('A', 1);
// Namespaced path.
m.on(/^A\./, (o, e) => {
assert.equal(2, o);
assert(/^A\.B/.test(e));
i += o;
});
m.emit('A.B', 2);
m.emit('A.B.C', 2);
// Namespaced path.
m.on(/^A\./, (o, e) => {
assert.equal(2, o);
assert(/^A\.B/.test(e));
i += o;
});
m.emit('A.B', 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) {
let m = new EventEmitter();
it('onAny', done => {
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.B', 2);
m.emit('', 3); // should not register
m.emit('A', 1);
m.emit('A.B', 2);
m.emit('', 3); // should not register
assert.equal(3, i);
assert.equal(3, i);
done();
},
done();
});
off(done) {
let m = new EventEmitter();
it('off', done => {
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('B', cb);
m.on('A', cb);
m.on('B', cb);
m.emit('A');
m.off('A', cb);
m.emit('A');
m.emit('B');
m.emit('A');
m.off('A', cb);
m.emit('A');
m.emit('B');
assert.deepEqual({ A: 1, B: 1 }, map);
assert.deepEqual({ A: 1, B: 1 }, map);
done();
},
done();
});
offAny(done) {
let m = new EventEmitter();
it('offAny', done => {
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('B', cb);
m.on('A', cb);
m.on('B', cb);
m.emit('A');
m.offAny(cb);
m.emit('A');
m.emit('B');
m.emit('A');
m.offAny(cb);
m.emit('A');
m.emit('B');
assert.deepEqual({ A: 1, B: 0 }, map);
assert.deepEqual({ A: 1, B: 0 }, map);
done();
}
}
};
done();
});
});

View File

@ -3,49 +3,49 @@ import { assert } from 'chai';
import Store from '../src/js/lib/Store.js';
import actions from '../src/js/actions/appActions.js';
export default {
'store - set': (done) => {
describe('Store', () => {
it('set', done => {
let s = new Store();
s.set('A.B', 1); // key as a string
s.set([ 'A', 'C' ], 2); // key as an array
assert.deepEqual({ A: { B: 1, C: 2 }}, s.get());
done();
},
});
'store - push': (done) => {
it('push', done => {
let s = new Store({ 'list': [ 'A' ] });
s.push('list', 'B'); // key as a string
s.push([ 'list' ], 'C'); // key as an array
assert.deepEqual({ 'list': [ 'A', 'B', 'C' ] }, s.get());
done();
},
});
'store - push with init': (done) => {
it('push with init', done => {
let s = new Store();
s.push('list', 'A');
assert.deepEqual({ 'list': [ 'A' ] }, s.get());
done();
},
});
'store - get': (done) => {
it('get', done => {
let s = new Store({ 'A': [ 1, 2 ], 'B': { 'C': 3 } });
assert.equal(2, s.get('A.1')); // key as a string
assert.equal(3, s.get([ 'B', 'C' ])); // key as an array
done();
},
});
'store - get with callback': (done) => {
it('get with callback', done => {
let s = new Store({ 'A': 1 });
let vals = [];
@ -58,9 +58,9 @@ export default {
assert.deepEqual([ 1, 2 ], vals);
done();
},
});
'store - setSilent': (done) => {
it('setSilent', done => {
let s = new Store();
let val;
@ -74,9 +74,9 @@ export default {
assert.equal(1, val);
done();
},
});
'store - assign': (done) => {
it('assign', done => {
let s = new Store({ A: 1 });
s.set({ B: 1 });
@ -84,11 +84,11 @@ export default {
assert.deepEqual({ A: 1, B: 1 }, s.get());
done();
},
});
'store - changes': (done) => {
it('changes', done => {
let s = new Store({ A: { B: { C: 1 } } });
let key;
s.onAny((v, k) => key = k);
@ -98,9 +98,9 @@ export default {
assert.equal('A.B.C', key);
done();
},
});
'store - cb called': (done) => {
it('cb called', done => {
let s = new Store();
let events = [];
@ -115,9 +115,9 @@ export default {
assert.deepEqual([ true, false ], events);
done();
},
});
'store - cb cancelled': (done) => {
it('cb cancelled', done => {
let s = new Store();
let events = [];
@ -135,5 +135,5 @@ export default {
assert.deepEqual([ true, false ], events);
done();
}, 20);
}
};
});
});

View File

@ -15,15 +15,15 @@ let repo = {
'milestone': 1
};
export default {
'issues - time format': (done) => {
describe('issues', () => {
it('time format', done => {
// ISO 8601 dates are in UTC timezone.
let utc = moment(json[0].created_at).toDate().toUTCString();
assert(utc, 'Fri, 22 Apr 2011 13:33:48 GMT');
done();
},
});
'issues - all empty': (done) => {
it('all empty', done => {
let called = 0;
request.allIssues = (user, repo, opts, cb) => {
called += 1;
@ -31,7 +31,7 @@ export default {
};
opa.set(config, 'chart.points', 'ONE_SIZE');
issues.fetchAll({}, repo, (err, { open, closed }) => {
assert.isNull(err);
assert(called, 2);
@ -39,9 +39,9 @@ export default {
assert.strictEqual(closed.size, 0);
done();
});
},
});
'issues - open empty': (done) => {
it('open empty', done => {
let called = 0;
request.allIssues = (user, repo, opts, cb) => {
called += 1;
@ -49,7 +49,7 @@ export default {
};
opa.set(config, 'chart.points', 'ONE_SIZE');
issues.fetchAll({}, repo, (err, { open, closed }) => {
assert.isNull(err);
assert(called, 2);
@ -59,9 +59,9 @@ export default {
assert(closed.list.length, 1);
done();
});
},
});
'issues - closed empty': (done) => {
it('closed empty', done => {
let called = 0;
request.allIssues = (user, repo, opts, cb) => {
called += 1;
@ -69,7 +69,7 @@ export default {
};
opa.set(config, 'chart.points', 'ONE_SIZE');
issues.fetchAll({}, repo, (err, { open, closed }) => {
assert.isNull(err);
assert(called, 2);
@ -77,9 +77,9 @@ export default {
assert.strictEqual(closed.size, 0);
done();
});
},
});
'issues - both not empty': (done) => {
it('both not empty', done => {
let called = 0;
request.allIssues = (user, repo, opts, cb) => {
called += 1;
@ -87,7 +87,7 @@ export default {
};
opa.set(config, 'chart.points', 'ONE_SIZE');
issues.fetchAll({}, repo, (err, { open, closed }) => {
assert.isNull(err);
assert(called, 2);
@ -95,9 +95,9 @@ export default {
assert(closed.size, 1);
done();
});
},
});
'issues - 99 results on a page': (done) => {
it('99 results on a page', done => {
let called = 0;
request.allIssues = (user, repo, opts, cb) => {
called += 1;
@ -105,7 +105,7 @@ export default {
};
opa.set(config, 'chart.points', 'ONE_SIZE');
issues.fetchAll({}, repo, (err, { open, closed }) => {
assert.isNull(err);
assert(called, 2);
@ -113,9 +113,9 @@ export default {
assert(closed.size, 99);
done();
});
},
});
'issues - 100 results on a page': (done) => {
it('100 results on a page', done => {
let called = 0;
request.allIssues = (user, repo, opts, cb) => {
called += 1;
@ -130,7 +130,7 @@ export default {
};
opa.set(config, 'chart.points', 'ONE_SIZE');
issues.fetchAll({}, repo, function(err, { open, closed }) {
assert.isNull(err);
assert(called, 4);
@ -138,9 +138,9 @@ export default {
assert(closed.size, 100);
done();
});
},
});
'issues - 101 total results': (done) => {
it('101 total results', done => {
let called = 0;
request.allIssues = (user, repo, opts, cb) => {
called += 1;
@ -155,7 +155,7 @@ export default {
};
opa.set(config, 'chart.points', 'ONE_SIZE');
issues.fetchAll({}, repo, (err, { open, closed }) => {
assert.isNull(err);
assert(called, 4);
@ -165,9 +165,9 @@ export default {
assert.deepEqual(closed.list[100], { 'number': 100, 'size': 1 });
done();
});
},
});
'issues - 201 total results': (done) => {
it('201 total results', done => {
let called = 0;
request.allIssues = (user, repo, opts, cb) => {
called += 1;
@ -180,11 +180,11 @@ export default {
return cb(null, [{ 'number': 200 }]);
default:
assert(false);
}
}
};
opa.set(config, 'chart.points', 'ONE_SIZE');
issues.fetchAll({}, repo, (err, { open, closed }) => {
assert.isNull(err);
assert(called, 6);
@ -197,9 +197,9 @@ export default {
});
done();
});
},
});
'issues - get all when not found': (done) => {
it('get all when not found', done => {
let called = 0;
request.allIssues = (user, repo, opts, cb) => {
called += 1;
@ -207,17 +207,17 @@ export default {
};
opa.set(config, 'chart.points', 'ONE_SIZE');
issues.fetchAll({}, repo, (err, { open, closed }) => {
assert(err, 'Not Found');
assert(called, 1);
done();
});
},
});
'issues - size based on a label': (done) => {
it('size based on a label', done => {
opa.set(config, 'chart.points', 'LABELS');
request.allIssues = (user, repo, opts, cb) => {
cb(null, [
{ 'labels': [{ 'name': 'size 2' }]},
@ -232,23 +232,23 @@ export default {
assert(open.list[0].size, 2);
done();
});
},
});
'issues - filter when no labels': (done) => {
it('filter when no labels', done => {
opa.set(config, 'chart.points', 'LABELS');
request.allIssues = (user, repo, opts, cb) => cb(null, [{}]);
issues.fetchAll({}, repo, (err, { open, closed }) => {
assert.isNull(err);
assert.strictEqual(open.size, 0);
done();
});
},
});
'issues - filter when empty labels': (done) => {
it('filter when empty labels', done => {
opa.set(config, 'chart.points', 'LABELS');
request.allIssues = (user, repo, opts, cb) => {
cb(null, [{ 'labels': [] }]);
};
@ -258,11 +258,11 @@ export default {
assert.strictEqual(open.size, 0);
done();
});
},
});
'issues - filter when not matching regex': (done) => {
it('filter when not matching regex', done => {
opa.set(config, 'chart.points', 'LABELS');
request.allIssues = (user, repo, opts, cb) => {
cb(null, [{ 'labels': [{ 'name': 'size 1A' }] }]);
};
@ -272,11 +272,11 @@ export default {
assert.strictEqual(open.size, 0);
done();
});
},
});
'issues - filter when multiple match the regex': (done) => {
it('filter when multiple match the regex', done => {
opa.set(config, 'chart.points', 'LABELS');
request.allIssues = (user, repo, opts, cb) => {
cb(null, [
{ 'labels': [ { 'name': 'size 1' }, { 'name': 'size 6' } ]},
@ -292,5 +292,5 @@ export default {
assert(b.size, 4);
done();
});
}
};
});
});

View File

@ -4,8 +4,8 @@ import _ from 'lodash';
import lines from '../src/js/modules/chart/lines.js';
export default {
'lines - actual': (done) => {
describe('lines', () => {
it('actual', done => {
let issues = [
{ 'size': 3, 'date': 2 },
{ 'size': 2, 'date': 3 },
@ -15,16 +15,16 @@ export default {
let points = _.map(lines.actual(issues, 1, 6), ({ points }) => points);
assert.deepEqual(points, [6, 3, 1, 0]);
done();
},
'lines - ideal': (done) => {
done();
});
it('ideal', done => {
let a = '2011-04-01T00:00:00Z';
let b = '2011-04-03T00:00:00Z';
let line = lines.ideal(a, b, 4).slice(0, 3);
assert.deepEqual(line, [
{ 'date': '2011-04-02T00:00:00.000Z', 'points': 4 },
{ 'date': '2011-04-03T00:00:00.000Z', 'points': 2 },
@ -32,9 +32,9 @@ export default {
]);
done();
},
});
'lines - trend': (done) => {
it('trend', done => {
let issues = [
{ 'date': '2011-04-02T00:00:00.000Z', 'points': 4 },
{ 'date': '2011-04-03T00:00:00.000Z', 'points': 1 },
@ -46,11 +46,11 @@ export default {
'2011-04-02T00:00:00.000Z',
moment.utc()
];
let line = _.map(lines.trend.apply(null, opts), ({ points }) => Math.round(points));
assert.deepEqual(line, [2, 1]);
done();
}
};
});
});

View File

@ -3,11 +3,11 @@ import moment from 'moment';
import json from './fixtures/milestones.json';
export default {
'milestones - time format': (done) => {
describe('milestones', () => {
it('time format', done => {
// ISO 8601 dates are in UTC timezone.
let utc = moment(json[0].created_at).toDate().toUTCString();
assert(utc, 'Sun, 10 Apr 2011 20:09:31 GMT');
done();
}
};
});
});

View File

@ -16,13 +16,13 @@ let projects = proxy(lib, {
lscache, '../modules/github/request.js': request
}).default;
export default {
'projects - initializes empty': (done) => {
describe('projects', () => {
it('initializes empty', done => {
assert.deepEqual(projects.get('list'), []);
done();
},
});
'projects - sorts on new milestones': (done) => {
it('sorts on new milestones', done => {
projects.set({ 'list': [], 'index': [] });
let project = {
@ -40,9 +40,9 @@ export default {
assert.deepEqual(projects.get('index'), [[0, 0]]);
done();
},
});
'projects - sort by progress': (done) => {
it('sort by progress', done => {
projects.set({ 'list': [], 'index': [], 'sortBy': 'progress' });
let project = {
@ -73,9 +73,9 @@ export default {
assert.deepEqual(projects.get('index'), [[0, 1], [0, 0]]);
done();
},
});
'projects - sort by priority': (done) => {
it('sort by priority', done => {
projects.set({ 'list': [], 'index': [], 'sortBy': 'priority' });
let project = {
@ -121,9 +121,9 @@ export default {
assert.deepEqual(projects.get('index'), [[0, 2], [0, 0], [0, 1]]);
done();
},
});
'projects - sort by priority defaults': (done) => {
it('sort by priority defaults', done => {
projects.set({ 'list': [], 'index': [], 'sortBy': 'priority' });
let project = {
@ -163,9 +163,9 @@ export default {
assert.deepEqual(projects.get('index'), [[0, 2], [0, 1], [0, 0]]);
done();
},
});
'projects - sort by name': (done) => {
it('sort by name', done => {
projects.set({ 'list': [], 'index': [], 'sortBy': 'name' });
let project = {
@ -188,9 +188,9 @@ export default {
assert.deepEqual(projects.get('index'), [[0, 1], [0, 0]]);
done();
},
});
'projects - sort by name semver': (done) => {
it('sort by name semver', done => {
projects.set({ 'list': [], 'index': [], 'sortBy': 'name' });
let project = {
@ -218,9 +218,9 @@ export default {
assert.deepEqual(projects.get('index'), [[0, 2], [0, 1], [0, 0]]);
done();
},
});
'projects - search': (done) => {
it('search', done => {
projects.set({ 'list': [
{ 'owner': 'radek', 'name': 'A' }
], 'index': [], 'sortBy': 'name', 'user': null });
@ -249,9 +249,9 @@ export default {
assert.deepEqual(projects.get('suggestions'), [ 'radek/aA' ]);
done();
},
});
'projects - delete': (done) => {
it('delete', done => {
let a = { 'owner': 'company', 'name': 'netflix', 'milestones': [ { 'title': 'A', 'stats': {} } ] };
let b = { 'owner': 'company', 'name': 'space-x' };
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 ] ]);
done();
},
});
// Issue #116.
'projects - add milestone (project behind the scenes)': (done) => {
it('add milestone (project behind the scenes)', done => {
projects.set({ 'list': [], 'index': [], 'sortBy': 'progress' });
let p = { 'name': 'zcash', 'owner': 'zcash' };
@ -288,5 +288,5 @@ export default {
]);
done();
}
};
});
});

View File

@ -36,8 +36,8 @@ let superagent = new Sa();
let lib = path.resolve(__dirname, '../src/js/modules/github/request.js');
let request = proxy(lib, { superagent }).default;
export default {
'request - all milestones (ok)': (done) => {
describe('request', () => {
it('all milestones (ok)', done => {
superagent.response = {
'statusType': 2,
'error': false,
@ -57,9 +57,9 @@ export default {
assert.deepEqual(data, [null]);
done();
});
},
});
'request - all milestones (403)': (done) => {
it('all milestones (403)', done => {
superagent.response = {
'statusType': 4,
'error': false,
@ -76,9 +76,9 @@ export default {
assert(err, 'Error');
done();
});
},
});
'request - one milestone (ok)': (done) => {
it('one milestone (ok)', done => {
superagent.response = {
'statusType': 2,
'error': false,
@ -99,9 +99,9 @@ export default {
assert.deepEqual(data, [null]);
done();
});
},
});
'request - one milestone (404)': (done) => {
it('one milestone (404)', done => {
superagent.response = {
'statusType': 4,
'error': Error("cannot GET undefined (404)"),
@ -119,9 +119,9 @@ export default {
assert(err, 'Not Found');
done();
});
},
});
'request - one milestone (500)': (done) => {
it('one milestone (500)', done => {
superagent.response = {
'statusType': 5,
'error': Error("Error"),
@ -136,9 +136,9 @@ export default {
assert(err, 'Error');
done();
});
},
});
'request - all issues (ok)': (done) => {
it('all issues (ok)', done => {
superagent.response = {
'statusType': 2,
'error': false,
@ -159,9 +159,9 @@ export default {
assert.deepEqual(data, [ null ]);
done();
});
},
});
'request - timeout': (done) => {
it('timeout', done => {
opa.set(config, 'request.timeout', 10);
superagent.timeout = 20;
@ -179,9 +179,9 @@ export default {
assert(err, 'Request has timed out');
done();
});
},
});
'request - use tokens': (done) => {
it('use tokens', done => {
superagent.response = {};
let user = { 'credential': { 'accessToken': 'ABC' }};
@ -192,5 +192,5 @@ export default {
assert(superagent.params.Authorization, 'token ABC');
done();
});
}
};
});
});

View File

@ -18,7 +18,7 @@ export default {
};
let { isEmpty, isOverdue, isOnTime } = stats(milestone);
assert.isTrue(isEmpty);
assert.isFalse(isOverdue);
assert.isTrue(isOnTime);
@ -54,10 +54,10 @@ export default {
}
}
};
let { isDone } = stats(milestone);
assert.isTrue(isDone);
done();
},
@ -74,10 +74,10 @@ export default {
}
}
};
let { isOverdue } = stats(milestone);
assert.isTrue(isOverdue);
done();
},
@ -95,7 +95,7 @@ export default {
}
}
};
let { isOnTime } = stats(milestone);
assert.isTrue(isOnTime);