import fetch from 'jest-fetch-mock';
import '@testing-library/jest-dom';
import { asyncUserStatusCheck } from '../packs/asyncUserStatusCheck';
global.fetch = fetch;
function fakeUserIsSuspended() {
return JSON.stringify({
id: 123,
username: 'user123',
suspended: true,
});
}
function fakeUserNotSuspended() {
return JSON.stringify({
id: 123,
username: 'user123',
});
}
describe('asyncUserStatusCheck', () => {
beforeEach(() => {
global.Honeybadger = { notify: jest.fn() };
fetch.resetMocks();
window.document.body.innerHTML = `
`;
});
describe('user is **NOT** suspended', () => {
beforeEach(() => {
fetch.mockResponse(fakeUserNotSuspended());
});
it('uses fetch to retrieve data async', async () => {
await asyncUserStatusCheck();
expect(fetch).toHaveBeenCalledWith('/users/123');
});
it('does not badge the user', async () => {
await asyncUserStatusCheck();
expect(document.body.innerHTML).toMatchSnapshot();
expect(document.body.innerHTML).not.toMatch(/Suspended/);
});
});
describe('user **is** suspended', () => {
beforeEach(() => {
fetch.mockResponse(fakeUserIsSuspended());
});
it('uses fetch to retrieve data async', async () => {
await asyncUserStatusCheck();
expect(fetch).toHaveBeenCalledWith('/users/123');
});
it('**does** badge the user', async () => {
await asyncUserStatusCheck();
expect(document.body.innerHTML).toMatchSnapshot();
expect(document.body.innerHTML).toMatch(/Suspended/);
});
});
});