Files
pyscript/pyscriptjs/tests/unit/exceptions.test.ts
Hood Chatham 08f34f748b Apply prettier to css, html, js, md, ts, and yml (#1249)
* Apply prettier to css, js, html, md, ts, and yml

As a followup I will add prettier to the .pre-commit config.
This patch is 100% generated by prettier.
I used a forked version of prettier that understands the
py-script tag.
See https://github.com/hoodmane/pyscript-prettier-precommit
for more info.

* Apply old pre-commit

* Revert some problems

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Revert some changes

* More changes

* Fix pre-commit

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2023-03-06 14:20:21 +00:00

124 lines
4.8 KiB
TypeScript

import { expect, it, jest, describe, afterEach } from '@jest/globals';
import { _createAlertBanner, UserError, FetchError, ErrorCode } from '../../src/exceptions';
describe('Test _createAlertBanner', () => {
afterEach(() => {
// Ensure we always have a clean body
document.body.innerHTML = `<div>Hello World</div>`;
});
it("error level shouldn't contain close button", async () => {
_createAlertBanner('Something went wrong!', 'error');
const banner = document.getElementsByClassName('alert-banner');
const closeButton = document.getElementById('alert-close-button');
expect(banner.length).toBe(1);
expect(banner[0].innerHTML).toBe('Something went wrong!');
expect(closeButton).toBeNull();
});
it('warning level should contain close button', async () => {
_createAlertBanner('This is a warning', 'warning');
const banner = document.getElementsByClassName('alert-banner');
const closeButton = document.getElementById('alert-close-button');
expect(banner.length).toBe(1);
expect(banner[0].innerHTML).toContain('This is a warning');
expect(closeButton).not.toBeNull();
});
it('error level banner should log to console', async () => {
const logSpy = jest.spyOn(console, 'error');
_createAlertBanner('Something went wrong!');
expect(logSpy).toHaveBeenCalledWith('Something went wrong!');
});
it('warning level banner should log to console', async () => {
const logSpy = jest.spyOn(console, 'warn');
_createAlertBanner('This warning', 'warning');
expect(logSpy).toHaveBeenCalledWith('This warning');
});
it('close button should remove element from page', async () => {
let banner = document.getElementsByClassName('alert-banner');
expect(banner.length).toBe(0);
_createAlertBanner('Warning!', 'warning');
// Just a sanity check
banner = document.getElementsByClassName('alert-banner');
expect(banner.length).toBe(1);
const closeButton = document.getElementById('alert-close-button');
if (closeButton) {
closeButton.click();
// Confirm that clicking the close button, removes the element
banner = document.getElementsByClassName('alert-banner');
expect(banner.length).toBe(0);
} else {
fail('Unable to find close button on the page, but should exist');
}
});
it("toggling logging off on error alert shouldn't log to console", async () => {
const errorLogSpy = jest.spyOn(console, 'error');
_createAlertBanner('Test error', 'error', 'text', false);
expect(errorLogSpy).not.toHaveBeenCalledWith('Test error');
});
it("toggling logging off on warning alert shouldn't log to console", async () => {
const warnLogSpy = jest.spyOn(console, 'warn');
_createAlertBanner('Test warning', 'warning', 'text', false);
expect(warnLogSpy).not.toHaveBeenCalledWith('Test warning');
});
it('_createAlertbanner messageType text writes message to content', async () => {
let banner = document.getElementsByClassName('alert-banner');
expect(banner.length).toBe(0);
const message = '<p>Test message</p>';
_createAlertBanner(message, 'error', 'text');
banner = document.getElementsByClassName('alert-banner');
expect(banner.length).toBe(1);
expect(banner[0].innerHTML).toBe('&lt;p&gt;Test message&lt;/p&gt;');
expect(banner[0].textContent).toBe(message);
});
it('_createAlertbanner messageType html writes message to innerHTML', async () => {
let banner = document.getElementsByClassName('alert-banner');
expect(banner.length).toBe(0);
const message = '<p>Test message</p>';
_createAlertBanner(message, 'error', 'html');
banner = document.getElementsByClassName('alert-banner');
expect(banner.length).toBe(1);
expect(banner[0].innerHTML).toBe(message);
expect(banner[0].textContent).toBe('Test message');
});
});
describe('Test Exceptions', () => {
it('UserError contains errorCode and shows in message', async () => {
const errorCode = ErrorCode.BAD_CONFIG;
const message = 'Test error';
const userError = new UserError(ErrorCode.BAD_CONFIG, message);
expect(userError.errorCode).toBe(errorCode);
expect(userError.message).toBe(`(${errorCode}): ${message}`);
});
it('FetchError contains errorCode and shows in message', async () => {
const errorCode = ErrorCode.FETCH_NOT_FOUND_ERROR;
const message = 'Test error';
const fetchError = new FetchError(errorCode, message);
expect(fetchError.errorCode).toBe(errorCode);
expect(fetchError.message).toBe(`(${errorCode}): ${message}`);
});
});