Skip to content

Commit

Permalink
Test(web): Add tests for Toast component
Browse files Browse the repository at this point in the history
  • Loading branch information
pavelklibani committed Mar 6, 2024
1 parent 76e2ce2 commit c026ed5
Showing 1 changed file with 93 additions and 0 deletions.
93 changes: 93 additions & 0 deletions packages/web/src/js/__tests__/Toast.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import { clearFixture, getFixture } from '../../../tests/helpers/fixture';
import Toast from '../Toast';
import { CLASS_NAME_HIDDEN, CLASS_NAME_OPEN } from '../constants';

const testId = 'toast-test';

const toastHtmlClosed = `
<div id="${testId}" class="ToastBar ToastBar--success ToastBar--dismissible is-hidden">
<button type="button" data-spirit-target="#${testId}" aria-expanded="false">Close</button>
</div>
`;

const toastHtmlOpened = `
<div id="${testId}" class="ToastBar ToastBar--success ToastBar--dismissible is-open">
<button type="button" data-spirit-target="#${testId}" aria-expanded="true">Close</button>
</div>
`;

describe('Toast', () => {
let fixtureEl: Element;

beforeAll(() => {
fixtureEl = getFixture();
});

afterEach(() => {
clearFixture();
});

describe('NAME', () => {
it('should return plugin name', () => {
expect(Toast.NAME).toEqual(expect.any(String));
});
});

describe('DATA_KEY', () => {
it('should return plugin data key', () => {
expect(Toast.DATA_KEY).toBe('toast');
});
});

describe('EVENT_KEY', () => {
it('should return plugin event key', () => {
expect(Toast.EVENT_KEY).toBe('.toast');
});
});

describe('constructor', () => {
it('should construct a toast', () => {
fixtureEl.innerHTML = toastHtmlClosed;
const element = fixtureEl.querySelector('.ToastBar') as HTMLElement;
const toast = new Toast(element);

expect(toast.element).toEqual(element);
});
});

describe('show', () => {
it('should show a toast', async () => {
fixtureEl.innerHTML = toastHtmlClosed;

const element = fixtureEl.querySelector('.ToastBar') as HTMLElement;
const toast = new Toast(element);
const trigger = fixtureEl.querySelector(`[data-spirit-target="#${testId}"]`) as HTMLButtonElement;

const showSpy = jest.spyOn(Toast.prototype, 'show');

await toast.show();

expect(showSpy).toHaveBeenCalled();
expect(trigger).toHaveAttribute('aria-expanded', 'true');
expect(element).toHaveClass(CLASS_NAME_OPEN);
});
});

describe('hide', () => {
it('should hide a toast', async () => {
fixtureEl.innerHTML = toastHtmlOpened;

const element = fixtureEl.querySelector('.ToastBar') as HTMLElement;
const toast = new Toast(element);
const trigger = fixtureEl.querySelector(`[data-spirit-target="#${testId}"]`) as HTMLButtonElement;

const hideSpy = jest.spyOn(Toast.prototype, 'hide');

await toast.hide();

expect(hideSpy).toHaveBeenCalled();
expect(trigger).toHaveAttribute('aria-expanded', 'false');
expect(element).toHaveClass(CLASS_NAME_HIDDEN);
});
});
});

0 comments on commit c026ed5

Please sign in to comment.