-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrailway_catch_test.py
More file actions
48 lines (32 loc) · 1.31 KB
/
railway_catch_test.py
File metadata and controls
48 lines (32 loc) · 1.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from python_on_rails.common import identity
from python_on_rails.railway import Railway
from python_on_rails.result import as_result
def test_working_process():
result = Railway(download, parse, output).run(success_handler=identity)
assert result.is_success()
assert result.value == {"data": {"rows": [["2022-01-19", 13], ["2022-01-20", 37]]}}
def test_failed_first_step():
result = Railway(failed_download, parse, output).run()
assert result.is_failure()
assert isinstance(result.error, RuntimeError)
assert repr(result.error) == "RuntimeError('Failed to download')"
def test_failed_middle_step():
result = Railway(download, failed_parse, output).run()
assert result.is_failure()
assert isinstance(result.error, RuntimeError)
assert repr(result.error) == "RuntimeError('Failed to parse')"
@as_result()
def download(result):
return [{"date": "2022-01-19", "clicks": 13}, {"date": "2022-01-20", "clicks": 37}]
@as_result()
def parse(result):
return [[entity["date"], entity["clicks"]] for entity in result]
@as_result()
def output(result):
return {"data": {"rows": result}}
@as_result(RuntimeError)
def failed_download(result):
raise RuntimeError("Failed to download")
@as_result(RuntimeError)
def failed_parse(result):
raise RuntimeError("Failed to parse")