Skip to content

Commit 0512be4

Browse files
committed
test: cover config forwarding test
1 parent ab08840 commit 0512be4

File tree

3 files changed

+51
-6
lines changed

3 files changed

+51
-6
lines changed

packages/multichain-account-service/src/MultichainAccountService.test.ts

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import type { KeyringAccount } from '@metamask/keyring-api';
66
import { EthAccountType, SolAccountType } from '@metamask/keyring-api';
77
import { KeyringTypes, type KeyringObject } from '@metamask/keyring-controller';
88

9+
import type { MultichainAccountServiceOptions } from './MultichainAccountService';
910
import { MultichainAccountService } from './MultichainAccountService';
1011
import { AccountProviderWrapper } from './providers/AccountProviderWrapper';
1112
import { EvmAccountProvider } from './providers/EvmAccountProvider';
@@ -72,9 +73,10 @@ function mockAccountProvider<Provider>(
7273
accounts: KeyringAccount[],
7374
type: KeyringAccount['type'],
7475
) {
75-
jest
76-
.mocked(providerClass)
77-
.mockImplementation(() => mocks as unknown as Provider);
76+
jest.mocked(providerClass).mockImplementation((...args) => {
77+
mocks.constructor(...args);
78+
return mocks as unknown as Provider;
79+
});
7880

7981
setupNamedAccountProvider({
8082
mocks,
@@ -87,13 +89,15 @@ function setup({
8789
messenger = getRootMessenger(),
8890
keyrings = [MOCK_HD_KEYRING_1, MOCK_HD_KEYRING_2],
8991
accounts,
92+
providersConfigs,
9093
}: {
9194
messenger?: Messenger<
9295
MultichainAccountServiceActions | AllowedActions,
9396
MultichainAccountServiceEvents | AllowedEvents
9497
>;
9598
keyrings?: KeyringObject[];
9699
accounts?: KeyringAccount[];
100+
providersConfigs?: MultichainAccountServiceOptions['providersConfigs'];
97101
} = {}): {
98102
service: MultichainAccountService;
99103
messenger: Messenger<
@@ -116,8 +120,12 @@ function setup({
116120
SolAccountProvider: makeMockAccountProvider(),
117121
};
118122
// Default provider names can be overridden per test using mockImplementation
119-
mocks.EvmAccountProvider.getName.mockImplementation(() => 'EVM');
120-
mocks.SolAccountProvider.getName.mockImplementation(() => 'Solana');
123+
mocks.EvmAccountProvider.getName.mockImplementation(
124+
() => EvmAccountProvider.NAME,
125+
);
126+
mocks.SolAccountProvider.getName.mockImplementation(
127+
() => SolAccountProvider.NAME,
128+
);
121129

122130
mocks.KeyringController.getState.mockImplementation(() => ({
123131
isUnlocked: true,
@@ -165,13 +173,48 @@ function setup({
165173

166174
const service = new MultichainAccountService({
167175
messenger: getMultichainAccountServiceMessenger(messenger),
176+
providersConfigs,
168177
});
169178
service.init();
170179

171180
return { service, messenger, mocks };
172181
}
173182

174183
describe('MultichainAccountService', () => {
184+
describe('constructor', () => {
185+
it('forwards conflicts to each providers', () => {
186+
const providersConfigs: MultichainAccountServiceOptions['providersConfigs'] =
187+
{
188+
[EvmAccountProvider.NAME]: {
189+
discovery: {
190+
timeoutMs: 1000,
191+
maxAttempts: 2,
192+
backOffMs: 1000,
193+
},
194+
},
195+
[SolAccountProvider.NAME]: {
196+
discovery: {
197+
timeoutMs: 1000,
198+
},
199+
},
200+
};
201+
202+
const { mocks, messenger } = setup({
203+
accounts: [MOCK_HD_ACCOUNT_1, MOCK_SOL_ACCOUNT_1],
204+
providersConfigs,
205+
});
206+
207+
expect(mocks.EvmAccountProvider.constructor).toHaveBeenCalledWith(
208+
messenger,
209+
providersConfigs[EvmAccountProvider.NAME],
210+
);
211+
expect(mocks.SolAccountProvider.constructor).toHaveBeenCalledWith(
212+
messenger,
213+
providersConfigs[SolAccountProvider.NAME],
214+
);
215+
});
216+
});
217+
175218
describe('getMultichainAccountGroups', () => {
176219
it('gets multichain accounts', () => {
177220
const { service } = setup({

packages/multichain-account-service/src/MultichainAccountService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export const serviceName = 'MultichainAccountService';
3232
/**
3333
* The options that {@link MultichainAccountService} takes.
3434
*/
35-
type MultichainAccountServiceOptions = {
35+
export type MultichainAccountServiceOptions = {
3636
messenger: MultichainAccountServiceMessenger;
3737
providers?: NamedAccountProvider[];
3838
providersConfigs?: {

packages/multichain-account-service/src/tests/providers.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import type { KeyringAccount } from '@metamask/keyring-api';
66

77
export type MockAccountProvider = {
88
accounts: KeyringAccount[];
9+
constructor: jest.Mock;
910
getAccount: jest.Mock;
1011
getAccounts: jest.Mock;
1112
createAccounts: jest.Mock;
@@ -19,6 +20,7 @@ export function makeMockAccountProvider(
1920
): MockAccountProvider {
2021
return {
2122
accounts,
23+
constructor: jest.fn(),
2224
getAccount: jest.fn(),
2325
getAccounts: jest.fn(),
2426
createAccounts: jest.fn(),

0 commit comments

Comments
 (0)