-
Notifications
You must be signed in to change notification settings - Fork 30
/
Copy pathtest_offchain_payment_state.py
65 lines (53 loc) · 1.92 KB
/
test_offchain_payment_state.py
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# Copyright (c) The Diem Core Contributors
# SPDX-License-Identifier: Apache-2.0
from diem.offchain import (
state,
replace_payment_actor,
Action,
individual_kyc_data,
Status,
)
from diem.offchain.payment_state import (
follow_up_action,
Actor,
MACHINE as machine,
S_INIT,
R_SEND,
R_ABORT,
)
import dataclasses, pytest
def test_initial_state(factory):
payment = factory.new_payment_object()
initial_state = machine.match_state(payment)
assert initial_state
assert machine.is_initial(initial_state)
assert S_INIT == initial_state
def test_match_state_validation(factory):
payment = factory.new_payment_object()
invalid_payment = dataclasses.replace(
payment,
receiver=replace_payment_actor(payment.receiver, status=Status.ready_for_settlement),
)
with pytest.raises(state.ConditionValidationError):
machine.match_state(invalid_payment)
def test_match_receiver_ready_payment_state(factory):
payment = factory.new_payment_object()
receiver_ready_payment = dataclasses.replace(
payment,
receiver=replace_payment_actor(
payment.receiver,
status=Status.ready_for_settlement,
kyc_data=individual_kyc_data(given_name="Rose"),
),
recipient_signature="signature",
)
receiver_ready = machine.match_state(receiver_ready_payment)
assert receiver_ready == R_SEND
initial_state = machine.match_state(payment)
assert machine.is_valid_transition(initial_state, receiver_ready, receiver_ready_payment)
def test_follow_up_action():
assert follow_up_action(Actor.RECEIVER, S_INIT) == Action.EVALUATE_KYC_DATA
assert follow_up_action(Actor.SENDER, R_SEND) == Action.EVALUATE_KYC_DATA
assert follow_up_action(Actor.RECEIVER, R_SEND) is None
assert follow_up_action(Actor.SENDER, R_ABORT) is None
assert follow_up_action(Actor.RECEIVER, R_ABORT) is None