prevent "Zero-day streak" giving a 21-day streak achievement + tests - fixes #2578 (#9688)

* prevent "Zero-day streak" giving a 21-day streak achievement - fixes #2578

* add tests for streak achievements

* remove .only from set of tests

* refactor(test): fix linting
This commit is contained in:
Alys
2018-01-30 07:43:59 +10:00
committed by Sabe Jones
parent 5d4e1362bb
commit 47c2a3a21a
2 changed files with 60 additions and 9 deletions

View File

@@ -74,13 +74,6 @@ describe('shared.ops.scoreTask', () => {
}
});
it('checks that the streak parameters affects the score', () => {
let task = generateDaily({ userId: ref.afterUser._id, text: 'task to check streak' });
scoreTask({ user: ref.afterUser, task, direction: 'up', cron: false });
scoreTask({ user: ref.afterUser, task, direction: 'up', cron: false });
expect(task.streak).to.eql(2);
});
it('completes when the task direction is up', () => {
let task = generateTodo({ userId: ref.afterUser._id, text: 'todo to complete', cron: false });
scoreTask({ user: ref.afterUser, task, direction: 'up' });
@@ -123,6 +116,64 @@ describe('shared.ops.scoreTask', () => {
});
});
it('checks that the streak parameters affects the score', () => {
let task = generateDaily({ userId: ref.afterUser._id, text: 'task to check streak' });
scoreTask({ user: ref.afterUser, task, direction: 'up', cron: false });
scoreTask({ user: ref.afterUser, task, direction: 'up', cron: false });
expect(task.streak).to.eql(2);
});
describe('verifies that 21-day streak achievements are given/removed correctly', () => {
let initialStreakCount = 20; // 1 before the streak achievement is awarded
beforeEach(() => {
ref = beforeAfter();
});
it('awards the first streak achievement', () => {
let task = generateDaily({ userId: ref.afterUser._id, text: 'some daily', streak: initialStreakCount });
scoreTask({ user: ref.afterUser, task, direction: 'up' });
expect(ref.afterUser.achievements.streak).to.equal(1);
});
it('increments the streak achievement for a second streak', () => {
let task1 = generateDaily({ userId: ref.afterUser._id, text: 'first daily', streak: initialStreakCount });
scoreTask({ user: ref.afterUser, task: task1, direction: 'up' });
let task2 = generateDaily({ userId: ref.afterUser._id, text: 'second daily', streak: initialStreakCount });
scoreTask({ user: ref.afterUser, task: task2, direction: 'up' });
expect(ref.afterUser.achievements.streak).to.equal(2);
});
it('removes the first streak achievement when unticking a Daily', () => {
let task = generateDaily({ userId: ref.afterUser._id, text: 'some daily', streak: initialStreakCount });
scoreTask({ user: ref.afterUser, task, direction: 'up' });
scoreTask({ user: ref.afterUser, task, direction: 'down' });
expect(ref.afterUser.achievements.streak).to.equal(0);
});
it('decrements a multiple streak achievement when unticking a Daily', () => {
let task1 = generateDaily({ userId: ref.afterUser._id, text: 'first daily', streak: initialStreakCount });
scoreTask({ user: ref.afterUser, task: task1, direction: 'up' });
let task2 = generateDaily({ userId: ref.afterUser._id, text: 'second daily', streak: initialStreakCount });
scoreTask({ user: ref.afterUser, task: task2, direction: 'up' });
scoreTask({ user: ref.afterUser, task: task2, direction: 'down' });
expect(ref.afterUser.achievements.streak).to.equal(1);
});
it('does not give a streak achievement for a streak of zero', () => {
let task = generateDaily({ userId: ref.afterUser._id, text: 'some daily', streak: -1 });
scoreTask({ user: ref.afterUser, task, direction: 'up' });
expect(ref.afterUser.achievements.streak).to.be.undefined;
});
it('does not remove a streak achievement when unticking a Daily gives a streak of zero', () => {
let task1 = generateDaily({ userId: ref.afterUser._id, text: 'first daily', streak: initialStreakCount });
scoreTask({ user: ref.afterUser, task: task1, direction: 'up' });
let task2 = generateDaily({ userId: ref.afterUser._id, text: 'second daily', streak: 1 });
scoreTask({ user: ref.afterUser, task: task2, direction: 'down' });
expect(ref.afterUser.achievements.streak).to.equal(1);
});
});
describe('scores', () => {
let options = {};
let habit;