@@ -7,34 +7,42 @@ import {
7
7
EndowmentTypes ,
8
8
RestrictedMethods ,
9
9
} from '../../../../shared/constants/permissions' ;
10
- import { ConnectPage , ConnectPageRequest } from './connect-page' ;
10
+ import { overrideAccountsFromMockState } from '../../../../test/jest/mocks' ;
11
+ import {
12
+ MOCK_ACCOUNT_BIP122_P2WPKH ,
13
+ MOCK_ACCOUNT_EOA ,
14
+ } from '../../../../test/data/mock-accounts' ;
15
+ import { ConnectPage , ConnectPageProps } from './connect-page' ;
16
+
17
+ const mockTestDappUrl = 'https://test.dapp' ;
11
18
12
19
const render = (
13
- props : {
14
- request : ConnectPageRequest ;
15
- permissionsRequestId : string ;
16
- rejectPermissionsRequest : ( id : string ) => void ;
17
- approveConnection : ( request : ConnectPageRequest ) => void ;
18
- activeTabOrigin : string ;
19
- } = {
20
- request : {
21
- id : '1' ,
22
- origin : 'https://test.dapp' ,
23
- } ,
24
- permissionsRequestId : '1' ,
25
- rejectPermissionsRequest : jest . fn ( ) ,
26
- approveConnection : jest . fn ( ) ,
27
- activeTabOrigin : 'https://test.dapp' ,
28
- } ,
29
- state = { } ,
20
+ options : {
21
+ props ?: ConnectPageProps ;
22
+ state ?: object ;
23
+ } = { } ,
30
24
) => {
25
+ const {
26
+ props = {
27
+ request : {
28
+ id : '1' ,
29
+ origin : mockTestDappUrl ,
30
+ } ,
31
+ permissionsRequestId : '1' ,
32
+ rejectPermissionsRequest : jest . fn ( ) ,
33
+ approveConnection : jest . fn ( ) ,
34
+ activeTabOrigin : mockTestDappUrl ,
35
+ } ,
36
+ state,
37
+ } = options ;
38
+
31
39
const store = configureStore ( {
32
40
...mockState ,
33
41
metamask : {
34
42
...mockState . metamask ,
35
43
...state ,
36
44
permissionHistory : {
37
- 'https://test.dapp' : {
45
+ mockTestDappUrl : {
38
46
eth_accounts : {
39
47
accounts : {
40
48
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc' : 1709225290848 ,
@@ -44,7 +52,7 @@ const render = (
44
52
} ,
45
53
} ,
46
54
activeTab : {
47
- origin : 'https://test.dapp' ,
55
+ origin : mockTestDappUrl ,
48
56
} ,
49
57
} ) ;
50
58
return renderWithProvider ( < ConnectPage { ...props } /> , store ) ;
@@ -82,33 +90,56 @@ describe('ConnectPage', () => {
82
90
83
91
it ( 'should render with defaults from the requested permissions' , ( ) => {
84
92
const { container } = render ( {
85
- request : {
86
- id : '1' ,
87
- origin : 'https://test.dapp' ,
88
- permissions : {
89
- [ RestrictedMethods . eth_accounts ] : {
90
- caveats : [
91
- {
92
- type : CaveatTypes . restrictReturnedAccounts ,
93
- value : [ '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc' ] ,
94
- } ,
95
- ] ,
96
- } ,
97
- [ EndowmentTypes . permittedChains ] : {
98
- caveats : [
99
- {
100
- type : CaveatTypes . restrictNetworkSwitching ,
101
- value : [ '0x1' ] ,
102
- } ,
103
- ] ,
93
+ props : {
94
+ request : {
95
+ id : '1' ,
96
+ origin : mockTestDappUrl ,
97
+ permissions : {
98
+ [ RestrictedMethods . eth_accounts ] : {
99
+ caveats : [
100
+ {
101
+ type : CaveatTypes . restrictReturnedAccounts ,
102
+ value : [ '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc' ] ,
103
+ } ,
104
+ ] ,
105
+ } ,
106
+ [ EndowmentTypes . permittedChains ] : {
107
+ caveats : [
108
+ {
109
+ type : CaveatTypes . restrictNetworkSwitching ,
110
+ value : [ '0x1' ] ,
111
+ } ,
112
+ ] ,
113
+ } ,
104
114
} ,
105
115
} ,
116
+ permissionsRequestId : '1' ,
117
+ rejectPermissionsRequest : jest . fn ( ) ,
118
+ approveConnection : jest . fn ( ) ,
119
+ activeTabOrigin : mockTestDappUrl ,
106
120
} ,
107
- permissionsRequestId : '1' ,
108
- rejectPermissionsRequest : jest . fn ( ) ,
109
- approveConnection : jest . fn ( ) ,
110
- activeTabOrigin : 'https://test.dapp' ,
111
121
} ) ;
112
122
expect ( container ) . toMatchSnapshot ( ) ;
113
123
} ) ;
124
+
125
+ it ( 'should render a disabled confirm if current account is a non-EVM account' , ( ) => {
126
+ // NOTE: We select the non-EVM account by default here!
127
+ const mockSelectedAccountId = MOCK_ACCOUNT_BIP122_P2WPKH . id ;
128
+ const mockAccounts = [ MOCK_ACCOUNT_EOA , MOCK_ACCOUNT_BIP122_P2WPKH ] ;
129
+ const mockAccountsState = overrideAccountsFromMockState (
130
+ mockState ,
131
+ mockAccounts ,
132
+ mockSelectedAccountId ,
133
+ ) ;
134
+
135
+ const { getByText } = render ( {
136
+ state : mockAccountsState . metamask ,
137
+ } ) ;
138
+ const confirmButton = getByText ( 'Connect' ) ;
139
+ const cancelButton = getByText ( 'Cancel' ) ;
140
+ // The currently selected account is a Bitcoin account, the "connecting account list" would be
141
+ // empty by default and thus, we cannot confirm without explictly select an EVM account.
142
+ expect ( confirmButton ) . toBeDisabled ( ) ;
143
+ expect ( cancelButton ) . toBeDefined ( ) ;
144
+ } ) ;
114
145
} ) ;
0 commit comments