Files
pybricks-code/src/licenses/LicenseDialog.test.tsx
T
David Lechner d88ce8998f test: wrap all user calls in act()
Some user events trigger react dom changes. These need to be wrapped in
act() to avoid a warning printed to the console. To be save, we wrap
all instances.
2023-03-10 18:16:27 -06:00

57 lines
1.8 KiB
TypeScript

// SPDX-License-Identifier: MIT
// Copyright (c) 2022-2023 The Pybricks Authors
import { Classes } from '@blueprintjs/core';
import { act, cleanup } from '@testing-library/react';
import React from 'react';
import { testRender } from '../../test';
import LicenseDialog from './LicenseDialog';
afterEach(() => {
jest.restoreAllMocks();
cleanup();
localStorage.clear();
});
describe('LicenseDialog', () => {
it('should show placeholder if no license is selected', () => {
const [, dialog] = testRender(
<LicenseDialog isOpen={true} onClose={() => undefined} />,
);
expect(dialog.getByText('Select a package to view the license.')).toBeDefined();
});
it('should show a license', async () => {
jest.spyOn(window, 'fetch').mockResolvedValue(
new Response(
JSON.stringify([
{
name: 'super-duper',
version: '1.0.0',
author: 'Joe Somebody',
license: 'MIT',
licenseText: '...',
},
]),
),
);
const [user, dialog] = testRender(
<LicenseDialog isOpen={true} onClose={() => undefined} />,
);
// have to wait for async fetch
const treeNode = await dialog.findByText('super-duper', {
selector: `.${Classes.TREE_NODE} *`,
});
// when the dialog is first shown, no license is selected
expect(dialog.queryByText('Joe Somebody')).toBeNull();
// then when you click on a license name, the license is shown
await act(() => user.click(treeNode));
expect(dialog.getByText('Joe Somebody')).toBeDefined();
});
});