-
Notifications
You must be signed in to change notification settings - Fork 110
/
Notification-spec.js
117 lines (96 loc) · 4.1 KB
/
Notification-spec.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import Notification from '../../../../cfgov/unprocessed/js/molecules/Notification.js';
const HTML_SNIPPET = `
<div class="m-notification">
<svg xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 1000 1200" class="cf-icon-svg"></svg>
<div class="m-notification__content">
<div class="m-notification__message">Notification content</div>
</div>
</div>
`;
describe('Notification', () => {
const notificationSel = '.m-notification';
let notificationElem;
let notification;
beforeEach(() => {
document.body.innerHTML = HTML_SNIPPET;
notificationElem = document.querySelector(notificationSel);
notification = new Notification(notificationElem);
});
describe('init()', () => {
it('should return the instance when initialized', () => {
expect(notification.init()).toBeInstanceOf(Notification);
expect(notificationElem.dataset.jsHook).toBe('state_atomic_init');
expect(notification.init()).toBeInstanceOf(Notification);
});
it('should return the Notification instance if it has a success class', () => {
notificationElem.classList.add('m-notification--success');
expect(notification.init().constructor).toBe(Notification);
expect(notificationElem.dataset.jsHook).toBe('state_atomic_init');
});
it('should return the Notification instance if it has a warning class', () => {
notificationElem.classList.add('m-notification--warning');
expect(notification.init().constructor).toBe(Notification);
expect(notificationElem.dataset.jsHook).toBe('state_atomic_init');
});
it('should return the Notification instance if it has a error class', () => {
notificationElem.classList.add('m-notification--error');
expect(notification.init().constructor).toBe(Notification);
expect(notificationElem.dataset.jsHook).toBe('state_atomic_init');
});
});
describe('update()', () => {
beforeEach(() => {
notification.init();
});
it('should throw an error for unsupported type', () => {
try {
// TODO: The Notification should probably support setting the default.
notification.update('default', '');
} catch (error) {
expect(error.message).toBe(
'default is not a supported notification type!',
);
}
});
it('should update the notification type for the success state', () => {
notification.update(Notification.SUCCESS, '');
expect(notificationElem.className).toContain('m-notification--success');
});
it('should update the notification type for the warning state', () => {
notification.update(Notification.WARNING, '');
expect(notificationElem.className).toContain('m-notification--warning');
});
it('should update the notification type for the error state', () => {
notification.update(Notification.ERROR, '');
expect(notificationElem.className).toContain('m-notification--error');
});
it('should update the the notification message', () => {
const testMsg = 'Notification message content';
notification.update(Notification.SUCCESS, testMsg);
const message = notificationElem.querySelector(
'.m-notification__message',
);
const explanation = notificationElem.querySelector(
'.m-notification__explanation',
);
expect(notificationElem.className).toContain('m-notification--success');
expect(message.textContent).toContain(testMsg);
expect(explanation).toBeUndefined;
});
it('should update the notification explanation', () => {
const testMsg = 'Notification message content';
const testExplanation = 'Notification explanation content';
notification.update(Notification.SUCCESS, testMsg, testExplanation);
const message = notificationElem.querySelector(
'.m-notification__message',
);
const explanation = notificationElem.querySelector(
'.m-notification__explanation',
);
expect(notificationElem.className).toContain('m-notification--success');
expect(message.textContent).toContain(testMsg);
expect(explanation.textContent).toContain(testExplanation);
});
});
});