Temporarily revert second part of HG-538 (#444)

This reverts commit 7f23d74bf7.
This commit is contained in:
Roman Pushkov 2020-06-03 20:23:10 +03:00 committed by GitHub
parent 7f23d74bf7
commit 7eea076a4d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 48 deletions

View File

@ -2214,10 +2214,12 @@ process_failure({payment, Step} = Activity, Events, Action, Failure, St, _Refund
_ = maybe_notify_fault_detector(Activity, TargetType, OperationStatus, St), _ = maybe_notify_fault_detector(Activity, TargetType, OperationStatus, St),
process_fatal_payment_failure(Target, Events, Action, Failure, St) process_fatal_payment_failure(Target, Events, Action, Failure, St)
end; end;
process_failure({refund_new, ID}, Events, Action, Failure, St, RefundSt) ->
process_failure({refund_new, ID}, [], Action, Failure, _St, _RefundSt) -> _Clocks = rollback_refund_cashflow(RefundSt, St),
{next, {[?refund_ev(ID, ?refund_rollback_started(Failure))], hg_machine_action:set_timeout(0, Action)}}; {done, {Events ++ [?refund_ev(ID, ?refund_status_changed(?refund_failed(Failure)))], Action}};
process_failure({refund_session, ID}, Events, Action, Failure, St, _RefundSt) -> % process_failure({refund_new, ID}, [], Action, Failure, _St, _RefundSt) ->
% {next, {[?refund_ev(ID, ?refund_rollback_started(Failure))], hg_machine_action:set_timeout(0, Action)}};
process_failure({refund_session, ID}, Events, Action, Failure, St, RefundSt) ->
Target = ?refunded(), Target = ?refunded(),
case check_retry_possibility(Target, Failure, St) of case check_retry_possibility(Target, Failure, St) of
{retry, Timeout} -> {retry, Timeout} ->
@ -2226,10 +2228,16 @@ process_failure({refund_session, ID}, Events, Action, Failure, St, _RefundSt) ->
Events1 = [?refund_ev(ID, E) || E <- SessionEvents], Events1 = [?refund_ev(ID, E) || E <- SessionEvents],
{next, {Events ++ Events1, SessionAction}}; {next, {Events ++ Events1, SessionAction}};
fatal -> fatal ->
_Clocks = rollback_refund_cashflow(RefundSt, St),
Events1 = [ Events1 = [
?refund_ev(ID, ?refund_rollback_started(Failure)) ?refund_ev(ID, ?refund_status_changed(?refund_failed(Failure)))
], ],
{next, {Events ++ Events1, hg_machine_action:set_timeout(0, Action)}} {done, {Events ++ Events1, Action}}
% fatal ->
% Events1 = [
% ?refund_ev(ID, ?refund_rollback_started(Failure))
% ],
% {next, {Events ++ Events1, hg_machine_action:set_timeout(0, Action)}}
end. end.
choose_fd_operation_status_for_failure({failure, Failure}) -> choose_fd_operation_status_for_failure({failure, Failure}) ->
@ -2292,9 +2300,15 @@ process_fatal_payment_failure(?cancelled(), _Events, _Action, Failure, _St) ->
error({invalid_cancel_failure, Failure}); error({invalid_cancel_failure, Failure});
process_fatal_payment_failure(?captured(), _Events, _Action, Failure, _St) -> process_fatal_payment_failure(?captured(), _Events, _Action, Failure, _St) ->
error({invalid_capture_failure, Failure}); error({invalid_capture_failure, Failure});
process_fatal_payment_failure(?processed(), Events, Action, Failure, _St) -> % process_fatal_payment_failure(?processed(), [], Action, Failure, _St) ->
RollbackStarted = [?payment_rollback_started(Failure)], % {next, {[?payment_rollback_started(Failure)], hg_machine_action:set_timeout(0, Action)}};
{next, {Events ++ RollbackStarted, hg_machine_action:set_timeout(0, Action)}}. % process_fatal_payment_failure(?processed(), Events, Action, Failure, _St) ->
% RollbackStarted = [?payment_rollback_started(Failure)],
% {next, {Events ++ RollbackStarted, hg_machine_action:set_timeout(0, Action)}};
process_fatal_payment_failure(_Target, Events, Action, Failure, St) ->
_Clocks = rollback_payment_cashflow(St),
PaymentFailed = [?payment_status_changed(?failed(Failure))],
{done, {Events ++ PaymentFailed, Action}}.
retry_session(Action, Target, Timeout) -> retry_session(Action, Target, Timeout) ->
NewEvents = start_session(Target), NewEvents = start_session(Target),
@ -2831,7 +2845,12 @@ merge_change(?payment_status_changed(Status), #st{activity = {adjustment_pending
} }
}; };
merge_change(Change = ?payment_rollback_started(Failure), St, Opts) -> merge_change(Change = ?payment_rollback_started(Failure), St, Opts) ->
_ = validate_transition([{payment, processing_session}], Change, St, Opts), _ = validate_transition([{payment, S} || S <- [
risk_scoring,
routing,
processing_session,
processing_failure
]], Change, St, Opts),
St#st{ St#st{
failure = Failure, failure = Failure,
activity = {payment, processing_failure}, activity = {payment, processing_failure},
@ -2841,6 +2860,7 @@ merge_change(Change = ?payment_status_changed({failed, _} = Status), #st{payment
_ = validate_transition([{payment, S} || S <- [ _ = validate_transition([{payment, S} || S <- [
risk_scoring, risk_scoring,
routing, routing,
processing_session,
processing_failure processing_failure
]], Change, St, Opts), ]], Change, St, Opts),
St#st{ St#st{
@ -2943,7 +2963,7 @@ merge_change(Change = ?refund_ev(ID, Event), St, Opts) ->
_ = validate_transition([{refund_session, ID}, {refund_new, ID}], Change, St, Opts), _ = validate_transition([{refund_session, ID}, {refund_new, ID}], Change, St, Opts),
St#st{activity = {refund_failure, ID}}; St#st{activity = {refund_failure, ID}};
?refund_status_changed(?refund_failed(_)) -> ?refund_status_changed(?refund_failed(_)) ->
_ = validate_transition([{refund_failure, ID}], Change, St, Opts), _ = validate_transition([{refund_session, ID}, {refund_new, ID}, {refund_failure, ID}], Change, St, Opts),
St; St;
_ -> _ ->
_ = validate_transition([{refund_session, ID}], Change, St, Opts), _ = validate_transition([{refund_session, ID}], Change, St, Opts),

View File

@ -947,7 +947,6 @@ processing_deadline_reached_test(C) ->
PaymentParams = PaymentParams0#payproc_InvoicePaymentParams{processing_deadline = Deadline}, PaymentParams = PaymentParams0#payproc_InvoicePaymentParams{processing_deadline = Deadline},
PaymentID = start_payment(InvoiceID, PaymentParams, Client), PaymentID = start_payment(InvoiceID, PaymentParams, Client),
PaymentID = await_sessions_restarts(PaymentID, ?processed(), InvoiceID, Client, 0), PaymentID = await_sessions_restarts(PaymentID, ?processed(), InvoiceID, Client, 0),
[?payment_ev(PaymentID, ?payment_rollback_started({failure, Failure}))] = next_event(InvoiceID, Client),
[?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, Failure})))] = next_event(InvoiceID, Client), [?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, Failure})))] = next_event(InvoiceID, Client),
ok = payproc_errors:match( ok = payproc_errors:match(
'PaymentFailure', 'PaymentFailure',
@ -1252,11 +1251,8 @@ payment_suspend_timeout_failure(C) ->
] = next_event(InvoiceID, Client), ] = next_event(InvoiceID, Client),
PaymentID = await_payment_session_started(InvoiceID, PaymentID, Client, ?processed()), PaymentID = await_payment_session_started(InvoiceID, PaymentID, Client, ?processed()),
[ [
?payment_ev(PaymentID, ?session_ev(?processed(), ?session_finished(?session_failed({failure, Failure})))), ?payment_ev(PaymentID, ?session_ev(?processed(), ?session_finished(?session_failed({failure, _Failure})))),
?payment_ev(PaymentID, ?payment_rollback_started({failure, Failure})) ?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, _Failure})))
] = next_event(InvoiceID, Client),
[
?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, Failure})))
] = next_event(InvoiceID, Client). ] = next_event(InvoiceID, Client).
-spec payment_w_wallet_success(config()) -> _ | no_return(). -spec payment_w_wallet_success(config()) -> _ | no_return().
@ -3448,9 +3444,6 @@ payment_refund_success(C) ->
Refund0 = #domain_InvoicePaymentRefund{id = RefundID0} = Refund0 = #domain_InvoicePaymentRefund{id = RefundID0} =
hg_client_invoicing:refund_payment(InvoiceID, PaymentID, RefundParams, Client), hg_client_invoicing:refund_payment(InvoiceID, PaymentID, RefundParams, Client),
PaymentID = refund_payment(InvoiceID, PaymentID, RefundID0, Refund0, Client), PaymentID = refund_payment(InvoiceID, PaymentID, RefundID0, Refund0, Client),
[
?payment_ev(PaymentID, ?refund_ev(RefundID0, ?refund_rollback_started(Failure)))
] = next_event(InvoiceID, Client),
[ [
?payment_ev(PaymentID, ?refund_ev(RefundID0, ?refund_status_changed(?refund_failed(Failure)))) ?payment_ev(PaymentID, ?refund_ev(RefundID0, ?refund_status_changed(?refund_failed(Failure))))
] = next_event(InvoiceID, Client), ] = next_event(InvoiceID, Client),
@ -3500,9 +3493,6 @@ payment_refund_failure(C) ->
Refund0 = #domain_InvoicePaymentRefund{id = RefundID0} = Refund0 = #domain_InvoicePaymentRefund{id = RefundID0} =
hg_client_invoicing:refund_payment(InvoiceID, PaymentID, RefundParams, Client), hg_client_invoicing:refund_payment(InvoiceID, PaymentID, RefundParams, Client),
PaymentID = refund_payment(InvoiceID, PaymentID, RefundID0, Refund0, Client), PaymentID = refund_payment(InvoiceID, PaymentID, RefundID0, Refund0, Client),
[
?payment_ev(PaymentID, ?refund_ev(RefundID0, ?refund_rollback_started(NoFunds)))
] = next_event(InvoiceID, Client),
[ [
?payment_ev(PaymentID, ?refund_ev(RefundID0, ?refund_status_changed(?refund_failed(NoFunds)))) ?payment_ev(PaymentID, ?refund_ev(RefundID0, ?refund_status_changed(?refund_failed(NoFunds))))
] = next_event(InvoiceID, Client), ] = next_event(InvoiceID, Client),
@ -3519,9 +3509,6 @@ payment_refund_failure(C) ->
PaymentID = await_refund_session_started(InvoiceID, PaymentID, RefundID, Client), PaymentID = await_refund_session_started(InvoiceID, PaymentID, RefundID, Client),
[ [
?payment_ev(PaymentID, ?refund_ev(ID, ?session_ev(?refunded(), ?session_finished(?session_failed(Failure))))), ?payment_ev(PaymentID, ?refund_ev(ID, ?session_ev(?refunded(), ?session_finished(?session_failed(Failure))))),
?payment_ev(PaymentID, ?refund_ev(ID, ?refund_rollback_started(Failure)))
] = next_event(InvoiceID, Client),
[
?payment_ev(PaymentID, ?refund_ev(ID, ?refund_status_changed(?refund_failed(Failure)))) ?payment_ev(PaymentID, ?refund_ev(ID, ?refund_status_changed(?refund_failed(Failure))))
] = next_event(InvoiceID, Client), ] = next_event(InvoiceID, Client),
#domain_InvoicePaymentRefund{status = ?refund_failed(Failure)} = #domain_InvoicePaymentRefund{status = ?refund_failed(Failure)} =
@ -3544,17 +3531,14 @@ deadline_doesnt_affect_payment_refund(C) ->
PaymentID = await_payment_capture(InvoiceID, PaymentID, Client), PaymentID = await_payment_capture(InvoiceID, PaymentID, Client),
timer:sleep(ProcessingDeadline), timer:sleep(ProcessingDeadline),
% not enough funds on the merchant account % not enough funds on the merchant account
NoFunds = {failure, payproc_errors:construct('RefundFailure', Failure = {failure, payproc_errors:construct('RefundFailure',
{terms_violated, {insufficient_merchant_funds, #payprocerr_GeneralFailure{}}} {terms_violated, {insufficient_merchant_funds, #payprocerr_GeneralFailure{}}}
)}, )},
Refund0 = #domain_InvoicePaymentRefund{id = RefundID0} = Refund0 = #domain_InvoicePaymentRefund{id = RefundID0} =
hg_client_invoicing:refund_payment(InvoiceID, PaymentID, RefundParams, Client), hg_client_invoicing:refund_payment(InvoiceID, PaymentID, RefundParams, Client),
PaymentID = refund_payment(InvoiceID, PaymentID, RefundID0, Refund0, Client), PaymentID = refund_payment(InvoiceID, PaymentID, RefundID0, Refund0, Client),
[ [
?payment_ev(PaymentID, ?refund_ev(RefundID0, ?refund_rollback_started(NoFunds))) ?payment_ev(PaymentID, ?refund_ev(RefundID0, ?refund_status_changed(?refund_failed(Failure))))
] = next_event(InvoiceID, Client),
[
?payment_ev(PaymentID, ?refund_ev(RefundID0, ?refund_status_changed(?refund_failed(NoFunds))))
] = next_event(InvoiceID, Client), ] = next_event(InvoiceID, Client),
% top up merchant account % top up merchant account
InvoiceID2 = start_invoice(ShopID, <<"rubberduck">>, make_due_date(10), 42000, C), InvoiceID2 = start_invoice(ShopID, <<"rubberduck">>, make_due_date(10), 42000, C),
@ -3594,7 +3578,7 @@ payment_manual_refund(C) ->
}, },
PaymentID = await_payment_capture(InvoiceID, PaymentID, Client), PaymentID = await_payment_capture(InvoiceID, PaymentID, Client),
% not enough funds on the merchant account % not enough funds on the merchant account
NoFunds = {failure, payproc_errors:construct('RefundFailure', Failure = {failure, payproc_errors:construct('RefundFailure',
{terms_violated, {insufficient_merchant_funds, #payprocerr_GeneralFailure{}}} {terms_violated, {insufficient_merchant_funds, #payprocerr_GeneralFailure{}}}
)}, )},
Refund0 = #domain_InvoicePaymentRefund{id = RefundID0} = Refund0 = #domain_InvoicePaymentRefund{id = RefundID0} =
@ -3603,10 +3587,7 @@ payment_manual_refund(C) ->
?payment_ev(PaymentID, ?refund_ev(RefundID0, ?refund_created(Refund0, _, TrxInfo))) ?payment_ev(PaymentID, ?refund_ev(RefundID0, ?refund_created(Refund0, _, TrxInfo)))
] = next_event(InvoiceID, Client), ] = next_event(InvoiceID, Client),
[ [
?payment_ev(PaymentID, ?refund_ev(RefundID0, ?refund_rollback_started(NoFunds))) ?payment_ev(PaymentID, ?refund_ev(RefundID0, ?refund_status_changed(?refund_failed(Failure))))
] = next_event(InvoiceID, Client),
[
?payment_ev(PaymentID, ?refund_ev(RefundID0, ?refund_status_changed(?refund_failed(NoFunds))))
] = next_event(InvoiceID, Client), ] = next_event(InvoiceID, Client),
% top up merchant account % top up merchant account
InvoiceID2 = start_invoice(ShopID, <<"rubberduck">>, make_due_date(10), 42000, C), InvoiceID2 = start_invoice(ShopID, <<"rubberduck">>, make_due_date(10), 42000, C),
@ -4490,9 +4471,6 @@ payment_with_offsite_preauth_failed(C) ->
PaymentID, PaymentID,
?session_ev(?processed(), ?session_finished(?session_failed({failure, Failure}))) ?session_ev(?processed(), ?session_finished(?session_failed({failure, Failure})))
), ),
?payment_ev(PaymentID, ?payment_rollback_started({failure, Failure}))
] = next_event(InvoiceID, 8000, Client),
[
?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, Failure}))) ?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, Failure})))
] = next_event(InvoiceID, 8000, Client), ] = next_event(InvoiceID, 8000, Client),
ok = payproc_errors:match('PaymentFailure', Failure, fun({authorization_failed, _}) -> ok end), ok = payproc_errors:match('PaymentFailure', Failure, fun({authorization_failed, _}) -> ok end),
@ -4527,6 +4505,7 @@ repair_fail_pre_processing_succeeded(C) ->
timeout = next_event(InvoiceID, 2000, Client), timeout = next_event(InvoiceID, 2000, Client),
ok = repair_invoice_with_scenario(InvoiceID, fail_pre_processing, Client), ok = repair_invoice_with_scenario(InvoiceID, fail_pre_processing, Client),
[ [
?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, _Failure}))) ?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, _Failure})))
] = next_event(InvoiceID, Client). ] = next_event(InvoiceID, Client).
@ -4579,9 +4558,6 @@ repair_fail_session_succeeded(C) ->
[ [
?payment_ev(PaymentID, ?session_ev(?processed(), ?session_finished(?session_failed({failure, Failure})))), ?payment_ev(PaymentID, ?session_ev(?processed(), ?session_finished(?session_failed({failure, Failure})))),
?payment_ev(PaymentID, ?payment_rollback_started({failure, Failure}))
] = next_event(InvoiceID, Client),
[
?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, Failure}))) ?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, Failure})))
] = next_event(InvoiceID, Client). ] = next_event(InvoiceID, Client).
@ -4605,6 +4581,7 @@ repair_fail_session_on_pre_processing(C) ->
repair_invoice_with_scenario(InvoiceID, fail_session, Client) repair_invoice_with_scenario(InvoiceID, fail_session, Client)
), ),
ok = repair_invoice_with_scenario(InvoiceID, fail_pre_processing, Client), ok = repair_invoice_with_scenario(InvoiceID, fail_pre_processing, Client),
[ [
?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, _Failure}))) ?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, _Failure})))
] = next_event(InvoiceID, Client). ] = next_event(InvoiceID, Client).
@ -4657,9 +4634,6 @@ repair_complex_succeeded_second(C) ->
[ [
?payment_ev(PaymentID, ?session_ev(?processed(), ?session_finished(?session_failed({failure, Failure})))), ?payment_ev(PaymentID, ?session_ev(?processed(), ?session_finished(?session_failed({failure, Failure})))),
?payment_ev(PaymentID, ?payment_rollback_started({failure, Failure}))
] = next_event(InvoiceID, Client),
[
?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, Failure}))) ?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, Failure})))
] = next_event(InvoiceID, Client). ] = next_event(InvoiceID, Client).
@ -5193,9 +5167,6 @@ await_payment_process_failure(InvoiceID, PaymentID, Client, Restarts, Target) ->
PaymentID, PaymentID,
?session_ev(Target, ?session_finished(?session_failed(Failure))) ?session_ev(Target, ?session_finished(?session_failed(Failure)))
), ),
?payment_ev(PaymentID, ?payment_rollback_started(Failure))
] = next_event(InvoiceID, Client),
[
?payment_ev(PaymentID, ?payment_status_changed(?failed(Failure))) ?payment_ev(PaymentID, ?payment_status_changed(?failed(Failure)))
] = next_event(InvoiceID, Client), ] = next_event(InvoiceID, Client),
{failed, PaymentID, Failure}. {failed, PaymentID, Failure}.