From a11886927fdb00b44e3d3d5c1e6c8362c002df32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D0=B5=D0=BC?= Date: Mon, 9 Dec 2024 13:45:12 +0300 Subject: [PATCH 1/2] added generic condition --- apps/party_management/src/pm_payment_tool.erl | 31 ++++++++++++ apps/party_management/test/pm_ct_domain.hrl | 2 + .../test/pm_party_tests_SUITE.erl | 50 +++++++++++++++---- compose.yaml | 2 +- rebar.config | 2 +- rebar.lock | 2 +- 6 files changed, 77 insertions(+), 12 deletions(-) diff --git a/apps/party_management/src/pm_payment_tool.erl b/apps/party_management/src/pm_payment_tool.erl index 3b95470..5e3d0df 100644 --- a/apps/party_management/src/pm_payment_tool.erl +++ b/apps/party_management/src/pm_payment_tool.erl @@ -3,6 +3,7 @@ -module(pm_payment_tool). -include_lib("damsel/include/dmsl_domain_thrift.hrl"). +-include_lib("damsel/include/dmsl_base_thrift.hrl"). %% @@ -193,11 +194,41 @@ test_mobile_commerce_condition_def( test_mobile_commerce_condition_def(_Cond, _Data) -> false. +test_generic_condition({resource_field_matches, _}, #domain_GenericPaymentTool{data = undefined}) -> + false; +test_generic_condition( + {resource_field_matches, #domain_GenericResourceCondition{field_path = Path, value = Value}}, + #domain_GenericPaymentTool{data = #base_Content{type = Type, data = Data}} +) -> + case decode_content(Type, Data) of + {ok, Result} -> + case get_field_by_path(Path, Result) of + {ok, Value} -> true; + _ -> false + end; + _ -> + false + end; test_generic_condition({payment_service_is, Ref1}, #domain_GenericPaymentTool{payment_service = Ref2}) -> Ref1 =:= Ref2; test_generic_condition(_Cond, _Data) -> false. +decode_content(<<"application/schema-instance+json; schema=", _/binary>>, Data) -> + {ok, jsx:decode(Data)}; +decode_content(<<"application/json">>, Data) -> + {ok, jsx:decode(Data)}; +decode_content(Type, _Data) -> + {error, {unsupported, Type}}. + +get_field_by_path([], Data) -> + {ok, Data}; +get_field_by_path([Key | Path], Data) -> + case maps:get(Key, Data, undefined) of + undefined -> {error, notfound}; + Value -> get_field_by_path(Path, Value) + end. + -ifdef(TEST). -include_lib("eunit/include/eunit.hrl"). diff --git a/apps/party_management/test/pm_ct_domain.hrl b/apps/party_management/test/pm_ct_domain.hrl index b1caf9c..cb0493b 100644 --- a/apps/party_management/test/pm_ct_domain.hrl +++ b/apps/party_management/test/pm_ct_domain.hrl @@ -39,6 +39,8 @@ -define(crit(ID), #domain_CriterionRef{id = ID}). -define(crp(ID), #domain_CashRegisterProviderRef{id = ID}). -define(gnrc(PS), #domain_GenericPaymentMethod{payment_service = PS}). +-define(gnrc_cond(Path, Value), #domain_GenericResourceCondition{field_path = Path, value = Value}). +-define(gnrc_tool(PS, Data), #domain_GenericPaymentTool{payment_service = PS, data = Data}). -define(cashrng(Lower, Upper), #domain_CashRange{lower = Lower, upper = Upper}). diff --git a/apps/party_management/test/pm_party_tests_SUITE.erl b/apps/party_management/test/pm_party_tests_SUITE.erl index 3d1616c..f87f734 100644 --- a/apps/party_management/test/pm_party_tests_SUITE.erl +++ b/apps/party_management/test/pm_party_tests_SUITE.erl @@ -847,7 +847,7 @@ compute_payment_institution(C) -> -spec check_all_payment_methods(config()) -> _. check_all_payment_methods(C) -> Client = cfg(client, C), - TermsFun = fun(Type, Object) -> + TermsFun0 = fun(Type, Object) -> ?assertMatch( #domain_TermSet{ payments = #domain_PaymentsServiceTerms{ @@ -863,6 +863,23 @@ check_all_payment_methods(C) -> ), ok end, + + TermsFun1 = fun(Type, Object, PaymentTool) -> + ?assertMatch( + #domain_TermSet{ + payments = #domain_PaymentsServiceTerms{ + payment_methods = + {value, [_]} + } + }, + pm_client_party:compute_payment_institution_terms( + ?pinst(5), + #payproc_Varset{payment_method = ?pmt(Type, Object), payment_tool = PaymentTool}, + Client + ) + ), + ok + end, #domain_TermSet{payments = #domain_PaymentsServiceTerms{payment_methods = {value, []}}} = pm_client_party:compute_payment_institution_terms( ?pinst(5), @@ -870,14 +887,23 @@ check_all_payment_methods(C) -> Client ), - TermsFun(bank_card, ?bank_card(<<"visa">>)), - TermsFun(payment_terminal, ?pmt_srv(<<"alipay">>)), - TermsFun(digital_wallet, ?pmt_srv(<<"qiwi">>)), - TermsFun(mobile, ?mob(<<"mts">>)), - TermsFun(crypto_currency, ?crypta(<<"bitcoin">>)), - TermsFun(bank_card, ?token_bank_card(<<"visa">>, <<"applepay">>)), - TermsFun(bank_card, ?bank_card_no_cvv(<<"visa">>)), - TermsFun(generic, ?gnrc(?pmt_srv(<<"generic">>))). + TermsFun0(bank_card, ?bank_card(<<"visa">>)), + TermsFun0(payment_terminal, ?pmt_srv(<<"alipay">>)), + TermsFun0(digital_wallet, ?pmt_srv(<<"qiwi">>)), + TermsFun0(mobile, ?mob(<<"mts">>)), + TermsFun0(crypto_currency, ?crypta(<<"bitcoin">>)), + TermsFun0(bank_card, ?token_bank_card(<<"visa">>, <<"applepay">>)), + TermsFun0(bank_card, ?bank_card_no_cvv(<<"visa">>)), + TermsFun0(generic, ?gnrc(?pmt_srv(<<"generic">>))), + TermsFun1( + generic, + ?gnrc(?pmt_srv(<<"generic1">>)), + {generic, + ?gnrc_tool(?pmt_srv(<<"generic1">>), #base_Content{ + type = <<"application/json">>, + data = jsx:encode(#{<<"some_path">> => <<"some_value">>}) + })} + ). contract_w2w_terms(C) -> Client = cfg(client, C), @@ -2182,6 +2208,10 @@ construct_domain_fixture() -> {generic, {payment_service_is, ?pmt_srv(<<"generic">>)}}, [?pmt(generic, ?gnrc(?pmt_srv(<<"generic">>)))] ), + mk_payment_decision( + {generic, {resource_field_matches, ?gnrc_cond([<<"some_path">>], <<"some_value">>)}}, + [?pmt(generic, ?gnrc(?pmt_srv(<<"generic1">>)))] + ), #domain_PaymentMethodDecision{ if_ = {condition, {payment_tool, {bank_card, #domain_BankCardCondition{}}}}, then_ = {value, ordsets:from_list([?pmt(bank_card, ?bank_card(<<"mastercard">>))])} @@ -2490,6 +2520,7 @@ construct_domain_fixture() -> pm_ct_fixture:construct_crypto_currency(?crypta(<<"bitcoin">>), <<"Bitcoin">>), pm_ct_fixture:construct_tokenized_service(?token_srv(<<"applepay">>), <<"Apple Pay">>), pm_ct_fixture:construct_payment_service(?pmt_srv(<<"generic">>), <<"Generic">>), + pm_ct_fixture:construct_payment_service(?pmt_srv(<<"generic1">>), <<"Generic1">>), pm_ct_fixture:construct_payment_method(?pmt(bank_card, ?bank_card(<<"visa">>))), pm_ct_fixture:construct_payment_method(?pmt(bank_card, ?bank_card(<<"mastercard">>))), @@ -2501,6 +2532,7 @@ construct_domain_fixture() -> pm_ct_fixture:construct_payment_method(?pmt(mobile, ?mob(<<"mts">>))), pm_ct_fixture:construct_payment_method(?pmt(crypto_currency, ?crypta(<<"bitcoin">>))), pm_ct_fixture:construct_payment_method(?pmt(generic, ?gnrc(?pmt_srv(<<"generic">>)))), + pm_ct_fixture:construct_payment_method(?pmt(generic, ?gnrc(?pmt_srv(<<"generic1">>)))), pm_ct_fixture:construct_payment_method(?pmt(payment_terminal, ?pmt_srv(<<"euroset">>))), pm_ct_fixture:construct_payment_method(?pmt(bank_card, ?bank_card_no_cvv(<<"visa">>))), diff --git a/compose.yaml b/compose.yaml index ecbd764..31ed762 100644 --- a/compose.yaml +++ b/compose.yaml @@ -24,7 +24,7 @@ services: command: /sbin/init dominant: - image: ghcr.io/valitydev/dominant:sha-7e33b86 + image: ghcr.io/valitydev/dominant:sha-d89f4fd-epic-ft-EMP-167-bump_damsel depends_on: - machinegun ports: diff --git a/rebar.config b/rebar.config index 191d08a..33ed891 100644 --- a/rebar.config +++ b/rebar.config @@ -32,7 +32,7 @@ {prometheus, "4.8.1"}, {prometheus_cowboy, "0.1.8"}, {woody, {git, "https://github.com/valitydev/woody_erlang.git", {branch, "master"}}}, - {damsel, {git, "https://github.com/valitydev/damsel.git", {branch, "master"}}}, + {damsel, {git, "https://github.com/valitydev/damsel.git", {branch, "EMP-166/ft/new_generic_condition"}}}, {payproc_errors, {git, "https://github.com/valitydev/payproc-errors-erlang.git", {branch, "master"}}}, {mg_proto, {git, "https://github.com/valitydev/machinegun-proto.git", {branch, "master"}}}, {dmt_client, {git, "https://github.com/valitydev/dmt_client.git", {branch, "master"}}}, diff --git a/rebar.lock b/rebar.lock index f6956fc..32bcb4b 100644 --- a/rebar.lock +++ b/rebar.lock @@ -13,7 +13,7 @@ {<<"ctx">>,{pkg,<<"ctx">>,<<"0.6.0">>},2}, {<<"damsel">>, {git,"https://github.com/valitydev/damsel.git", - {ref,"7ed2112a6503abe9f65142e43dca6675e939d164"}}, + {ref,"346f0f415c963f4f9af5a9fc294e00761220c227"}}, 0}, {<<"dmt_client">>, {git,"https://github.com/valitydev/dmt_client.git", From e144029b785e743ffa8031c825f02aae5e040542 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D0=B5=D0=BC?= Date: Tue, 10 Dec 2024 12:35:05 +0300 Subject: [PATCH 2/2] bumped to master --- compose.yaml | 2 +- rebar.config | 2 +- rebar.lock | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/compose.yaml b/compose.yaml index 31ed762..3a8f51a 100644 --- a/compose.yaml +++ b/compose.yaml @@ -24,7 +24,7 @@ services: command: /sbin/init dominant: - image: ghcr.io/valitydev/dominant:sha-d89f4fd-epic-ft-EMP-167-bump_damsel + image: ghcr.io/valitydev/dominant:sha-c0ebc36 depends_on: - machinegun ports: diff --git a/rebar.config b/rebar.config index 33ed891..191d08a 100644 --- a/rebar.config +++ b/rebar.config @@ -32,7 +32,7 @@ {prometheus, "4.8.1"}, {prometheus_cowboy, "0.1.8"}, {woody, {git, "https://github.com/valitydev/woody_erlang.git", {branch, "master"}}}, - {damsel, {git, "https://github.com/valitydev/damsel.git", {branch, "EMP-166/ft/new_generic_condition"}}}, + {damsel, {git, "https://github.com/valitydev/damsel.git", {branch, "master"}}}, {payproc_errors, {git, "https://github.com/valitydev/payproc-errors-erlang.git", {branch, "master"}}}, {mg_proto, {git, "https://github.com/valitydev/machinegun-proto.git", {branch, "master"}}}, {dmt_client, {git, "https://github.com/valitydev/dmt_client.git", {branch, "master"}}}, diff --git a/rebar.lock b/rebar.lock index 32bcb4b..24a9d91 100644 --- a/rebar.lock +++ b/rebar.lock @@ -13,7 +13,7 @@ {<<"ctx">>,{pkg,<<"ctx">>,<<"0.6.0">>},2}, {<<"damsel">>, {git,"https://github.com/valitydev/damsel.git", - {ref,"346f0f415c963f4f9af5a9fc294e00761220c227"}}, + {ref,"81d1edce2043500e4581867da3f5f4c31e682f44"}}, 0}, {<<"dmt_client">>, {git,"https://github.com/valitydev/dmt_client.git",