shared-code-percent

This commit is contained in:
Victor Piousbox
2016-04-09 19:27:22 +00:00
parent f4d2184f34
commit 3c784e869a
7 changed files with 136 additions and 41 deletions

View File

@@ -1,12 +1,12 @@
// TODO move to client
module.exports = function(x, y, dir) {
var roundFn;
module.exports = function percent (x, y, dir) {
let roundFn;
switch (dir) {
case "up":
case 'up':
roundFn = Math.ceil;
break;
case "down":
case 'down':
roundFn = Math.floor;
break;
default:

View File

@@ -1,3 +1,4 @@
module.exports = function(s) {
module.exports = function splitWhitespace (s) {
return s.split(' ');
};

View File

@@ -1,51 +1,40 @@
import {
shouldDo
shouldDo,
} from '../cron';
/*
Task classes given everything about the class
*/
module.exports = function(task, filters, dayStart, lastCron, showCompleted, main) {
var classes, completed, enabled, filter, priority, ref, repeat, type, value;
if (filters == null) {
filters = [];
}
if (dayStart == null) {
dayStart = 0;
}
if (lastCron == null) {
lastCron = +(new Date);
}
if (showCompleted == null) {
showCompleted = false;
}
if (main == null) {
main = false;
}
module.exports = function taskClasses (task, filters = [], dayStart = 0, lastCron = Number(new Date()), showCompleted = false, main = false) {
if (!task) {
return;
return '';
}
type = task.type, completed = task.completed, value = task.value, repeat = task.repeat, priority = task.priority;
if (main) {
if (!task._editing) {
for (filter in filters) {
enabled = filters[filter];
if (enabled && !((ref = task.tags) != null ? ref[filter] : void 0)) {
return 'hidden';
}
let type = task.type;
let classes = task.type;
let completed = task.completed;
let value = task.value;
let priority = task.priority;
if (main && !task._editing) {
for (let filter in filters) {
let enabled = filters[filter];
if (!task.tags) task.tags = {};
if (enabled && !task.tags[filter]) {
return 'hidden';
}
}
}
classes = type;
classes = task.type;
if (task._editing) {
classes += " beingEdited";
classes += ' beingEdited';
}
if (type === 'todo' || type === 'daily') {
if (completed || (type === 'daily' && !shouldDo(+(new Date), task, {
dayStart: dayStart
if (completed || (type === 'daily' && !shouldDo(Number(new Date()), task, { // eslint-disable-line no-extra-parens
dayStart,
}))) {
classes += " completed";
classes += ' completed';
} else {
classes += " uncompleted";
classes += ' uncompleted';
}
} else if (type === 'habit') {
if (task.down && task.up) {

View File

@@ -24,11 +24,8 @@ const COMMON_FILES = [
'!./common/script/libs/gold.js',
'!./common/script/libs/newChatMessages.js',
'!./common/script/libs/noTags.js',
'!./common/script/libs/percent.js',
'!./common/script/libs/planGemLimits.js',
'!./common/script/libs/silver.js',
'!./common/script/libs/splitWhitespace.js',
'!./common/script/libs/taskClasses.js',
'!./common/script/public/**/*.js',
];
const TEST_FILES = [

View File

@@ -0,0 +1,19 @@
import percent from '../../../common/script/libs/percent';
describe('percent', () => {
it('with direction "up"', () => {
expect(percent(1, 10, 'up')).to.eql(10);
expect(percent(1, 20, 'up')).to.eql(5);
expect(percent(1.22, 10.99, 'up')).to.eql(12);
});
it('with direction "down"', () => {
expect(percent(1, 10, 'down')).to.eql(10);
expect(percent(1, 20, 'down')).to.eql(5);
expect(percent(1.22, 10.99, 'down')).to.eql(11);
});
it('with no direction', () => {
expect(percent(1.22, 10.99)).to.eql(11);
});
});

View File

@@ -0,0 +1,7 @@
import splitWhitespace from '../../../common/script/libs/splitWhitespace';
describe('splitWhitespace', () => {
it('returns an array', () => {
expect(splitWhitespace('a b')).to.eql(['a', 'b']);
});
});

View File

@@ -0,0 +1,82 @@
import taskClasses from '../../../common/script/libs/taskClasses';
describe('taskClasses', () => {
let task = {};
let filters = {};
let result;
describe('a todo task', () => {
beforeEach(() => {
task = { type: 'todo', _editing: false, tags: { a: false } };
});
it('is hidden', () => {
filters = { a: true };
result = taskClasses(task, filters, 0, Number(new Date()), false, true);
expect(result).to.eql('hidden');
});
it('is beingEdited', () => {
task._editing = true;
result = taskClasses(task, filters);
expect(result.split(' ').indexOf('beingEdited')).to.not.eql(-1);
});
it('is completed', () => {
task.completed = true;
result = taskClasses(task, filters);
expect(result.split(' ').indexOf('completed')).to.not.eql(-1);
task.completed = false;
result = taskClasses(task, filters);
expect(result.split(' ').indexOf('completed')).to.eql(-1);
expect(result.split(' ').indexOf('uncompleted')).to.not.eql(-1);
});
});
describe('a daily task', () => {
it('is completed', () => {
task = { type: 'daily' };
result = taskClasses(task);
expect(result.split(' ').indexOf('completed')).to.not.eql(-1);
});
it('is uncompleted'); // this requires stubbing the internal dependency shouldDo in taskClasses
});
describe('a habit', () => {
it('that is wide', () => {
task = { type: 'habit', up: true, down: true };
result = taskClasses(task);
expect(result.split(' ').indexOf('habit-wide')).to.not.eql(-1);
});
it('that is narrow', () => {
task = { type: 'habit' };
result = taskClasses(task);
expect(result.split(' ').indexOf('habit-narrow')).to.not.eql(-1);
});
});
describe('varies based on priority', () => {
it('trivial', () => {
task.priority = 0.1;
result = taskClasses(task);
expect(result.split(' ').indexOf('difficulty-trivial')).to.not.eql(-1);
});
it('hard', () => {
task.priority = 2;
result = taskClasses(task);
expect(result.split(' ').indexOf('difficulty-hard')).to.not.eql(-1);
});
});
describe('varies based on value', () => {
it('color-worst', () => {
task.value = -30;
result = taskClasses(task);
expect(result.split(' ').indexOf('color-worst')).to.not.eql(-1);
});
it('color-neutral', () => {
task.value = 0;
result = taskClasses(task);
expect(result.split(' ').indexOf('color-neutral')).to.not.eql(-1);
});
});
});