diff --git a/apps/hellgate/include/payment_events.hrl b/apps/hellgate/include/payment_events.hrl index 8adc8cb1b..12605ade0 100644 --- a/apps/hellgate/include/payment_events.hrl +++ b/apps/hellgate/include/payment_events.hrl @@ -291,6 +291,10 @@ }} ). +-define(chargeback_clock_update(Clock), + {invoice_payment_chargeback_clock_update, #payproc_InvoicePaymentClockUpdate{clock = Clock}} +). + -define(chargeback_stage_chargeback(), {chargeback, #domain_InvoicePaymentChargebackStageChargeback{}} ). diff --git a/apps/hellgate/src/hg_invoice_payment.erl b/apps/hellgate/src/hg_invoice_payment.erl index eb8ec21ac..9f5cd2b49 100644 --- a/apps/hellgate/src/hg_invoice_payment.erl +++ b/apps/hellgate/src/hg_invoice_payment.erl @@ -36,6 +36,7 @@ -export([get_adjustments/1]). -export([get_adjustment/2]). -export([get_trx/1]). +-export([get_clock/1]). -export([get_final_cashflow/1]). -export([get_sessions/1]). @@ -961,8 +962,7 @@ collect_cash_flow_context( get_available_amount(AccountID, Clock) -> #{ min_available_amount := AvailableAmount - } = - hg_accounting:get_balance(AccountID, Clock), + } = hg_accounting:get_balance(AccountID, Clock), AvailableAmount. construct_payment_plan_id(St) -> @@ -1906,13 +1906,31 @@ process_chargeback(Type = finalising_accounter, ID, Action0, St) -> ChargebackBody = hg_invoice_payment_chargeback:get_body(ChargebackState), ChargebackTarget = hg_invoice_payment_chargeback:get_target_status(ChargebackState), MaybeChargedback = maybe_set_charged_back_status(ChargebackTarget, ChargebackBody, St), - {Changes, Action1} = hg_invoice_payment_chargeback:process_timeout(Type, ChargebackState, Action0, ChargebackOpts), - {done, {[?chargeback_ev(ID, C) || C <- Changes] ++ MaybeChargedback, Action1}}; + case + hg_invoice_payment_chargeback:process_timeout( + Type, + ChargebackState, + St, + Action0, + ChargebackOpts + ) + of + {done, {Changes, Action1}} -> + {done, {[?chargeback_ev(ID, C) || C <- Changes] ++ MaybeChargedback, Action1}}; + {next, {[], _Action}} = Result -> + Result + end; process_chargeback(Type, ID, Action0, St) -> ChargebackState = get_chargeback_state(ID, St), ChargebackOpts = get_chargeback_opts(St), - {Changes, Action1} = hg_invoice_payment_chargeback:process_timeout(Type, ChargebackState, Action0, ChargebackOpts), - {done, {[?chargeback_ev(ID, C) || C <- Changes], Action1}}. + {Result, {Changes, Action1}} = hg_invoice_payment_chargeback:process_timeout( + Type, + ChargebackState, + St, + Action0, + ChargebackOpts + ), + {Result, {[?chargeback_ev(ID, C) || C <- Changes], Action1}}. maybe_set_charged_back_status(?chargeback_status_accepted(), ChargebackBody, St) -> InterimPaymentAmount = get_remaining_payment_balance(St), @@ -3024,13 +3042,37 @@ merge_change(Change = ?chargeback_ev(ID, Event), St, Opts) -> _ = validate_transition([idle, {chargeback, ID, updating_chargeback}], Change, St, Opts), St#st{activity = {chargeback, ID, updating_chargeback}}; ?chargeback_cash_flow_changed(_) -> - Valid = [{chargeback, ID, Activity} || Activity <- [preparing_initial_cash_flow, updating_cash_flow]], + Valid = [ + {chargeback, ID, Activity} + || Activity <- [ + preparing_initial_cash_flow, + updating_cash_flow + ] + ], _ = validate_transition(Valid, Change, St, Opts), case St of #st{activity = {chargeback, ID, preparing_initial_cash_flow}} -> - St#st{activity = idle}; + St#st{activity = {chargeback, ID, holding_initial_cash_flow}}; #st{activity = {chargeback, ID, updating_cash_flow}} -> - St#st{activity = {chargeback, ID, finalising_accounter}} + St#st{activity = {chargeback, ID, holding_updated_cash_flow}} + end; + ?chargeback_clock_update(_) -> + Valid = [ + {chargeback, ID, Activity} + || Activity <- [ + finalising_accounter, + holding_initial_cash_flow, + holding_updated_cash_flow + ] + ], + _ = validate_transition(Valid, Change, St, Opts), + case St of + #st{activity = {chargeback, ID, holding_initial_cash_flow}} -> + St#st{activity = idle}; + #st{activity = {chargeback, ID, holding_updated_cash_flow}} -> + St#st{activity = {chargeback, ID, finalising_accounter}}; + #st{activity = {chargeback, ID, finalising_accounter}} -> + St end; ?chargeback_target_status_changed(?chargeback_status_accepted()) -> _ = validate_transition([idle, {chargeback, ID, updating_chargeback}], Change, St, Opts), @@ -3048,7 +3090,7 @@ merge_change(Change = ?chargeback_ev(ID, Event), St, Opts) -> St#st{activity = idle} end, ChargebackSt = merge_chargeback_change(Event, try_get_chargeback_state(ID, St1)), - set_chargeback_state(ID, ChargebackSt, St1); + set_chargeback_clock(Event, set_chargeback_state(ID, ChargebackSt, St1)); merge_change(Change = ?refund_ev(ID, Event), St, Opts) -> St1 = case Event of @@ -3175,6 +3217,11 @@ save_retry_attempt(Target, #st{retry_attempts = Attempts} = St) -> merge_chargeback_change(Change, ChargebackState) -> hg_invoice_payment_chargeback:merge_change(Change, ChargebackState). +set_chargeback_clock(?chargeback_clock_update(Clock), St = #st{}) -> + St#st{clock = Clock}; +set_chargeback_clock(_, St = #st{}) -> + St. + merge_refund_change(?refund_created(Refund, Cashflow, TransactionInfo), undefined) -> #refund_st{refund = Refund, cash_flow = Cashflow, transaction_info = TransactionInfo}; merge_refund_change(?refund_status_changed(Status), RefundSt) -> @@ -3270,6 +3317,10 @@ get_trx(#st{trx = Trx}) -> set_trx(Trx, St = #st{}) -> St#st{trx = Trx}. +-spec get_clock(st()) -> hg_accounting_new:clock(). +get_clock(#st{clock = Clock}) -> + Clock. + try_get_refund_state(ID, #st{refunds = Rs}) -> case Rs of #{ID := RefundSt} -> diff --git a/apps/hellgate/src/hg_invoice_payment_chargeback.erl b/apps/hellgate/src/hg_invoice_payment_chargeback.erl index cc2dea1b3..5143c1299 100644 --- a/apps/hellgate/src/hg_invoice_payment_chargeback.erl +++ b/apps/hellgate/src/hg_invoice_payment_chargeback.erl @@ -18,7 +18,7 @@ -export( [ merge_change/2, - process_timeout/4 + process_timeout/5 ] ). @@ -75,12 +75,16 @@ -type opts() :: #{ payment_state := payment_state(), party := party(), - invoice := invoice() + invoice := invoice(), + timestamp := hg_datetime:timestamp() }. -type payment_state() :: hg_invoice_payment:st(). +-type clock() :: + hg_accounting_new:clock(). + -type party() :: dmsl_domain_thrift:'Party'(). @@ -112,7 +116,7 @@ dmsl_domain_thrift:'FinalCashFlow'(). -type batch() :: - hg_accounting:batch(). + hg_accounting_new:batch(). -type create_params() :: dmsl_payment_processing_thrift:'InvoicePaymentChargebackParams'(). @@ -132,6 +136,9 @@ -type result() :: {[change()], action()}. +-type machine_result() :: + {next | done, result()}. + -type change() :: dmsl_payment_processing_thrift:'InvoicePaymentChargebackChangePayload'(). @@ -140,8 +147,10 @@ -type activity() :: preparing_initial_cash_flow + | holding_initial_cash_flow | updating_chargeback | updating_cash_flow + | holding_updated_cash_flow | finalising_accounter. -spec get(state()) -> chargeback(). @@ -263,16 +272,22 @@ merge_change(?chargeback_target_status_changed(Status), State) -> set_target_status(Status, State); merge_change(?chargeback_status_changed(Status), State) -> set_target_status(undefined, set_status(Status, State)); +merge_change(?chargeback_clock_update(_), State) -> + State; merge_change(?chargeback_cash_flow_changed(CashFlow), State) -> set_cash_flow(CashFlow, State). --spec process_timeout(activity(), state(), action(), opts()) -> result(). -process_timeout(preparing_initial_cash_flow, State, _Action, Opts) -> - update_cash_flow(State, hg_machine_action:new(), Opts); -process_timeout(updating_cash_flow, State, _Action, Opts) -> +-spec process_timeout(activity(), state(), payment_state(), action(), opts()) -> machine_result(). +process_timeout(preparing_initial_cash_flow, State, _PaymentSt, _Action, Opts) -> + update_cash_flow(State, hg_machine_action:instant(), Opts); +process_timeout(holding_initial_cash_flow, State, PaymentSt, _Action, Opts) -> + hold_cash_flow(State, PaymentSt, hg_machine_action:new(), Opts); +process_timeout(updating_cash_flow, State, _PaymentSt, _Action, Opts) -> update_cash_flow(State, hg_machine_action:instant(), Opts); -process_timeout(finalising_accounter, State, Action, Opts) -> - finalise(State, Action, Opts). +process_timeout(holding_updated_cash_flow, State, PaymentSt, _Action, Opts) -> + hold_cash_flow(State, PaymentSt, hg_machine_action:instant(), Opts); +process_timeout(finalising_accounter, State, PaymentSt, Action, Opts) -> + finalise(State, PaymentSt, Action, Opts). %% Private @@ -337,23 +352,37 @@ do_reopen(State, PaymentState, ReopenParams = ?reopen_params(Levy, Body)) -> %% --spec update_cash_flow(state(), action(), opts()) -> result() | no_return(). +-spec update_cash_flow(state(), action(), opts()) -> machine_result() | no_return(). update_cash_flow(State, Action, Opts) -> FinalCashFlow = build_chargeback_cash_flow(State, Opts), - UpdatedPlan = build_updated_plan(FinalCashFlow, State), - _ = prepare_cash_flow(State, UpdatedPlan, Opts), - {[?chargeback_cash_flow_changed(FinalCashFlow)], Action}. - --spec finalise(state(), action(), opts()) -> result() | no_return(). -finalise(#chargeback_st{target_status = Status = ?chargeback_status_pending()}, Action, _Opts) -> - {[?chargeback_status_changed(Status)], Action}; -finalise(State = #chargeback_st{target_status = Status}, Action, Opts) when + {done, {[?chargeback_cash_flow_changed(FinalCashFlow)], Action}}. + +-spec hold_cash_flow(state(), payment_state(), action(), opts()) -> machine_result() | no_return(). +hold_cash_flow(State, PaymentSt, Action, Opts) -> + CashFlowPlan = get_current_plan(State), + case prepare_cash_flow(get_clock(PaymentSt), State, CashFlowPlan, Opts) of + {ok, Clock} -> + {done, {[?chargeback_clock_update(Clock)], Action}}; + {error, not_ready} -> + _ = logger:warning("Accounter was not ready, retrying"), + {next, {[], hg_machine_action:set_timeout(0, Action)}} + end. + +-spec finalise(state(), payment_state(), action(), opts()) -> machine_result() | no_return(). +finalise(#chargeback_st{target_status = Status = ?chargeback_status_pending()}, _PaymentSt, Action, _Opts) -> + {done, {[?chargeback_status_changed(Status)], Action}}; +finalise(State = #chargeback_st{target_status = Status}, PaymentSt, Action, Opts) when Status =:= ?chargeback_status_rejected(); Status =:= ?chargeback_status_accepted(); Status =:= ?chargeback_status_cancelled() -> - _ = commit_cash_flow(State, Opts), - {[?chargeback_status_changed(Status)], Action}. + case commit_cash_flow(get_clock(PaymentSt), State, Opts) of + {ok, Clock} -> + {done, {[?chargeback_clock_update(Clock), ?chargeback_status_changed(Status)], Action}}; + {error, not_ready} -> + _ = logger:warning("Accounter was not ready, retrying"), + {next, {[], hg_machine_action:set_timeout(0, Action)}} + end. -spec build_chargeback(opts(), create_params(), revision(), timestamp()) -> chargeback() | no_return(). build_chargeback(Opts, Params = ?chargeback_params(Levy, Body, Reason), Revision, CreatedAt) -> @@ -430,7 +459,7 @@ build_chargeback_cash_flow(State, Opts) -> PaymentInstitutionRef = get_payment_institution_ref(get_contract(Party, Shop)), PaymentInst = hg_payment_institution:compute_payment_institution(PaymentInstitutionRef, VS, Revision), Provider = get_route_provider(Route, Revision), - AccountMap = hg_accounting:collect_account_map(Payment, Shop, PaymentInst, Provider, VS, Revision), + AccountMap = hg_accounting_new:collect_account_map(Payment, Shop, PaymentInst, Provider, VS, Revision), ServiceContext = build_service_cash_flow_context(State), ProviderContext = build_provider_cash_flow_context(State, ProviderFees), ServiceFinalCF = hg_cashflow:finalize(ServiceCashFlow, ServiceContext, AccountMap), @@ -495,14 +524,16 @@ define_body(undefined, PaymentState) -> define_body(Cash, _PaymentState) -> Cash. -prepare_cash_flow(State, CashFlowPlan, Opts) -> +prepare_cash_flow(Clock, State, CashFlowPlan, Opts) -> + #{timestamp := Timestamp} = Opts, PlanID = construct_chargeback_plan_id(State, Opts), - hg_accounting:plan(PlanID, CashFlowPlan). + hg_accounting_new:plan(PlanID, CashFlowPlan, Timestamp, Clock). -commit_cash_flow(State, Opts) -> +commit_cash_flow(Clock, State, Opts) -> + #{timestamp := Timestamp} = Opts, CashFlowPlan = get_current_plan(State), PlanID = construct_chargeback_plan_id(State, Opts), - hg_accounting:commit(PlanID, CashFlowPlan). + hg_accounting_new:commit(PlanID, CashFlowPlan, Timestamp, Clock). construct_chargeback_plan_id(State, Opts) -> {Stage, _} = get_stage(State), @@ -605,6 +636,10 @@ get_current_plan(#chargeback_st{cash_flow_plans = Plans} = State) -> #{Stage := Plan} = Plans, Plan. +-spec get_clock(payment_state()) -> clock(). +get_clock(PaymentSt) -> + hg_invoice_payment:get_clock(PaymentSt). + -spec get_reverted_previous_stage(state()) -> [batch()]. get_reverted_previous_stage(State) -> case get_previous_stage(State) of diff --git a/apps/hellgate/test/hg_invoice_tests_SUITE.erl b/apps/hellgate/test/hg_invoice_tests_SUITE.erl index 8ff528896..6305f82f6 100644 --- a/apps/hellgate/test/hg_invoice_tests_SUITE.erl +++ b/apps/hellgate/test/hg_invoice_tests_SUITE.erl @@ -2383,10 +2383,13 @@ create_chargeback_idempotency(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), ?assertMatch(CB, hg_client_invoicing:create_chargeback(IID, PID, CBParams, Client)), NewCBParams = make_chargeback_params(Levy), ?assertMatch(?chargeback_pending(), hg_client_invoicing:create_chargeback(IID, PID, NewCBParams, Client)), - Settlement0 = hg_ct_helper:get_balance(SID), CancelParams = make_chargeback_cancel_params(), ok = hg_client_invoicing:cancel_chargeback(IID, PID, CBID, CancelParams, Client), [ @@ -2396,9 +2399,13 @@ create_chargeback_idempotency(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_cancelled()))) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(min_available_amount, Settlement1)), @@ -2421,7 +2428,10 @@ cancel_payment_chargeback(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), CancelParams = make_chargeback_cancel_params(), ok = hg_client_invoicing:cancel_chargeback(IID, PID, CBID, CancelParams, Client), [ @@ -2431,9 +2441,13 @@ cancel_payment_chargeback(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_cancelled()))) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(min_available_amount, Settlement1)), @@ -2457,7 +2471,10 @@ cancel_partial_payment_chargeback(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), CancelParams = make_chargeback_cancel_params(), ok = hg_client_invoicing:cancel_chargeback(IID, PID, CBID, CancelParams, Client), [ @@ -2467,9 +2484,13 @@ cancel_partial_payment_chargeback(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_cancelled()))) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), ?assertEqual(Paid - Partial - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(min_available_amount, Settlement1)), @@ -2501,6 +2522,9 @@ cancel_payment_chargeback_refund(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), RefundParams = make_refund_params(), RefundError = hg_client_invoicing:refund_payment(IID, PID, RefundParams, Client), CancelParams = make_chargeback_cancel_params(), @@ -2512,6 +2536,10 @@ cancel_payment_chargeback_refund(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_cancelled()))) ] = next_event(IID, Client), RefundOk = hg_client_invoicing:refund_payment(IID, PID, RefundParams, Client), @@ -2533,6 +2561,9 @@ reject_payment_chargeback_inconsistent(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), InconsistentParams = make_chargeback_reject_params(?cash(10, <<"USD">>)), Inconsistent = hg_client_invoicing:reject_chargeback(IID, PID, CBID, InconsistentParams, Client), CancelParams = make_chargeback_cancel_params(), @@ -2544,6 +2575,10 @@ reject_payment_chargeback_inconsistent(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_cancelled()))) ] = next_event(IID, Client), ?assertMatch(?inconsistent_chargeback_currency(_), Inconsistent). @@ -2565,7 +2600,10 @@ reject_payment_chargeback(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), RejectParams = make_chargeback_reject_params(Levy), ok = hg_client_invoicing:reject_chargeback(IID, PID, CBID, RejectParams, Client), [ @@ -2575,9 +2613,13 @@ reject_payment_chargeback(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid - LevyAmount, maps:get(min_available_amount, Settlement1)), @@ -2600,7 +2642,10 @@ reject_payment_chargeback_no_fees(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), RejectParams = make_chargeback_reject_params(Levy), ok = hg_client_invoicing:reject_chargeback(IID, PID, CBID, RejectParams, Client), [ @@ -2610,9 +2655,13 @@ reject_payment_chargeback_no_fees(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid - LevyAmount, maps:get(min_available_amount, Settlement1)), @@ -2635,7 +2684,10 @@ reject_payment_chargeback_new_levy(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(CF0))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), RejectAmount = 5000, RejectLevy = ?cash(RejectAmount, <<"RUB">>), RejectParams = make_chargeback_reject_params(RejectLevy), @@ -2648,9 +2700,13 @@ reject_payment_chargeback_new_levy(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(CF1))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), ?assertNotEqual(CF0, CF1), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), @@ -2672,6 +2728,9 @@ accept_payment_chargeback_inconsistent(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), InconsistentLevyParams = make_chargeback_accept_params(?cash(10, <<"USD">>), undefined), InconsistentBodyParams = make_chargeback_accept_params(undefined, ?cash(10, <<"USD">>)), InconsistentLevy = hg_client_invoicing:accept_chargeback(IID, PID, CBID, InconsistentLevyParams, Client), @@ -2685,6 +2744,10 @@ accept_payment_chargeback_inconsistent(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_cancelled()))) ] = next_event(IID, Client), ?assertMatch(?inconsistent_chargeback_currency(_), InconsistentLevy), @@ -2705,6 +2768,9 @@ accept_payment_chargeback_exceeded(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), ExceedBody = 200000, ExceedParams = make_chargeback_accept_params(?cash(LevyAmount, <<"RUB">>), ?cash(ExceedBody, <<"RUB">>)), Exceeded = hg_client_invoicing:accept_chargeback(IID, PID, CBID, ExceedParams, Client), @@ -2717,6 +2783,10 @@ accept_payment_chargeback_exceeded(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_cancelled()))) ] = next_event(IID, Client), ?assertMatch(?invoice_payment_amount_exceeded(_), Exceeded). @@ -2738,17 +2808,21 @@ accept_payment_chargeback_empty_params(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), AcceptParams = make_chargeback_accept_params(), ok = hg_client_invoicing:accept_chargeback(IID, PID, CBID, AcceptParams, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_target_status_changed(?chargeback_status_accepted()))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_accepted()))), ?payment_ev(PID, ?payment_status_changed(?charged_back())) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement1)), @@ -2773,16 +2847,20 @@ accept_payment_chargeback_twice(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), AcceptParams = make_chargeback_accept_params(), ok = hg_client_invoicing:accept_chargeback(IID, PID, CBID, AcceptParams, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_target_status_changed(?chargeback_status_accepted()))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_accepted()))) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), CBParams2 = make_chargeback_params(Levy), Chargeback = hg_client_invoicing:create_chargeback(IID, PID, CBParams2, Client), CBID2 = Chargeback#domain_InvoicePaymentChargeback.id, @@ -2792,17 +2870,21 @@ accept_payment_chargeback_twice(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID2, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement2 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID2, ?chargeback_clock_update(Clock2))) + ] = next_event(IID, Client), + {ok, Settlement2} = hg_accounting_new:get_balance(SID, Clock2), AcceptParams = make_chargeback_accept_params(), ok = hg_client_invoicing:accept_chargeback(IID, PID, CBID2, AcceptParams, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID2, ?chargeback_target_status_changed(?chargeback_status_accepted()))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID2, ?chargeback_clock_update(Clock3))), ?payment_ev(PID, ?chargeback_ev(CBID2, ?chargeback_status_changed(?chargeback_status_accepted()))), ?payment_ev(PID, ?payment_status_changed(?charged_back())) ] = next_event(IID, Client), - Settlement3 = hg_ct_helper:get_balance(SID), + {ok, Settlement3} = hg_accounting_new:get_balance(SID, Clock3), ?assertEqual(Paid - BodyAmount - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid - BodyAmount - LevyAmount, maps:get(min_available_amount, Settlement1)), @@ -2829,7 +2911,10 @@ accept_payment_chargeback_new_body(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), Body = 40000, AcceptParams = make_chargeback_accept_params(undefined, ?cash(Body, <<"RUB">>)), ok = hg_client_invoicing:accept_chargeback(IID, PID, CBID, AcceptParams, Client), @@ -2841,9 +2926,13 @@ accept_payment_chargeback_new_body(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_accepted()))) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid - Body - LevyAmount, maps:get(min_available_amount, Settlement1)), @@ -2867,7 +2956,10 @@ accept_payment_chargeback_new_levy(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), AcceptParams = make_chargeback_accept_params(?cash(NewLevyAmount, <<"RUB">>), undefined), ok = hg_client_invoicing:accept_chargeback(IID, PID, CBID, AcceptParams, Client), [ @@ -2878,10 +2970,14 @@ accept_payment_chargeback_new_levy(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_accepted()))), ?payment_ev(PID, ?payment_status_changed(?charged_back())) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid - Cost - NewLevyAmount, maps:get(min_available_amount, Settlement1)), @@ -2902,12 +2998,16 @@ reopen_accepted_payment_chargeback_fails(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), AcceptParams = make_chargeback_accept_params(), ok = hg_client_invoicing:accept_chargeback(IID, PID, CBID, AcceptParams, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_target_status_changed(?chargeback_status_accepted()))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_accepted()))), ?payment_ev(PID, ?payment_status_changed(?charged_back())) ] = next_event(IID, Client), @@ -2930,6 +3030,9 @@ reopen_payment_chargeback_inconsistent(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), RejectParams = make_chargeback_reject_params(Levy), ok = hg_client_invoicing:reject_chargeback(IID, PID, CBID, RejectParams, Client), [ @@ -2939,6 +3042,10 @@ reopen_payment_chargeback_inconsistent(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), InconsistentLevyParams = make_chargeback_reopen_params(?cash(10, <<"USD">>), undefined), @@ -2963,6 +3070,9 @@ reopen_payment_chargeback_exceeded(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), RejectParams = make_chargeback_reject_params(Levy), ok = hg_client_invoicing:reject_chargeback(IID, PID, CBID, RejectParams, Client), [ @@ -2972,6 +3082,10 @@ reopen_payment_chargeback_exceeded(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), ExceededParams = make_chargeback_reopen_params(Levy, ?cash(50000, <<"RUB">>)), @@ -2997,7 +3111,10 @@ reopen_payment_chargeback_cancel(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), RejectParams = make_chargeback_reject_params(Levy), ok = hg_client_invoicing:reject_chargeback(IID, PID, CBID, RejectParams, Client), [ @@ -3007,9 +3124,13 @@ reopen_payment_chargeback_cancel(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), ReopenParams = make_chargeback_reopen_params(ReopenLevy), ok = hg_client_invoicing:reopen_chargeback(IID, PID, CBID, ReopenParams, Client), [ @@ -3020,10 +3141,13 @@ reopen_payment_chargeback_cancel(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock2))) + ] = next_event(IID, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_pending()))) ] = next_event(IID, Client), - Settlement2 = hg_ct_helper:get_balance(SID), + {ok, Settlement2} = hg_accounting_new:get_balance(SID, Clock2), CancelParams = make_chargeback_cancel_params(), ok = hg_client_invoicing:cancel_chargeback(IID, PID, CBID, CancelParams, Client), [ @@ -3033,15 +3157,19 @@ reopen_payment_chargeback_cancel(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock3))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_cancelled()))) ] = next_event(IID, Client), - Settlement3 = hg_ct_helper:get_balance(SID), + {ok, Settlement3} = hg_accounting_new:get_balance(SID, Clock3), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid - LevyAmount, maps:get(min_available_amount, Settlement1)), ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement1)), - ?assertEqual(Paid - Cost - ReopenLevyAmount, maps:get(min_available_amount, Settlement2)), - ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement2)), + ?assertEqual(Paid - Cost - ReopenLevyAmount - LevyAmount, maps:get(min_available_amount, Settlement2)), + ?assertEqual(Paid, maps:get(max_available_amount, Settlement2)), ?assertEqual(Paid, maps:get(min_available_amount, Settlement3)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement3)). @@ -3064,7 +3192,10 @@ reopen_payment_chargeback_reject(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), RejectParams = make_chargeback_reject_params(Levy), ok = hg_client_invoicing:reject_chargeback(IID, PID, CBID, RejectParams, Client), [ @@ -3074,9 +3205,13 @@ reopen_payment_chargeback_reject(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), ReopenParams = make_chargeback_reopen_params(ReopenLevy), ok = hg_client_invoicing:reopen_chargeback(IID, PID, CBID, ReopenParams, Client), [ @@ -3087,10 +3222,13 @@ reopen_payment_chargeback_reject(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock2))) + ] = next_event(IID, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_pending()))) ] = next_event(IID, Client), - Settlement2 = hg_ct_helper:get_balance(SID), + {ok, Settlement2} = hg_accounting_new:get_balance(SID, Clock2), ok = hg_client_invoicing:reject_chargeback(IID, PID, CBID, RejectParams, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_levy_changed(Levy))), @@ -3100,15 +3238,19 @@ reopen_payment_chargeback_reject(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock3))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), - Settlement3 = hg_ct_helper:get_balance(SID), + {ok, Settlement3} = hg_accounting_new:get_balance(SID, Clock3), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid - LevyAmount, maps:get(min_available_amount, Settlement1)), ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement1)), - ?assertEqual(Paid - Cost - ReopenLevyAmount, maps:get(min_available_amount, Settlement2)), - ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement2)), + ?assertEqual(Paid - Cost - ReopenLevyAmount - LevyAmount, maps:get(min_available_amount, Settlement2)), + ?assertEqual(Paid, maps:get(max_available_amount, Settlement2)), ?assertEqual(Paid - LevyAmount, maps:get(min_available_amount, Settlement3)), ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement3)). @@ -3131,7 +3273,10 @@ reopen_payment_chargeback_accept(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), RejectParams = make_chargeback_reject_params(Levy), ok = hg_client_invoicing:reject_chargeback(IID, PID, CBID, RejectParams, Client), [ @@ -3141,9 +3286,13 @@ reopen_payment_chargeback_accept(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), ReopenParams = make_chargeback_reopen_params(ReopenLevy), ok = hg_client_invoicing:reopen_chargeback(IID, PID, CBID, ReopenParams, Client), [ @@ -3154,26 +3303,30 @@ reopen_payment_chargeback_accept(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock2))) + ] = next_event(IID, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_pending()))) ] = next_event(IID, Client), - Settlement2 = hg_ct_helper:get_balance(SID), + {ok, Settlement2} = hg_accounting_new:get_balance(SID, Clock2), AcceptParams = make_chargeback_accept_params(), ok = hg_client_invoicing:accept_chargeback(IID, PID, CBID, AcceptParams, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_target_status_changed(?chargeback_status_accepted()))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock3))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_accepted()))), ?payment_ev(PID, ?payment_status_changed(?charged_back())) ] = next_event(IID, Client), - Settlement3 = hg_ct_helper:get_balance(SID), + {ok, Settlement3} = hg_accounting_new:get_balance(SID, Clock3), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid - LevyAmount, maps:get(min_available_amount, Settlement1)), ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement1)), - ?assertEqual(Paid - Cost - ReopenLevyAmount, maps:get(min_available_amount, Settlement2)), - ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement2)), + ?assertEqual(Paid - Cost - ReopenLevyAmount - LevyAmount, maps:get(min_available_amount, Settlement2)), + ?assertEqual(Paid, maps:get(max_available_amount, Settlement2)), ?assertEqual(Paid - Cost - ReopenLevyAmount, maps:get(min_available_amount, Settlement3)), ?assertEqual(Paid - Cost - ReopenLevyAmount, maps:get(max_available_amount, Settlement3)). @@ -3196,7 +3349,10 @@ reopen_payment_chargeback_skip_stage_accept(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), RejectParams = make_chargeback_reject_params(Levy), ok = hg_client_invoicing:reject_chargeback(IID, PID, CBID, RejectParams, Client), [ @@ -3206,9 +3362,13 @@ reopen_payment_chargeback_skip_stage_accept(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), NextStage = ?chargeback_stage_arbitration(), ReopenParams = make_chargeback_reopen_params_move_to_stage(ReopenLevy, NextStage), ok = hg_client_invoicing:reopen_chargeback(IID, PID, CBID, ReopenParams, Client), @@ -3220,26 +3380,30 @@ reopen_payment_chargeback_skip_stage_accept(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock2))) + ] = next_event(IID, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_pending()))) ] = next_event(IID, Client), - Settlement2 = hg_ct_helper:get_balance(SID), + {ok, Settlement2} = hg_accounting_new:get_balance(SID, Clock2), AcceptParams = make_chargeback_accept_params(), ok = hg_client_invoicing:accept_chargeback(IID, PID, CBID, AcceptParams, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_target_status_changed(?chargeback_status_accepted()))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock3))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_accepted()))), ?payment_ev(PID, ?payment_status_changed(?charged_back())) ] = next_event(IID, Client), - Settlement3 = hg_ct_helper:get_balance(SID), + {ok, Settlement3} = hg_accounting_new:get_balance(SID, Clock3), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid - LevyAmount, maps:get(min_available_amount, Settlement1)), ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement1)), - ?assertEqual(Paid - Cost - ReopenLevyAmount, maps:get(min_available_amount, Settlement2)), - ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement2)), + ?assertEqual(Paid - Cost - ReopenLevyAmount - LevyAmount, maps:get(min_available_amount, Settlement2)), + ?assertEqual(Paid, maps:get(max_available_amount, Settlement2)), ?assertEqual(Paid - Cost - ReopenLevyAmount, maps:get(min_available_amount, Settlement3)), ?assertEqual(Paid - Cost - ReopenLevyAmount, maps:get(max_available_amount, Settlement3)). @@ -3265,7 +3429,10 @@ reopen_payment_chargeback_accept_new_levy(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), RejectParams = make_chargeback_reject_params(Levy), ok = hg_client_invoicing:reject_chargeback(IID, PID, CBID, RejectParams, Client), [ @@ -3275,9 +3442,13 @@ reopen_payment_chargeback_accept_new_levy(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), ReopenParams = make_chargeback_reopen_params(ReopenLevy), ok = hg_client_invoicing:reopen_chargeback(IID, PID, CBID, ReopenParams, Client), [ @@ -3288,10 +3459,13 @@ reopen_payment_chargeback_accept_new_levy(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock2))) + ] = next_event(IID, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_pending()))) ] = next_event(IID, Client), - Settlement2 = hg_ct_helper:get_balance(SID), + {ok, Settlement2} = hg_accounting_new:get_balance(SID, Clock2), AcceptParams = make_chargeback_accept_params(AcceptLevy, Body), ok = hg_client_invoicing:accept_chargeback(IID, PID, CBID, AcceptParams, Client), [ @@ -3302,16 +3476,20 @@ reopen_payment_chargeback_accept_new_levy(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock3))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_accepted()))), ?payment_ev(PID, ?payment_status_changed(?charged_back())) ] = next_event(IID, Client), - Settlement3 = hg_ct_helper:get_balance(SID), + {ok, Settlement3} = hg_accounting_new:get_balance(SID, Clock3), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid - LevyAmount, maps:get(min_available_amount, Settlement1)), ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement1)), - ?assertEqual(Paid - Cost - ReopenLevyAmount, maps:get(min_available_amount, Settlement2)), - ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement2)), + ?assertEqual(Paid - Cost - ReopenLevyAmount - LevyAmount, maps:get(min_available_amount, Settlement2)), + ?assertEqual(Paid, maps:get(max_available_amount, Settlement2)), ?assertEqual(Paid - Cost - AcceptLevyAmount, maps:get(min_available_amount, Settlement3)), ?assertEqual(Paid - Cost - AcceptLevyAmount, maps:get(max_available_amount, Settlement3)). @@ -3336,7 +3514,10 @@ reopen_payment_chargeback_arbitration(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), RejectParams = make_chargeback_reject_params(Levy), ok = hg_client_invoicing:reject_chargeback(IID, PID, CBID, RejectParams, Client), [ @@ -3346,9 +3527,13 @@ reopen_payment_chargeback_arbitration(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), ReopenParams = make_chargeback_reopen_params(ReopenLevy), ok = hg_client_invoicing:reopen_chargeback(IID, PID, CBID, ReopenParams, Client), [ @@ -3359,10 +3544,13 @@ reopen_payment_chargeback_arbitration(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock2))) + ] = next_event(IID, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_pending()))) ] = next_event(IID, Client), - Settlement2 = hg_ct_helper:get_balance(SID), + {ok, Settlement2} = hg_accounting_new:get_balance(SID, Clock2), ok = hg_client_invoicing:reject_chargeback(IID, PID, CBID, RejectParams, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_levy_changed(_))), @@ -3372,9 +3560,13 @@ reopen_payment_chargeback_arbitration(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock3))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), - Settlement3 = hg_ct_helper:get_balance(SID), + {ok, Settlement3} = hg_accounting_new:get_balance(SID, Clock3), ReopenArbParams = make_chargeback_reopen_params(ReopenArbLevy), ok = hg_client_invoicing:reopen_chargeback(IID, PID, CBID, ReopenArbParams, Client), [ @@ -3385,30 +3577,34 @@ reopen_payment_chargeback_arbitration(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock4))) + ] = next_event(IID, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_pending()))) ] = next_event(IID, Client), - Settlement4 = hg_ct_helper:get_balance(SID), + {ok, Settlement4} = hg_accounting_new:get_balance(SID, Clock4), AcceptParams = make_chargeback_accept_params(), ok = hg_client_invoicing:accept_chargeback(IID, PID, CBID, AcceptParams, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_target_status_changed(?chargeback_status_accepted()))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock5))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_accepted()))), ?payment_ev(PID, ?payment_status_changed(?charged_back())) ] = next_event(IID, Client), - Settlement5 = hg_ct_helper:get_balance(SID), + {ok, Settlement5} = hg_accounting_new:get_balance(SID, Clock5), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid - LevyAmount, maps:get(min_available_amount, Settlement1)), ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement1)), - ?assertEqual(Paid - Cost - ReopenLevyAmount, maps:get(min_available_amount, Settlement2)), - ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement2)), + ?assertEqual(Paid - Cost - ReopenLevyAmount - LevyAmount, maps:get(min_available_amount, Settlement2)), + ?assertEqual(Paid, maps:get(max_available_amount, Settlement2)), ?assertEqual(Paid - LevyAmount, maps:get(min_available_amount, Settlement3)), ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement3)), - ?assertEqual(Paid - Cost - ReopenArbAmount, maps:get(min_available_amount, Settlement4)), - ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement4)), + ?assertEqual(Paid - Cost - ReopenArbAmount - LevyAmount, maps:get(min_available_amount, Settlement4)), + ?assertEqual(Paid, maps:get(max_available_amount, Settlement4)), ?assertEqual(Paid - Cost - ReopenArbAmount, maps:get(min_available_amount, Settlement5)), ?assertEqual(Paid - Cost - ReopenArbAmount, maps:get(max_available_amount, Settlement5)). @@ -3433,7 +3629,10 @@ reopen_payment_chargeback_arbitration_reopen_fails(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), - Settlement0 = hg_ct_helper:get_balance(SID), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock0))) + ] = next_event(IID, Client), + {ok, Settlement0} = hg_accounting_new:get_balance(SID, Clock0), RejectParams = make_chargeback_reject_params(Levy), ok = hg_client_invoicing:reject_chargeback(IID, PID, CBID, RejectParams, Client), [ @@ -3443,9 +3642,13 @@ reopen_payment_chargeback_arbitration_reopen_fails(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock1))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), - Settlement1 = hg_ct_helper:get_balance(SID), + {ok, Settlement1} = hg_accounting_new:get_balance(SID, Clock1), ReopenParams = make_chargeback_reopen_params(ReopenLevy), ok = hg_client_invoicing:reopen_chargeback(IID, PID, CBID, ReopenParams, Client), [ @@ -3456,10 +3659,13 @@ reopen_payment_chargeback_arbitration_reopen_fails(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock2))) + ] = next_event(IID, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_pending()))) ] = next_event(IID, Client), - Settlement2 = hg_ct_helper:get_balance(SID), + {ok, Settlement2} = hg_accounting_new:get_balance(SID, Clock2), ok = hg_client_invoicing:reject_chargeback(IID, PID, CBID, RejectParams, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_levy_changed(_))), @@ -3469,9 +3675,13 @@ reopen_payment_chargeback_arbitration_reopen_fails(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock3))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), - Settlement3 = hg_ct_helper:get_balance(SID), + {ok, Settlement3} = hg_accounting_new:get_balance(SID, Clock3), ReopenArbParams = make_chargeback_reopen_params(ReopenArbLevy), ok = hg_client_invoicing:reopen_chargeback(IID, PID, CBID, ReopenArbParams, Client), [ @@ -3482,10 +3692,13 @@ reopen_payment_chargeback_arbitration_reopen_fails(C) -> [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock4))) + ] = next_event(IID, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_pending()))) ] = next_event(IID, Client), - Settlement4 = hg_ct_helper:get_balance(SID), + {ok, Settlement4} = hg_accounting_new:get_balance(SID, Clock4), ok = hg_client_invoicing:reject_chargeback(IID, PID, CBID, RejectParams, Client), [ ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_levy_changed(_))), @@ -3495,20 +3708,24 @@ reopen_payment_chargeback_arbitration_reopen_fails(C) -> ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_cash_flow_changed(_))) ] = next_event(IID, Client), [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(_))) + ] = next_event(IID, Client), + [ + ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_clock_update(Clock5))), ?payment_ev(PID, ?chargeback_ev(CBID, ?chargeback_status_changed(?chargeback_status_rejected()))) ] = next_event(IID, Client), - Settlement5 = hg_ct_helper:get_balance(SID), + {ok, Settlement5} = hg_accounting_new:get_balance(SID, Clock5), Error = hg_client_invoicing:reopen_chargeback(IID, PID, CBID, ReopenArbParams, Client), ?assertEqual(Paid - Cost - LevyAmount, maps:get(min_available_amount, Settlement0)), ?assertEqual(Paid, maps:get(max_available_amount, Settlement0)), ?assertEqual(Paid - LevyAmount, maps:get(min_available_amount, Settlement1)), ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement1)), - ?assertEqual(Paid - Cost - ReopenLevyAmount, maps:get(min_available_amount, Settlement2)), - ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement2)), + ?assertEqual(Paid - Cost - ReopenLevyAmount - LevyAmount, maps:get(min_available_amount, Settlement2)), + ?assertEqual(Paid, maps:get(max_available_amount, Settlement2)), ?assertEqual(Paid - LevyAmount, maps:get(min_available_amount, Settlement3)), ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement3)), - ?assertEqual(Paid - Cost - ReopenArbAmount, maps:get(min_available_amount, Settlement4)), - ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement4)), + ?assertEqual(Paid - Cost - ReopenArbAmount - LevyAmount, maps:get(min_available_amount, Settlement4)), + ?assertEqual(Paid, maps:get(max_available_amount, Settlement4)), ?assertEqual(Paid - LevyAmount, maps:get(min_available_amount, Settlement5)), ?assertEqual(Paid - LevyAmount, maps:get(max_available_amount, Settlement5)), ?assertMatch(?chargeback_cannot_reopen_arbitration(), Error). @@ -3526,13 +3743,23 @@ start_chargeback(C, Cost, CBParams, PaymentParams) -> Shop = maps:get(ShopID, Party#domain_Party.shops), Account = Shop#domain_Shop.account, SettlementID = Account#domain_ShopAccount.settlement, - Settlement0 = hg_ct_helper:get_balance(SettlementID), % 0.045 Fee = 1890, - ?assertEqual(0, maps:get(min_available_amount, Settlement0)), InvoiceID = start_invoice(ShopID, <<"rubberduck">>, make_due_date(10), Cost, C), - PaymentID = execute_payment(InvoiceID, PaymentParams, Client), - Settlement1 = hg_ct_helper:get_balance(SettlementID), + PaymentID = process_payment(InvoiceID, PaymentParams, Client), + [ + ?payment_ev(PaymentID, ?payment_capture_started(Reason, Cash, _)), + ?payment_ev(PaymentID, ?session_ev(?captured(Reason, Cash), ?session_started())) + ] = next_event(InvoiceID, Client), + [ + ?payment_ev(PaymentID, ?session_ev(Target, ?session_finished(?session_succeeded()))) + ] = next_event(InvoiceID, Client), + [ + ?payment_ev(PaymentID, ?payment_clock_update(Clock)), + ?payment_ev(PaymentID, ?payment_status_changed(Target)), + ?invoice_status_changed(?invoice_paid()) + ] = next_event(InvoiceID, Client), + {ok, Settlement1} = hg_accounting_new:get_balance(SettlementID, Clock), ?assertEqual(Cost - Fee, maps:get(min_available_amount, Settlement1)), Chargeback = hg_client_invoicing:create_chargeback(InvoiceID, PaymentID, CBParams, Client), {InvoiceID, PaymentID, SettlementID, Chargeback}. @@ -3546,25 +3773,14 @@ start_chargeback_partial_capture(C, Cost, Partial, CBParams) -> Shop = maps:get(ShopID, Party#domain_Party.shops), Account = Shop#domain_Shop.account, SettlementID = Account#domain_ShopAccount.settlement, - Settlement0 = hg_ct_helper:get_balance(SettlementID), % Fee = 450, % 0.045 - ?assertEqual(0, maps:get(min_available_amount, Settlement0)), InvoiceID = start_invoice(ShopID, <<"rubberduck">>, make_due_date(10), Cost, C), {PaymentTool, Session} = hg_dummy_provider:make_payment_tool(no_preauth_mc), PaymentParams = make_payment_params(PaymentTool, Session, {hold, cancel}), PaymentID = process_payment(InvoiceID, PaymentParams, Client), - ok = hg_client_invoicing:capture_payment(InvoiceID, PaymentID, <<"ok">>, Cash, Client), - [ - ?payment_ev(PaymentID, ?payment_capture_started(Reason, Cash, _)), - ?payment_ev(PaymentID, ?cash_flow_changed(_)) - ] = next_event(InvoiceID, Client), - [ - ?payment_ev(PaymentID, ?payment_clock_update(_)), - ?payment_ev(PaymentID, ?session_ev(?captured(Reason, Cash), ?session_started())) - ] = next_event(InvoiceID, Client), - PaymentID = await_payment_capture_finish(InvoiceID, PaymentID, Reason, Client, 0, Cash), - % Settlement1 = hg_ct_helper:get_balance(SettlementID), - % ?assertEqual(Partial - Fee, maps:get(min_available_amount, Settlement1)), + Reason = <<"ok">>, + ok = hg_client_invoicing:capture_payment(InvoiceID, PaymentID, Reason, Cash, Client), + PaymentID = await_payment_partial_capture(InvoiceID, PaymentID, Reason, Cash, Client), Chargeback = hg_client_invoicing:create_chargeback(InvoiceID, PaymentID, CBParams, Client), {InvoiceID, PaymentID, SettlementID, Chargeback}. @@ -4720,7 +4936,10 @@ consistent_account_balance_new(AccountID, Comment) -> next_event(InvoiceID, Client) -> %% timeout should be at least as large as hold expiration in construct_domain_fixture/0 - next_event(InvoiceID, 12000, Client). + %% next_event(InvoiceID, 12000, Client). + %% FIXME: The shumaich+shumway combo employed here is considerably slower at processing payments (up to +3 seconds) + %% Change this value back to original when the migraton is completed + next_event(InvoiceID, 20000, Client). next_event(InvoiceID, Timeout, Client) -> case hg_client_invoicing:pull_event(InvoiceID, Timeout, Client) of @@ -5461,6 +5680,9 @@ execute_payment_chargeback(InvoiceID, PaymentID, Params, Client) -> ] = next_event(InvoiceID, Client), AcceptParams = make_chargeback_accept_params(), ok = hg_client_invoicing:accept_chargeback(InvoiceID, PaymentID, ChargebackID, AcceptParams, Client), + [ + ?payment_ev(PaymentID, ?chargeback_ev(ChargebackID, ?chargeback_clock_update(_))) + ] = next_event(InvoiceID, Client), [ ?payment_ev( PaymentID, @@ -5468,6 +5690,7 @@ execute_payment_chargeback(InvoiceID, PaymentID, Params, Client) -> ) ] = next_event(InvoiceID, Client), [ + ?payment_ev(PaymentID, ?chargeback_ev(ChargebackID, ?chargeback_clock_update(_))), ?payment_ev(PaymentID, ?chargeback_ev(ChargebackID, ?chargeback_status_changed(?chargeback_status_accepted()))), ?payment_ev(PaymentID, ?payment_status_changed(?charged_back())) ] = next_event(InvoiceID, Client),