Skip to content

Commit ab2a5e4

Browse files
fix multipleWallet didn't sync up chainMap
1 parent 722ab56 commit ab2a5e4

File tree

6 files changed

+43
-16
lines changed

6 files changed

+43
-16
lines changed

packages/core/__tests__/wallets/base-wallet.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,25 @@ describe("BaseWallet", () => {
6363
const account = await wallet.getAccount("test-chain-id");
6464
expect(account.address).toBe("test-address");
6565
});
66+
67+
it('should set chain map', () => {
68+
const chains: Chain[] = [
69+
{ chainId: 'chain-1', chainName: 'Chain 1' } as Chain,
70+
{ chainId: 'chain-2', chainName: 'Chain 2' } as Chain,
71+
];
72+
wallet.setChainMap(chains);
73+
expect(wallet.chainMap.size).toBe(2);
74+
expect(wallet.chainMap.get('chain-1')?.chainName).toBe('Chain 1');
75+
})
76+
77+
it('should addChain', () => {
78+
const chain: Chain = { chainId: 'chain-3', chainName: 'Chain 3' } as Chain;
79+
wallet.addChain(chain);
80+
expect(wallet.chainMap.size).toBe(1);
81+
expect(wallet.chainMap.get('chain-3')?.chainName).toBe('Chain 3');
82+
})
83+
84+
85+
86+
6687
});

packages/core/__tests__/wallets/cosmos-wallet.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,4 +139,6 @@ describe('CosmosWallet', () => {
139139

140140
await expect(wallet.addSuggestChain('cosmoshub-4')).rejects.toThrow('suggestion error');
141141
});
142+
143+
142144
});

packages/core/__tests__/wallets/multichain-wallet.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ describe('MultiChainWallet', () => {
1010
beforeEach(() => {
1111
mockBaseWallet = {
1212
setChainMap: jest.fn(),
13+
addChain: jest.fn(),
1314
setAssetLists: jest.fn(),
1415
init: jest.fn(),
1516
connect: jest.fn(),
@@ -43,6 +44,16 @@ describe('MultiChainWallet', () => {
4344
expect(mockBaseWallet.setChainMap).toHaveBeenCalledWith(chains);
4445
});
4546

47+
it('should add chain and propagate to network wallets', () => {
48+
const chain: Chain = { chainId: 'cosmoshub-4', chainType: 'cosmos', chainName: 'Cosmos Hub' };
49+
50+
multiChainWallet.setNetworkWallet('cosmos', mockBaseWallet);
51+
multiChainWallet.addChain(chain);
52+
53+
expect(multiChainWallet.chainMap.get(chain.chainId)).toBe(chain);
54+
expect(mockBaseWallet.addChain).toHaveBeenCalledWith(chain);
55+
})
56+
4657
it('should initialize all network wallets', async () => {
4758
multiChainWallet.setNetworkWallet('cosmos', mockBaseWallet);
4859

@@ -109,4 +120,5 @@ describe('MultiChainWallet', () => {
109120
expect(provider).toBe('mockProvider');
110121
expect(mockBaseWallet.getProvider).toHaveBeenCalledWith(chain.chainId);
111122
});
123+
112124
});

packages/core/src/wallets/base-wallet.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export abstract class BaseWallet {
99
errorMessage: string
1010
walletState: WalletState
1111
events: EventEmitter<WalletEvents> = new EventEmitter()
12-
chainMap: Map<Chain['chainId'], Chain>
12+
chainMap: Map<Chain['chainId'], Chain> = new Map()
1313
assetLists: AssetList[] = []
1414
client: any
1515
constructor(info: Wallet) {

packages/core/src/wallets/multichain-wallet.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { isInstanceOf } from '../utils';
88
export class MultiChainWallet extends BaseWallet {
99

1010
networkWalletMap: Map<Chain['chainType'], BaseWallet> = new Map()
11-
chainMap: Map<Chain['chainId'], Chain> = new Map()
1211

1312
constructor(info?: Wallet, networkWalletMap?: Map<Chain['chainType'], BaseWallet>) {
1413
super(info);
@@ -36,6 +35,13 @@ export class MultiChainWallet extends BaseWallet {
3635
})
3736
}
3837

38+
addChain(chain: Chain): void {
39+
this.chainMap.set(chain.chainId, chain);
40+
this.networkWalletMap.forEach(wallet => {
41+
wallet.addChain(chain)
42+
})
43+
}
44+
3945
setAssetLists(assetLists: AssetList[]): void {
4046
this.networkWalletMap.forEach(wallet => {
4147
wallet.setAssetLists(assetLists)

packages/react/__tests__/hooks/useChainWallet.test.ts

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -94,20 +94,6 @@ describe("useChainWallet", () => {
9494
expect(result.current.logoUrl).toBe("http://logo.url")
9595
})
9696

97-
it("should call connect and getAccount when connect is invoked", async () => {
98-
const chainName = "test-chain"
99-
const walletName = "test-wallet"
100-
101-
const { result } = renderHook(() => useChainWallet(chainName, walletName))
102-
103-
await result.current.connect()
104-
105-
expect(mockWalletManager.setCurrentWalletName).toHaveBeenCalledWith(walletName)
106-
expect(mockWalletManager.setCurrentChainName).toHaveBeenCalledWith(chainName)
107-
expect(mockWalletManager.connect).toHaveBeenCalledWith(walletName, chainName)
108-
expect(mockWalletManager.getAccount).toHaveBeenCalledWith(walletName, chainName)
109-
})
110-
11197
it("should call disconnect when disconnect is invoked", () => {
11298
const chainName = "test-chain"
11399
const walletName = "test-wallet"

0 commit comments

Comments
 (0)