Skip to content

Commit f932fce

Browse files
committed
Add remaining tests for wizard
1 parent 97189a6 commit f932fce

2 files changed

Lines changed: 100 additions & 8 deletions

File tree

‎paths_cli/tests/wizard/test_wizard.py‎

Lines changed: 99 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,49 @@
1111
from paths_cli.wizard.wizard import *
1212
from paths_cli.wizard.steps import SINGLE_ENGINE_STEP
1313

14+
import openpathsampling as paths
15+
16+
class MockStore:
17+
def __init__(self):
18+
self.all_entries = []
19+
self.name_dict = {}
20+
21+
def register(self, obj):
22+
self.all_entries.append(obj)
23+
if obj.is_named:
24+
self.name_dict[obj.name] = obj
25+
26+
def __getitem__(self, key):
27+
if isinstance(key, int):
28+
return self.all_entries[key]
29+
else:
30+
return self.name_dict[key]
31+
32+
def __len__(self):
33+
return len(self.all_entries)
34+
35+
class MockStorage:
36+
def __init__(self):
37+
self.engines = MockStore()
38+
self.volumes = MockStore()
39+
self.cvs = MockStore()
40+
self.networks = MockStore()
41+
self.schemes = MockStore()
42+
43+
def save(self, obj):
44+
class_to_store = {
45+
paths.engines.DynamicsEngine: self.engines,
46+
paths.Volume: self.volumes,
47+
CoordinateFunctionCV: self.cvs,
48+
paths.TransitionNetwork: self.networks,
49+
paths.MoveScheme: self.schemes,
50+
}
51+
for cls in class_to_store:
52+
if isinstance(obj, cls):
53+
store = class_to_store[cls]
54+
break
55+
56+
store.register(obj)
1457

1558

1659
class TestWizard:
@@ -196,8 +239,17 @@ def test_storage_description_line(self, count):
196239
line = self.wizard._storage_description_line('cvs')
197240
assert line == expected
198241

199-
def test_save_to_file(self):
200-
pytest.skip()
242+
def test_save_to_file(self, toy_engine):
243+
console = MockConsole([])
244+
self.wizard.console = console
245+
self.wizard.register(toy_engine, 'Engine', 'engines')
246+
storage = MockStorage()
247+
self.wizard.save_to_file(storage)
248+
assert len(storage.cvs) == len(storage.volumes) == 0
249+
assert len(storage.networks) == len(storage.schemes) == 0
250+
assert len(storage.engines) == 1
251+
assert storage.engines[toy_engine.name] == toy_engine
252+
assert "Everything has been stored" in self.wizard.console.log_text
201253

202254
@pytest.mark.parametrize('req,count,expected', [
203255
(('cvs', 1, 1), 0, (True, True)),
@@ -222,8 +274,48 @@ def test_ask_do_another(self, inputs, expected):
222274
if len(inputs) > 1:
223275
assert "Sorry" in console.log_text
224276

225-
def test_do_one(self):
226-
pytest.skip()
227-
228-
def test_run_wizard(self):
229-
pytest.skip()
277+
@pytest.mark.parametrize('min_max,do_another', [
278+
((1, 1), False), ((2, float('inf')), True), ((1, 2), 'asked')
279+
])
280+
def test_do_one(self, toy_engine, min_max, do_another):
281+
step = mock.Mock(
282+
func=mock.Mock(return_value=toy_engine),
283+
display_name='Engine',
284+
store_name='engines'
285+
)
286+
req = ('engines', *min_max)
287+
# mock user interaction with response 'asked'
288+
with mock.patch.object(Wizard, '_ask_do_another',
289+
return_value='asked'):
290+
result = self.wizard._do_one(step, req)
291+
292+
assert result == do_another
293+
assert self.wizard.engines[toy_engine.name] == toy_engine
294+
295+
def test_do_one_restart(self):
296+
step = mock.Mock(
297+
func=mock.Mock(side_effect=RestartObjectException()),
298+
display_name='Engine', store_name='engines'
299+
)
300+
req = ('engines', 1, 1)
301+
result = self.wizard._do_one(step, req)
302+
assert result is True
303+
assert len(self.wizard.engines) == 0
304+
305+
def test_run_wizard(self, toy_engine):
306+
step = mock.Mock(
307+
func=mock.Mock(return_value=toy_engine),
308+
display_name='Engine',
309+
store_name='engines',
310+
minimum=1,
311+
maximum=1
312+
)
313+
self.wizard.steps = [step]
314+
storage = MockStorage()
315+
with mock.patch.object(Wizard, 'get_storage',
316+
mock.Mock(return_value=storage)):
317+
self.wizard.run_wizard()
318+
assert len(storage.cvs) == len(storage.volumes) == 0
319+
assert len(storage.networks) == len(storage.schemes) == 0
320+
assert len(storage.engines) == 1
321+
assert storage.engines[toy_engine.name] == toy_engine

‎paths_cli/wizard/wizard.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ def save_to_file(self, storage):
217217
for obj in store.values():
218218
storage.save(obj)
219219

220-
self.say("Success! Everthing has been stored in your file.")
220+
self.say("Success! Everything has been stored in your file.")
221221

222222
def _req_do_another(self, req):
223223
store, min_, max_ = req

0 commit comments

Comments
 (0)