mirror of
https://github.com/valitydev/capi-v2.git
synced 2024-11-06 01:55:20 +00:00
TD-443: Produce InteractionCompleted events @ payments / bindings (#23)
* Bump to valitydev/damsel@6655937 * Bump to valitydev/swag-payments@d71aebc * Ensure backward compatibility
This commit is contained in:
parent
4d785873da
commit
e5b4f7d540
@ -462,10 +462,19 @@ decode_customer_binding_change(BindingID, {status_changed, StatusChange}) ->
|
||||
},
|
||||
decode_customer_binding_status(Status)
|
||||
)};
|
||||
decode_customer_binding_change(BindingID, {interaction_requested, InteractionRequest}) ->
|
||||
#payproc_CustomerBindingInteractionRequested{interaction = UserInteraction} = InteractionRequest,
|
||||
decode_customer_binding_change(BindingID, {interaction_changed, InteractionChange}) ->
|
||||
#payproc_CustomerBindingInteractionChanged{
|
||||
interaction = UserInteraction,
|
||||
status = Status
|
||||
} = InteractionChange,
|
||||
ChangeType =
|
||||
case Status of
|
||||
{requested, _} -> <<"CustomerBindingInteractionRequested">>;
|
||||
{completed, _} -> <<"CustomerBindingInteractionCompleted">>;
|
||||
undefined -> <<"CustomerBindingInteractionRequested">>
|
||||
end,
|
||||
{true, #{
|
||||
<<"changeType">> => <<"CustomerBindingInteractionRequested">>,
|
||||
<<"changeType">> => ChangeType,
|
||||
<<"customerBindingID">> => BindingID,
|
||||
<<"userInteraction">> => capi_handler_decoder_invoicing:decode_user_interaction(UserInteraction)
|
||||
}}.
|
||||
|
@ -389,13 +389,22 @@ decode_payment_change(
|
||||
_InvoiceID,
|
||||
PaymentID,
|
||||
{invoice_payment_session_change, #payproc_InvoicePaymentSessionChange{
|
||||
payload = {session_interaction_requested, InteractionRequested}
|
||||
payload =
|
||||
{session_interaction_changed, #payproc_SessionInteractionChanged{
|
||||
interaction = Interaction,
|
||||
status = Status
|
||||
}}
|
||||
}},
|
||||
_Context
|
||||
) ->
|
||||
#payproc_SessionInteractionRequested{interaction = Interaction} = InteractionRequested,
|
||||
ChangeType =
|
||||
case Status of
|
||||
{requested, _} -> <<"PaymentInteractionRequested">>;
|
||||
{completed, _} -> <<"PaymentInteractionCompleted">>;
|
||||
undefined -> <<"PaymentInteractionRequested">>
|
||||
end,
|
||||
#{
|
||||
<<"changeType">> => <<"PaymentInteractionRequested">>,
|
||||
<<"changeType">> => ChangeType,
|
||||
<<"paymentID">> => PaymentID,
|
||||
<<"userInteraction">> => capi_handler_decoder_invoicing:decode_user_interaction(Interaction)
|
||||
};
|
||||
|
@ -6,6 +6,7 @@
|
||||
-include_lib("damsel/include/dmsl_payproc_thrift.hrl").
|
||||
-include_lib("damsel/include/dmsl_base_thrift.hrl").
|
||||
-include_lib("damsel/include/dmsl_domain_thrift.hrl").
|
||||
-include_lib("damsel/include/dmsl_user_interaction_thrift.hrl").
|
||||
-include_lib("capi_dummy_data.hrl").
|
||||
|
||||
-export([all/0]).
|
||||
@ -236,13 +237,51 @@ get_customer_events_ok_test(Config) ->
|
||||
_ = capi_ct_helper:mock_services(
|
||||
[
|
||||
{customer_management, fun
|
||||
('Get', _) -> {ok, ?CUSTOMER};
|
||||
('GetEvents', _) -> {ok, []}
|
||||
('Get', _) ->
|
||||
{ok, ?CUSTOMER};
|
||||
('GetEvents', _) ->
|
||||
{ok, [
|
||||
?CUSTOMER_EVENT(1),
|
||||
?CUSTOMER_EVENT(2),
|
||||
?CUSTOMER_EVENT(3)
|
||||
]}
|
||||
end}
|
||||
],
|
||||
Config
|
||||
),
|
||||
{ok, _} = capi_client_customers:get_customer_events(?config(context, Config), ?STRING, 10).
|
||||
{ok, [Event1, _, _]} = capi_client_customers:get_customer_events(?config(context, Config), ?STRING, 10),
|
||||
_ = ?assertMatch(
|
||||
#{
|
||||
<<"id">> := 1,
|
||||
<<"createdAt">> := ?TIMESTAMP,
|
||||
<<"changes">> := [
|
||||
#{
|
||||
<<"changeType">> := <<"CustomerBindingStarted">>,
|
||||
<<"customerBinding">> := #{}
|
||||
},
|
||||
#{
|
||||
<<"changeType">> := <<"CustomerBindingStatusChanged">>,
|
||||
<<"customerBindingID">> := ?STRING,
|
||||
<<"status">> := <<"failed">>
|
||||
},
|
||||
#{
|
||||
<<"changeType">> := <<"CustomerBindingInteractionRequested">>,
|
||||
<<"userInteraction">> := #{
|
||||
<<"interactionType">> := <<"Redirect">>,
|
||||
<<"request">> := #{}
|
||||
}
|
||||
},
|
||||
#{
|
||||
<<"changeType">> := <<"CustomerBindingInteractionCompleted">>,
|
||||
<<"userInteraction">> := #{
|
||||
<<"interactionType">> := <<"Redirect">>,
|
||||
<<"request">> := #{}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
Event1
|
||||
).
|
||||
|
||||
-spec get_customer_payment_methods_ok_test(config()) -> _.
|
||||
get_customer_payment_methods_ok_test(Config) ->
|
||||
|
@ -950,6 +950,33 @@
|
||||
}
|
||||
}).
|
||||
|
||||
-define(USER_INTERACTION,
|
||||
{redirect,
|
||||
{post_request, #user_interaction_BrowserPostRequest{
|
||||
uri = ?URL,
|
||||
form = #{
|
||||
<<"redirect">> => ?URL
|
||||
}
|
||||
}}}
|
||||
).
|
||||
|
||||
-define(USER_INTERACTION_REQUESTED, {requested, #user_interaction_Requested{}}).
|
||||
-define(USER_INTERACTION_COMPLETED, {completed, #user_interaction_Completed{}}).
|
||||
|
||||
-define(INVOICE_PAYMENT_CHANGE(Payload),
|
||||
{invoice_payment_change, #payproc_InvoicePaymentChange{
|
||||
id = ?STRING,
|
||||
payload = Payload
|
||||
}}
|
||||
).
|
||||
|
||||
-define(SESSION_CHANGE(Target, Payload),
|
||||
{invoice_payment_session_change, #payproc_InvoicePaymentSessionChange{
|
||||
target = Target,
|
||||
payload = Payload
|
||||
}}
|
||||
).
|
||||
|
||||
-define(INVOICE_EVENT(ID), #payproc_Event{
|
||||
id = ID,
|
||||
created_at = ?TIMESTAMP,
|
||||
@ -959,7 +986,33 @@
|
||||
{invoice_status_changed, #payproc_InvoiceStatusChanged{status = ?INVOICE_STATUS(unpaid)}},
|
||||
{invoice_status_changed, #payproc_InvoiceStatusChanged{status = ?INVOICE_STATUS(paid)}},
|
||||
{invoice_status_changed, #payproc_InvoiceStatusChanged{status = ?INVOICE_STATUS(cancelled)}},
|
||||
{invoice_status_changed, #payproc_InvoiceStatusChanged{status = ?INVOICE_STATUS(fulfilled)}}
|
||||
{invoice_status_changed, #payproc_InvoiceStatusChanged{status = ?INVOICE_STATUS(fulfilled)}},
|
||||
?INVOICE_PAYMENT_CHANGE(
|
||||
?SESSION_CHANGE(
|
||||
{processed, #domain_InvoicePaymentProcessed{}},
|
||||
{session_interaction_changed, #payproc_SessionInteractionChanged{
|
||||
interaction = ?USER_INTERACTION
|
||||
}}
|
||||
)
|
||||
),
|
||||
?INVOICE_PAYMENT_CHANGE(
|
||||
?SESSION_CHANGE(
|
||||
{processed, #domain_InvoicePaymentProcessed{}},
|
||||
{session_interaction_changed, #payproc_SessionInteractionChanged{
|
||||
interaction = ?USER_INTERACTION,
|
||||
status = ?USER_INTERACTION_REQUESTED
|
||||
}}
|
||||
)
|
||||
),
|
||||
?INVOICE_PAYMENT_CHANGE(
|
||||
?SESSION_CHANGE(
|
||||
{processed, #domain_InvoicePaymentProcessed{}},
|
||||
{session_interaction_changed, #payproc_SessionInteractionChanged{
|
||||
interaction = ?USER_INTERACTION,
|
||||
status = ?USER_INTERACTION_COMPLETED
|
||||
}}
|
||||
)
|
||||
)
|
||||
]},
|
||||
source = {invoice_id, ?STRING}
|
||||
}).
|
||||
@ -969,14 +1022,12 @@
|
||||
created_at = ?TIMESTAMP,
|
||||
payload =
|
||||
{invoice_changes, [
|
||||
{invoice_payment_change, #payproc_InvoicePaymentChange{
|
||||
id = <<"1">>,
|
||||
payload =
|
||||
{invoice_payment_session_change, #payproc_InvoicePaymentSessionChange{
|
||||
target = {processed, #domain_InvoicePaymentProcessed{}},
|
||||
payload = {session_started, #payproc_SessionStarted{}}
|
||||
}}
|
||||
}}
|
||||
?INVOICE_PAYMENT_CHANGE(
|
||||
?SESSION_CHANGE(
|
||||
{processed, #domain_InvoicePaymentProcessed{}},
|
||||
{session_started, #payproc_SessionStarted{}}
|
||||
)
|
||||
)
|
||||
]},
|
||||
source = {invoice_id, ?STRING}
|
||||
}).
|
||||
@ -1057,13 +1108,15 @@
|
||||
id = ID,
|
||||
owner_id = ?STRING,
|
||||
shop_id = ?STRING,
|
||||
status = {ready, #payproc_CustomerReady{}},
|
||||
status = ?CUSTOMER_READY,
|
||||
created_at = ?TIMESTAMP,
|
||||
bindings = [?CUSTOMER_BINDING],
|
||||
contact_info = ?CONTACT_INFO,
|
||||
metadata = {obj, #{}}
|
||||
}).
|
||||
|
||||
-define(CUSTOMER_READY, {ready, #payproc_CustomerReady{}}).
|
||||
|
||||
-define(CUSTOMER_BINDING, ?CUSTOMER_BINDING(?STRING, ?STRING)).
|
||||
|
||||
-define(CUSTOMER_BINDING(ID, RECID), #payproc_CustomerBinding{
|
||||
@ -1073,6 +1126,58 @@
|
||||
status = {succeeded, #payproc_CustomerBindingSucceeded{}}
|
||||
}).
|
||||
|
||||
-define(CUSTOMER_EVENT(ID), #payproc_Event{
|
||||
id = ID,
|
||||
created_at = ?TIMESTAMP,
|
||||
source = {customer_id, ?STRING},
|
||||
payload =
|
||||
{customer_changes, [
|
||||
{customer_created, #payproc_CustomerCreated{
|
||||
customer_id = ?STRING,
|
||||
owner_id = ?STRING,
|
||||
shop_id = ?STRING,
|
||||
created_at = ?TIMESTAMP,
|
||||
contact_info = ?CONTACT_INFO,
|
||||
metadata = {obj, #{}}
|
||||
}},
|
||||
{customer_status_changed, #payproc_CustomerStatusChanged{
|
||||
status = ?CUSTOMER_READY
|
||||
}},
|
||||
{customer_binding_changed, #payproc_CustomerBindingChanged{
|
||||
id = ?STRING,
|
||||
payload =
|
||||
{started, #payproc_CustomerBindingStarted{
|
||||
binding = ?CUSTOMER_BINDING
|
||||
}}
|
||||
}},
|
||||
{customer_binding_changed, #payproc_CustomerBindingChanged{
|
||||
id = ?STRING,
|
||||
payload =
|
||||
{status_changed, #payproc_CustomerBindingStatusChanged{
|
||||
status =
|
||||
{failed, #payproc_CustomerBindingFailed{
|
||||
failure = {failure, #domain_Failure{code = <<"error_code">>}}
|
||||
}}
|
||||
}}
|
||||
}},
|
||||
{customer_binding_changed, #payproc_CustomerBindingChanged{
|
||||
id = ?STRING,
|
||||
payload =
|
||||
{interaction_changed, #payproc_CustomerBindingInteractionChanged{
|
||||
interaction = ?USER_INTERACTION
|
||||
}}
|
||||
}},
|
||||
{customer_binding_changed, #payproc_CustomerBindingChanged{
|
||||
id = ?STRING,
|
||||
payload =
|
||||
{interaction_changed, #payproc_CustomerBindingInteractionChanged{
|
||||
interaction = ?USER_INTERACTION,
|
||||
status = ?USER_INTERACTION_COMPLETED
|
||||
}}
|
||||
}}
|
||||
]}
|
||||
}).
|
||||
|
||||
-define(PUT_CARD_RESULT, #'PutCardResult'{
|
||||
bank_card = ?BANK_CARD
|
||||
}).
|
||||
|
@ -7,6 +7,7 @@
|
||||
-include_lib("damsel/include/dmsl_payproc_error_thrift.hrl").
|
||||
-include_lib("damsel/include/dmsl_base_thrift.hrl").
|
||||
-include_lib("damsel/include/dmsl_domain_thrift.hrl").
|
||||
-include_lib("damsel/include/dmsl_user_interaction_thrift.hrl").
|
||||
|
||||
-include_lib("capi_dummy_data.hrl").
|
||||
|
||||
@ -190,10 +191,6 @@ get_invoice_ok_test(Config) ->
|
||||
|
||||
-spec get_invoice_events_ok_test(config()) -> _.
|
||||
get_invoice_events_ok_test(Config) ->
|
||||
Inc = fun
|
||||
(X) when is_integer(X) -> X + 1;
|
||||
(_) -> 1
|
||||
end,
|
||||
_ = capi_ct_helper:mock_services(
|
||||
[
|
||||
{invoicing, fun
|
||||
@ -209,7 +206,7 @@ get_invoice_events_ok_test(Config) ->
|
||||
?INVOICE_EVENT_PRIVATE(6),
|
||||
?INVOICE_EVENT(7)
|
||||
],
|
||||
Inc(ID),
|
||||
genlib:define(ID, 0) + 1,
|
||||
N
|
||||
)};
|
||||
('Get', _) ->
|
||||
@ -225,6 +222,75 @@ get_invoice_events_ok_test(Config) ->
|
||||
?STRING,
|
||||
Config
|
||||
),
|
||||
{ok, [Event]} = capi_client_invoices:get_invoice_events(?config(context, Config), ?STRING, 1),
|
||||
_ = ?assertMatch(
|
||||
#{
|
||||
<<"id">> := 1,
|
||||
<<"createdAt">> := ?TIMESTAMP,
|
||||
<<"changes">> := [
|
||||
#{
|
||||
<<"changeType">> := <<"InvoiceCreated">>,
|
||||
<<"invoice">> := #{
|
||||
<<"id">> := ?STRING,
|
||||
<<"status">> := <<"unpaid">>
|
||||
}
|
||||
},
|
||||
#{
|
||||
<<"changeType">> := <<"InvoiceStatusChanged">>,
|
||||
<<"status">> := <<"unpaid">>
|
||||
},
|
||||
#{
|
||||
<<"changeType">> := <<"InvoiceStatusChanged">>,
|
||||
<<"status">> := <<"paid">>
|
||||
},
|
||||
#{
|
||||
<<"changeType">> := <<"InvoiceStatusChanged">>,
|
||||
<<"status">> := <<"cancelled">>
|
||||
},
|
||||
#{
|
||||
<<"changeType">> := <<"InvoiceStatusChanged">>,
|
||||
<<"status">> := <<"fulfilled">>
|
||||
},
|
||||
#{
|
||||
<<"changeType">> := <<"PaymentInteractionRequested">>,
|
||||
<<"paymentID">> := ?STRING,
|
||||
<<"userInteraction">> := #{
|
||||
<<"interactionType">> := <<"Redirect">>,
|
||||
<<"request">> := #{
|
||||
<<"requestType">> := <<"BrowserPostRequest">>,
|
||||
<<"uriTemplate">> := ?URL,
|
||||
<<"form">> := [#{<<"key">> := _, <<"template">> := _}]
|
||||
}
|
||||
}
|
||||
},
|
||||
#{
|
||||
<<"changeType">> := <<"PaymentInteractionRequested">>,
|
||||
<<"paymentID">> := ?STRING,
|
||||
<<"userInteraction">> := #{
|
||||
<<"interactionType">> := <<"Redirect">>,
|
||||
<<"request">> := #{
|
||||
<<"requestType">> := <<"BrowserPostRequest">>,
|
||||
<<"uriTemplate">> := ?URL,
|
||||
<<"form">> := [_]
|
||||
}
|
||||
}
|
||||
},
|
||||
#{
|
||||
<<"changeType">> := <<"PaymentInteractionCompleted">>,
|
||||
<<"paymentID">> := ?STRING,
|
||||
<<"userInteraction">> := #{
|
||||
<<"interactionType">> := <<"Redirect">>,
|
||||
<<"request">> := #{
|
||||
<<"requestType">> := <<"BrowserPostRequest">>,
|
||||
<<"uriTemplate">> := ?URL,
|
||||
<<"form">> := [_]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
Event
|
||||
),
|
||||
{ok, [#{<<"id">> := 1}, #{<<"id">> := 2}, #{<<"id">> := 4}]} =
|
||||
capi_client_invoices:get_invoice_events(?config(context, Config), ?STRING, 3),
|
||||
{ok, [#{<<"id">> := 4}, #{<<"id">> := 7}]} =
|
||||
|
@ -37,7 +37,7 @@
|
||||
{<<"cowlib">>,{pkg,<<"cowlib">>,<<"2.11.0">>},1},
|
||||
{<<"damsel">>,
|
||||
{git,"https://github.com/valitydev/damsel.git",
|
||||
{ref,"60474970af1d5e58752f4e5680e67c65ff64dda9"}},
|
||||
{ref,"6655937cfd504d14bf83c40f5d09315dbffbdcfc"}},
|
||||
0},
|
||||
{<<"dmt_client">>,
|
||||
{git,"https://github.com/valitydev/dmt_client.git",
|
||||
@ -119,11 +119,11 @@
|
||||
{<<"ssl_verify_fun">>,{pkg,<<"ssl_verify_fun">>,<<"1.1.6">>},2},
|
||||
{<<"swag_client">>,
|
||||
{git,"https://github.com/valitydev/swag-payments",
|
||||
{ref,"279d481e4583f8650b0162470fae68b8f30c0cdc"}},
|
||||
{ref,"a6529bb729abfff1fe265dde5971866bed0669b4"}},
|
||||
0},
|
||||
{<<"swag_server">>,
|
||||
{git,"https://github.com/valitydev/swag-payments",
|
||||
{ref,"06c30485b102036290a1c05d07e517ea2a0a85de"}},
|
||||
{ref,"aaa932d06ccafb7c25f80f433557836e80d6d2ac"}},
|
||||
0},
|
||||
{<<"thrift">>,
|
||||
{git,"https://github.com/valitydev/thrift_erlang.git",
|
||||
|
Loading…
Reference in New Issue
Block a user