diff --git a/.github/testcases/ui_tests.json b/.github/testcases/ui_tests.json index ec36f5bdf1..83805db28b 100644 --- a/.github/testcases/ui_tests.json +++ b/.github/testcases/ui_tests.json @@ -1240,5 +1240,41 @@ "name": "card 3ds success multisafepay", "connector": "multisafepay", "request": "{\"amount\":10000,\"currency\":\"USD\",\"confirm\":true,\"capture_method\":\"automatic\",\"capture_on\":\"2022-09-10T10:11:12Z\",\"customer_id\":\"StripeCustomer\",\"email\":\"abcdef123@gmail.com\",\"name\":\"John Doe\",\"phone\":\"999999999\",\"phone_country_code\":\"+65\",\"description\":\"Its my first payment request\",\"authentication_type\":\"three_ds\",\"return_url\":\"https://hs-payments-test.netlify.app/payments\",\"setup_future_usage\":\"off_session\",\"billing\":{\"address\":{\"line1\":\"1467\",\"line2\":\"Harrison Street\",\"line3\":\"Harrison Street\",\"city\":\"San Fransico\",\"state\":\"California\",\"zip\":\"94122\",\"country\":\"US\",\"first_name\":\"John\",\"last_name\":\"Doe\"}},\"browser_info\":{\"user_agent\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36\",\"accept_header\":\"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\",\"language\":\"nl-NL\",\"color_depth\":24,\"screen_height\":723,\"screen_width\":1536,\"time_zone\":0,\"java_enabled\":true,\"java_script_enabled\":true,\"ip_address\":\"127.0.0.1\"},\"shipping\":{\"address\":{\"line1\":\"1467\",\"line2\":\"Harrison Street\",\"line3\":\"Harrison Street\",\"city\":\"San Fransico\",\"state\":\"California\",\"zip\":\"94122\",\"country\":\"US\",\"first_name\":\"John\",\"last_name\":\"Doe\"}},\"statement_descriptor_name\":\"joseph\",\"statement_descriptor_suffix\":\"JS\",\"metadata\":{\"udf1\":\"value1\",\"new_customer\":\"true\",\"login_date\":\"2019-09-10T10:11:12Z\"},\"payment_method\":\"card\",\"payment_method_data\":{\"card\":{\"card_number\":\"5500000000000004\",\"card_exp_month\":\"10\",\"card_exp_year\":\"25\",\"card_holder_name\":\"CL-BRW1\",\"card_cvc\":\"123\"}}}" + }, + "208": { + "id": 208, + "name": "aci EPS success", + "connector": "aci", + "request": "{\"amount\":6540,\"currency\":\"EUR\",\"confirm\":true,\"capture_method\":\"automatic\",\"capture_on\":\"2022-09-10T10:11:12Z\",\"amount_to_capture\":6540,\"customer_id\":\"StripeCustomer\",\"email\":\"guest@example.com\",\"name\":\"John Doe\",\"phone\":\"999999999\",\"phone_country_code\":\"+1\",\"description\":\"Its my first payment request\",\"authentication_type\":\"no_three_ds\",\"return_url\":\"https://hs-payments-test.netlify.app/payments\",\"payment_method\":\"bank_redirect\",\"payment_method_type\":\"eps\",\"payment_method_data\":{\"bank_redirect\":{\"eps\":{\"billing_details\":{\"billing_name\":\"John Doe\",\"email\":\"test@example.com\"},\"bank_name\":\"ing\"}}},\"billing\":{\"address\":{\"line1\":\"1467\",\"line2\":\"Harrison Street\",\"line3\":\"Harrison Street\",\"city\":\"San Fransico\",\"state\":\"California\",\"zip\":\"94122\",\"country\":\"US\",\"first_name\":\"joseph\",\"last_name\":\"Doe\"},\"phone\":{\"number\":\"8056594427\",\"country_code\":\"+91\"}},\"shipping\":{\"address\":{\"line1\":\"1467\",\"line2\":\"Harrison Street\",\"line3\":\"Harrison Street\",\"city\":\"San Fransico\",\"state\":\"California\",\"zip\":\"94122\",\"country\":\"US\",\"first_name\":\"joseph\",\"last_name\":\"Doe\"},\"phone\":{\"number\":\"8056594427\",\"country_code\":\"+91\"}},\"statement_descriptor_name\":\"joseph\",\"statement_descriptor_suffix\":\"JS\",\"metadata\":{\"udf1\":\"value1\",\"new_customer\":\"true\",\"login_date\":\"2019-09-10T10:11:12Z\"}}" + }, + "209": { + "id": 209, + "name": "aci GIROPAY success", + "connector": "aci", + "request": "{\"amount\":6540,\"currency\":\"EUR\",\"confirm\":true,\"capture_method\":\"automatic\",\"capture_on\":\"2022-09-10T10:11:12Z\",\"amount_to_capture\":6540,\"customer_id\":\"StripeCustomer\",\"email\":\"guest@example.com\",\"name\":\"John Doe\",\"phone\":\"999999999\",\"phone_country_code\":\"+1\",\"description\":\"Its my first payment request\",\"authentication_type\":\"no_three_ds\",\"return_url\":\"https://hs-payments-test.netlify.app/payments\",\"payment_method\":\"bank_redirect\",\"payment_method_type\":\"giropay\",\"payment_method_data\":{\"bank_redirect\":{\"giropay\":{\"billing_details\":{\"billing_name\":\"John Doe\",\"email\":\"test@example.com\"},\"bank_name\":\"ing\"}}},\"billing\":{\"address\":{\"line1\":\"1467\",\"line2\":\"Harrison Street\",\"line3\":\"Harrison Street\",\"city\":\"San Fransico\",\"state\":\"California\",\"zip\":\"94122\",\"country\":\"US\",\"first_name\":\"joseph\",\"last_name\":\"Doe\"},\"phone\":{\"number\":\"8056594427\",\"country_code\":\"+91\"}},\"shipping\":{\"address\":{\"line1\":\"1467\",\"line2\":\"Harrison Street\",\"line3\":\"Harrison Street\",\"city\":\"San Fransico\",\"state\":\"California\",\"zip\":\"94122\",\"country\":\"US\",\"first_name\":\"joseph\",\"last_name\":\"Doe\"},\"phone\":{\"number\":\"8056594427\",\"country_code\":\"+91\"}},\"statement_descriptor_name\":\"joseph\",\"statement_descriptor_suffix\":\"JS\",\"metadata\":{\"udf1\":\"value1\",\"new_customer\":\"true\",\"login_date\":\"2019-09-10T10:11:12Z\"}}" + }, + "210": { + "id": 210, + "name": "Adyen Swish", + "connector": "adyen_uk", + "request": "{\"amount\":6540,\"currency\":\"SEK\",\"confirm\":true,\"capture_method\":\"automatic\",\"capture_on\":\"2022-09-10T10:11:12Z\",\"amount_to_capture\":6540,\"customer_id\":\"StripeCustomer\",\"email\":\"guest@example.com\",\"name\":\"John Doe\",\"phone\":\"999999999\",\"phone_country_code\":\"+1\",\"description\":\"Its my first payment request\",\"authentication_type\":\"no_three_ds\",\"return_url\":\"https://google.com/\",\"payment_method\":\"wallet\",\"payment_method_type\":\"swish\",\"payment_method_data\":{\"wallet\":{\"swish\":{}}}}" + }, + "211": { + "id": 211, + "name": "aci IDEAL success", + "connector": "aci", + "request": "{\"amount\":6540,\"currency\":\"EUR\",\"confirm\":true,\"capture_method\":\"automatic\",\"capture_on\":\"2022-09-10T10:11:12Z\",\"amount_to_capture\":6540,\"customer_id\":\"StripeCustomer\",\"email\":\"guest@example.com\",\"name\":\"John Doe\",\"phone\":\"999999999\",\"phone_country_code\":\"+1\",\"description\":\"Its my first payment request\",\"authentication_type\":\"no_three_ds\",\"return_url\":\"https://hs-payments-test.netlify.app/payments\",\"payment_method\":\"bank_redirect\",\"payment_method_type\":\"ideal\",\"payment_method_data\":{\"bank_redirect\":{\"ideal\":{\"billing_details\":{\"billing_name\":\"John Doe\",\"email\":\"test@example.com\"},\"bank_name\":\"ing\"}}},\"billing\":{\"address\":{\"line1\":\"1467\",\"line2\":\"Harrison Street\",\"line3\":\"Harrison Street\",\"city\":\"San Fransico\",\"state\":\"California\",\"zip\":\"94122\",\"country\":\"US\",\"first_name\":\"joseph\",\"last_name\":\"Doe\"},\"phone\":{\"number\":\"8056594427\",\"country_code\":\"+91\"}},\"shipping\":{\"address\":{\"line1\":\"1467\",\"line2\":\"Harrison Street\",\"line3\":\"Harrison Street\",\"city\":\"San Fransico\",\"state\":\"California\",\"zip\":\"94122\",\"country\":\"US\",\"first_name\":\"joseph\",\"last_name\":\"Doe\"},\"phone\":{\"number\":\"8056594427\",\"country_code\":\"+91\"}},\"statement_descriptor_name\":\"joseph\",\"statement_descriptor_suffix\":\"JS\",\"metadata\":{\"udf1\":\"value1\",\"new_customer\":\"true\",\"login_date\":\"2019-09-10T10:11:12Z\"}}" + }, + "212": { + "id": 212, + "name": "aci SOFORT success", + "connector": "aci", + "request": "{\"amount\":6540,\"currency\":\"EUR\",\"confirm\":true,\"capture_method\":\"automatic\",\"capture_on\":\"2022-09-10T10:11:12Z\",\"amount_to_capture\":6540,\"customer_id\":\"StripeCustomer\",\"email\":\"guest@example.com\",\"name\":\"John Doe\",\"phone\":\"999999999\",\"phone_country_code\":\"+1\",\"description\":\"Its my first payment request\",\"authentication_type\":\"no_three_ds\",\"return_url\":\"https://hs-payments-test.netlify.app/payments\",\"payment_method\":\"bank_redirect\",\"payment_method_type\":\"sofort\",\"payment_method_data\":{\"bank_redirect\":{\"sofort\":{\"billing_details\":{\"billing_name\":\"John Doe\",\"email\":\"test@example.com\"},\"bank_name\":\"ing\",\"preferred_language\":\"en\",\"country\":\"NL\"}}},\"billing\":{\"address\":{\"line1\":\"1467\",\"line2\":\"Harrison Street\",\"line3\":\"Harrison Street\",\"city\":\"San Fransico\",\"state\":\"California\",\"zip\":\"94122\",\"country\":\"US\",\"first_name\":\"joseph\",\"last_name\":\"Doe\"},\"phone\":{\"number\":\"8056594427\",\"country_code\":\"+91\"}},\"shipping\":{\"address\":{\"line1\":\"1467\",\"line2\":\"Harrison Street\",\"line3\":\"Harrison Street\",\"city\":\"San Fransico\",\"state\":\"California\",\"zip\":\"94122\",\"country\":\"US\",\"first_name\":\"joseph\",\"last_name\":\"Doe\"},\"phone\":{\"number\":\"8056594427\",\"country_code\":\"+91\"}},\"statement_descriptor_name\":\"joseph\",\"statement_descriptor_suffix\":\"JS\",\"metadata\":{\"udf1\":\"value1\",\"new_customer\":\"true\",\"login_date\":\"2019-09-10T10:11:12Z\"}}" + }, + "213": { + "id": 213, + "name": "ACI ALIPAY succes", + "connector": "aci", + "request": "{\"amount\":7000,\"currency\":\"EUR\",\"confirm\":true,\"capture_method\":\"automatic\",\"capture_on\":\"2022-09-10T10:11:12Z\",\"customer_id\":\"StripeCustomer\",\"email\":\"abcdef123@gmail.com\",\"name\":\"John Doe\",\"phone\":\"999999999\",\"phone_country_code\":\"+65\",\"description\":\"Its my first payment request\",\"authentication_type\":\"three_ds\",\"return_url\":\"https://hs-payments-test.netlify.app/payments\",\"billing\":{\"address\":{\"line1\":\"1467\",\"line2\":\"Harrison Street\",\"line3\":\"Harrison Street\",\"city\":\"San Fransico\",\"state\":\"California\",\"zip\":\"94122\",\"first_name\":\"John\",\"last_name\":\"Doe\",\"country\":\"AT\"}},\"shipping\":{\"address\":{\"line1\":\"1467\",\"line2\":\"Harrison Street\",\"line3\":\"Harrison Street\",\"city\":\"San Fransico\",\"state\":\"California\",\"zip\":\"94122\",\"country\":\"SE\",\"first_name\":\"John\",\"last_name\":\"Doe\"}},\"statement_descriptor_name\":\"joseph\",\"statement_descriptor_suffix\":\"JS\",\"metadata\":{\"order_details\":{\"product_name\":\"Socks\",\"amount\":7000,\"quantity\":1}},\"payment_method\":\"wallet\",\"payment_method_type\":\"ali_pay\",\"payment_experience\":\"redirect_to_url\",\"payment_method_data\":{\"wallet\":{\"ali_pay_redirect\":{}}}}" } } diff --git a/.github/workflows/connector-ui-sanity-tests.yml b/.github/workflows/connector-ui-sanity-tests.yml index d978d1093a..1b5acee696 100644 --- a/.github/workflows/connector-ui-sanity-tests.yml +++ b/.github/workflows/connector-ui-sanity-tests.yml @@ -70,7 +70,8 @@ jobs: connector: # do not use more than 2 runners, try to group less time taking connectors together - stripe,airwallex,bluesnap,checkout,trustpay_3ds,payu - - adyen_uk,shift4,worldline,multisafepay,paypal,mollie + - adyen_uk,shift4,worldline,multisafepay,paypal,mollie,aci + steps: - name: Ignore Tests incase of pull request diff --git a/crates/router/tests/connectors/aci_ui.rs b/crates/router/tests/connectors/aci_ui.rs new file mode 100644 index 0000000000..ecc41178a1 --- /dev/null +++ b/crates/router/tests/connectors/aci_ui.rs @@ -0,0 +1,260 @@ +use serial_test::serial; +use thirtyfour::{prelude::*, WebDriver}; + +use crate::{selenium::*, tester}; + +struct AciSeleniumTest; + +impl SeleniumTest for AciSeleniumTest { + fn get_connector_name(&self) -> String { + "aci".to_string() + } +} + +async fn should_make_aci_card_mandate_payment(web_driver: WebDriver) -> Result<(), WebDriverError> { + let conn = AciSeleniumTest {}; + conn.make_redirection_payment( + web_driver, + vec![ + Event::Trigger(Trigger::Goto(&format!("{CHEKOUT_BASE_URL}/saved/180"))), + Event::Trigger(Trigger::Click(By::Id("card-submit-btn"))), + Event::Assert(Assert::IsPresent("succeeded")), + Event::Assert(Assert::IsPresent("Mandate ID")), + Event::Assert(Assert::IsPresent("man_")), // mandate id starting with man_ + Event::Trigger(Trigger::Click(By::Css("a.btn"))), + Event::Trigger(Trigger::Click(By::Id("card-submit-btn"))), + Event::Assert(Assert::IsPresent("succeeded")), + ], + ) + .await?; + Ok(()) +} + +async fn should_make_aci_alipay_payment(web_driver: WebDriver) -> Result<(), WebDriverError> { + let conn = AciSeleniumTest {}; + conn.make_redirection_payment( + web_driver, + vec![ + Event::Trigger(Trigger::Goto(&format!("{CHEKOUT_BASE_URL}/saved/213"))), + Event::Trigger(Trigger::Click(By::Id("card-submit-btn"))), + Event::Trigger(Trigger::Click(By::Id("submit-success"))), + Event::Assert(Assert::IsPresent("succeeded")), + ], + ) + .await?; + Ok(()) +} + +async fn should_make_aci_interac_payment(web_driver: WebDriver) -> Result<(), WebDriverError> { + let conn = AciSeleniumTest {}; + conn.make_redirection_payment( + web_driver, + vec![ + Event::Trigger(Trigger::Goto(&format!("{CHEKOUT_BASE_URL}/saved/14"))), + Event::Trigger(Trigger::Click(By::Id("card-submit-btn"))), + Event::Trigger(Trigger::Click(By::Css("input[value='Continue payment']"))), + Event::Trigger(Trigger::Click(By::Css("input[value='Confirm']"))), + Event::Assert(Assert::IsPresent("succeeded")), + ], + ) + .await?; + Ok(()) +} + +async fn should_make_aci_eps_payment(web_driver: WebDriver) -> Result<(), WebDriverError> { + let conn = AciSeleniumTest {}; + conn.make_redirection_payment( + web_driver, + vec![ + Event::Trigger(Trigger::Goto(&format!("{CHEKOUT_BASE_URL}/saved/208"))), + Event::Trigger(Trigger::Click(By::Id("card-submit-btn"))), + Event::Trigger(Trigger::Click(By::Css("input.button-body.button-short"))), + Event::Trigger(Trigger::Click(By::Css("input.button-body.button-short"))), + Event::Trigger(Trigger::Click(By::Css("input.button-body.button-short"))), + Event::Trigger(Trigger::Click(By::Css("input.button-body.button-middle"))), + Event::Assert(Assert::IsPresent("succeeded")), + ], + ) + .await?; + Ok(()) +} + +async fn should_make_aci_ideal_payment(web_driver: WebDriver) -> Result<(), WebDriverError> { + let conn = AciSeleniumTest {}; + conn.make_redirection_payment( + web_driver, + vec![ + Event::Trigger(Trigger::Goto(&format!("{CHEKOUT_BASE_URL}/saved/211"))), + Event::Trigger(Trigger::Click(By::Id("card-submit-btn"))), + Event::Trigger(Trigger::Click(By::Css("input.pps-button"))), + Event::Assert(Assert::IsPresent("succeeded")), + ], + ) + .await?; + Ok(()) +} + +async fn should_make_aci_sofort_payment(web_driver: WebDriver) -> Result<(), WebDriverError> { + let conn = AciSeleniumTest {}; + conn.make_redirection_payment( + web_driver, + vec![ + Event::Trigger(Trigger::Goto(&format!("{CHEKOUT_BASE_URL}/saved/212"))), + Event::Trigger(Trigger::Click(By::Id("card-submit-btn"))), + Event::Trigger(Trigger::Click(By::Css( + "button.large.button.primary.expand.form-submitter", + ))), + Event::Trigger(Trigger::Click(By::Css( + "button.large.button.primary.expand.form-submitter", + ))), + Event::Trigger(Trigger::Click(By::Css( + "button.large.button.primary.expand.form-submitter", + ))), + Event::Trigger(Trigger::Click(By::Css( + "button.large.button.primary.expand.form-submitter", + ))), + Event::Assert(Assert::IsPresent("succeeded")), + ], + ) + .await?; + Ok(()) +} + +async fn should_make_aci_giropay_payment(web_driver: WebDriver) -> Result<(), WebDriverError> { + let conn = AciSeleniumTest {}; + conn.make_redirection_payment( + web_driver, + vec![ + Event::Trigger(Trigger::Goto(&format!("{CHEKOUT_BASE_URL}/saved/209"))), + Event::Trigger(Trigger::Click(By::Id("card-submit-btn"))), + Event::Trigger(Trigger::SendKeys(By::Name("sc"), "10")), + Event::Trigger(Trigger::SendKeys(By::Name("extensionSc"), "4000")), + Event::Trigger(Trigger::SendKeys(By::Name("customerName1"), "Hopper")), + Event::Trigger(Trigger::Click(By::Css("input[value='Absenden']"))), + Event::Assert(Assert::IsPresent("succeeded")), + ], + ) + .await?; + Ok(()) +} + +async fn should_make_aci_trustly_payment(web_driver: WebDriver) -> Result<(), WebDriverError> { + let conn = AciSeleniumTest {}; + conn.make_redirection_payment( + web_driver, + vec![ + Event::Trigger(Trigger::Goto(&format!("{CHEKOUT_BASE_URL}/saved/13"))), + Event::Trigger(Trigger::Click(By::Id("card-submit-btn"))), + Event::Trigger(Trigger::Sleep(2)), + Event::Trigger(Trigger::Click(By::XPath( + r#"//*[@id="app"]/div[1]/div/div[2]/div/ul/div[4]/div/div[1]/div[2]/div[1]/span"#, + ))), + Event::Trigger(Trigger::Click(By::Css( + "button.sc-eJocfa.sc-oeezt.cDgdS.bptgBT", + ))), + Event::Trigger(Trigger::SendKeys( + By::Css("input.sc-fXgAZx.hkChHq"), + "123456789", + )), + Event::Trigger(Trigger::Click(By::Css( + "button.sc-eJocfa.sc-oeezt.cDgdS.bptgBT", + ))), + Event::Trigger(Trigger::SendKeys( + By::Css("input.sc-fXgAZx.hkChHq"), + "783213", + )), + Event::Trigger(Trigger::Click(By::Css( + "button.sc-eJocfa.sc-oeezt.cDgdS.bptgBT", + ))), + Event::Trigger(Trigger::Click(By::Css("div.sc-jJMGnK.laKGqb"))), + Event::Trigger(Trigger::Click(By::Css( + "button.sc-eJocfa.sc-oeezt.cDgdS.bptgBT", + ))), + Event::Trigger(Trigger::SendKeys( + By::Css("input.sc-fXgAZx.hkChHq"), + "355508", + )), + Event::Trigger(Trigger::Click(By::Css( + "button.sc-eJocfa.sc-oeezt.cDgdS.bptgBT", + ))), + Event::Assert(Assert::IsPresent("succeeded")), + ], + ) + .await?; + Ok(()) +} + +async fn should_make_aci_przelewy24_payment(web_driver: WebDriver) -> Result<(), WebDriverError> { + let conn = AciSeleniumTest {}; + conn.make_redirection_payment( + web_driver, + vec![ + Event::Trigger(Trigger::Goto(&format!("{CHEKOUT_BASE_URL}/saved/12"))), + Event::Trigger(Trigger::Click(By::Id("card-submit-btn"))), + Event::Trigger(Trigger::Click(By::Id("pf31"))), + Event::Trigger(Trigger::Click(By::Css( + "button.btn.btn-lg.btn-info.btn-block", + ))), + Event::Trigger(Trigger::Click(By::Css( + "button.btn.btn-success.btn-lg.accept-button", + ))), + Event::Assert(Assert::IsPresent("succeeded")), + ], + ) + .await?; + Ok(()) +} + +#[test] +#[serial] +fn should_make_aci_card_mandate_payment_test() { + tester!(should_make_aci_card_mandate_payment); +} + +#[test] +#[serial] +fn should_make_aci_alipay_payment_test() { + tester!(should_make_aci_alipay_payment); +} + +#[test] +#[serial] +fn should_make_aci_interac_payment_test() { + tester!(should_make_aci_interac_payment); +} + +#[test] +#[serial] +fn should_make_aci_eps_payment_test() { + tester!(should_make_aci_eps_payment); +} + +#[test] +#[serial] +fn should_make_aci_ideal_payment_test() { + tester!(should_make_aci_ideal_payment); +} + +#[test] +#[serial] +fn should_make_aci_sofort_payment_test() { + tester!(should_make_aci_sofort_payment); +} + +#[test] +#[serial] +fn should_make_aci_giropay_payment_test() { + tester!(should_make_aci_giropay_payment); +} + +#[test] +#[serial] +fn should_make_aci_trustly_payment_test() { + tester!(should_make_aci_trustly_payment); +} + +#[test] +#[serial] +fn should_make_aci_przelewy24_payment_test() { + tester!(should_make_aci_przelewy24_payment); +} diff --git a/crates/router/tests/connectors/main.rs b/crates/router/tests/connectors/main.rs index e77c73c180..ec94ea88af 100644 --- a/crates/router/tests/connectors/main.rs +++ b/crates/router/tests/connectors/main.rs @@ -7,6 +7,7 @@ use test_utils::connector_auth; mod aci; +mod aci_ui; mod adyen; mod adyen_uk_ui; mod airwallex;