66from electrum .plugin import Plugins
77from electrum .wizard import ServerConnectWizard , NewWalletWizard , WizardViewState
88from electrum .daemon import Daemon
9+ from electrum .wallet import Abstract_Wallet
10+ from electrum import util
911
1012from . import ElectrumTestCase
1113from .test_wallet_vertical import UNICODE_HORROR
@@ -117,10 +119,18 @@ async def test_proxy_and_server(self):
117119 self .assertTrue (w ._daemon .network .run_called )
118120 self .assertEqual (NetworkParameters (server = serverobj , proxy = None , auto_connect = False , oneserver = False ), w ._daemon .network .parameters )
119121
122+ # TODO KeystoreWizard ("enable keystore")
120123
121124class WalletWizardTestCase (WizardTestCase ):
122125
123- def wizard_for (self , * , name , wallet_type ):
126+ # TODO imported addresses
127+ # TODO imported WIF keys
128+ # TODO hardware signer std wallet (e.g. Trezor)
129+ # TODO encrypt with hardware (xpub) password
130+ # TODO multisig
131+ # TODO slip39
132+
133+ def wizard_for (self , * , name : str , wallet_type : str ) -> NewWalletWizard :
124134 w = NewWalletWizard (DaemonMock (self .config ), self .plugins )
125135 if wallet_type == '2fa' :
126136 w .plugins .get_plugin ('trustedcoin' ).extend_wizard (w )
@@ -142,20 +152,69 @@ def _set_password_and_check_address(
142152 v : WizardViewState ,
143153 w : NewWalletWizard ,
144154 recv_addr : str ,
145- ):
155+ password : str | None = None ,
156+ encrypt_file : bool = False ,
157+ ) -> Abstract_Wallet :
146158 d = v .wizard_data
147159 self .assertEqual ('wallet_password' , v .view )
148160
149- d .update ({'password' : None , 'encrypt' : False })
161+ d .update ({'password' : password , 'encrypt' : encrypt_file })
150162 self .assertTrue (w .is_last_view (v .view , d ))
151163 v = w .resolve_next (v .view , d )
152164
153165 wallet_path = os .path .join (w ._daemon .config .get_datadir_wallet_path (), d ['wallet_name' ])
154166 w .create_storage (wallet_path , d )
155167
156168 self .assertTrue (os .path .exists (wallet_path ))
157- wallet = Daemon ._load_wallet (wallet_path , password = None , config = self .config )
169+ wallet = Daemon ._load_wallet (wallet_path , password = password , config = self .config )
158170 self .assertEqual (recv_addr , wallet .get_receiving_addresses ()[0 ])
171+ self .assertEqual (bool (password ), wallet .has_password ())
172+ self .assertEqual (encrypt_file , wallet .has_storage_encryption ())
173+ return wallet
174+
175+ async def test_set_password_and_encrypt_file (self ):
176+ w = self .wizard_for (name = 'test_standard_wallet' , wallet_type = 'standard' )
177+ v = w ._current
178+ d = v .wizard_data
179+ self .assertEqual ('keystore_type' , v .view )
180+ d .update ({'keystore_type' : 'haveseed' })
181+ v = w .resolve_next (v .view , d )
182+ self .assertEqual ('have_seed' , v .view )
183+ d .update ({'seed' : '9dk' , 'seed_type' : 'segwit' , 'seed_extend' : False , 'seed_variant' : 'electrum' })
184+ v = w .resolve_next (v .view , d )
185+
186+ wallet = self ._set_password_and_check_address (
187+ v = v , w = w , recv_addr = "bc1qq2tmmcngng78nllq2pvrkchcdukemtj56uyue0" ,
188+ password = "1234" , encrypt_file = True ,
189+ )
190+ self .assertTrue (wallet .has_password ())
191+ with self .assertRaises (util .InvalidPassword ):
192+ wallet .check_password ("0000" )
193+ wallet .check_password ("1234" )
194+ self .assertTrue (wallet .has_keystore_encryption ())
195+ self .assertTrue (wallet .has_storage_encryption ())
196+
197+ async def test_set_password_but_dont_encrypt_file (self ):
198+ w = self .wizard_for (name = 'test_standard_wallet' , wallet_type = 'standard' )
199+ v = w ._current
200+ d = v .wizard_data
201+ self .assertEqual ('keystore_type' , v .view )
202+ d .update ({'keystore_type' : 'haveseed' })
203+ v = w .resolve_next (v .view , d )
204+ self .assertEqual ('have_seed' , v .view )
205+ d .update ({'seed' : '9dk' , 'seed_type' : 'segwit' , 'seed_extend' : False , 'seed_variant' : 'electrum' })
206+ v = w .resolve_next (v .view , d )
207+
208+ wallet = self ._set_password_and_check_address (
209+ v = v , w = w , recv_addr = "bc1qq2tmmcngng78nllq2pvrkchcdukemtj56uyue0" ,
210+ password = "1234" , encrypt_file = False ,
211+ )
212+ self .assertTrue (wallet .has_password ())
213+ with self .assertRaises (util .InvalidPassword ):
214+ wallet .check_password ("0000" )
215+ wallet .check_password ("1234" )
216+ self .assertTrue (wallet .has_keystore_encryption ())
217+ self .assertFalse (wallet .has_storage_encryption ())
159218
160219 async def test_create_standard_wallet_createseed (self ):
161220 w = self .wizard_for (name = 'test_standard_wallet' , wallet_type = 'standard' )
0 commit comments