mirror of
https://github.com/pybricks/pybricks-code.git
synced 2026-09-15 02:54:07 +00:00
65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
// SPDX-License-Identifier: MIT
|
|
// Copyright (c) 2020-2021 The Pybricks Authors
|
|
|
|
// Tests for license sagas.
|
|
|
|
import { AsyncSaga, delay } from '../../test';
|
|
import { openLicenseDialog } from '../actions/app';
|
|
import { didFailToFetchList, didFetchList } from '../actions/license';
|
|
import { LicenseList } from '../reducers/license';
|
|
import license from './license';
|
|
|
|
afterAll(() => {
|
|
jest.restoreAllMocks();
|
|
});
|
|
|
|
describe('fetchLicenses', () => {
|
|
test('first call', async () => {
|
|
const testLicenseList: LicenseList = [];
|
|
const saga = new AsyncSaga(license, { license: { list: null } });
|
|
|
|
jest.spyOn(globalThis, 'fetch').mockResolvedValue(
|
|
new Response(JSON.stringify(testLicenseList)),
|
|
);
|
|
|
|
// initially, license list starts as null, so fetch is called to get
|
|
// the list
|
|
saga.put(openLicenseDialog());
|
|
|
|
const action = await saga.take();
|
|
expect(action).toEqual(didFetchList(testLicenseList));
|
|
|
|
await saga.end();
|
|
});
|
|
test('second call', async () => {
|
|
const testLicenseList: LicenseList = [];
|
|
const saga = new AsyncSaga(license, { license: { list: testLicenseList } });
|
|
|
|
jest.spyOn(globalThis, 'fetch').mockRejectedValue(
|
|
'fetch () should not have been called',
|
|
);
|
|
|
|
// after we have the list, we don't fetch it again since it will
|
|
// always be the same list
|
|
saga.put(openLicenseDialog());
|
|
|
|
// have to yield to be sure fetch call would have taken place on error
|
|
await delay(0);
|
|
|
|
await saga.end();
|
|
});
|
|
test('failed fetch', async () => {
|
|
const failResponse = new Response(undefined, { status: 404 });
|
|
const saga = new AsyncSaga(license, { license: { list: null } });
|
|
|
|
jest.spyOn(globalThis, 'fetch').mockResolvedValue(failResponse);
|
|
|
|
saga.put(openLicenseDialog());
|
|
|
|
const action = await saga.take();
|
|
expect(action).toEqual(didFailToFetchList(failResponse));
|
|
|
|
await saga.end();
|
|
});
|
|
});
|