Files
2020-11-19 23:13:18 +01:00

126 lines
3.6 KiB
TypeScript

/* eslint-disable promise/catch-or-return,promise/no-callback-in-promise */
import {setConfig, getConfig, resetConfig, getUserInfo} from '../src/utils/utils';
import {Resolvable, WaitForSync} from '../src/utils/resolvable';
import {describe, it} from 'mocha';
import {expect} from 'chai';
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
import * as fetchMock from 'fetch-mock';
import {UserInfo} from '../src/utils/userinfo';
describe('frontend:utils - setConfig/getConfig', () => {
const CONFIG = {EXTERNAL_BASE_URL: 'http://demo.url'};
afterEach(() => resetConfig());
it('should return config (afterwards)', async () => {
setConfig(CONFIG);
const config = await getConfig();
expect(config).to.deep.equal(CONFIG);
});
it('should return config (beforehand)', (done) => {
getConfig().then((config) => {
expect(config).to.deep.equal(CONFIG);
done();
});
setConfig(CONFIG);
});
});
describe('frontend:utils - getUserInfo', () => {
const CONFIG = {EXTERNAL_BASE_URL: 'http://demo.url'};
const USER_INFO: Partial<UserInfo> = {
name: 'John Doe',
};
beforeEach(() => setConfig(CONFIG));
afterEach(() => resetConfig());
it('should equal fetched', async () => {
setConfig(CONFIG);
fetchMock.mock('http://demo.url/api/user', {
status: 200,
body: JSON.stringify(USER_INFO),
});
const userInfo = await getUserInfo();
expect(userInfo).to.deep.equal(USER_INFO);
});
});
describe('frontend:utils - resolvable', () => {
const DATA = 5;
const ERROR = new Error('Custom error!');
it('waitForSync should return data (afterwards)', async () => {
const resolvable = new WaitForSync<number>();
resolvable.setData(DATA);
const data = await resolvable.resolve();
expect(data).to.deep.equal(DATA);
});
it('waitForSync should return data (beforehand)', (done) => {
const resolvable = new WaitForSync<number>();
resolvable.resolve().then((data) => {
expect(data).to.deep.equal(DATA);
done();
});
resolvable.setData(DATA);
});
it('waitForSync should error (afterwards)', async () => {
const resolvable = new WaitForSync<number>();
resolvable.setError(ERROR);
try {
await resolvable.resolve();
} catch (err) {
expect(err).to.deep.equal(ERROR);
}
});
it('waitForSync should error (beforehand)', (done) => {
const resolvable = new WaitForSync<number>();
resolvable.resolve().catch((err) => {
expect(err).to.deep.equal(ERROR);
done();
});
resolvable.setError(ERROR);
});
it('waitForSync should resolve data twice', async () => {
const resolvable = new WaitForSync<number>();
resolvable.setData(DATA);
const data1 = await resolvable.resolve();
const data2 = await resolvable.resolve();
expect(data1).to.deep.equal(DATA);
expect(data2).to.deep.equal(DATA);
});
it('waitForSync should error twice', async () => {
const resolvable = new WaitForSync<number>();
resolvable.setError(ERROR);
try {
await resolvable.resolve();
} catch (err) {
expect(err).to.deep.equal(ERROR);
}
try {
await resolvable.resolve();
} catch (err) {
expect(err).to.deep.equal(ERROR);
}
});
it('waitForSync should wait for resolution twice', (done) => {
const resolvable = new WaitForSync<number>();
Promise.all([
resolvable.resolve().then((data) => {
expect(data).to.deep.equal(DATA);
}), resolvable.resolve().then((data) => {
expect(data).to.deep.equal(DATA);
}),
]).then(() => done());
resolvable.setData(DATA);
});
it('resolvable should resolve', async () => {
const resolvable = new Resolvable(async () => DATA);
const data = await resolvable.resolve();
expect(data).to.deep.equal(DATA);
});
});