|
1 | 1 | import { CoinbaseWalletProvider } from './CoinbaseWalletProvider'; |
2 | 2 | import { CoinbaseWalletSDK } from './CoinbaseWalletSDK'; |
3 | | -import { ProviderInterface } from ':core/provider/interface'; |
4 | | -import { getFavicon } from ':core/type/util'; |
5 | | -import { getCoinbaseInjectedProvider } from ':util/provider'; |
| 3 | +import { MOBILE_SDK_RESPONSE_PATH } from ':core/constants'; |
6 | 4 |
|
7 | | -jest.mock(':core/type/util'); |
8 | | -jest.mock(':util/provider'); |
9 | 5 | jest.mock('./CoinbaseWalletProvider'); |
| 6 | +jest.mock(':core/storage/ScopedAsyncStorage'); |
10 | 7 |
|
11 | 8 | describe('CoinbaseWalletSDK', () => { |
12 | | - test('@makeWeb3Provider - return Coinbase Injected Provider', () => { |
13 | | - const injectedProvider = {} as unknown as ProviderInterface; |
14 | | - (getCoinbaseInjectedProvider as jest.Mock).mockReturnValue(injectedProvider); |
15 | | - |
16 | | - const SDK = new CoinbaseWalletSDK({ |
17 | | - appName: 'Test', |
18 | | - appLogoUrl: 'http://coinbase.com/wallet-logo.png', |
19 | | - }); |
20 | | - |
21 | | - expect(SDK.makeWeb3Provider()).toBe(injectedProvider); |
| 9 | + const mockAppDeeplinkUrl = 'https://example.com'; |
| 10 | + const mockMetadata = { |
| 11 | + appName: 'TestDapp', |
| 12 | + appLogoUrl: 'https://example.com/logo.png', |
| 13 | + appChainIds: [1, 42], |
| 14 | + appDeeplinkUrl: mockAppDeeplinkUrl, |
| 15 | + }; |
| 16 | + |
| 17 | + beforeEach(() => { |
| 18 | + jest.clearAllMocks(); |
22 | 19 | }); |
23 | 20 |
|
24 | | - test('@makeWeb3Provider - return new CoinbaseWalletProvider', () => { |
25 | | - (getCoinbaseInjectedProvider as jest.Mock).mockReturnValue(undefined); |
26 | | - |
27 | | - const SDK = new CoinbaseWalletSDK({ |
28 | | - appName: 'Test', |
29 | | - appLogoUrl: 'http://coinbase.com/wallet-logo.png', |
| 21 | + describe('constructor', () => { |
| 22 | + it('should throw an error if appDeeplinkUrl is not provided', () => { |
| 23 | + expect(() => new CoinbaseWalletSDK({})).toThrow('appDeeplinkUrl is required on Mobile'); |
30 | 24 | }); |
31 | 25 |
|
32 | | - SDK.makeWeb3Provider(); |
33 | | - |
34 | | - expect(CoinbaseWalletProvider).toHaveBeenCalledWith({ |
35 | | - metadata: { |
36 | | - appName: 'Test', |
37 | | - appLogoUrl: 'http://coinbase.com/wallet-logo.png', |
| 26 | + it('should initialize metadata with default values', () => { |
| 27 | + const sdk = new CoinbaseWalletSDK({ appDeeplinkUrl: mockAppDeeplinkUrl }); |
| 28 | + expect(sdk['metadata']).toEqual({ |
| 29 | + appName: 'Dapp', |
| 30 | + appLogoUrl: null, |
38 | 31 | appChainIds: [], |
39 | | - appDeeplinkUrl: null, |
40 | | - }, |
41 | | - preference: { |
42 | | - options: 'all', |
43 | | - }, |
| 32 | + appDeeplinkUrl: `${mockAppDeeplinkUrl}/${MOBILE_SDK_RESPONSE_PATH}`, |
| 33 | + }); |
44 | 34 | }); |
45 | | - }); |
46 | | - |
47 | | - test('@makeWeb3Provider - default values for metadata', () => { |
48 | | - (getFavicon as jest.Mock).mockReturnValue('https://dapp.xyz/pic.png'); |
49 | | - (getCoinbaseInjectedProvider as jest.Mock).mockReturnValue(undefined); |
50 | 35 |
|
51 | | - const SDK = new CoinbaseWalletSDK({ |
52 | | - appName: '', |
53 | | - appLogoUrl: '', |
| 36 | + it('should initialize metadata with provided values', () => { |
| 37 | + const sdk = new CoinbaseWalletSDK(mockMetadata); |
| 38 | + expect(sdk['metadata']).toEqual({ |
| 39 | + ...mockMetadata, |
| 40 | + appDeeplinkUrl: `${mockAppDeeplinkUrl}/${MOBILE_SDK_RESPONSE_PATH}`, |
| 41 | + }); |
54 | 42 | }); |
| 43 | + }); |
55 | 44 |
|
56 | | - SDK.makeWeb3Provider(); |
57 | | - |
58 | | - expect(CoinbaseWalletProvider).toHaveBeenCalledWith({ |
59 | | - metadata: { |
60 | | - appName: 'Dapp', |
61 | | - appLogoUrl: 'https://dapp.xyz/pic.png', |
62 | | - appChainIds: [], |
63 | | - appDeeplinkUrl: null, |
64 | | - }, |
65 | | - preference: { |
66 | | - options: 'all', |
67 | | - }, |
| 45 | + describe('makeWeb3Provider', () => { |
| 46 | + it('should return a new CoinbaseWalletProvider instance', () => { |
| 47 | + const sdk = new CoinbaseWalletSDK(mockMetadata); |
| 48 | + const provider = sdk.makeWeb3Provider(); |
| 49 | + expect(provider).toBeInstanceOf(CoinbaseWalletProvider); |
| 50 | + expect(CoinbaseWalletProvider).toHaveBeenCalledWith({ |
| 51 | + metadata: sdk['metadata'], |
| 52 | + preference: { options: 'smartWalletOnly' }, |
| 53 | + }); |
68 | 54 | }); |
69 | 55 | }); |
70 | 56 | }); |
0 commit comments