add new error banner module for showing users js errors

this ensures it's reusable by other components, and easier to unit test
by isolating the separate concerns

note: this is not in Modules since that's designed for classes that are
then bound to an element in the DOM as indicated by a data-module
attribute. This will just live at the window.GOVUK level since we want
there to only ever be one `.banner-dangerous` warning.
This commit is contained in:
Leo Hemsted
2021-07-20 12:14:10 +01:00
parent c42fc071b5
commit c96a1dc0b7
3 changed files with 60 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
beforeAll(() => {
require('../../app/assets/javascripts/errorBanner.js')
});
afterAll(() => {
require('./support/teardown.js');
});
describe("Error Banner", () => {
afterEach(() => {
document.body.innerHTML = '';
});
describe("The `hideBanner` method", () => {
test("Will hide the element", () => {
document.body.innerHTML = `
<span class="govuk-error-message banner-dangerous js-error-visible">
</span>`;
window.GOVUK.ErrorBanner.hideBanner();
expect(document.querySelector('.banner-dangerous').classList).toContain('govuk-!-display-none')
});
});
describe("The `showBanner` method", () => {
beforeEach(() => {
document.body.innerHTML = `
<span class="govuk-error-message banner-dangerous js-error-visible govuk-!-display-none">
</span>`;
window.GOVUK.ErrorBanner.showBanner('Some Err');
});
test("Will set a specific error message on the element", () => {
expect(document.querySelector('.banner-dangerous').textContent).toEqual('Error: Some Err')
});
test("Will show the element", () => {
expect(document.querySelector('.banner-dangerous').classList).not.toContain('govuk-!-display-none')
});
});
});