Make the welcome message disappear after sevent days of first viewing.
This commit is contained in:
@@ -3,18 +3,37 @@ import 'jquery.cookie';
|
||||
|
||||
export class WelcomeMessage { // eslint-disable-line import/prefer-default-export
|
||||
|
||||
constructor(options) {
|
||||
$('.dismiss-message button').click(() => {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: options.dismissUrl,
|
||||
headers: {
|
||||
'X-CSRFToken': $.cookie('csrftoken'),
|
||||
},
|
||||
success: () => {
|
||||
$('.welcome-message').hide();
|
||||
},
|
||||
});
|
||||
static dismissWelcomeMessage(dismissUrl) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: dismissUrl,
|
||||
headers: {
|
||||
'X-CSRFToken': $.cookie('csrftoken'),
|
||||
},
|
||||
success: () => {
|
||||
$('.welcome-message').hide();
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
constructor(options) {
|
||||
// Dismiss the welcome message if the user clicks dismiss, or auto-dismiss if
|
||||
// the user doesn't click dismiss in 7 days from when it was first viewed.
|
||||
|
||||
// Check to see if the welcome message has been displayed at all.
|
||||
if ($('.welcome-message').length > 0) {
|
||||
// If the welcome message has been viewed.
|
||||
if ($.cookie('welcome-message-viewed') === 'True') {
|
||||
// If the timer cookie no longer exists, dismiss the welcome message permanently.
|
||||
if ($.cookie('welcome-message-timer') !== 'True') {
|
||||
WelcomeMessage.dismissWelcomeMessage(options.dismissUrl);
|
||||
}
|
||||
} else {
|
||||
// Set both the viewed cookie and the timer cookie.
|
||||
$.cookie('welcome-message-viewed', 'True', { expires: 365 });
|
||||
$.cookie('welcome-message-timer', 'True', { expires: 7 });
|
||||
}
|
||||
}
|
||||
$('.dismiss-message button').click(() => WelcomeMessage.dismissWelcomeMessage(options.dismissUrl));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,4 +30,56 @@ describe('Welcome Message factory', () => {
|
||||
requests.restore();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Ensure cookies behave as expected', () => {
|
||||
const endpointUrl = '/course/course_id/dismiss_message/';
|
||||
|
||||
function deleteAllCookies() {
|
||||
const cookies = document.cookie.split(';');
|
||||
cookies.forEach((cookie) => {
|
||||
const eqPos = cookie.indexOf('=');
|
||||
const name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
|
||||
document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT`;
|
||||
});
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
deleteAllCookies();
|
||||
});
|
||||
|
||||
function createWelcomeMessage() {
|
||||
loadFixtures('course_experience/fixtures/welcome-message-fragment.html');
|
||||
new WelcomeMessage({ dismissUrl: endpointUrl }); // eslint-disable-line no-new
|
||||
}
|
||||
|
||||
it('Cookies are created if none exist.', () => {
|
||||
createWelcomeMessage();
|
||||
expect($.cookie('welcome-message-viewed')).toBe('True');
|
||||
expect($.cookie('welcome-message-timer')).toBe('True');
|
||||
});
|
||||
|
||||
it('Nothing is hidden or dismissed if the timer is still active', () => {
|
||||
const $message = $('.welcome-message');
|
||||
$.cookie('welcome-message-viewed', 'True');
|
||||
$.cookie('welcome-message-timer', 'True');
|
||||
createWelcomeMessage();
|
||||
expect($message.attr('style')).toBe(undefined);
|
||||
});
|
||||
|
||||
it('Message is dismissed if the timer has expired and the message has been viewed.', () => {
|
||||
const requests = mockRequests(this);
|
||||
$.cookie('welcome-message-viewed', 'True');
|
||||
createWelcomeMessage();
|
||||
|
||||
const $message = $('.welcome-message');
|
||||
expectRequest(
|
||||
requests,
|
||||
'POST',
|
||||
endpointUrl,
|
||||
);
|
||||
respondWithJson(requests);
|
||||
expect($message.attr('style')).toBe('display: none;');
|
||||
requests.restore();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user