diff --git a/test/api/unit/models/user.test.js b/test/api/unit/models/user.test.js index b637b84753..0501e3ed81 100644 --- a/test/api/unit/models/user.test.js +++ b/test/api/unit/models/user.test.js @@ -195,17 +195,23 @@ describe('User Model', () => { expect(userToJSON.notifications[0].seen).to.eql(false); }); - it('removes invalid notifications when calling toJSON', () => { - const user = new User(); + it('removes invalid notifications when loading the user', async () => { + let user = new User(); + await user.save(); + await user.update({ + $set: { + notifications: [ + null, // invalid, not an object + { seen: true }, // invalid, no type or id + { id: 123 }, // invalid, no type + // invalid, no id, not included here because the id would be added automatically + // {type: 'ABC'}, + { type: 'ABC', id: '123' }, // valid + ], + }, + }).exec(); - user.notifications = [ - null, // invalid, not an object - { seen: true }, // invalid, no type or id - { id: 123 }, // invalid, no type - // invalid, no id, not included here because the id would be added automatically - // {type: 'ABC'}, - { type: 'ABC', id: '123' }, // valid - ]; + user = await User.findById(user._id).exec(); const userToJSON = user.toJSON(); expect(userToJSON.notifications.length).to.equal(1); @@ -215,26 +221,6 @@ describe('User Model', () => { expect(userToJSON.notifications[0].id).to.equal('123'); }); - it('removes invalid notifications when saving', async () => { - const user = new User(); - - user.notifications = [ - null, // invalid, not an object - { seen: true }, // invalid, no type or id - { id: 123 }, // invalid, no type - // invalid, no id, not included here because the id would be added automatically - // {type: 'ABC'}, - { type: 'ABC', id: '123' }, // valid - ]; - - await user.save(); - expect(user.notifications.length).to.equal(1); - - expect(user.notifications[0]).to.have.all.keys(['data', 'id', 'type', 'seen']); - expect(user.notifications[0].type).to.equal('ABC'); - expect(user.notifications[0].id).to.equal('123'); - }); - it('can add notifications with data and already marked as seen', () => { const user = new User(); diff --git a/test/api/unit/models/userNotification.test.js b/test/api/unit/models/userNotification.test.js index c52a44bd21..e9fb8f8c10 100644 --- a/test/api/unit/models/userNotification.test.js +++ b/test/api/unit/models/userNotification.test.js @@ -1,7 +1,7 @@ import { model as UserNotification } from '../../../../website/server/models/userNotification'; describe('UserNotification Model', () => { - context('convertNotificationsToSafeJson', () => { + context('cleanupCorruptData', () => { it('converts an array of notifications to a safe version', () => { const notifications = [ null, // invalid, not an object @@ -11,11 +11,12 @@ describe('UserNotification Model', () => { new UserNotification({ type: 'ABC', id: 123 }), // valid ]; - const notificationsToJSON = UserNotification.convertNotificationsToSafeJson(notifications); - expect(notificationsToJSON.length).to.equal(1); - expect(notificationsToJSON[0]).to.have.all.keys(['data', 'id', 'type', 'seen']); - expect(notificationsToJSON[0].type).to.equal('ABC'); - expect(notificationsToJSON[0].id).to.equal('123'); + const safeNotifications = UserNotification.cleanupCorruptData(notifications); + expect(safeNotifications.length).to.equal(1); + expect(safeNotifications[0].data).to.deep.equal({}); + expect(safeNotifications[0].seen).to.equal(false); + expect(safeNotifications[0].type).to.equal('ABC'); + expect(safeNotifications[0].id).to.equal('123'); }); }); }); diff --git a/website/server/models/userNotification.js b/website/server/models/userNotification.js index 63b550bf15..b5c6561ed9 100644 --- a/website/server/models/userNotification.js +++ b/website/server/models/userNotification.js @@ -93,6 +93,7 @@ export const schema = new Schema({ * Called by user's post init hook (models/user/hooks.js) */ schema.statics.cleanupCorruptData = function cleanupCorruptNotificationsData (notifications) { + console.log('fixing stuff', notifications); if (!notifications) return notifications; let filteredNotifications = notifications.filter(notification => {