From 61c2e2c75fabdb03c5599df97240a030cb7b5b6a Mon Sep 17 00:00:00 2001 From: Swangi Kumari <85639103+swangi-kumari@users.noreply.github.com> Date: Fri, 13 Jun 2025 12:03:32 +0530 Subject: [PATCH] feat(connector): [trustpay] introduce instant bank_transfer, finland and poland (#7925) Co-authored-by: PiX <69745008+pixincreate@users.noreply.github.com> --- .typos.toml | 1 + api-reference-v2/openapi_spec.json | 46 +++++++ api-reference/openapi_spec.json | 46 +++++++ config/config.example.toml | 2 + config/deployments/integration_test.toml | 2 + config/deployments/production.toml | 2 + config/deployments/sandbox.toml | 2 + config/development.toml | 2 + config/docker_compose.toml | 2 + crates/api_models/src/payments.rs | 12 +- .../src/payments/additional_info.rs | 2 + crates/common_enums/src/enums.rs | 4 + crates/common_enums/src/transformers.rs | 2 + .../connector_configs/toml/development.toml | 4 + crates/connector_configs/toml/production.toml | 4 + crates/connector_configs/toml/sandbox.toml | 4 + crates/euclid/src/frontend/dir/enums.rs | 2 + crates/euclid/src/frontend/dir/lowering.rs | 2 + .../euclid/src/frontend/dir/transformers.rs | 6 + .../src/connectors/adyen.rs | 2 + .../src/connectors/adyen/transformers.rs | 2 + .../connectors/facilitapay/transformers.rs | 2 + .../src/connectors/itaubank/transformers.rs | 2 + .../src/connectors/klarna.rs | 8 ++ .../src/connectors/paypal/transformers.rs | 4 + .../src/connectors/shift4/transformers.rs | 2 + .../src/connectors/stripe/transformers.rs | 6 + .../src/connectors/trustpay/transformers.rs | 8 +- .../connectors/worldpayvantiv/transformers.rs | 2 +- .../src/connectors/zen/transformers.rs | 2 + .../src/connectors/zsl/transformers.rs | 2 + crates/hyperswitch_connectors/src/utils.rs | 8 ++ .../src/payment_method_data.rs | 16 +++ crates/kgraph_utils/src/mca.rs | 6 + crates/kgraph_utils/src/transformers.rs | 6 + .../payment_connector_required_fields.rs | 50 ++++++++ crates/payment_methods/src/helpers.rs | 2 + crates/router/src/connector/utils.rs | 8 ++ crates/router/src/types/transformers.rs | 2 + .../cypress/e2e/configs/Payment/Adyen.js | 22 ---- .../cypress/e2e/configs/Payment/Commons.js | 113 ++++++++++++----- .../e2e/configs/Payment/Facilitapay.js | 11 -- .../cypress/e2e/configs/Payment/Fiserv.js | 14 --- .../cypress/e2e/configs/Payment/ItauBank.js | 11 -- .../cypress/e2e/configs/Payment/Modifiers.js | 32 ++++- .../cypress/e2e/configs/Payment/Paypal.js | 13 -- .../cypress/e2e/configs/Payment/Stripe.js | 11 -- .../cypress/e2e/configs/Payment/Trustpay.js | 40 ++++-- .../spec/Payment/00017-BankTransfers.cy.js | 114 +++++++++++++++++- .../e2e/spec/Payment/00018-BankRedirect.cy.js | 10 +- cypress-tests/cypress/support/commands.js | 1 + .../cypress/support/redirectionHandler.js | 60 ++++++++- loadtest/config/development.toml | 2 + 53 files changed, 600 insertions(+), 141 deletions(-) diff --git a/.typos.toml b/.typos.toml index d9b20ce32e..5fda4c2ad4 100644 --- a/.typos.toml +++ b/.typos.toml @@ -74,6 +74,7 @@ TrnovskaVas = "TrnovskaVas" # Is a state in Slovenia Corse-du-Sud = "Corse-du-Sud" # Is a state in France Haute-Corse = "Haute-Corse" # Is a state in France Fram = "Fram" # Is a state in Slovenia +typ = "typ" # Token.io JWT header required parameter [default.extend-words] diff --git a/api-reference-v2/openapi_spec.json b/api-reference-v2/openapi_spec.json index cfe8027c87..877fb89ca9 100644 --- a/api-reference-v2/openapi_spec.json +++ b/api-reference-v2/openapi_spec.json @@ -6265,6 +6265,28 @@ "type": "object" } } + }, + { + "type": "object", + "required": [ + "instant_bank_transfer_finland" + ], + "properties": { + "instant_bank_transfer_finland": { + "type": "object" + } + } + }, + { + "type": "object", + "required": [ + "instant_bank_transfer_poland" + ], + "properties": { + "instant_bank_transfer_poland": { + "type": "object" + } + } } ] }, @@ -6588,6 +6610,28 @@ "type": "object" } } + }, + { + "type": "object", + "required": [ + "instant_bank_transfer_finland" + ], + "properties": { + "instant_bank_transfer_finland": { + "type": "object" + } + } + }, + { + "type": "object", + "required": [ + "instant_bank_transfer_poland" + ], + "properties": { + "instant_bank_transfer_poland": { + "type": "object" + } + } } ] }, @@ -17613,6 +17657,8 @@ "open_banking_pis", "direct_carrier_billing", "instant_bank_transfer", + "instant_bank_transfer_finland", + "instant_bank_transfer_poland", "revolut_pay" ] }, diff --git a/api-reference/openapi_spec.json b/api-reference/openapi_spec.json index 7bb7f3b382..255db7ad06 100644 --- a/api-reference/openapi_spec.json +++ b/api-reference/openapi_spec.json @@ -8639,6 +8639,28 @@ "type": "object" } } + }, + { + "type": "object", + "required": [ + "instant_bank_transfer_finland" + ], + "properties": { + "instant_bank_transfer_finland": { + "type": "object" + } + } + }, + { + "type": "object", + "required": [ + "instant_bank_transfer_poland" + ], + "properties": { + "instant_bank_transfer_poland": { + "type": "object" + } + } } ] }, @@ -8962,6 +8984,28 @@ "type": "object" } } + }, + { + "type": "object", + "required": [ + "instant_bank_transfer_finland" + ], + "properties": { + "instant_bank_transfer_finland": { + "type": "object" + } + } + }, + { + "type": "object", + "required": [ + "instant_bank_transfer_poland" + ], + "properties": { + "instant_bank_transfer_poland": { + "type": "object" + } + } } ] }, @@ -20123,6 +20167,8 @@ "open_banking_pis", "direct_carrier_billing", "instant_bank_transfer", + "instant_bank_transfer_finland", + "instant_bank_transfer_poland", "revolut_pay" ] }, diff --git a/config/config.example.toml b/config/config.example.toml index 7eddf9a9e8..083a1724bc 100644 --- a/config/config.example.toml +++ b/config/config.example.toml @@ -765,6 +765,8 @@ duit_now = { country = "MY", currency = "MYR" } [pm_filters.trustpay] instant_bank_transfer = { country = "CZ,SK,GB,AT,DE,IT", currency = "CZK, EUR, GBP" } +instant_bank_transfer_poland = { country = "PL", currency = "PLN" } +instant_bank_transfer_finland = { country = "FI", currency = "EUR" } sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,GB", currency = "EUR" } [pm_filters.dlocal] diff --git a/config/deployments/integration_test.toml b/config/deployments/integration_test.toml index 2065f7a99a..601cad2446 100644 --- a/config/deployments/integration_test.toml +++ b/config/deployments/integration_test.toml @@ -589,6 +589,8 @@ debit = { country = "CN,HK,ID,MY,PH,SG,TH,TW,VN", currency = "CNY,HKD,IDR,MYR,PH [pm_filters.trustpay] instant_bank_transfer = { country = "CZ,SK,GB,AT,DE,IT", currency = "CZK, EUR, GBP" } +instant_bank_transfer_poland = { country = "PL", currency = "PLN" } +instant_bank_transfer_finland = { country = "FI", currency = "EUR" } sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,GB", currency = "EUR" } [pm_filters.dlocal] diff --git a/config/deployments/production.toml b/config/deployments/production.toml index bd0340300a..f9b884489b 100644 --- a/config/deployments/production.toml +++ b/config/deployments/production.toml @@ -606,6 +606,8 @@ debit = { country = "CN,HK,ID,MY,PH,SG,TH,TW,VN", currency = "CNY,HKD,IDR,MYR,PH [pm_filters.trustpay] instant_bank_transfer = { country = "CZ,SK,GB,AT,DE,IT", currency = "CZK, EUR, GBP" } +instant_bank_transfer_poland = { country = "PL", currency = "PLN" } +instant_bank_transfer_finland = { country = "FI", currency = "EUR" } sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,GB", currency = "EUR" } [pm_filters.dlocal] diff --git a/config/deployments/sandbox.toml b/config/deployments/sandbox.toml index 7ba862a875..6e361b0b2f 100644 --- a/config/deployments/sandbox.toml +++ b/config/deployments/sandbox.toml @@ -612,6 +612,8 @@ debit = { country = "CN,HK,ID,MY,PH,SG,TH,TW,VN", currency = "CNY,HKD,IDR,MYR,PH [pm_filters.trustpay] instant_bank_transfer = { country = "CZ,SK,GB,AT,DE,IT", currency = "CZK, EUR, GBP" } +instant_bank_transfer_poland = { country = "PL", currency = "PLN" } +instant_bank_transfer_finland = { country = "FI", currency = "EUR" } sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,GB", currency = "EUR" } [pm_filters.dlocal] diff --git a/config/development.toml b/config/development.toml index d7fb9578c9..4d5287dded 100644 --- a/config/development.toml +++ b/config/development.toml @@ -742,6 +742,8 @@ ach = { country = "US", currency = "USD" } credit = { not_available_flows = { capture_method = "manual" } } debit = { not_available_flows = { capture_method = "manual" } } instant_bank_transfer = { country = "CZ,SK,GB,AT,DE,IT", currency = "CZK, EUR, GBP" } +instant_bank_transfer_poland = { country = "PL", currency = "PLN" } +instant_bank_transfer_finland = { country = "FI", currency = "EUR" } sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,GB", currency = "EUR" } [pm_filters.authorizedotnet] diff --git a/config/docker_compose.toml b/config/docker_compose.toml index 8d538dbd0d..ab334751a7 100644 --- a/config/docker_compose.toml +++ b/config/docker_compose.toml @@ -724,6 +724,8 @@ debit = { country = "CN,HK,ID,MY,PH,SG,TH,TW,VN", currency = "CNY,HKD,IDR,MYR,PH [pm_filters.trustpay] instant_bank_transfer = { country = "CZ,SK,GB,AT,DE,IT", currency = "CZK, EUR, GBP" } +instant_bank_transfer_poland = { country = "PL", currency = "PLN" } +instant_bank_transfer_finland = { country = "FI", currency = "EUR" } sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,GB", currency = "EUR" } [pm_filters.dlocal] diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs index c1451c7bae..c37690a9f5 100644 --- a/crates/api_models/src/payments.rs +++ b/crates/api_models/src/payments.rs @@ -2770,6 +2770,12 @@ impl GetPaymentMethodType for BankTransferData { Self::Pse {} => api_enums::PaymentMethodType::Pse, Self::LocalBankTransfer { .. } => api_enums::PaymentMethodType::LocalBankTransfer, Self::InstantBankTransfer {} => api_enums::PaymentMethodType::InstantBankTransfer, + Self::InstantBankTransferFinland {} => { + api_enums::PaymentMethodType::InstantBankTransferFinland + } + Self::InstantBankTransferPoland {} => { + api_enums::PaymentMethodType::InstantBankTransferPoland + } } } } @@ -3435,6 +3441,8 @@ pub enum BankTransferData { bank_code: Option, }, InstantBankTransfer {}, + InstantBankTransferFinland {}, + InstantBankTransferPoland {}, } #[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)] @@ -3505,7 +3513,9 @@ impl GetAddressFromPaymentMethodData for BankTransferData { Self::LocalBankTransfer { .. } | Self::Pix { .. } | Self::Pse {} - | Self::InstantBankTransfer {} => None, + | Self::InstantBankTransfer {} + | Self::InstantBankTransferFinland {} + | Self::InstantBankTransferPoland {} => None, } } } diff --git a/crates/api_models/src/payments/additional_info.rs b/crates/api_models/src/payments/additional_info.rs index 371bebe598..ab143975ea 100644 --- a/crates/api_models/src/payments/additional_info.rs +++ b/crates/api_models/src/payments/additional_info.rs @@ -152,6 +152,8 @@ pub enum BankTransferAdditionalData { Pse {}, LocalBankTransfer(Box), InstantBankTransfer {}, + InstantBankTransferFinland {}, + InstantBankTransferPoland {}, } #[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)] diff --git a/crates/common_enums/src/enums.rs b/crates/common_enums/src/enums.rs index 5daabd0bc7..568fa5959e 100644 --- a/crates/common_enums/src/enums.rs +++ b/crates/common_enums/src/enums.rs @@ -1939,6 +1939,8 @@ pub enum PaymentMethodType { OpenBankingPIS, DirectCarrierBilling, InstantBankTransfer, + InstantBankTransferFinland, + InstantBankTransferPoland, RevolutPay, } @@ -1997,6 +1999,8 @@ impl PaymentMethodType { Self::Interac => "Interac", Self::Indomaret => "Indomaret", Self::InstantBankTransfer => "Instant Bank Transfer", + Self::InstantBankTransferFinland => "Instant Bank Transfer Finland", + Self::InstantBankTransferPoland => "Instant Bank Transfer Poland", Self::Klarna => "Klarna", Self::KakaoPay => "KakaoPay", Self::LocalBankRedirect => "Local Bank Redirect", diff --git a/crates/common_enums/src/transformers.rs b/crates/common_enums/src/transformers.rs index 4915745775..0ea21f5943 100644 --- a/crates/common_enums/src/transformers.rs +++ b/crates/common_enums/src/transformers.rs @@ -1844,6 +1844,8 @@ impl From for PaymentMethod { PaymentMethodType::MandiriVa => Self::BankTransfer, PaymentMethodType::Interac => Self::BankRedirect, PaymentMethodType::InstantBankTransfer => Self::BankTransfer, + PaymentMethodType::InstantBankTransferFinland => Self::BankTransfer, + PaymentMethodType::InstantBankTransferPoland => Self::BankTransfer, PaymentMethodType::Indomaret => Self::Voucher, PaymentMethodType::OnlineBankingCzechRepublic => Self::BankRedirect, PaymentMethodType::OnlineBankingFinland => Self::BankRedirect, diff --git a/crates/connector_configs/toml/development.toml b/crates/connector_configs/toml/development.toml index 2cf7b0ead3..24af6b509e 100644 --- a/crates/connector_configs/toml/development.toml +++ b/crates/connector_configs/toml/development.toml @@ -4324,6 +4324,10 @@ merchant_secret="Source verification key" payment_method_type = "sepa_bank_transfer" [[trustpay.bank_transfer]] payment_method_type = "instant_bank_transfer" +[[trustpay.bank_transfer]] + payment_method_type = "instant_bank_transfer_finland" +[[trustpay.bank_transfer]] + payment_method_type = "instant_bank_transfer_poland" [trustpay.connector_auth.SignatureKey] api_key="API Key" key1="Project ID" diff --git a/crates/connector_configs/toml/production.toml b/crates/connector_configs/toml/production.toml index 5d37900243..8edf0d121c 100644 --- a/crates/connector_configs/toml/production.toml +++ b/crates/connector_configs/toml/production.toml @@ -3078,6 +3078,10 @@ options=["PAN_ONLY", "CRYPTOGRAM_3DS"] payment_method_type = "sepa_bank_transfer" [[trustpay.bank_transfer]] payment_method_type = "instant_bank_transfer" +[[trustpay.bank_transfer]] + payment_method_type = "instant_bank_transfer_finland" +[[trustpay.bank_transfer]] + payment_method_type = "instant_bank_transfer_poland" [trustpay.connector_auth.SignatureKey] api_key="API Key" key1="Project ID" diff --git a/crates/connector_configs/toml/sandbox.toml b/crates/connector_configs/toml/sandbox.toml index c750330173..ec800172d2 100644 --- a/crates/connector_configs/toml/sandbox.toml +++ b/crates/connector_configs/toml/sandbox.toml @@ -4284,6 +4284,10 @@ merchant_secret="Source verification key" payment_method_type = "sepa_bank_transfer" [[trustpay.bank_transfer]] payment_method_type = "instant_bank_transfer" +[[trustpay.bank_transfer]] + payment_method_type = "instant_bank_transfer_finland" +[[trustpay.bank_transfer]] + payment_method_type = "instant_bank_transfer_poland" [trustpay.connector_auth.SignatureKey] api_key="API Key" key1="Project ID" diff --git a/crates/euclid/src/frontend/dir/enums.rs b/crates/euclid/src/frontend/dir/enums.rs index 827773750d..57d1ddf073 100644 --- a/crates/euclid/src/frontend/dir/enums.rs +++ b/crates/euclid/src/frontend/dir/enums.rs @@ -219,6 +219,8 @@ pub enum BankTransferType { Pse, LocalBankTransfer, InstantBankTransfer, + InstantBankTransferFinland, + InstantBankTransferPoland, } #[derive( diff --git a/crates/euclid/src/frontend/dir/lowering.rs b/crates/euclid/src/frontend/dir/lowering.rs index c84aa83d48..01738c75c4 100644 --- a/crates/euclid/src/frontend/dir/lowering.rs +++ b/crates/euclid/src/frontend/dir/lowering.rs @@ -125,6 +125,8 @@ impl From for global_enums::PaymentMethodType { enums::BankTransferType::PermataBankTransfer => Self::PermataBankTransfer, enums::BankTransferType::LocalBankTransfer => Self::LocalBankTransfer, enums::BankTransferType::InstantBankTransfer => Self::InstantBankTransfer, + enums::BankTransferType::InstantBankTransferFinland => Self::InstantBankTransferFinland, + enums::BankTransferType::InstantBankTransferPoland => Self::InstantBankTransferPoland, } } } diff --git a/crates/euclid/src/frontend/dir/transformers.rs b/crates/euclid/src/frontend/dir/transformers.rs index d326bb24e4..56122b46fc 100644 --- a/crates/euclid/src/frontend/dir/transformers.rs +++ b/crates/euclid/src/frontend/dir/transformers.rs @@ -159,6 +159,12 @@ impl IntoDirValue for (global_enums::PaymentMethodType, global_enums::PaymentMet global_enums::PaymentMethodType::InstantBankTransfer => { Ok(dirval!(BankTransferType = InstantBankTransfer)) } + global_enums::PaymentMethodType::InstantBankTransferFinland => { + Ok(dirval!(BankTransferType = InstantBankTransferFinland)) + } + global_enums::PaymentMethodType::InstantBankTransferPoland => { + Ok(dirval!(BankTransferType = InstantBankTransferPoland)) + } global_enums::PaymentMethodType::PermataBankTransfer => { Ok(dirval!(BankTransferType = PermataBankTransfer)) } diff --git a/crates/hyperswitch_connectors/src/connectors/adyen.rs b/crates/hyperswitch_connectors/src/connectors/adyen.rs index 2d9753a63b..f53615d6bb 100644 --- a/crates/hyperswitch_connectors/src/connectors/adyen.rs +++ b/crates/hyperswitch_connectors/src/connectors/adyen.rs @@ -332,6 +332,8 @@ impl ConnectorValidation for Adyen { | PaymentMethodType::LocalBankRedirect | PaymentMethodType::OpenBankingPIS | PaymentMethodType::InstantBankTransfer + | PaymentMethodType::InstantBankTransferFinland + | PaymentMethodType::InstantBankTransferPoland | PaymentMethodType::SepaBankTransfer | PaymentMethodType::RevolutPay => { capture_method_not_supported!(connector, capture_method, payment_method_type) diff --git a/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs b/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs index 95043f3925..c78daba6c4 100644 --- a/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs @@ -2551,6 +2551,8 @@ impl TryFrom<(&BankTransferData, &PaymentsAuthorizeRouterData)> for AdyenPayment | BankTransferData::MultibancoBankTransfer { .. } | BankTransferData::LocalBankTransfer { .. } | BankTransferData::InstantBankTransfer {} + | BankTransferData::InstantBankTransferFinland {} + | BankTransferData::InstantBankTransferPoland {} | BankTransferData::Pse {} => Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Adyen"), ) diff --git a/crates/hyperswitch_connectors/src/connectors/facilitapay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/facilitapay/transformers.rs index 23347e31ed..c04ada6c57 100644 --- a/crates/hyperswitch_connectors/src/connectors/facilitapay/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/facilitapay/transformers.rs @@ -110,6 +110,8 @@ impl TryFrom<&FacilitapayRouterData<&types::PaymentsAuthorizeRouterData>> | BankTransferData::MandiriVaBankTransfer {} | BankTransferData::Pse {} | BankTransferData::InstantBankTransfer {} + | BankTransferData::InstantBankTransferFinland {} + | BankTransferData::InstantBankTransferPoland {} | BankTransferData::LocalBankTransfer { .. } => { Err(errors::ConnectorError::NotImplemented( "Selected payment method through Facilitapay".to_string(), diff --git a/crates/hyperswitch_connectors/src/connectors/itaubank/transformers.rs b/crates/hyperswitch_connectors/src/connectors/itaubank/transformers.rs index 0ccf5518aa..a64746c8cf 100644 --- a/crates/hyperswitch_connectors/src/connectors/itaubank/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/itaubank/transformers.rs @@ -108,6 +108,8 @@ impl TryFrom<&ItaubankRouterData<&types::PaymentsAuthorizeRouterData>> for Itaub | BankTransferData::MandiriVaBankTransfer {} | BankTransferData::Pse {} | BankTransferData::InstantBankTransfer {} + | BankTransferData::InstantBankTransferFinland {} + | BankTransferData::InstantBankTransferPoland {} | BankTransferData::LocalBankTransfer { .. } => { Err(errors::ConnectorError::NotImplemented( "Selected payment method through itaubank".to_string(), diff --git a/crates/hyperswitch_connectors/src/connectors/klarna.rs b/crates/hyperswitch_connectors/src/connectors/klarna.rs index 38077ef874..a0f2cafe25 100644 --- a/crates/hyperswitch_connectors/src/connectors/klarna.rs +++ b/crates/hyperswitch_connectors/src/connectors/klarna.rs @@ -631,6 +631,8 @@ impl ConnectorIntegration> for PaypalPayments | enums::PaymentMethodType::PayEasy | enums::PaymentMethodType::LocalBankTransfer | enums::PaymentMethodType::InstantBankTransfer + | enums::PaymentMethodType::InstantBankTransferFinland + | enums::PaymentMethodType::InstantBankTransferPoland | enums::PaymentMethodType::Mifinity | enums::PaymentMethodType::Paze | enums::PaymentMethodType::RevolutPay => { @@ -1331,6 +1333,8 @@ impl TryFrom<&BankTransferData> for PaypalPaymentsRequest { | BankTransferData::Pix { .. } | BankTransferData::Pse {} | BankTransferData::InstantBankTransfer {} + | BankTransferData::InstantBankTransferFinland {} + | BankTransferData::InstantBankTransferPoland {} | BankTransferData::LocalBankTransfer { .. } => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Paypal"), diff --git a/crates/hyperswitch_connectors/src/connectors/shift4/transformers.rs b/crates/hyperswitch_connectors/src/connectors/shift4/transformers.rs index 9052c5fa4a..f2e00bd55c 100644 --- a/crates/hyperswitch_connectors/src/connectors/shift4/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/shift4/transformers.rs @@ -340,6 +340,8 @@ impl TryFrom<&BankTransferData> for Shift4PaymentMethod { | BankTransferData::Pix { .. } | BankTransferData::Pse {} | BankTransferData::InstantBankTransfer {} + | BankTransferData::InstantBankTransferFinland { .. } + | BankTransferData::InstantBankTransferPoland { .. } | BankTransferData::LocalBankTransfer { .. } => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Shift4"), diff --git a/crates/hyperswitch_connectors/src/connectors/stripe/transformers.rs b/crates/hyperswitch_connectors/src/connectors/stripe/transformers.rs index ba18f61063..c9e96c0264 100644 --- a/crates/hyperswitch_connectors/src/connectors/stripe/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/stripe/transformers.rs @@ -822,6 +822,8 @@ impl TryFrom for StripePaymentMethodType { | enums::PaymentMethodType::PayEasy | enums::PaymentMethodType::LocalBankTransfer | enums::PaymentMethodType::InstantBankTransfer + | enums::PaymentMethodType::InstantBankTransferFinland + | enums::PaymentMethodType::InstantBankTransferPoland | enums::PaymentMethodType::SepaBankTransfer | enums::PaymentMethodType::Walley | enums::PaymentMethodType::Fps @@ -1338,6 +1340,8 @@ fn create_stripe_payment_method( payment_method_data::BankTransferData::Pse {} | payment_method_data::BankTransferData::LocalBankTransfer { .. } | payment_method_data::BankTransferData::InstantBankTransfer {} + | payment_method_data::BankTransferData::InstantBankTransferFinland { .. } + | payment_method_data::BankTransferData::InstantBankTransferPoland { .. } | payment_method_data::BankTransferData::PermataBankTransfer { .. } | payment_method_data::BankTransferData::BcaBankTransfer { .. } | payment_method_data::BankTransferData::BniVaBankTransfer { .. } @@ -3938,6 +3942,8 @@ impl | payment_method_data::BankTransferData::DanamonVaBankTransfer { .. } | payment_method_data::BankTransferData::LocalBankTransfer { .. } | payment_method_data::BankTransferData::InstantBankTransfer {} + | payment_method_data::BankTransferData::InstantBankTransferFinland {} + | payment_method_data::BankTransferData::InstantBankTransferPoland {} | payment_method_data::BankTransferData::MandiriVaBankTransfer { .. } => { Err(ConnectorError::NotImplemented( get_unimplemented_payment_method_error_message("stripe"), diff --git a/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs index 92ad6e39ca..f59cbe3313 100644 --- a/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs @@ -93,6 +93,8 @@ pub enum TrustpayBankTransferPaymentMethod { SepaCreditTransfer, #[serde(rename = "Wire")] InstantBankTransfer, + InstantBankTransferFI, + InstantBankTransferPL, } #[derive(Debug, Serialize, Deserialize, Eq, PartialEq)] @@ -282,6 +284,8 @@ impl TryFrom<&BankTransferData> for TrustpayBankTransferPaymentMethod { match value { BankTransferData::SepaBankTransfer { .. } => Ok(Self::SepaCreditTransfer), BankTransferData::InstantBankTransfer {} => Ok(Self::InstantBankTransfer), + BankTransferData::InstantBankTransferFinland {} => Ok(Self::InstantBankTransferFI), + BankTransferData::InstantBankTransferPoland {} => Ok(Self::InstantBankTransferPL), _ => Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("trustpay"), ) @@ -399,7 +403,9 @@ fn get_bank_transfer_debtor_info( .and_then(|address| address.last_name.clone()); Ok(match pm { TrustpayBankTransferPaymentMethod::SepaCreditTransfer - | TrustpayBankTransferPaymentMethod::InstantBankTransfer => Some(DebtorInformation { + | TrustpayBankTransferPaymentMethod::InstantBankTransfer + | TrustpayBankTransferPaymentMethod::InstantBankTransferFI + | TrustpayBankTransferPaymentMethod::InstantBankTransferPL => Some(DebtorInformation { name: get_full_name(params.billing_first_name, billing_last_name), email: item.request.get_email()?, }), diff --git a/crates/hyperswitch_connectors/src/connectors/worldpayvantiv/transformers.rs b/crates/hyperswitch_connectors/src/connectors/worldpayvantiv/transformers.rs index 23f1904db9..5e80093332 100644 --- a/crates/hyperswitch_connectors/src/connectors/worldpayvantiv/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/worldpayvantiv/transformers.rs @@ -1223,7 +1223,7 @@ impl ..item.data })}, (_, _) => { Err(errors::ConnectorError::UnexpectedResponseError( - bytes::Bytes::from("Only one of 'sale_response' or 'authorisation_response' is expected, but both were received".to_string()), + bytes::Bytes::from("Only one of 'sale_response' or 'authorisation_response' is expected, but both were received".to_string()), ))? }, } diff --git a/crates/hyperswitch_connectors/src/connectors/zen/transformers.rs b/crates/hyperswitch_connectors/src/connectors/zen/transformers.rs index bcc9aaf3fd..9edea0928b 100644 --- a/crates/hyperswitch_connectors/src/connectors/zen/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/zen/transformers.rs @@ -347,6 +347,8 @@ impl | BankTransferData::DanamonVaBankTransfer { .. } | BankTransferData::LocalBankTransfer { .. } | BankTransferData::InstantBankTransfer {} + | BankTransferData::InstantBankTransferFinland { .. } + | BankTransferData::InstantBankTransferPoland { .. } | BankTransferData::MandiriVaBankTransfer { .. } => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Zen"), diff --git a/crates/hyperswitch_connectors/src/connectors/zsl/transformers.rs b/crates/hyperswitch_connectors/src/connectors/zsl/transformers.rs index 4856c5b337..7e5335860c 100644 --- a/crates/hyperswitch_connectors/src/connectors/zsl/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/zsl/transformers.rs @@ -163,6 +163,8 @@ impl TryFrom<&ZslRouterData<&types::PaymentsAuthorizeRouterData>> for ZslPayment | BankTransferData::MandiriVaBankTransfer { .. } | BankTransferData::Pix { .. } | BankTransferData::Pse {} + | BankTransferData::InstantBankTransferFinland {} + | BankTransferData::InstantBankTransferPoland {} | BankTransferData::InstantBankTransfer {} => { Err(errors::ConnectorError::NotImplemented( get_unimplemented_payment_method_error_message( diff --git a/crates/hyperswitch_connectors/src/utils.rs b/crates/hyperswitch_connectors/src/utils.rs index ca59dd6365..e23960e056 100644 --- a/crates/hyperswitch_connectors/src/utils.rs +++ b/crates/hyperswitch_connectors/src/utils.rs @@ -5501,6 +5501,8 @@ pub enum PaymentMethodDataType { NetworkTransactionIdAndCardDetails, DirectCarrierBilling, InstantBankTransfer, + InstantBankTransferFinland, + InstantBankTransferPoland, RevolutPay, } @@ -5651,6 +5653,12 @@ impl From for PaymentMethodDataType { payment_method_data::BankTransferData::InstantBankTransfer {} => { Self::InstantBankTransfer } + payment_method_data::BankTransferData::InstantBankTransferFinland {} => { + Self::InstantBankTransferFinland + } + payment_method_data::BankTransferData::InstantBankTransferPoland {} => { + Self::InstantBankTransferPoland + } }, PaymentMethodData::Crypto(_) => Self::Crypto, PaymentMethodData::MandatePayment => Self::MandatePayment, diff --git a/crates/hyperswitch_domain_models/src/payment_method_data.rs b/crates/hyperswitch_domain_models/src/payment_method_data.rs index 62688236a5..5433c486fb 100644 --- a/crates/hyperswitch_domain_models/src/payment_method_data.rs +++ b/crates/hyperswitch_domain_models/src/payment_method_data.rs @@ -640,6 +640,8 @@ pub enum BankTransferData { bank_code: Option, }, InstantBankTransfer {}, + InstantBankTransferFinland {}, + InstantBankTransferPoland {}, } #[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)] @@ -1552,6 +1554,12 @@ impl From for BankTransferData { api_models::payments::BankTransferData::InstantBankTransfer {} => { Self::InstantBankTransfer {} } + api_models::payments::BankTransferData::InstantBankTransferFinland {} => { + Self::InstantBankTransferFinland {} + } + api_models::payments::BankTransferData::InstantBankTransferPoland {} => { + Self::InstantBankTransferPoland {} + } } } } @@ -1592,6 +1600,8 @@ impl From for api_models::payments::additional_info::BankTrans }, )), BankTransferData::InstantBankTransfer {} => Self::InstantBankTransfer {}, + BankTransferData::InstantBankTransferFinland {} => Self::InstantBankTransferFinland {}, + BankTransferData::InstantBankTransferPoland {} => Self::InstantBankTransferPoland {}, } } } @@ -1844,6 +1854,12 @@ impl GetPaymentMethodType for BankTransferData { Self::Pse {} => api_enums::PaymentMethodType::Pse, Self::LocalBankTransfer { .. } => api_enums::PaymentMethodType::LocalBankTransfer, Self::InstantBankTransfer {} => api_enums::PaymentMethodType::InstantBankTransfer, + Self::InstantBankTransferFinland {} => { + api_enums::PaymentMethodType::InstantBankTransferFinland + } + Self::InstantBankTransferPoland {} => { + api_enums::PaymentMethodType::InstantBankTransferPoland + } } } } diff --git a/crates/kgraph_utils/src/mca.rs b/crates/kgraph_utils/src/mca.rs index c8fb11d125..2a2b2e5ae7 100644 --- a/crates/kgraph_utils/src/mca.rs +++ b/crates/kgraph_utils/src/mca.rs @@ -124,6 +124,12 @@ fn get_dir_value_payment_method( api_enums::PaymentMethodType::InstantBankTransfer => { Ok(dirval!(BankTransferType = InstantBankTransfer)) } + api_enums::PaymentMethodType::InstantBankTransferFinland => { + Ok(dirval!(BankTransferType = InstantBankTransferFinland)) + } + api_enums::PaymentMethodType::InstantBankTransferPoland => { + Ok(dirval!(BankTransferType = InstantBankTransferPoland)) + } api_enums::PaymentMethodType::SepaBankTransfer => { Ok(dirval!(BankTransferType = SepaBankTransfer)) } diff --git a/crates/kgraph_utils/src/transformers.rs b/crates/kgraph_utils/src/transformers.rs index f2de988c0f..4180d97218 100644 --- a/crates/kgraph_utils/src/transformers.rs +++ b/crates/kgraph_utils/src/transformers.rs @@ -274,6 +274,12 @@ impl IntoDirValue for (api_enums::PaymentMethodType, api_enums::PaymentMethod) { api_enums::PaymentMethodType::InstantBankTransfer => { Ok(dirval!(BankTransferType = InstantBankTransfer)) } + api_enums::PaymentMethodType::InstantBankTransferFinland => { + Ok(dirval!(BankTransferType = InstantBankTransferFinland)) + } + api_enums::PaymentMethodType::InstantBankTransferPoland => { + Ok(dirval!(BankTransferType = InstantBankTransferPoland)) + } api_enums::PaymentMethodType::PermataBankTransfer => { Ok(dirval!(BankTransferType = PermataBankTransfer)) } diff --git a/crates/payment_methods/src/configs/payment_connector_required_fields.rs b/crates/payment_methods/src/configs/payment_connector_required_fields.rs index fb516c9725..8b2829a6f7 100644 --- a/crates/payment_methods/src/configs/payment_connector_required_fields.rs +++ b/crates/payment_methods/src/configs/payment_connector_required_fields.rs @@ -3238,6 +3238,56 @@ fn get_bank_transfer_required_fields() -> HashMap matches!( payment_method_type, diff --git a/crates/router/src/connector/utils.rs b/crates/router/src/connector/utils.rs index d4961e724d..2a7026dd26 100644 --- a/crates/router/src/connector/utils.rs +++ b/crates/router/src/connector/utils.rs @@ -2535,6 +2535,8 @@ pub enum PaymentMethodDataType { NetworkToken, DirectCarrierBilling, InstantBankTransfer, + InstantBankTransferFinland, + InstantBankTransferPoland, RevolutPay, } @@ -2690,6 +2692,12 @@ impl From for PaymentMethodDataType { domain::payments::BankTransferData::InstantBankTransfer {} => { Self::InstantBankTransfer } + domain::payments::BankTransferData::InstantBankTransferFinland {} => { + Self::InstantBankTransferFinland + } + domain::payments::BankTransferData::InstantBankTransferPoland {} => { + Self::InstantBankTransferPoland + } } } domain::payments::PaymentMethodData::Crypto(_) => Self::Crypto, diff --git a/crates/router/src/types/transformers.rs b/crates/router/src/types/transformers.rs index 1f73db2c06..76b2ae6a5d 100644 --- a/crates/router/src/types/transformers.rs +++ b/crates/router/src/types/transformers.rs @@ -579,6 +579,8 @@ impl ForeignFrom for api_enums::PaymentMethod { | api_enums::PaymentMethodType::MandiriVa | api_enums::PaymentMethodType::LocalBankTransfer | api_enums::PaymentMethodType::InstantBankTransfer + | api_enums::PaymentMethodType::InstantBankTransferFinland + | api_enums::PaymentMethodType::InstantBankTransferPoland | api_enums::PaymentMethodType::SepaBankTransfer | api_enums::PaymentMethodType::Pix => Self::BankTransfer, api_enums::PaymentMethodType::Givex | api_enums::PaymentMethodType::PaySafeCard => { diff --git a/cypress-tests/cypress/e2e/configs/Payment/Adyen.js b/cypress-tests/cypress/e2e/configs/Payment/Adyen.js index 0669d46b3e..44b2bd062d 100644 --- a/cypress-tests/cypress/e2e/configs/Payment/Adyen.js +++ b/cypress-tests/cypress/e2e/configs/Payment/Adyen.js @@ -674,17 +674,6 @@ export const connectorDetails = { }, }, bank_transfer_pm: { - PaymentIntent: { - Request: { - currency: "BRL", - }, - Response: { - status: 200, - body: { - status: "requires_payment_method", - }, - }, - }, Pix: { Request: { payment_method: "bank_transfer", @@ -722,17 +711,6 @@ export const connectorDetails = { }, }, bank_redirect_pm: { - PaymentIntent: { - Request: { - currency: "EUR", - }, - Response: { - status: 200, - body: { - status: "requires_payment_method", - }, - }, - }, Ideal: { Request: { payment_method: "bank_redirect", diff --git a/cypress-tests/cypress/e2e/configs/Payment/Commons.js b/cypress-tests/cypress/e2e/configs/Payment/Commons.js index b14002f6d0..9ad5208536 100644 --- a/cypress-tests/cypress/e2e/configs/Payment/Commons.js +++ b/cypress-tests/cypress/e2e/configs/Payment/Commons.js @@ -1,5 +1,5 @@ // This file is the default. To override, add to connector.js -import { getCustomExchange } from "./Modifiers"; +import { getCustomExchange, getCurrency } from "./Modifiers"; export const customerAcceptance = { acceptance_type: "offline", @@ -190,6 +190,20 @@ export const payment_methods_enabled = [ recurring_enabled: false, installment_payment_enabled: true, }, + { + payment_method_type: "instant_bank_transfer_finland", + minimum_amount: 1, + maximum_amount: 68607706, + recurring_enabled: true, + installment_payment_enabled: true, + }, + { + payment_method_type: "instant_bank_transfer_poland", + minimum_amount: 1, + maximum_amount: 68607706, + recurring_enabled: true, + installment_payment_enabled: true, + }, ], }, { @@ -316,17 +330,18 @@ export const payment_methods_enabled = [ export const connectorDetails = { bank_transfer_pm: { - PaymentIntent: getCustomExchange({ - Request: { - currency: "BRL", - }, - Response: { - status: 200, - body: { - status: "requires_payment_method", + PaymentIntent: (paymentMethodType) => + getCustomExchange({ + Request: { + currency: getCurrency(paymentMethodType), }, - }, - }), + Response: { + status: 200, + body: { + status: "requires_payment_method", + }, + }, + }), Pix: getCustomExchange({ Request: { payment_method: "bank_transfer", @@ -352,19 +367,70 @@ export const connectorDetails = { currency: "BRL", }, }), - }, - bank_redirect_pm: { - PaymentIntent: getCustomExchange({ + InstantBankTransferFinland: getCustomExchange({ Request: { + payment_method: "bank_transfer", + payment_method_type: "instant_bank_transfer_finland", + payment_method_data: { + bank_transfer: { + instant_bank_transfer_finland: {}, + }, + }, + billing: { + address: { + line1: "1467", + line2: "Harrison Street", + line3: "Harrison Street", + city: "San Fransico", + state: "California", + zip: "94122", + country: "FI", + first_name: "john", + last_name: "doe", + }, + }, currency: "EUR", }, - Response: { - status: 200, - body: { - status: "requires_payment_method", + }), + InstantBankTransferPoland: getCustomExchange({ + Request: { + payment_method: "bank_transfer", + payment_method_type: "instant_bank_transfer_poland", + payment_method_data: { + bank_transfer: { + instant_bank_transfer_poland: {}, + }, }, + billing: { + address: { + line1: "1467", + line2: "Harrison Street", + line3: "Harrison Street", + city: "San Fransico", + state: "California", + zip: "94122", + country: "PL", + first_name: "john", + last_name: "doe", + }, + }, + currency: "PLN", }, }), + }, + bank_redirect_pm: { + PaymentIntent: (paymentMethodType) => + getCustomExchange({ + Request: { + currency: getCurrency(paymentMethodType), + }, + Response: { + status: 200, + body: { + status: "requires_payment_method", + }, + }, + }), Ideal: getCustomExchange({ Request: { payment_method: "bank_redirect", @@ -491,17 +557,6 @@ export const connectorDetails = { }, }, }), - BlikPaymentIntent: getCustomExchange({ - Request: { - currency: "PLN", - }, - Response: { - status: 200, - body: { - status: "requires_payment_method", - }, - }, - }), Blik: getCustomExchange({ Request: { payment_method: "bank_redirect", diff --git a/cypress-tests/cypress/e2e/configs/Payment/Facilitapay.js b/cypress-tests/cypress/e2e/configs/Payment/Facilitapay.js index 8b8a449bed..2bab5f65eb 100644 --- a/cypress-tests/cypress/e2e/configs/Payment/Facilitapay.js +++ b/cypress-tests/cypress/e2e/configs/Payment/Facilitapay.js @@ -34,17 +34,6 @@ export const connectorDetails = { }, }, bank_transfer_pm: { - PaymentIntent: { - Request: { - currency: "BRL", - }, - Response: { - status: 200, - body: { - status: "requires_payment_method", - }, - }, - }, Pix: getCustomExchange({ Request: { payment_method: "bank_transfer", diff --git a/cypress-tests/cypress/e2e/configs/Payment/Fiserv.js b/cypress-tests/cypress/e2e/configs/Payment/Fiserv.js index 6ce0a99d27..7c2ea2284b 100644 --- a/cypress-tests/cypress/e2e/configs/Payment/Fiserv.js +++ b/cypress-tests/cypress/e2e/configs/Payment/Fiserv.js @@ -914,20 +914,6 @@ export const connectorDetails = { }, }, }, - // Add support for bank redirects if needed - bank_redirect_pm: { - PaymentIntent: { - Request: { - currency: "EUR", - }, - Response: { - status: 200, - body: { - status: "requires_payment_method", - }, - }, - }, - }, pm_list: { PmListResponse: { PmListNull: { diff --git a/cypress-tests/cypress/e2e/configs/Payment/ItauBank.js b/cypress-tests/cypress/e2e/configs/Payment/ItauBank.js index d419a466ec..0496f330a9 100644 --- a/cypress-tests/cypress/e2e/configs/Payment/ItauBank.js +++ b/cypress-tests/cypress/e2e/configs/Payment/ItauBank.js @@ -46,17 +46,6 @@ export const connectorDetails = { }, }, bank_transfer_pm: { - PaymentIntent: { - Request: { - currency: "BRL", - }, - Response: { - status: 200, - body: { - status: "requires_payment_method", - }, - }, - }, Pix: { Request: { payment_method: "bank_transfer", diff --git a/cypress-tests/cypress/e2e/configs/Payment/Modifiers.js b/cypress-tests/cypress/e2e/configs/Payment/Modifiers.js index 4a6ebb0690..751800f613 100644 --- a/cypress-tests/cypress/e2e/configs/Payment/Modifiers.js +++ b/cypress-tests/cypress/e2e/configs/Payment/Modifiers.js @@ -80,18 +80,19 @@ const getUnsupportedExchange = () => ({ }); // Const to get PaymentExchange with overridden properties -export const getCustomExchange = (overrides) => { +export const getCustomExchange = (overrides, inheritFrom = null) => { const defaultExchange = getDefaultExchange(); + const baseExchange = inheritFrom || defaultExchange; return { - ...defaultExchange, + ...baseExchange, ...(overrides.Configs ? { Configs: overrides.Configs } : {}), Request: { - ...defaultExchange.Request, + ...baseExchange.Request, ...(overrides.Request || {}), }, Response: { - ...defaultExchange.Response, + ...baseExchange.Response, ...(overrides.Response || {}), }, ...(overrides.ResponseCustom @@ -104,3 +105,26 @@ export const getCustomExchange = (overrides) => { export const updateDefaultStatusCode = () => { return getUnsupportedExchange().Response; }; + +// Currency map with logical grouping +const CURRENCY_MAP = { + // Polish payment methods + Blik: "PLN", + InstantBankTransferPoland: "PLN", + + // Brazilian payment methods + Pix: "BRL", + + // European payment methods (EUR) + Eps: "EUR", + Giropay: "EUR", + Ideal: "EUR", + InstantBankTransferFinland: "EUR", + Klarna: "EUR", + Przelewy24: "EUR", + Sofort: "EUR", +}; + +export const getCurrency = (paymentMethodType) => { + return CURRENCY_MAP[paymentMethodType] || "USD"; +}; diff --git a/cypress-tests/cypress/e2e/configs/Payment/Paypal.js b/cypress-tests/cypress/e2e/configs/Payment/Paypal.js index df24dfba98..889bf51498 100644 --- a/cypress-tests/cypress/e2e/configs/Payment/Paypal.js +++ b/cypress-tests/cypress/e2e/configs/Payment/Paypal.js @@ -1,5 +1,3 @@ -import { getCustomExchange } from "./Modifiers"; - const successfulNo3DSCardDetails = { card_number: "4012000033330026", card_exp_month: "01", @@ -635,17 +633,6 @@ export const connectorDetails = { }, }, bank_redirect_pm: { - PaymentIntent: getCustomExchange({ - Request: { - currency: "EUR", - }, - Response: { - status: 200, - body: { - status: "requires_payment_method", - }, - }, - }), Ideal: { Request: { payment_method: "bank_redirect", diff --git a/cypress-tests/cypress/e2e/configs/Payment/Stripe.js b/cypress-tests/cypress/e2e/configs/Payment/Stripe.js index b7e7ef5728..787534499c 100644 --- a/cypress-tests/cypress/e2e/configs/Payment/Stripe.js +++ b/cypress-tests/cypress/e2e/configs/Payment/Stripe.js @@ -790,17 +790,6 @@ export const connectorDetails = { }, }, bank_redirect_pm: { - PaymentIntent: getCustomExchange({ - Request: { - currency: "EUR", - }, - Response: { - status: 200, - body: { - status: "requires_payment_method", - }, - }, - }), Ideal: { Request: { payment_method: "bank_redirect", diff --git a/cypress-tests/cypress/e2e/configs/Payment/Trustpay.js b/cypress-tests/cypress/e2e/configs/Payment/Trustpay.js index eaf47bf8d7..a2203d4f98 100644 --- a/cypress-tests/cypress/e2e/configs/Payment/Trustpay.js +++ b/cypress-tests/cypress/e2e/configs/Payment/Trustpay.js @@ -1,4 +1,7 @@ -import { customerAcceptance } from "./Commons"; +import { + customerAcceptance, + connectorDetails as commonConnectorDetails, +} from "./Commons"; import { getCustomExchange } from "./Modifiers"; const successfulNo3DSCardDetails = { @@ -530,17 +533,6 @@ export const connectorDetails = { }, }, bank_redirect_pm: { - PaymentIntent: getCustomExchange({ - Request: { - currency: "EUR", - }, - Response: { - status: 200, - body: { - status: "requires_payment_method", - }, - }, - }), Ideal: { Request: { payment_method: "bank_redirect", @@ -723,4 +715,28 @@ export const connectorDetails = { }, }, }, + bank_transfer_pm: { + InstantBankTransferFinland: getCustomExchange( + { + Response: { + status: 200, + body: { + status: "requires_customer_action", + }, + }, + }, + commonConnectorDetails.bank_transfer_pm.InstantBankTransferFinland + ), + InstantBankTransferPoland: getCustomExchange( + { + Response: { + status: 200, + body: { + status: "requires_customer_action", + }, + }, + }, + commonConnectorDetails.bank_transfer_pm.InstantBankTransferPoland + ), + }, }; diff --git a/cypress-tests/cypress/e2e/spec/Payment/00017-BankTransfers.cy.js b/cypress-tests/cypress/e2e/spec/Payment/00017-BankTransfers.cy.js index 49f93aaa10..46c204d789 100644 --- a/cypress-tests/cypress/e2e/spec/Payment/00017-BankTransfers.cy.js +++ b/cypress-tests/cypress/e2e/spec/Payment/00017-BankTransfers.cy.js @@ -27,7 +27,7 @@ describe("Bank Transfers", () => { it("create-payment-call-test", () => { const data = getConnectorDetails(globalState.get("connectorId"))[ "bank_transfer_pm" - ]["PaymentIntent"]; + ]["PaymentIntent"]("Pix"); cy.createPaymentIntentTest( fixtures.createPaymentBody, @@ -70,4 +70,116 @@ describe("Bank Transfers", () => { ); }); }); + + context("Bank transfer - Instant Bank Transfer Finland forward flow", () => { + let shouldContinue = true; // variable that will be used to skip tests if a previous test fails + + beforeEach(function () { + if (!shouldContinue) { + this.skip(); + } + }); + + it("create-payment-call-test", () => { + const data = getConnectorDetails(globalState.get("connectorId"))[ + "bank_transfer_pm" + ]["PaymentIntent"]("InstantBankTransferFinland"); + + cy.createPaymentIntentTest( + fixtures.createPaymentBody, + data, + "three_ds", + "automatic", + globalState + ); + + if (shouldContinue) shouldContinue = utils.should_continue_further(data); + }); + + it("payment_methods-call-test", () => { + cy.paymentMethodsCallTest(globalState); + }); + + it("Confirm bank transfer", () => { + const data = getConnectorDetails(globalState.get("connectorId"))[ + "bank_transfer_pm" + ]["InstantBankTransferFinland"]; + + cy.confirmBankTransferCallTest( + fixtures.confirmBody, + data, + true, + globalState + ); + + if (shouldContinue) shouldContinue = utils.should_continue_further(data); + }); + + it("Handle bank transfer redirection", () => { + const expected_redirection = fixtures.confirmBody["return_url"]; + const payment_method_type = globalState.get("paymentMethodType"); + + cy.handleBankTransferRedirection( + globalState, + payment_method_type, + expected_redirection + ); + }); + }); + + context("Bank transfer - Instant Bank Transfer Poland forward flow", () => { + let shouldContinue = true; // variable that will be used to skip tests if a previous test fails + + beforeEach(function () { + if (!shouldContinue) { + this.skip(); + } + }); + + it("create-payment-call-test", () => { + const data = getConnectorDetails(globalState.get("connectorId"))[ + "bank_transfer_pm" + ]["PaymentIntent"]("InstantBankTransferPoland"); + + cy.createPaymentIntentTest( + fixtures.createPaymentBody, + data, + "three_ds", + "automatic", + globalState + ); + + if (shouldContinue) shouldContinue = utils.should_continue_further(data); + }); + + it("payment_methods-call-test", () => { + cy.paymentMethodsCallTest(globalState); + }); + + it("Confirm bank transfer", () => { + const data = getConnectorDetails(globalState.get("connectorId"))[ + "bank_transfer_pm" + ]["InstantBankTransferPoland"]; + + cy.confirmBankTransferCallTest( + fixtures.confirmBody, + data, + true, + globalState + ); + + if (shouldContinue) shouldContinue = utils.should_continue_further(data); + }); + + it("Handle bank transfer redirection", () => { + const expected_redirection = fixtures.confirmBody["return_url"]; + const payment_method_type = globalState.get("paymentMethodType"); + + cy.handleBankTransferRedirection( + globalState, + payment_method_type, + expected_redirection + ); + }); + }); }); diff --git a/cypress-tests/cypress/e2e/spec/Payment/00018-BankRedirect.cy.js b/cypress-tests/cypress/e2e/spec/Payment/00018-BankRedirect.cy.js index 9b7bc56986..4e27e7e504 100644 --- a/cypress-tests/cypress/e2e/spec/Payment/00018-BankRedirect.cy.js +++ b/cypress-tests/cypress/e2e/spec/Payment/00018-BankRedirect.cy.js @@ -27,7 +27,7 @@ describe("Bank Redirect tests", () => { it("create-payment-call-test", () => { const data = getConnectorDetails(globalState.get("connectorId"))[ "bank_redirect_pm" - ]["BlikPaymentIntent"]; + ]["PaymentIntent"]("Blik"); cy.createPaymentIntentTest( fixtures.createPaymentBody, @@ -77,7 +77,7 @@ describe("Bank Redirect tests", () => { it("create-payment-call-test", () => { const data = getConnectorDetails(globalState.get("connectorId"))[ "bank_redirect_pm" - ]["PaymentIntent"]; + ]["PaymentIntent"]("Eps"); cy.createPaymentIntentTest( fixtures.createPaymentBody, @@ -139,7 +139,7 @@ describe("Bank Redirect tests", () => { it("create-payment-call-test", () => { const data = getConnectorDetails(globalState.get("connectorId"))[ "bank_redirect_pm" - ]["PaymentIntent"]; + ]["PaymentIntent"]("Ideal"); cy.createPaymentIntentTest( fixtures.createPaymentBody, @@ -199,7 +199,7 @@ describe("Bank Redirect tests", () => { it("create-payment-call-test", () => { const data = getConnectorDetails(globalState.get("connectorId"))[ "bank_redirect_pm" - ]["PaymentIntent"]; + ]["PaymentIntent"]("Sofort"); cy.createPaymentIntentTest( fixtures.createPaymentBody, @@ -259,7 +259,7 @@ describe("Bank Redirect tests", () => { it("create-payment-call-test", () => { const data = getConnectorDetails(globalState.get("connectorId"))[ "bank_redirect_pm" - ]["PaymentIntent"]; + ]["PaymentIntent"]("Przelewy24"); cy.createPaymentIntentTest( fixtures.createPaymentBody, diff --git a/cypress-tests/cypress/support/commands.js b/cypress-tests/cypress/support/commands.js index e94b94ea6c..18b3fba804 100644 --- a/cypress-tests/cypress/support/commands.js +++ b/cypress-tests/cypress/support/commands.js @@ -1897,6 +1897,7 @@ Cypress.Commands.add( "nextActionUrl", response.body.next_action.redirect_to_url ); + globalState.set("nextActionType", "redirect_to_url"); break; } } else { diff --git a/cypress-tests/cypress/support/redirectionHandler.js b/cypress-tests/cypress/support/redirectionHandler.js index d0ff39490e..5db3d02a78 100644 --- a/cypress-tests/cypress/support/redirectionHandler.js +++ b/cypress-tests/cypress/support/redirectionHandler.js @@ -72,6 +72,8 @@ function bankTransferRedirection( paymentMethodType, nextActionType ) { + let verifyUrl = true; // Default to true, can be set to false based on conditions + switch (nextActionType) { case "qr_code_url": cy.request(redirectionUrl.href).then((response) => { @@ -85,12 +87,12 @@ function bankTransferRedirection( }); break; default: - verifyReturnUrl(redirectionUrl, expectedUrl, true); + verifyReturnUrl(redirectionUrl, expectedUrl, verifyUrl); // expected_redirection can be used here to handle other payment methods } break; default: - verifyReturnUrl(redirectionUrl, expectedUrl, true); + verifyReturnUrl(redirectionUrl, expectedUrl, verifyUrl); } }); break; @@ -104,7 +106,7 @@ function bankTransferRedirection( }); break; default: - verifyReturnUrl(redirectionUrl, expectedUrl, true); + verifyReturnUrl(redirectionUrl, expectedUrl, verifyUrl); } break; case "itaubank": @@ -115,13 +117,61 @@ function bankTransferRedirection( }); break; default: - verifyReturnUrl(redirectionUrl, expectedUrl, true); + verifyReturnUrl(redirectionUrl, expectedUrl, verifyUrl); } break; default: - verifyReturnUrl(redirectionUrl, expectedUrl, true); + verifyReturnUrl(redirectionUrl, expectedUrl, verifyUrl); } break; + case "redirect_to_url": + cy.visit(redirectionUrl.href); + waitForRedirect(redirectionUrl.href); // Wait for the first redirect + + handleFlow( + redirectionUrl, + expectedUrl, + connectorId, + ({ connectorId, paymentMethodType }) => { + switch (connectorId) { + case "trustpay": + // Suppress cross-origin JavaScript errors from TrustPay's website + cy.on("uncaught:exception", (err) => { + // Trustpay javascript devs have skill issues + if ( + err.message.includes("$ is not defined") || + err.message.includes("mainController is not defined") || + err.message.includes("jQuery") || + err.message.includes("aapi.trustpay.eu") + ) { + return false; // Prevent test failure + } + return true; + }); + + // Trustpay bank redirects never reach the terminal state + switch (paymentMethodType) { + case "instant_bank_transfer_finland": + cy.log("Trustpay Instant Bank Transfer through Finland"); + break; + case "instant_bank_transfer_poland": + cy.log("Trustpay Instant Bank Transfer through Finland"); + break; + default: + throw new Error( + `Unsupported Trustpay payment method type: ${paymentMethodType}` + ); + } + verifyUrl = false; + break; + default: + verifyReturnUrl(redirectionUrl, expectedUrl, verifyUrl); + } + }, + { paymentMethodType } + ); + break; + default: verifyReturnUrl(redirectionUrl, expectedUrl, true); } diff --git a/loadtest/config/development.toml b/loadtest/config/development.toml index b3c6683f0b..160e6490ef 100644 --- a/loadtest/config/development.toml +++ b/loadtest/config/development.toml @@ -362,6 +362,8 @@ open_banking_uk = { country = "DE,GB,AT,BE,CY,EE,ES,FI,FR,GR,HR,IE,IT,LT,LU,LV,M [pm_filters.trustpay] instant_bank_transfer = { country = "CZ,SK,GB,AT,DE,IT", currency = "CZK, EUR, GBP" } +instant_bank_transfer_poland = { country = "PL", currency = "PLN" } +instant_bank_transfer_finland = { country = "FI", currency = "EUR" } sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,GB", currency = "EUR" } [pm_filters.razorpay]