Ghost/ghost/announcement-bar-settings/test/AnnouncementBarSettings.test.js
Naz e541ea8746
Extracted announcement visibility values to single place
refs https://github.com/TryGhost/Team/issues/3010

- Having all possible values in within single packages will make it easier to look for "source of truth" and is more maintainable rather than having values scattered all over the codebase
2023-04-26 14:42:33 +02:00

144 lines
5.4 KiB
JavaScript

const assert = require('assert');
const AnnouncementBarSettings = require('../index');
describe('AnnouncementBarSettings', function () {
it('can initialize', function () {
const announcementBarSettings = new AnnouncementBarSettings({
getAnnouncementSettings: () => ({
announcement: 'Hello world',
announcement_visibility: ['visitors'],
announcement_background: 'dark'
})
});
assert.ok(announcementBarSettings);
});
describe('AnnouncementVisibilityValues', function () {
it('has static VisibilityValues property', function () {
assert.ok(AnnouncementBarSettings.VisibilityValues);
assert.equal(AnnouncementBarSettings.VisibilityValues.VISITORS, 'visitors');
assert.equal(AnnouncementBarSettings.VisibilityValues.FREE_MEMBERS, 'free_members');
assert.equal(AnnouncementBarSettings.VisibilityValues.PAID_MEMBERS, 'paid_members');
});
});
describe('getAnnouncementSettings', function () {
const testVisibility = (announcementSettings, member, expected) => {
const announcementBarSettings = new AnnouncementBarSettings({
getAnnouncementSettings: () => (announcementSettings)
});
const settings = announcementBarSettings.getAnnouncementSettings(member);
assert.deepEqual(settings, expected);
};
it('returns undefined settings if there is no announcement content', function () {
testVisibility({
announcement: null,
announcement_visibility: []
}, undefined, undefined);
});
it('returns undefined announcement settings if there is no announcement visibility', function () {
testVisibility({
announcement: {
announcement: 'Hello world',
announcement_visibility: []
},
announcement_visibility: []
}, undefined, undefined);
});
it('returns announcement if visibility is set to visitors and there is no logged in member', function () {
testVisibility({
announcement: 'Hello world',
announcement_visibility: ['visitors'],
announcement_background: 'dark'
}, undefined, {
announcement: 'Hello world',
announcement_background: 'dark'
});
});
it('returns announcement if visibility is set to free_members and member is free', function () {
testVisibility({
announcement: 'Hello world',
announcement_visibility: ['free_members'],
announcement_background: 'dark'
}, {
status: 'free'
}, {
announcement: 'Hello world',
announcement_background: 'dark'
});
});
it('returns announcement if visibility is set to paid_members and member is paid', function () {
testVisibility({
announcement: 'Hello world',
announcement_visibility: ['paid_members'],
announcement_background: 'dark'
}, {
status: 'paid'
}, {
announcement: 'Hello world',
announcement_background: 'dark'
});
});
it('returns announcement if visibility is set to paid and paid_members and member is comped', function () {
testVisibility({
announcement: 'Hello world',
announcement_visibility: ['paid_members'],
announcement_background: 'dark'
}, {
status: 'comped'
}, {
announcement: 'Hello world',
announcement_background: 'dark'
});
});
it('returns announcement if visibility is set to paid_members and member is comped', function () {
testVisibility({
announcement: 'Hello world',
announcement_visibility: ['paid_members'],
announcement_background: 'dark'
}, {
status: 'comped'
}, {
announcement: 'Hello world',
announcement_background: 'dark'
});
});
it('does not return announcement if visibility is set to paid_members and there is no members', function () {
testVisibility({
announcement: 'Hello world',
announcement_visibility: ['paid_members'],
announcement_background: 'dark'
}, undefined, undefined);
});
it('does not return announcement if visibility is set to paid_members and member is free', function () {
testVisibility({
announcement: 'Hello world',
announcement_visibility: ['paid_members'],
announcement_background: 'dark'
}, {
status: 'free'
}, undefined);
});
it('does not return announcement if visibility is set to free_members && paid_member and there is no member', function () {
testVisibility({
announcement: 'Hello world',
announcement_visibility: ['free_members', 'paid_members'],
announcement_background: 'dark'
}, undefined, undefined);
});
});
});