mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-23 02:41:50 +03:00
e69fa71584
refs https://linear.app/tryghost/issue/CORE-64/resolve-undissmissable-update-notification-banners - We aim for full unit test coverage in our libraries and services. The very basic method coverage was missing so adding it!
247 lines
8.5 KiB
JavaScript
247 lines
8.5 KiB
JavaScript
const should = require('should');
|
|
const sinon = require('sinon');
|
|
|
|
const moment = require('moment');
|
|
const Notifications = require('../../../../../core/server/services/notifications/notifications');
|
|
const {owner} = require('../../../../utils/fixtures/context');
|
|
|
|
describe('Notifications Service', function () {
|
|
it('can browse non-major version upgrade notifications', function () {
|
|
const settingsCache = {
|
|
get: sinon.fake.returns([{
|
|
dismissible: true,
|
|
id: '130f7c24-113a-4768-a698-12a8b34223f1',
|
|
type: 'info',
|
|
message: `<strong>Ghost 5.1.3 is now available</strong> - You are using an old version of Ghost, which means you don't have access to the latest features. <a href=\'https://ghost.org/changelog/4/\' target=\'_blank\' rel=\'noopener\'>Read more!</a>`,
|
|
createdAt: '2021-03-16T12:55:20.000Z',
|
|
addedAt: '2021-03-17T01:41:20.906Z'
|
|
}])
|
|
};
|
|
|
|
const notificationSvc = new Notifications({
|
|
settingsCache,
|
|
ghostVersion: {
|
|
full: '4.1.0'
|
|
}
|
|
});
|
|
|
|
const notifications = notificationSvc.browse({user: owner});
|
|
|
|
should.exist(notifications);
|
|
notifications.length.should.equal(1);
|
|
});
|
|
|
|
it('can browse major version upgrade notifications', function () {
|
|
const settingsCache = {
|
|
get: sinon.fake.returns([{
|
|
dismissible: true,
|
|
location: 'bottom',
|
|
status: 'alert',
|
|
id: '130f7c24-113a-4768-a698-12a8b34223f6',
|
|
custom: true,
|
|
createdAt: '2021-03-16T12:55:20.000Z',
|
|
type: 'info',
|
|
top: true,
|
|
message: `<strong>Ghost 5.0 is now available</strong> - You are using an old version of Ghost, which means you don't have access to the latest features. <a href=\'https://ghost.org/changelog/4/\' target=\'_blank\' rel=\'noopener\'>Read more!</a>`,
|
|
seen: true,
|
|
addedAt: '2021-03-17T01:41:20.906Z',
|
|
seenBy: ['1']
|
|
}])
|
|
};
|
|
|
|
const notificationSvc = new Notifications({
|
|
settingsCache,
|
|
ghostVersion: {
|
|
full: '4.0.0'
|
|
}
|
|
});
|
|
|
|
const notifications = notificationSvc.browse({user: owner});
|
|
|
|
should.exist(notifications);
|
|
notifications.length.should.equal(1);
|
|
});
|
|
|
|
it('cannot see 2.0 version upgrade notifications in Ghost 3.0', function () {
|
|
const settingsCache = {
|
|
get: sinon.fake.returns([{
|
|
dismissible: true,
|
|
location: 'bottom',
|
|
status: 'alert',
|
|
id: '130f7c24-113a-4768-a698-12a8b34223f7',
|
|
custom: true,
|
|
createdAt: '2020-03-16T12:55:20.000Z',
|
|
type: 'info',
|
|
top: true,
|
|
message: `<strong>Ghost 2.0 is now available</strong> - You are using an old version of Ghost, which means you don't have access to the latest features.`,
|
|
seen: true,
|
|
addedAt: '2020-03-17T01:41:20.906Z',
|
|
seenBy: ['1']
|
|
}])
|
|
};
|
|
|
|
const notificationSvc = new Notifications({
|
|
settingsCache,
|
|
ghostVersion: {
|
|
full: '3.0.0'
|
|
}
|
|
});
|
|
|
|
const notifications = notificationSvc.browse({user: owner});
|
|
|
|
should.exist(notifications);
|
|
notifications.length.should.equal(0);
|
|
});
|
|
|
|
it('cannot see 4.0 version upgrade notifications in Ghost 4.0', function () {
|
|
const settingsCache = {
|
|
get: sinon.fake.returns([{
|
|
dismissible: true,
|
|
location: 'bottom',
|
|
status: 'alert',
|
|
id: '130f7c24-113a-4768-a698-12a8b34223f8',
|
|
custom: true,
|
|
createdAt: '2021-03-16T12:55:20.000Z',
|
|
type: 'info',
|
|
top: true,
|
|
message: `<strong>Ghost 4.0 is now available</strong> - You are using an old version of Ghost, which means you don't have access to the latest features.`,
|
|
seen: true,
|
|
addedAt: '2021-03-17T01:41:20.906Z',
|
|
seenBy: ['1']
|
|
}])
|
|
};
|
|
|
|
const notificationSvc = new Notifications({
|
|
settingsCache,
|
|
ghostVersion: {
|
|
full: '4.0.0'
|
|
}
|
|
});
|
|
|
|
const notifications = notificationSvc.browse({user: owner});
|
|
|
|
should.exist(notifications);
|
|
notifications.length.should.equal(0);
|
|
});
|
|
|
|
it('cannot see 5.0 version upgrade notifications in Ghost 5.0', function () {
|
|
const settingsCache = {
|
|
get: sinon.fake.returns([{
|
|
dismissible: true,
|
|
location: 'bottom',
|
|
status: 'alert',
|
|
id: '130f7c24-113a-4768-a698-12a8b34223f9',
|
|
custom: true,
|
|
createdAt: '2022-03-16T12:55:20.000Z',
|
|
type: 'info',
|
|
top: true,
|
|
message: `<strong>Ghost 5.0 is now available</strong> - You are using an old version of Ghost, which means you don't have access to the latest features.`,
|
|
seen: true,
|
|
addedAt: '2022-03-17T01:41:20.906Z',
|
|
seenBy: ['1']
|
|
}])
|
|
};
|
|
|
|
const notificationSvc = new Notifications({
|
|
settingsCache,
|
|
ghostVersion: {
|
|
full: '5.0.0'
|
|
}
|
|
});
|
|
|
|
const notifications = notificationSvc.browse({user: owner});
|
|
|
|
should.exist(notifications);
|
|
notifications.length.should.equal(0);
|
|
});
|
|
|
|
describe('add', function () {
|
|
it('adds a single notification when no previous exist', function () {
|
|
const existingNotifications = [];
|
|
const settingsCache = {
|
|
get: sinon.fake.returns(existingNotifications)
|
|
};
|
|
|
|
const notificationsSvc = new Notifications({
|
|
settingsCache,
|
|
ghostVersion: {
|
|
full: '4.1.0'
|
|
}
|
|
});
|
|
|
|
const {allNotifications, notificationsToAdd} = notificationsSvc.add({
|
|
notifications: [{
|
|
custom: true,
|
|
createdAt: moment().toDate(),
|
|
status: 'alert',
|
|
type: 'info',
|
|
dismissible: true,
|
|
top: true,
|
|
message: 'Hello test world!'
|
|
}]
|
|
});
|
|
|
|
allNotifications.length.should.equal(0);
|
|
notificationsToAdd.length.should.equal(1);
|
|
});
|
|
});
|
|
|
|
describe('Stored notifications data corruption recovery', function () {
|
|
it('should correct broken notifications data on browse', function () {
|
|
const settingsCache = {
|
|
get: sinon.fake.returns({
|
|
message: 'this object should be an array!'
|
|
})
|
|
};
|
|
const settingsModelStub = sinon.stub().resolves();
|
|
|
|
const notificationSvc = new Notifications({
|
|
settingsCache,
|
|
ghostVersion: {
|
|
full: '5.0.0'
|
|
},
|
|
SettingsModel: {
|
|
edit: settingsModelStub
|
|
}
|
|
});
|
|
|
|
const notifications = notificationSvc.browse({user: owner});
|
|
|
|
should.exist(notifications);
|
|
notifications.length.should.equal(0);
|
|
|
|
settingsModelStub.called.should.equal(true);
|
|
settingsModelStub.args[0][0].should.eql([{
|
|
key: 'notifications',
|
|
value: '[]'
|
|
}]);
|
|
});
|
|
|
|
it('does not trigger correction when the data is in valid format', function () {
|
|
const settingsCache = {
|
|
get: sinon.fake.returns([{
|
|
message: 'this works! 5.1.0'
|
|
}])
|
|
};
|
|
const settingsModelStub = sinon.stub().resolves();
|
|
|
|
const notificationSvc = new Notifications({
|
|
settingsCache,
|
|
ghostVersion: {
|
|
full: '5.0.0'
|
|
},
|
|
SettingsModel: {
|
|
edit: settingsModelStub
|
|
}
|
|
});
|
|
|
|
const notifications = notificationSvc.browse({user: owner});
|
|
|
|
should.exist(notifications);
|
|
notifications.length.should.equal(1);
|
|
|
|
settingsModelStub.called.should.equal(false);
|
|
});
|
|
});
|
|
});
|