Skip to content

Commit e0d6752

Browse files
committed
tests: test_wizard: set wallet password and yes/no encrypt file
1 parent 05d9aca commit e0d6752

File tree

2 files changed

+64
-5
lines changed

2 files changed

+64
-5
lines changed

electrum/wizard.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ class KeystoreWizard(AbstractWizard):
202202

203203
_logger = get_logger(__name__)
204204

205-
def __init__(self, plugins):
205+
def __init__(self, plugins: 'Plugins'):
206206
AbstractWizard.__init__(self)
207207
self.plugins = plugins
208208
self.navmap = {

tests/test_wizard.py

Lines changed: 63 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
from electrum.plugin import Plugins
77
from electrum.wizard import ServerConnectWizard, NewWalletWizard, WizardViewState
88
from electrum.daemon import Daemon
9+
from electrum.wallet import Abstract_Wallet
10+
from electrum import util
911

1012
from . import ElectrumTestCase
1113
from .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

121124
class 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

Comments
 (0)