@reown/appkit-controllers 1.7.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +190 -0
- package/dist/esm/exports/index.js +32 -0
- package/dist/esm/exports/index.js.map +1 -0
- package/dist/esm/exports/modal.js +2 -0
- package/dist/esm/exports/modal.js.map +1 -0
- package/dist/esm/exports/react.js +52 -0
- package/dist/esm/exports/react.js.map +1 -0
- package/dist/esm/exports/vue.js +63 -0
- package/dist/esm/exports/vue.js.map +1 -0
- package/dist/esm/src/controllers/AccountController.js +160 -0
- package/dist/esm/src/controllers/AccountController.js.map +1 -0
- package/dist/esm/src/controllers/AlertController.js +35 -0
- package/dist/esm/src/controllers/AlertController.js.map +1 -0
- package/dist/esm/src/controllers/ApiController.js +260 -0
- package/dist/esm/src/controllers/ApiController.js.map +1 -0
- package/dist/esm/src/controllers/AssetController.js +43 -0
- package/dist/esm/src/controllers/AssetController.js.map +1 -0
- package/dist/esm/src/controllers/BlockchainApiController.js +472 -0
- package/dist/esm/src/controllers/BlockchainApiController.js.map +1 -0
- package/dist/esm/src/controllers/ChainController.js +548 -0
- package/dist/esm/src/controllers/ChainController.js.map +1 -0
- package/dist/esm/src/controllers/ConnectionController.js +190 -0
- package/dist/esm/src/controllers/ConnectionController.js.map +1 -0
- package/dist/esm/src/controllers/ConnectorController.js +272 -0
- package/dist/esm/src/controllers/ConnectorController.js.map +1 -0
- package/dist/esm/src/controllers/EnsController.js +144 -0
- package/dist/esm/src/controllers/EnsController.js.map +1 -0
- package/dist/esm/src/controllers/EventsController.js +76 -0
- package/dist/esm/src/controllers/EventsController.js.map +1 -0
- package/dist/esm/src/controllers/ModalController.js +120 -0
- package/dist/esm/src/controllers/ModalController.js.map +1 -0
- package/dist/esm/src/controllers/OnRampController.js +132 -0
- package/dist/esm/src/controllers/OnRampController.js.map +1 -0
- package/dist/esm/src/controllers/OptionsController.js +146 -0
- package/dist/esm/src/controllers/OptionsController.js.map +1 -0
- package/dist/esm/src/controllers/PublicStateController.js +20 -0
- package/dist/esm/src/controllers/PublicStateController.js.map +1 -0
- package/dist/esm/src/controllers/RouterController.js +125 -0
- package/dist/esm/src/controllers/RouterController.js.map +1 -0
- package/dist/esm/src/controllers/SendController.js +305 -0
- package/dist/esm/src/controllers/SendController.js.map +1 -0
- package/dist/esm/src/controllers/SnackController.js +62 -0
- package/dist/esm/src/controllers/SnackController.js.map +1 -0
- package/dist/esm/src/controllers/SwapController.js +674 -0
- package/dist/esm/src/controllers/SwapController.js.map +1 -0
- package/dist/esm/src/controllers/ThemeController.js +55 -0
- package/dist/esm/src/controllers/ThemeController.js.map +1 -0
- package/dist/esm/src/controllers/TooltipController.js +41 -0
- package/dist/esm/src/controllers/TooltipController.js.map +1 -0
- package/dist/esm/src/controllers/TransactionsController.js +113 -0
- package/dist/esm/src/controllers/TransactionsController.js.map +1 -0
- package/dist/esm/src/utils/AssetUtil.js +86 -0
- package/dist/esm/src/utils/AssetUtil.js.map +1 -0
- package/dist/esm/src/utils/ConstantsUtil.js +239 -0
- package/dist/esm/src/utils/ConstantsUtil.js.map +1 -0
- package/dist/esm/src/utils/CoreHelperUtil.js +354 -0
- package/dist/esm/src/utils/CoreHelperUtil.js.map +1 -0
- package/dist/esm/src/utils/ERC7811Util.js +111 -0
- package/dist/esm/src/utils/ERC7811Util.js.map +1 -0
- package/dist/esm/src/utils/EnsUtil.js +10 -0
- package/dist/esm/src/utils/EnsUtil.js.map +1 -0
- package/dist/esm/src/utils/FetchUtil.js +73 -0
- package/dist/esm/src/utils/FetchUtil.js.map +1 -0
- package/dist/esm/src/utils/MobileWallet.js +31 -0
- package/dist/esm/src/utils/MobileWallet.js.map +1 -0
- package/dist/esm/src/utils/OptionsUtil.js +29 -0
- package/dist/esm/src/utils/OptionsUtil.js.map +1 -0
- package/dist/esm/src/utils/RouterUtil.js +23 -0
- package/dist/esm/src/utils/RouterUtil.js.map +1 -0
- package/dist/esm/src/utils/SIWXUtil.js +258 -0
- package/dist/esm/src/utils/SIWXUtil.js.map +1 -0
- package/dist/esm/src/utils/SendApiUtil.js +65 -0
- package/dist/esm/src/utils/SendApiUtil.js.map +1 -0
- package/dist/esm/src/utils/StorageUtil.js +485 -0
- package/dist/esm/src/utils/StorageUtil.js.map +1 -0
- package/dist/esm/src/utils/SwapApiUtil.js +89 -0
- package/dist/esm/src/utils/SwapApiUtil.js.map +1 -0
- package/dist/esm/src/utils/SwapCalculationUtil.js +74 -0
- package/dist/esm/src/utils/SwapCalculationUtil.js.map +1 -0
- package/dist/esm/src/utils/TypeUtil.js +2 -0
- package/dist/esm/src/utils/TypeUtil.js.map +1 -0
- package/dist/esm/tests/constants/OnrampTransactions.js +151 -0
- package/dist/esm/tests/constants/OnrampTransactions.js.map +1 -0
- package/dist/esm/tests/controllers/AccountController.test.js +186 -0
- package/dist/esm/tests/controllers/AccountController.test.js.map +1 -0
- package/dist/esm/tests/controllers/AlertController.test.js +48 -0
- package/dist/esm/tests/controllers/AlertController.test.js.map +1 -0
- package/dist/esm/tests/controllers/ApiController.test.js +608 -0
- package/dist/esm/tests/controllers/ApiController.test.js.map +1 -0
- package/dist/esm/tests/controllers/AssetController.test.js +92 -0
- package/dist/esm/tests/controllers/AssetController.test.js.map +1 -0
- package/dist/esm/tests/controllers/BlockchainApiController.test.js +38 -0
- package/dist/esm/tests/controllers/BlockchainApiController.test.js.map +1 -0
- package/dist/esm/tests/controllers/ChainController.test.js +382 -0
- package/dist/esm/tests/controllers/ChainController.test.js.map +1 -0
- package/dist/esm/tests/controllers/ConnectionController.test.js +151 -0
- package/dist/esm/tests/controllers/ConnectionController.test.js.map +1 -0
- package/dist/esm/tests/controllers/ConnectorController.test.js +282 -0
- package/dist/esm/tests/controllers/ConnectorController.test.js.map +1 -0
- package/dist/esm/tests/controllers/EnsController.test.js +186 -0
- package/dist/esm/tests/controllers/EnsController.test.js.map +1 -0
- package/dist/esm/tests/controllers/EventsController.test.js +47 -0
- package/dist/esm/tests/controllers/EventsController.test.js.map +1 -0
- package/dist/esm/tests/controllers/ModalController.test.js +66 -0
- package/dist/esm/tests/controllers/ModalController.test.js.map +1 -0
- package/dist/esm/tests/controllers/OnRampController.test.js +118 -0
- package/dist/esm/tests/controllers/OnRampController.test.js.map +1 -0
- package/dist/esm/tests/controllers/OptionsController.test.js +42 -0
- package/dist/esm/tests/controllers/OptionsController.test.js.map +1 -0
- package/dist/esm/tests/controllers/PublicStateController.test.js +33 -0
- package/dist/esm/tests/controllers/PublicStateController.test.js.map +1 -0
- package/dist/esm/tests/controllers/RouterController.test.js +103 -0
- package/dist/esm/tests/controllers/RouterController.test.js.map +1 -0
- package/dist/esm/tests/controllers/SendController.test.js +136 -0
- package/dist/esm/tests/controllers/SendController.test.js.map +1 -0
- package/dist/esm/tests/controllers/SnackController.test.js +86 -0
- package/dist/esm/tests/controllers/SnackController.test.js.map +1 -0
- package/dist/esm/tests/controllers/SwapController.test.js +105 -0
- package/dist/esm/tests/controllers/SwapController.test.js.map +1 -0
- package/dist/esm/tests/controllers/ThemeController.test.js +26 -0
- package/dist/esm/tests/controllers/ThemeController.test.js.map +1 -0
- package/dist/esm/tests/controllers/TooltipController.test.js +40 -0
- package/dist/esm/tests/controllers/TooltipController.test.js.map +1 -0
- package/dist/esm/tests/controllers/TransactionsController.test.js +239 -0
- package/dist/esm/tests/controllers/TransactionsController.test.js.map +1 -0
- package/dist/esm/tests/hooks/react.test.js +149 -0
- package/dist/esm/tests/hooks/react.test.js.map +1 -0
- package/dist/esm/tests/hooks/vue.test.js +56 -0
- package/dist/esm/tests/hooks/vue.test.js.map +1 -0
- package/dist/esm/tests/mocks/ChainController.js +24 -0
- package/dist/esm/tests/mocks/ChainController.js.map +1 -0
- package/dist/esm/tests/mocks/SwapController.js +118 -0
- package/dist/esm/tests/mocks/SwapController.js.map +1 -0
- package/dist/esm/tests/mocks/useAppKitAccount.js +41 -0
- package/dist/esm/tests/mocks/useAppKitAccount.js.map +1 -0
- package/dist/esm/tests/utils/AssetUtil.test.js +108 -0
- package/dist/esm/tests/utils/AssetUtil.test.js.map +1 -0
- package/dist/esm/tests/utils/CoreHelperUtil.test.js +67 -0
- package/dist/esm/tests/utils/CoreHelperUtil.test.js.map +1 -0
- package/dist/esm/tests/utils/ERC7811.test.js +268 -0
- package/dist/esm/tests/utils/ERC7811.test.js.map +1 -0
- package/dist/esm/tests/utils/EnsUtil.test.js +23 -0
- package/dist/esm/tests/utils/EnsUtil.test.js.map +1 -0
- package/dist/esm/tests/utils/FetchUtil.test.js +175 -0
- package/dist/esm/tests/utils/FetchUtil.test.js.map +1 -0
- package/dist/esm/tests/utils/MobileWallet.test.js +72 -0
- package/dist/esm/tests/utils/MobileWallet.test.js.map +1 -0
- package/dist/esm/tests/utils/OptionsUtil.test.js +20 -0
- package/dist/esm/tests/utils/OptionsUtil.test.js.map +1 -0
- package/dist/esm/tests/utils/RouterUtil.test.js +62 -0
- package/dist/esm/tests/utils/RouterUtil.test.js.map +1 -0
- package/dist/esm/tests/utils/SendApiUtil.test.js +340 -0
- package/dist/esm/tests/utils/SendApiUtil.test.js.map +1 -0
- package/dist/esm/tests/utils/StorageUtil.test.js +162 -0
- package/dist/esm/tests/utils/StorageUtil.test.js.map +1 -0
- package/dist/esm/tests/utils/SwapApiUtil.test.js +213 -0
- package/dist/esm/tests/utils/SwapApiUtil.test.js.map +1 -0
- package/dist/esm/tests/utils/SwapCalculationUtil.test.js +80 -0
- package/dist/esm/tests/utils/SwapCalculationUtil.test.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -0
- package/dist/types/exports/index.d.ts +51 -0
- package/dist/types/exports/modal.d.ts +2 -0
- package/dist/types/exports/react.d.ts +9 -0
- package/dist/types/exports/vue.d.ts +9 -0
- package/dist/types/src/controllers/AccountController.d.ts +56 -0
- package/dist/types/src/controllers/AlertController.d.ts +17 -0
- package/dist/types/src/controllers/ApiController.d.ts +52 -0
- package/dist/types/src/controllers/AssetController.d.ts +22 -0
- package/dist/types/src/controllers/BlockchainApiController.d.ts +59 -0
- package/dist/types/src/controllers/ChainController.d.ts +75 -0
- package/dist/types/src/controllers/ConnectionController.d.ts +86 -0
- package/dist/types/src/controllers/ConnectorController.d.ts +61 -0
- package/dist/types/src/controllers/EnsController.d.ts +26 -0
- package/dist/types/src/controllers/EventsController.d.ts +17 -0
- package/dist/types/src/controllers/ModalController.d.ts +27 -0
- package/dist/types/src/controllers/OnRampController.d.ts +55 -0
- package/dist/types/src/controllers/OptionsController.d.ts +364 -0
- package/dist/types/src/controllers/PublicStateController.d.ts +33 -0
- package/dist/types/src/controllers/RouterController.d.ts +56 -0
- package/dist/types/src/controllers/SendController.d.ts +52 -0
- package/dist/types/src/controllers/SnackController.d.ts +29 -0
- package/dist/types/src/controllers/SwapController.d.ts +127 -0
- package/dist/types/src/controllers/ThemeController.d.ts +30 -0
- package/dist/types/src/controllers/TooltipController.d.ts +25 -0
- package/dist/types/src/controllers/TransactionsController.d.ts +25 -0
- package/dist/types/src/utils/AssetUtil.d.ts +15 -0
- package/dist/types/src/utils/ConstantsUtil.d.ts +86 -0
- package/dist/types/src/utils/CoreHelperUtil.d.ts +56 -0
- package/dist/types/src/utils/ERC7811Util.d.ts +67 -0
- package/dist/types/src/utils/EnsUtil.d.ts +3 -0
- package/dist/types/src/utils/FetchUtil.d.ts +26 -0
- package/dist/types/src/utils/MobileWallet.d.ts +9 -0
- package/dist/types/src/utils/OptionsUtil.d.ts +5 -0
- package/dist/types/src/utils/RouterUtil.d.ts +4 -0
- package/dist/types/src/utils/SIWXUtil.d.ts +183 -0
- package/dist/types/src/utils/SendApiUtil.d.ts +13 -0
- package/dist/types/src/utils/StorageUtil.d.ts +99 -0
- package/dist/types/src/utils/SwapApiUtil.d.ts +27 -0
- package/dist/types/src/utils/SwapCalculationUtil.d.ts +22 -0
- package/dist/types/src/utils/TypeUtil.d.ts +981 -0
- package/dist/types/tests/constants/OnrampTransactions.d.ts +138 -0
- package/dist/types/tests/controllers/AccountController.test.d.ts +1 -0
- package/dist/types/tests/controllers/AlertController.test.d.ts +1 -0
- package/dist/types/tests/controllers/ApiController.test.d.ts +1 -0
- package/dist/types/tests/controllers/AssetController.test.d.ts +1 -0
- package/dist/types/tests/controllers/BlockchainApiController.test.d.ts +1 -0
- package/dist/types/tests/controllers/ChainController.test.d.ts +1 -0
- package/dist/types/tests/controllers/ConnectionController.test.d.ts +1 -0
- package/dist/types/tests/controllers/ConnectorController.test.d.ts +1 -0
- package/dist/types/tests/controllers/EnsController.test.d.ts +1 -0
- package/dist/types/tests/controllers/EventsController.test.d.ts +1 -0
- package/dist/types/tests/controllers/ModalController.test.d.ts +1 -0
- package/dist/types/tests/controllers/OnRampController.test.d.ts +1 -0
- package/dist/types/tests/controllers/OptionsController.test.d.ts +1 -0
- package/dist/types/tests/controllers/PublicStateController.test.d.ts +1 -0
- package/dist/types/tests/controllers/RouterController.test.d.ts +1 -0
- package/dist/types/tests/controllers/SendController.test.d.ts +1 -0
- package/dist/types/tests/controllers/SnackController.test.d.ts +1 -0
- package/dist/types/tests/controllers/SwapController.test.d.ts +1 -0
- package/dist/types/tests/controllers/ThemeController.test.d.ts +1 -0
- package/dist/types/tests/controllers/TooltipController.test.d.ts +1 -0
- package/dist/types/tests/controllers/TransactionsController.test.d.ts +1 -0
- package/dist/types/tests/hooks/react.test.d.ts +1 -0
- package/dist/types/tests/hooks/vue.test.d.ts +2 -0
- package/dist/types/tests/mocks/ChainController.d.ts +2 -0
- package/dist/types/tests/mocks/SwapController.d.ts +75 -0
- package/dist/types/tests/mocks/useAppKitAccount.d.ts +40 -0
- package/dist/types/tests/utils/AssetUtil.test.d.ts +1 -0
- package/dist/types/tests/utils/CoreHelperUtil.test.d.ts +1 -0
- package/dist/types/tests/utils/ERC7811.test.d.ts +1 -0
- package/dist/types/tests/utils/EnsUtil.test.d.ts +1 -0
- package/dist/types/tests/utils/FetchUtil.test.d.ts +1 -0
- package/dist/types/tests/utils/MobileWallet.test.d.ts +1 -0
- package/dist/types/tests/utils/OptionsUtil.test.d.ts +1 -0
- package/dist/types/tests/utils/RouterUtil.test.d.ts +1 -0
- package/dist/types/tests/utils/SendApiUtil.test.d.ts +1 -0
- package/dist/types/tests/utils/StorageUtil.test.d.ts +1 -0
- package/dist/types/tests/utils/SwapApiUtil.test.d.ts +1 -0
- package/dist/types/tests/utils/SwapCalculationUtil.test.d.ts +1 -0
- package/package.json +81 -0
- package/readme.md +11 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { AssetController } from '../../exports/index.js';
|
|
3
|
+
// -- Constants ----------------------------------------------------------------
|
|
4
|
+
const walletImage = 'w3mWallet.png';
|
|
5
|
+
const walletImage2 = 'w3mWallet2.png';
|
|
6
|
+
const networkImage = 'ethereum.png';
|
|
7
|
+
const networkImage2 = 'polygon.png';
|
|
8
|
+
const connectorImage = 'email-connector.png';
|
|
9
|
+
const connectorImage2 = 'metamask-connector.png';
|
|
10
|
+
const tokenImage = 'eth.png';
|
|
11
|
+
const tokenImage2 = 'usdc.png';
|
|
12
|
+
const currencyImage = 'usd.png';
|
|
13
|
+
const currencyImage2 = 'eur.png';
|
|
14
|
+
const wallet = 'w3m';
|
|
15
|
+
const wallet2 = 'w4m';
|
|
16
|
+
const network = 'ethereum';
|
|
17
|
+
const network2 = 'polygon';
|
|
18
|
+
const connector = 'w3m-email';
|
|
19
|
+
const connector2 = 'mm-connector';
|
|
20
|
+
const token = 'ETH';
|
|
21
|
+
const token2 = 'MATIC';
|
|
22
|
+
const currency = 'USD';
|
|
23
|
+
const currency2 = 'EUR';
|
|
24
|
+
// -- Tests --------------------------------------------------------------------
|
|
25
|
+
describe('AssetController', () => {
|
|
26
|
+
it('should have valid default state', () => {
|
|
27
|
+
expect(AssetController.state).toEqual({
|
|
28
|
+
chainImages: {},
|
|
29
|
+
walletImages: {},
|
|
30
|
+
networkImages: {},
|
|
31
|
+
connectorImages: {},
|
|
32
|
+
tokenImages: {},
|
|
33
|
+
currencyImages: {}
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
it('should update state properly on setWalletImage()', () => {
|
|
37
|
+
AssetController.setWalletImage(wallet, walletImage);
|
|
38
|
+
expect(AssetController.state.walletImages).toEqual({ [wallet]: walletImage });
|
|
39
|
+
AssetController.setWalletImage(wallet, walletImage2);
|
|
40
|
+
expect(AssetController.state.walletImages).toEqual({ [wallet]: walletImage2 });
|
|
41
|
+
AssetController.setWalletImage(wallet2, walletImage2);
|
|
42
|
+
expect(AssetController.state.walletImages).toEqual({
|
|
43
|
+
[wallet]: walletImage2,
|
|
44
|
+
[wallet2]: walletImage2
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
it('should update state properly on setNetworkImage()', () => {
|
|
48
|
+
AssetController.setNetworkImage(network, networkImage);
|
|
49
|
+
expect(AssetController.state.networkImages).toEqual({ [network]: networkImage });
|
|
50
|
+
AssetController.setNetworkImage(network, networkImage2);
|
|
51
|
+
expect(AssetController.state.networkImages).toEqual({ [network]: networkImage2 });
|
|
52
|
+
AssetController.setNetworkImage(network2, networkImage2);
|
|
53
|
+
expect(AssetController.state.networkImages).toEqual({
|
|
54
|
+
[network]: networkImage2,
|
|
55
|
+
[network2]: networkImage2
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
it('should update state properly on setConnectorImage()', () => {
|
|
59
|
+
AssetController.setConnectorImage(connector, connectorImage);
|
|
60
|
+
expect(AssetController.state.connectorImages).toEqual({ [connector]: connectorImage });
|
|
61
|
+
AssetController.setConnectorImage(connector, connectorImage2);
|
|
62
|
+
expect(AssetController.state.connectorImages).toEqual({ [connector]: connectorImage2 });
|
|
63
|
+
AssetController.setConnectorImage(connector2, connectorImage2);
|
|
64
|
+
expect(AssetController.state.connectorImages).toEqual({
|
|
65
|
+
[connector]: connectorImage2,
|
|
66
|
+
[connector2]: connectorImage2
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
it('should update state properly on setTokenImage()', () => {
|
|
70
|
+
AssetController.setTokenImage(token, tokenImage);
|
|
71
|
+
expect(AssetController.state.tokenImages).toEqual({ [token]: tokenImage });
|
|
72
|
+
AssetController.setTokenImage(token, tokenImage2);
|
|
73
|
+
expect(AssetController.state.tokenImages).toEqual({ [token]: tokenImage2 });
|
|
74
|
+
AssetController.setTokenImage(token2, tokenImage2);
|
|
75
|
+
expect(AssetController.state.tokenImages).toEqual({
|
|
76
|
+
[token]: tokenImage2,
|
|
77
|
+
[token2]: tokenImage2
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
it('should update state properly on setCurrencyImage()', () => {
|
|
81
|
+
AssetController.setCurrencyImage(currency, currencyImage);
|
|
82
|
+
expect(AssetController.state.currencyImages).toEqual({ [currency]: currencyImage });
|
|
83
|
+
AssetController.setCurrencyImage(currency, currencyImage2);
|
|
84
|
+
expect(AssetController.state.currencyImages).toEqual({ [currency]: currencyImage2 });
|
|
85
|
+
AssetController.setCurrencyImage(currency2, currencyImage2);
|
|
86
|
+
expect(AssetController.state.currencyImages).toEqual({
|
|
87
|
+
[currency]: currencyImage2,
|
|
88
|
+
[currency2]: currencyImage2
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=AssetController.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetController.test.js","sourceRoot":"","sources":["../../../../tests/controllers/AssetController.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { BlockchainApiController, FetchUtil, OptionsController } from '../../exports/index.js';
|
|
3
|
+
// -- Tests --------------------------------------------------------------------
|
|
4
|
+
describe('BlockchainApiController', () => {
|
|
5
|
+
it('should include sdk properties when fetching swap allowance data', async () => {
|
|
6
|
+
vi.spyOn(FetchUtil.prototype, 'get').mockResolvedValue({});
|
|
7
|
+
vi.spyOn(BlockchainApiController, 'isNetworkSupported').mockResolvedValue(true);
|
|
8
|
+
OptionsController.state.projectId = 'test-project-id';
|
|
9
|
+
const swapAllowance = {
|
|
10
|
+
tokenAddress: '0x123',
|
|
11
|
+
userAddress: '0x456'
|
|
12
|
+
};
|
|
13
|
+
await BlockchainApiController.fetchSwapAllowance(swapAllowance);
|
|
14
|
+
expect(FetchUtil.prototype.get).toHaveBeenCalledWith(expect.objectContaining({
|
|
15
|
+
path: '/v1/convert/allowance',
|
|
16
|
+
params: {
|
|
17
|
+
projectId: 'test-project-id',
|
|
18
|
+
...swapAllowance,
|
|
19
|
+
...BlockchainApiController.getSdkProperties()
|
|
20
|
+
}
|
|
21
|
+
}));
|
|
22
|
+
});
|
|
23
|
+
it('should include sdk properties when fetching identity data', async () => {
|
|
24
|
+
const address = '0x123';
|
|
25
|
+
vi.spyOn(FetchUtil.prototype, 'get').mockResolvedValue({});
|
|
26
|
+
vi.spyOn(BlockchainApiController, 'isNetworkSupported').mockResolvedValue(true);
|
|
27
|
+
OptionsController.state.projectId = 'test-project-id';
|
|
28
|
+
await BlockchainApiController.fetchIdentity({ address, caipNetworkId: 'eip155:1' });
|
|
29
|
+
expect(FetchUtil.prototype.get).toHaveBeenCalledWith(expect.objectContaining({
|
|
30
|
+
path: `/v1/identity/${address}`,
|
|
31
|
+
params: {
|
|
32
|
+
projectId: 'test-project-id',
|
|
33
|
+
...BlockchainApiController.getSdkProperties()
|
|
34
|
+
}
|
|
35
|
+
}));
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=BlockchainApiController.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockchainApiController.test.js","sourceRoot":"","sources":["../../../../tests/controllers/BlockchainApiController.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEjD,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE9F,gFAAgF;AAChF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAA;QAC1D,EAAE,CAAC,KAAK,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAC/E,iBAAiB,CAAC,KAAK,CAAC,SAAS,GAAG,iBAAiB,CAAA;QAErD,MAAM,aAAa,GAAG;YACpB,YAAY,EAAE,OAAO;YACrB,WAAW,EAAE,OAAO;SACrB,CAAA;QAED,MAAM,uBAAuB,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAA;QAE/D,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAClD,MAAM,CAAC,gBAAgB,CAAC;YACtB,IAAI,EAAE,uBAAuB;YAC7B,MAAM,EAAE;gBACN,SAAS,EAAE,iBAAiB;gBAC5B,GAAG,aAAa;gBAChB,GAAG,uBAAuB,CAAC,gBAAgB,EAAE;aAC9C;SACF,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;IACF,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,OAAO,GAAG,OAAO,CAAA;QACvB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAA;QAC1D,EAAE,CAAC,KAAK,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAC/E,iBAAiB,CAAC,KAAK,CAAC,SAAS,GAAG,iBAAiB,CAAA;QAErD,MAAM,uBAAuB,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAA;QAEnF,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAClD,MAAM,CAAC,gBAAgB,CAAC;YACtB,IAAI,EAAE,gBAAgB,OAAO,EAAE;YAC/B,MAAM,EAAE;gBACN,SAAS,EAAE,iBAAiB;gBAC5B,GAAG,uBAAuB,CAAC,gBAAgB,EAAE;aAC9C;SACF,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { ConstantsUtil, SafeLocalStorageKeys } from '@reown/appkit-common';
|
|
3
|
+
import { SafeLocalStorage } from '@reown/appkit-common';
|
|
4
|
+
import { ChainController } from '../../src/controllers/ChainController.js';
|
|
5
|
+
import {} from '../../src/controllers/ConnectionController.js';
|
|
6
|
+
import { ConnectionController } from '../../src/controllers/ConnectionController.js';
|
|
7
|
+
import { EventsController } from '../../src/controllers/EventsController.js';
|
|
8
|
+
import { RouterController } from '../../src/controllers/RouterController.js';
|
|
9
|
+
import { StorageUtil } from '../../src/utils/StorageUtil.js';
|
|
10
|
+
// -- Setup --------------------------------------------------------------------
|
|
11
|
+
const chainNamespace = 'eip155';
|
|
12
|
+
const caipAddress = 'eip155:1:0x123';
|
|
13
|
+
const approvedCaipNetworkIds = ['eip155:1', 'eip155:4'];
|
|
14
|
+
const requestedCaipNetworks = [
|
|
15
|
+
{
|
|
16
|
+
id: 1,
|
|
17
|
+
caipNetworkId: 'eip155:1',
|
|
18
|
+
name: 'Ethereum',
|
|
19
|
+
chainNamespace: ConstantsUtil.CHAIN.EVM,
|
|
20
|
+
nativeCurrency: {
|
|
21
|
+
name: 'Ethereum',
|
|
22
|
+
symbol: 'ETH',
|
|
23
|
+
decimals: 18
|
|
24
|
+
},
|
|
25
|
+
rpcUrls: {
|
|
26
|
+
default: { http: ['https://rpc.infura.com/v1/'] }
|
|
27
|
+
},
|
|
28
|
+
blockExplorers: {
|
|
29
|
+
default: { name: 'Etherscan', url: 'https://etherscan.io' }
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
id: 42161,
|
|
34
|
+
caipNetworkId: 'eip155:42161',
|
|
35
|
+
name: 'Arbitrum One',
|
|
36
|
+
chainNamespace: ConstantsUtil.CHAIN.EVM,
|
|
37
|
+
nativeCurrency: {
|
|
38
|
+
name: 'Arbitrum',
|
|
39
|
+
symbol: 'ARB',
|
|
40
|
+
decimals: 18
|
|
41
|
+
},
|
|
42
|
+
rpcUrls: {
|
|
43
|
+
default: { http: ['https://rpc.infura.com/v1/'] }
|
|
44
|
+
},
|
|
45
|
+
blockExplorers: {
|
|
46
|
+
default: { name: 'Arbitrum Explorer', url: 'https://explorer.arbitrum.io' }
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: 43114,
|
|
51
|
+
caipNetworkId: 'eip155:43114',
|
|
52
|
+
name: 'Avalanche C-Chain',
|
|
53
|
+
chainNamespace: ConstantsUtil.CHAIN.EVM,
|
|
54
|
+
nativeCurrency: {
|
|
55
|
+
name: 'Avalanche',
|
|
56
|
+
symbol: 'AVAX',
|
|
57
|
+
decimals: 18
|
|
58
|
+
},
|
|
59
|
+
rpcUrls: {
|
|
60
|
+
default: { http: ['https://rpc.infura.com/v1/'] }
|
|
61
|
+
},
|
|
62
|
+
blockExplorers: {
|
|
63
|
+
default: { name: 'Avalanche C-Chain', url: 'https://cchain.explorer.avax.network' }
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
];
|
|
67
|
+
const mainnetCaipNetwork = {
|
|
68
|
+
id: 1,
|
|
69
|
+
name: 'Ethereum',
|
|
70
|
+
chainNamespace: ConstantsUtil.CHAIN.EVM,
|
|
71
|
+
caipNetworkId: 'eip155:1',
|
|
72
|
+
nativeCurrency: { name: 'Ethereum', symbol: 'ETH', decimals: 18 },
|
|
73
|
+
rpcUrls: { default: { http: ['https://rpc.infura.com/v1/'] } },
|
|
74
|
+
blockExplorers: { default: { name: 'Etherscan', url: 'https://etherscan.io' } }
|
|
75
|
+
};
|
|
76
|
+
const solanaCaipNetwork = {
|
|
77
|
+
id: '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
|
|
78
|
+
caipNetworkId: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
|
|
79
|
+
name: 'Solana',
|
|
80
|
+
chainNamespace: ConstantsUtil.CHAIN.SOLANA,
|
|
81
|
+
nativeCurrency: { name: 'Solana', symbol: 'SOL', decimals: 9 },
|
|
82
|
+
rpcUrls: { default: { http: ['https://rpc.infura.com/v1/'] } },
|
|
83
|
+
blockExplorers: { default: { name: 'Solscan', url: 'https://solscan.io' } }
|
|
84
|
+
};
|
|
85
|
+
const connectionControllerClient = {
|
|
86
|
+
connectWalletConnect: async () => Promise.resolve(),
|
|
87
|
+
disconnect: async () => Promise.resolve(),
|
|
88
|
+
estimateGas: async () => Promise.resolve(BigInt(0)),
|
|
89
|
+
signMessage: async (message) => Promise.resolve(message),
|
|
90
|
+
parseUnits: value => BigInt(value),
|
|
91
|
+
formatUnits: value => value.toString(),
|
|
92
|
+
sendTransaction: () => Promise.resolve('0x'),
|
|
93
|
+
writeContract: () => Promise.resolve('0x'),
|
|
94
|
+
getEnsAddress: async (value) => Promise.resolve(value),
|
|
95
|
+
getEnsAvatar: async (value) => Promise.resolve(value),
|
|
96
|
+
getCapabilities: async () => Promise.resolve(''),
|
|
97
|
+
grantPermissions: async () => Promise.resolve(''),
|
|
98
|
+
revokePermissions: async () => Promise.resolve('0x'),
|
|
99
|
+
walletGetAssets: async () => Promise.resolve({})
|
|
100
|
+
};
|
|
101
|
+
const networkControllerClient = {
|
|
102
|
+
switchCaipNetwork: async (_caipNetwork) => Promise.resolve(),
|
|
103
|
+
getApprovedCaipNetworksData: async () => Promise.resolve({ approvedCaipNetworkIds: [], supportsAllNetworks: false })
|
|
104
|
+
};
|
|
105
|
+
const evmAdapter = {
|
|
106
|
+
namespace: ConstantsUtil.CHAIN.EVM,
|
|
107
|
+
connectionControllerClient,
|
|
108
|
+
networkControllerClient,
|
|
109
|
+
caipNetworks: [mainnetCaipNetwork]
|
|
110
|
+
};
|
|
111
|
+
const solanaAdapter = {
|
|
112
|
+
namespace: ConstantsUtil.CHAIN.SOLANA,
|
|
113
|
+
connectionControllerClient,
|
|
114
|
+
networkControllerClient,
|
|
115
|
+
caipNetworks: [solanaCaipNetwork]
|
|
116
|
+
};
|
|
117
|
+
beforeEach(() => {
|
|
118
|
+
vi.resetAllMocks();
|
|
119
|
+
ChainController.state.noAdapters = false;
|
|
120
|
+
ChainController.initialize([evmAdapter], requestedCaipNetworks, {
|
|
121
|
+
connectionControllerClient,
|
|
122
|
+
networkControllerClient
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
// -- Tests --------------------------------------------------------------------
|
|
126
|
+
describe('ChainController', () => {
|
|
127
|
+
it('should be initialized as expected', () => {
|
|
128
|
+
expect(ChainController.state.activeChain).toEqual(ConstantsUtil.CHAIN.EVM);
|
|
129
|
+
expect(ChainController.getConnectionControllerClient()).toEqual(connectionControllerClient);
|
|
130
|
+
expect(ChainController.getNetworkControllerClient()).toEqual(networkControllerClient);
|
|
131
|
+
});
|
|
132
|
+
it('should update account state as expected', () => {
|
|
133
|
+
ChainController.setAccountProp('caipAddress', caipAddress, chainNamespace);
|
|
134
|
+
expect(ChainController.getAccountProp('caipAddress')).toEqual(caipAddress);
|
|
135
|
+
});
|
|
136
|
+
it('should update network state as expected', () => {
|
|
137
|
+
ChainController.setAdapterNetworkState(ConstantsUtil.CHAIN.EVM, {
|
|
138
|
+
approvedCaipNetworkIds
|
|
139
|
+
});
|
|
140
|
+
expect(ChainController.getNetworkProp('approvedCaipNetworkIds', ConstantsUtil.CHAIN.EVM)).toEqual(approvedCaipNetworkIds);
|
|
141
|
+
});
|
|
142
|
+
it('should update state correctly on setApprovedCaipNetworkIds()', async () => {
|
|
143
|
+
const networkController = { ...networkControllerClient };
|
|
144
|
+
const networkControllerSpy = vi
|
|
145
|
+
.spyOn(networkController, 'getApprovedCaipNetworksData')
|
|
146
|
+
.mockResolvedValueOnce({
|
|
147
|
+
approvedCaipNetworkIds,
|
|
148
|
+
supportsAllNetworks: false
|
|
149
|
+
});
|
|
150
|
+
const evmAdapter = {
|
|
151
|
+
namespace: chainNamespace,
|
|
152
|
+
connectionControllerClient,
|
|
153
|
+
networkControllerClient: networkController,
|
|
154
|
+
caipNetworks: []
|
|
155
|
+
};
|
|
156
|
+
// Need to re-initialize to set the spy properly
|
|
157
|
+
ChainController.initialize([evmAdapter], requestedCaipNetworks, {
|
|
158
|
+
connectionControllerClient,
|
|
159
|
+
networkControllerClient: networkController
|
|
160
|
+
});
|
|
161
|
+
await ChainController.setApprovedCaipNetworksData(chainNamespace);
|
|
162
|
+
expect(ChainController.getApprovedCaipNetworkIds(chainNamespace)).toEqual(approvedCaipNetworkIds);
|
|
163
|
+
expect(networkControllerSpy).toHaveBeenCalled();
|
|
164
|
+
});
|
|
165
|
+
it('should update state correctly on setCaipNetwork()', () => {
|
|
166
|
+
ChainController.setActiveCaipNetwork({
|
|
167
|
+
id: 1,
|
|
168
|
+
chainNamespace: ConstantsUtil.CHAIN.EVM,
|
|
169
|
+
caipNetworkId: 'eip155:1',
|
|
170
|
+
name: 'Ethereum',
|
|
171
|
+
nativeCurrency: { name: 'Ethereum', symbol: 'ETH', decimals: 18 },
|
|
172
|
+
rpcUrls: { default: { http: ['https://rpc.infura.com/v1/'] } },
|
|
173
|
+
blockExplorers: { default: { name: 'Etherscan', url: 'https://etherscan.io' } }
|
|
174
|
+
});
|
|
175
|
+
expect(ChainController.state.activeCaipNetwork).toEqual(mainnetCaipNetwork);
|
|
176
|
+
});
|
|
177
|
+
it('should check correctly if smart accounts are enabled on the network', () => {
|
|
178
|
+
ChainController.setActiveCaipNetwork(mainnetCaipNetwork);
|
|
179
|
+
ChainController.setSmartAccountEnabledNetworks([1], chainNamespace);
|
|
180
|
+
expect(ChainController.checkIfSmartAccountEnabled()).toEqual(true);
|
|
181
|
+
ChainController.setSmartAccountEnabledNetworks([], chainNamespace);
|
|
182
|
+
expect(ChainController.checkIfSmartAccountEnabled()).toEqual(false);
|
|
183
|
+
ChainController.setSmartAccountEnabledNetworks([2], chainNamespace);
|
|
184
|
+
expect(ChainController.checkIfSmartAccountEnabled()).toEqual(false);
|
|
185
|
+
ChainController.setActiveCaipNetwork({
|
|
186
|
+
id: 2,
|
|
187
|
+
chainNamespace: ConstantsUtil.CHAIN.EVM,
|
|
188
|
+
caipNetworkId: 'eip155:2',
|
|
189
|
+
name: 'Ethereum',
|
|
190
|
+
nativeCurrency: { name: 'Ethereum', symbol: 'ETH', decimals: 18 },
|
|
191
|
+
rpcUrls: { default: { http: ['https://rpc.infura.com/v1/'] } },
|
|
192
|
+
blockExplorers: { default: { name: 'Etherscan', url: 'https://etherscan.io' } }
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
it('should check if network supports names feature', () => {
|
|
196
|
+
ChainController.setActiveCaipNetwork(mainnetCaipNetwork);
|
|
197
|
+
expect(ChainController.checkIfNamesSupported()).toEqual(true);
|
|
198
|
+
ChainController.setActiveCaipNetwork(solanaCaipNetwork);
|
|
199
|
+
expect(ChainController.checkIfNamesSupported()).toEqual(false);
|
|
200
|
+
});
|
|
201
|
+
it('should get correct active network token address', () => {
|
|
202
|
+
let mock = vi
|
|
203
|
+
.spyOn(ChainController.state, 'activeCaipNetwork', 'get')
|
|
204
|
+
.mockReturnValue(undefined);
|
|
205
|
+
expect(ChainController.getActiveNetworkTokenAddress()).toEqual('eip155:1:0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee');
|
|
206
|
+
mock.mockReturnValue(mainnetCaipNetwork);
|
|
207
|
+
expect(ChainController.getActiveNetworkTokenAddress()).toEqual('eip155:1:0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee');
|
|
208
|
+
mock.mockReturnValue(solanaCaipNetwork);
|
|
209
|
+
expect(ChainController.getActiveNetworkTokenAddress()).toEqual('solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:So11111111111111111111111111111111111111111');
|
|
210
|
+
mock.mockClear();
|
|
211
|
+
});
|
|
212
|
+
it('should update state correctly on setRequestedCaipNetworks()', () => {
|
|
213
|
+
ChainController.setRequestedCaipNetworks(requestedCaipNetworks, chainNamespace);
|
|
214
|
+
const requestedNetworks = ChainController.getRequestedCaipNetworks(chainNamespace);
|
|
215
|
+
expect(requestedNetworks).toEqual(requestedCaipNetworks);
|
|
216
|
+
});
|
|
217
|
+
it('should reset state correctly on resetNetwork()', () => {
|
|
218
|
+
const namespace = 'eip155';
|
|
219
|
+
ChainController.resetNetwork(namespace);
|
|
220
|
+
const requestedCaipNetworks = ChainController.getRequestedCaipNetworks(namespace);
|
|
221
|
+
const approvedCaipNetworkIds = ChainController.getApprovedCaipNetworkIds(namespace);
|
|
222
|
+
const smartAccountEnabledNetworks = ChainController.getNetworkProp('smartAccountEnabledNetworks', chainNamespace);
|
|
223
|
+
expect(approvedCaipNetworkIds).toEqual([]);
|
|
224
|
+
expect(requestedCaipNetworks).toEqual(requestedCaipNetworks);
|
|
225
|
+
expect(smartAccountEnabledNetworks).toEqual([]);
|
|
226
|
+
});
|
|
227
|
+
it('should reset account as expected', () => {
|
|
228
|
+
ChainController.resetAccount(chainNamespace);
|
|
229
|
+
expect(ChainController.getAccountProp('smartAccountDeployed', chainNamespace)).toEqual(false);
|
|
230
|
+
expect(ChainController.getAccountProp('currentTab', chainNamespace)).toEqual(0);
|
|
231
|
+
expect(ChainController.getAccountProp('caipAddress', chainNamespace)).toEqual(undefined);
|
|
232
|
+
expect(ChainController.getAccountProp('address', chainNamespace)).toEqual(undefined);
|
|
233
|
+
expect(ChainController.getAccountProp('balance', chainNamespace)).toEqual(undefined);
|
|
234
|
+
expect(ChainController.getAccountProp('balanceSymbol', chainNamespace)).toEqual(undefined);
|
|
235
|
+
expect(ChainController.getAccountProp('profileName', chainNamespace)).toEqual(undefined);
|
|
236
|
+
expect(ChainController.getAccountProp('profileImage', chainNamespace)).toEqual(undefined);
|
|
237
|
+
expect(ChainController.getAccountProp('addressExplorerUrl', chainNamespace)).toEqual(undefined);
|
|
238
|
+
expect(ChainController.getAccountProp('tokenBalance', chainNamespace)).toEqual([]);
|
|
239
|
+
expect(ChainController.getAccountProp('connectedWalletInfo', chainNamespace)).toEqual(undefined);
|
|
240
|
+
expect(ChainController.getAccountProp('preferredAccountType', chainNamespace)).toEqual(undefined);
|
|
241
|
+
expect(ChainController.getAccountProp('status', chainNamespace)).toEqual('disconnected');
|
|
242
|
+
expect(ChainController.getAccountProp('socialProvider', chainNamespace)).toEqual(undefined);
|
|
243
|
+
expect(ChainController.getAccountProp('socialWindow', chainNamespace)).toEqual(undefined);
|
|
244
|
+
});
|
|
245
|
+
it('Expect modal to close after switching from unsupported network to supported network', async () => {
|
|
246
|
+
// Mock RouterController.goBack
|
|
247
|
+
const routerGoBackSpy = vi.spyOn(RouterController, 'goBack');
|
|
248
|
+
// Setup adapter with limited network support
|
|
249
|
+
const limitedEvmAdapter = {
|
|
250
|
+
namespace: ConstantsUtil.CHAIN.EVM,
|
|
251
|
+
connectionControllerClient,
|
|
252
|
+
networkControllerClient,
|
|
253
|
+
caipNetworks: [
|
|
254
|
+
{
|
|
255
|
+
id: 1,
|
|
256
|
+
caipNetworkId: 'eip155:1',
|
|
257
|
+
name: 'Ethereum',
|
|
258
|
+
chainNamespace: ConstantsUtil.CHAIN.EVM
|
|
259
|
+
}
|
|
260
|
+
]
|
|
261
|
+
};
|
|
262
|
+
ChainController.state.activeCaipNetwork = {
|
|
263
|
+
id: 42161,
|
|
264
|
+
caipNetworkId: 'eip155:42161',
|
|
265
|
+
name: 'Arbitrum One',
|
|
266
|
+
chainNamespace: ConstantsUtil.CHAIN.EVM,
|
|
267
|
+
nativeCurrency: {
|
|
268
|
+
name: 'Arbitrum',
|
|
269
|
+
symbol: 'ARB',
|
|
270
|
+
decimals: 18
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
ChainController.state.chains.set(ConstantsUtil.CHAIN.EVM, limitedEvmAdapter);
|
|
274
|
+
await ChainController.switchActiveNetwork(mainnetCaipNetwork);
|
|
275
|
+
expect(routerGoBackSpy).toHaveBeenCalled();
|
|
276
|
+
routerGoBackSpy.mockRestore();
|
|
277
|
+
});
|
|
278
|
+
it('should initialize with active network from local storage', () => {
|
|
279
|
+
const getItemSpy = vi.spyOn(SafeLocalStorage, 'getItem').mockReturnValue('eip155');
|
|
280
|
+
ChainController.initialize([evmAdapter], requestedCaipNetworks, {
|
|
281
|
+
connectionControllerClient,
|
|
282
|
+
networkControllerClient
|
|
283
|
+
});
|
|
284
|
+
expect(getItemSpy).toHaveBeenCalledWith(SafeLocalStorageKeys.ACTIVE_NAMESPACE);
|
|
285
|
+
expect(ChainController.state.activeChain).toEqual(ConstantsUtil.CHAIN.EVM);
|
|
286
|
+
getItemSpy.mockRestore();
|
|
287
|
+
});
|
|
288
|
+
it('should initialize with first adapter when stored network not found', () => {
|
|
289
|
+
const getItemSpy = vi.spyOn(SafeLocalStorage, 'getItem').mockReturnValue('solana');
|
|
290
|
+
ChainController.initialize([solanaAdapter, evmAdapter], requestedCaipNetworks, {
|
|
291
|
+
connectionControllerClient,
|
|
292
|
+
networkControllerClient
|
|
293
|
+
});
|
|
294
|
+
expect(getItemSpy).toHaveBeenCalledWith(SafeLocalStorageKeys.ACTIVE_NAMESPACE);
|
|
295
|
+
expect(ChainController.state.activeChain).toEqual(ConstantsUtil.CHAIN.SOLANA);
|
|
296
|
+
getItemSpy.mockRestore();
|
|
297
|
+
});
|
|
298
|
+
it('should set noAdapters flag when no adapters provided', () => {
|
|
299
|
+
ChainController.initialize([], requestedCaipNetworks, {
|
|
300
|
+
connectionControllerClient,
|
|
301
|
+
networkControllerClient
|
|
302
|
+
});
|
|
303
|
+
expect(ChainController.state.noAdapters).toBe(true);
|
|
304
|
+
});
|
|
305
|
+
it('should set noAdapters flag when no adapter provided', () => {
|
|
306
|
+
ChainController.initialize([], requestedCaipNetworks, {
|
|
307
|
+
connectionControllerClient,
|
|
308
|
+
networkControllerClient
|
|
309
|
+
});
|
|
310
|
+
expect(ChainController.state.noAdapters).toBe(true);
|
|
311
|
+
});
|
|
312
|
+
it('should properly handle disconnect', async () => {
|
|
313
|
+
const resetAccountSpy = vi.spyOn(ChainController, 'resetAccount');
|
|
314
|
+
const resetNetworkSpy = vi.spyOn(ChainController, 'resetNetwork');
|
|
315
|
+
const deleteConnectedSocialProviderSpy = vi.spyOn(StorageUtil, 'deleteConnectedSocialProvider');
|
|
316
|
+
const resetWcConnectionSpy = vi.spyOn(ConnectionController, 'resetWcConnection');
|
|
317
|
+
const sendEventSpy = vi.spyOn(EventsController, 'sendEvent');
|
|
318
|
+
const connectionController = {
|
|
319
|
+
...connectionControllerClient,
|
|
320
|
+
disconnect: vi.fn()
|
|
321
|
+
};
|
|
322
|
+
const evmAdapterCustom = {
|
|
323
|
+
...evmAdapter,
|
|
324
|
+
connectionControllerClient: connectionController
|
|
325
|
+
};
|
|
326
|
+
const solanaAdapterCustom = {
|
|
327
|
+
...solanaAdapter,
|
|
328
|
+
connectionControllerClient: connectionController
|
|
329
|
+
};
|
|
330
|
+
ChainController.initialize([evmAdapterCustom, solanaAdapterCustom], [...requestedCaipNetworks, solanaCaipNetwork], {
|
|
331
|
+
connectionControllerClient: connectionController,
|
|
332
|
+
networkControllerClient
|
|
333
|
+
});
|
|
334
|
+
await ChainController.disconnect();
|
|
335
|
+
expect(connectionController.disconnect).toHaveBeenCalledTimes(2);
|
|
336
|
+
expect(resetAccountSpy).toHaveBeenCalledWith(ConstantsUtil.CHAIN.EVM);
|
|
337
|
+
expect(resetAccountSpy).toHaveBeenCalledWith(ConstantsUtil.CHAIN.SOLANA);
|
|
338
|
+
expect(resetNetworkSpy).toHaveBeenCalledWith(ConstantsUtil.CHAIN.EVM);
|
|
339
|
+
expect(resetNetworkSpy).toHaveBeenCalledWith(ConstantsUtil.CHAIN.SOLANA);
|
|
340
|
+
expect(deleteConnectedSocialProviderSpy).toHaveBeenCalled();
|
|
341
|
+
expect(resetWcConnectionSpy).toHaveBeenCalled();
|
|
342
|
+
expect(sendEventSpy).toHaveBeenCalledWith({
|
|
343
|
+
type: 'track',
|
|
344
|
+
event: 'DISCONNECT_SUCCESS'
|
|
345
|
+
});
|
|
346
|
+
resetAccountSpy.mockRestore();
|
|
347
|
+
resetNetworkSpy.mockRestore();
|
|
348
|
+
resetWcConnectionSpy.mockRestore();
|
|
349
|
+
sendEventSpy.mockRestore();
|
|
350
|
+
});
|
|
351
|
+
it('should handle disconnect errors gracefully', async () => {
|
|
352
|
+
const evmConnectionController = {
|
|
353
|
+
disconnect: vi.fn().mockRejectedValue(new Error('EVM disconnect failed'))
|
|
354
|
+
};
|
|
355
|
+
const customEvmAdapter = {
|
|
356
|
+
...evmAdapter,
|
|
357
|
+
connectionControllerClient: evmConnectionController
|
|
358
|
+
};
|
|
359
|
+
const sendEventSpy = vi.spyOn(EventsController, 'sendEvent');
|
|
360
|
+
const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
361
|
+
ChainController.initialize([customEvmAdapter], requestedCaipNetworks, {
|
|
362
|
+
connectionControllerClient: evmConnectionController,
|
|
363
|
+
networkControllerClient
|
|
364
|
+
});
|
|
365
|
+
await ChainController.disconnect();
|
|
366
|
+
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('EVM disconnect failed'));
|
|
367
|
+
expect(sendEventSpy).toHaveBeenCalledWith({
|
|
368
|
+
type: 'track',
|
|
369
|
+
event: 'DISCONNECT_ERROR',
|
|
370
|
+
properties: {
|
|
371
|
+
message: expect.stringContaining('EVM disconnect failed')
|
|
372
|
+
}
|
|
373
|
+
});
|
|
374
|
+
expect(sendEventSpy).not.toHaveBeenCalledWith({
|
|
375
|
+
type: 'track',
|
|
376
|
+
event: 'DISCONNECT_SUCCESS'
|
|
377
|
+
});
|
|
378
|
+
sendEventSpy.mockRestore();
|
|
379
|
+
consoleSpy.mockRestore();
|
|
380
|
+
});
|
|
381
|
+
});
|
|
382
|
+
//# sourceMappingURL=ChainController.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChainController.test.js","sourceRoot":"","sources":["../../../../tests/controllers/ChainController.test.ts"],"names":[],"mappings":"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"}
|