mirror of
https://github.com/pezkuwichain/pezkuwi-extension.git
synced 2026-11-09 09:37:05 +00:00
- @pezkuwi/dev, dev-test, dev-ts ^0.86.3 in the root and in every workspace package (they still asked for 0.84.3) - tsconfig.base target ES2022, the @pezkuwi/dev default; it carries the ErrorOptions type for `cause` - rethrown errors carry the original as `cause`; rejections are normalised to Error - page/messaging: the typed subscriber is called directly, not as `Function` - chrome mock: constant results through Promise.resolve - useLedger: drop a construction every branch below repeated - InputWithLabel: onKeyDown instead of the deprecated onKeyPress - Account: toggleActions + 1 instead of a pre-increment of a parameter - optional chains where a guard tested the same value - specs: mount<React.Component> so the wrappers are not `any`-typed - AccountsStore.set keeps its async override of KeyringStore.set: BaseStore.set handles its own failure, so it never rejects - extension-chains keeps its ChainProperties assertion: the package's own build does not load the type augmentation - the existing React Compiler findings (37, react-hooks rules only) are recorded in eslint-suppressions.json; a new one fails lint
92 lines
3.8 KiB
TypeScript
92 lines
3.8 KiB
TypeScript
// Copyright 2019-2026 @pezkuwi/extension-ui authors & contributors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
import '@pezkuwi/extension-mocks/chrome';
|
|
|
|
import type { ReactWrapper } from 'enzyme';
|
|
import type * as _ from '@pezkuwi/dev-test/globals.d.ts';
|
|
|
|
import Adapter from '@wojtekmaj/enzyme-adapter-react-17';
|
|
import enzyme from 'enzyme';
|
|
import React from 'react';
|
|
import { act } from 'react-dom/test-utils';
|
|
import { MemoryRouter } from 'react-router';
|
|
|
|
import * as messaging from '../../messaging.js';
|
|
import { flushAllPromises } from '../../testHelpers.js';
|
|
import Account from './Account.js';
|
|
|
|
const { configure, mount } = enzyme;
|
|
|
|
// // NOTE Required for spyOn when using @swc/jest
|
|
// // https://github.com/swc-project/swc/issues/3843
|
|
// jest.mock('../../messaging', (): Record<string, unknown> => ({
|
|
// __esModule: true,
|
|
// ...jest.requireActual('../../messaging')
|
|
// }));
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
configure({ adapter: new Adapter() });
|
|
|
|
jest.spyOn(messaging, 'getAllMetadata').mockImplementation(() => Promise.resolve([]));
|
|
|
|
describe('Account component', () => {
|
|
let wrapper: ReactWrapper;
|
|
const VALID_ADDRESS = 'HjoBp62cvsWDA3vtNMWxz6c9q13ReEHi9UGHK7JbZweH5g5';
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
const mountAccountComponent = (additionalAccountProperties: Record<string, unknown>): ReactWrapper => mount(
|
|
<MemoryRouter>
|
|
<Account
|
|
{...{ address: VALID_ADDRESS, ...additionalAccountProperties }}
|
|
/>
|
|
</MemoryRouter>);
|
|
|
|
it('shows Export option if account is not external', async () => {
|
|
wrapper = mountAccountComponent({ isExternal: false, type: 'ed25519' });
|
|
wrapper.find('.settings').first().simulate('click');
|
|
await act(flushAllPromises);
|
|
|
|
expect(wrapper.find('a.menuItem').length).toBe(4);
|
|
expect(wrapper.find('a.menuItem').at(0).text()).toBe('Rename');
|
|
expect(wrapper.find('a.menuItem').at(1).text()).toBe('Derive New Account');
|
|
expect(wrapper.find('a.menuItem').at(2).text()).toBe('Export Account');
|
|
expect(wrapper.find('a.menuItem').at(3).text()).toBe('Forget Account');
|
|
expect(wrapper.find('.genesisSelection').exists()).toBe(true);
|
|
});
|
|
|
|
it('does not show Export option if account is external', async () => {
|
|
wrapper = mountAccountComponent({ isExternal: true, type: 'ed25519' });
|
|
wrapper.find('.settings').first().simulate('click');
|
|
await act(flushAllPromises);
|
|
|
|
expect(wrapper.find('a.menuItem').length).toBe(2);
|
|
expect(wrapper.find('a.menuItem').at(0).text()).toBe('Rename');
|
|
expect(wrapper.find('a.menuItem').at(1).text()).toBe('Forget Account');
|
|
expect(wrapper.find('.genesisSelection').exists()).toBe(true);
|
|
});
|
|
|
|
it('shows Derive option if account is of ethereum type', async () => {
|
|
wrapper = mountAccountComponent({ isExternal: false, type: 'ethereum' });
|
|
wrapper.find('.settings').first().simulate('click');
|
|
await act(flushAllPromises);
|
|
|
|
expect(wrapper.find('a.menuItem').length).toBe(4);
|
|
expect(wrapper.find('a.menuItem').at(0).text()).toBe('Rename');
|
|
expect(wrapper.find('a.menuItem').at(1).text()).toBe('Derive New Account');
|
|
expect(wrapper.find('a.menuItem').at(2).text()).toBe('Export Account');
|
|
expect(wrapper.find('a.menuItem').at(3).text()).toBe('Forget Account');
|
|
expect(wrapper.find('.genesisSelection').exists()).toBe(true);
|
|
});
|
|
|
|
it('does not show genesis hash selection dropsown if account is hardware', async () => {
|
|
wrapper = mountAccountComponent({ isExternal: true, isHardware: true });
|
|
wrapper.find('.settings').first().simulate('click');
|
|
await act(flushAllPromises);
|
|
|
|
expect(wrapper.find('a.menuItem').length).toBe(2);
|
|
expect(wrapper.find('a.menuItem').at(0).text()).toBe('Rename');
|
|
expect(wrapper.find('a.menuItem').at(1).text()).toBe('Forget Account');
|
|
expect(wrapper.find('.genesisSelection').exists()).toBe(false);
|
|
});
|
|
});
|