This commit is contained in:
Matteo Pagliazzi
2018-02-27 22:02:12 +01:00
committed by GitHub
parent 892ba3b741
commit 3e723ec4de
2 changed files with 49 additions and 2 deletions

View File

@@ -352,7 +352,12 @@ describe('User Model', () => {
context('manage unallocated stats points notifications', () => {
it('doesn\'t add a notification if there are no points to allocate', async () => {
let user = new User();
user.flags.classSelected = true;
user.preferences.disableClasses = false;
user.stats.class = 'warrior';
user = await user.save(); // necessary for user.isSelected to work correctly
const oldNotificationsCount = user.notifications.length;
user.stats.points = 0;
@@ -363,6 +368,10 @@ describe('User Model', () => {
it('removes a notification if there are no more points to allocate', async () => {
let user = new User();
user.flags.classSelected = true;
user.preferences.disableClasses = false;
user.stats.class = 'warrior';
user.stats.points = 9;
user = await user.save(); // necessary for user.isSelected to work correctly
@@ -377,6 +386,9 @@ describe('User Model', () => {
it('adds a notification if there are points to allocate', async () => {
let user = new User();
user.flags.classSelected = true;
user.preferences.disableClasses = false;
user.stats.class = 'warrior';
user = await user.save(); // necessary for user.isSelected to work correctly
const oldNotificationsCount = user.notifications.length;
@@ -391,6 +403,9 @@ describe('User Model', () => {
it('adds a notification if the points to allocate have changed', async () => {
let user = new User();
user.stats.points = 9;
user.flags.classSelected = true;
user.preferences.disableClasses = false;
user.stats.class = 'warrior';
user = await user.save(); // necessary for user.isSelected to work correctly
const oldNotificationsCount = user.notifications.length;
@@ -406,6 +421,37 @@ describe('User Model', () => {
expect(user.notifications[0].data.points).to.equal(11);
expect(user.notifications[0].id).to.not.equal(oldNotificationsUUID);
});
it('does not add a notification if the user has disabled classes', async () => {
let user = new User();
user.stats.points = 9;
user.flags.classSelected = true;
user.preferences.disableClasses = true;
user.stats.class = 'warrior';
user = await user.save(); // necessary for user.isSelected to work correctly
const oldNotificationsCount = user.notifications.length;
user.stats.points = 9;
user = await user.save();
expect(user.notifications.length).to.equal(oldNotificationsCount);
});
it('does not add a notification if the user has not selected a class', async () => {
let user = new User();
user.stats.points = 9;
user.flags.classSelected = false;
user.stats.class = 'warrior';
user = await user.save(); // necessary for user.isSelected to work correctly
const oldNotificationsCount = user.notifications.length;
user.stats.points = 9;
user = await user.save();
expect(user.notifications.length).to.equal(oldNotificationsCount);
});
});
});

View File

@@ -253,8 +253,9 @@ schema.pre('save', true, function preSaveUser (next, done) {
}
// Manage unallocated stats points notifications
if (this.isSelected('stats') && this.isSelected('notifications')) {
if (this.isSelected('stats') && this.isSelected('notifications') && this.isSelected('flags') && this.isSelected('preferences')) {
const pointsToAllocate = this.stats.points;
const classNotEnabled = !this.flags.classSelected || this.preferences.disableClasses;
// Sometimes there can be more than 1 notification
const existingNotifications = this.notifications.filter(notification => {
@@ -271,7 +272,7 @@ schema.pre('save', true, function preSaveUser (next, done) {
let notificationsToRemove = outdatedNotification ? existingNotificationsLength : existingNotificationsLength - 1;
// If there are points to allocate and the notification is outdated, add a new notifications
if (pointsToAllocate > 0 && outdatedNotification) {
if (pointsToAllocate > 0 && !classNotEnabled && outdatedNotification) {
this.addNotification('UNALLOCATED_STATS_POINTS', { points: pointsToAllocate });
}