From 683cc272a4e532ffdd0ee988d288ec754842d1da Mon Sep 17 00:00:00 2001 From: Martin Vere Cihlar Date: Mon, 3 Feb 2025 20:41:47 +0100 Subject: [PATCH] feat(e2e): Adds new buy Ethereum test (#16785) minor refactoring, default watch response is approved now --- .../buy/{quotes.json => quotes-bitcoin.json} | 0 .../fixtures/invity/buy/quotes-ethereum.json | 482 ++++++++++++++++++ .../buy/{trade.json => trade-bitcoin.json} | 0 .../fixtures/invity/buy/trade-ethereum.json | 34 ++ .../e2e/fixtures/invity/buy/watch.json | 2 +- .../e2e/fixtures/invity/index.ts | 8 +- .../e2e/support/pageActions/marketActions.ts | 4 + .../e2e/tests/trading/buy-bitcoin.test.ts | 2 + .../e2e/tests/trading/buy-ethereum.test.ts | 93 +++- .../e2e/tests/trading/buy-solana.test.ts | 11 +- .../TradingVerify/TradingVerify.tsx | 1 + 11 files changed, 624 insertions(+), 13 deletions(-) rename packages/suite-desktop-core/e2e/fixtures/invity/buy/{quotes.json => quotes-bitcoin.json} (100%) create mode 100644 packages/suite-desktop-core/e2e/fixtures/invity/buy/quotes-ethereum.json rename packages/suite-desktop-core/e2e/fixtures/invity/buy/{trade.json => trade-bitcoin.json} (100%) create mode 100644 packages/suite-desktop-core/e2e/fixtures/invity/buy/trade-ethereum.json diff --git a/packages/suite-desktop-core/e2e/fixtures/invity/buy/quotes.json b/packages/suite-desktop-core/e2e/fixtures/invity/buy/quotes-bitcoin.json similarity index 100% rename from packages/suite-desktop-core/e2e/fixtures/invity/buy/quotes.json rename to packages/suite-desktop-core/e2e/fixtures/invity/buy/quotes-bitcoin.json diff --git a/packages/suite-desktop-core/e2e/fixtures/invity/buy/quotes-ethereum.json b/packages/suite-desktop-core/e2e/fixtures/invity/buy/quotes-ethereum.json new file mode 100644 index 00000000000..20141c557c1 --- /dev/null +++ b/packages/suite-desktop-core/e2e/fixtures/invity/buy/quotes-ethereum.json @@ -0,0 +1,482 @@ +[ + { + "exchange": "topper", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 64431.91806118373, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Google Pay", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.018343858689378987", + "minFiat": 252.66, + "maxFiat": 1263293.98, + "minCrypto": 0.003939318344818984, + "maxCrypto": 19.69649786398079, + "paymentMethod": "googlePay", + "quoteId": "9b6785ed-dfa2-4f20-83d6-a453b3d014aa", + "orderId": "9b6785ed-dfa2-4f20-83d6-a453b3d014aa" + }, + { + "exchange": "simplecoin", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 66344.08602150538, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Bank Transfer", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.0186", + "minFiat": 505, + "maxFiat": 2524041, + "minCrypto": 0.00787, + "maxCrypto": 39.35329, + "paymentMethod": "bankTransfer", + "quoteId": "awXBIpF-v6miqV95Fu0efUxBet9IVdWr_1738581745" + }, + { + "exchange": "banxa", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 66290.62583937685, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Apple Pay", + "fiatStringAmount": "1234.00", + "receiveStringAmount": "0.01861500", + "minFiat": 600, + "maxFiat": 230000, + "minCrypto": 0.00935483, + "maxCrypto": 3.58601765, + "paymentMethod": "applePay", + "quoteId": "9a7c3b69-8c24-4c8e-aed1-9e6bd3a4ee7c", + "partnerData2": "6100" + }, + { + "exchange": "banxa", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 66290.62583937685, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Credit Card", + "fiatStringAmount": "1234.00", + "receiveStringAmount": "0.01861500", + "minFiat": 600, + "maxFiat": 50000, + "minCrypto": 0.00935483, + "maxCrypto": 0.77956905, + "paymentMethod": "creditCard", + "quoteId": "d11b2f2f-093b-4774-ab79-05ddad264bae", + "partnerData2": "6098" + }, + { + "exchange": "topper", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 64431.91806118373, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Credit Card", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.018343858689378987", + "minFiat": 252.66, + "maxFiat": 1263293.98, + "minCrypto": 0.003939318344818984, + "maxCrypto": 19.69649786398079, + "paymentMethod": "creditCard", + "quoteId": "3783b311-1f22-49fe-ac09-679f55e311b7", + "orderId": "3783b311-1f22-49fe-ac09-679f55e311b7" + }, + { + "exchange": "topper", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 64431.91806118373, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Apple Pay", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.018343858689378987", + "minFiat": 252.66, + "maxFiat": 1263293.98, + "minCrypto": 0.003939318344818984, + "maxCrypto": 19.69649786398079, + "paymentMethod": "applePay", + "quoteId": "268d8761-f3dd-4023-9779-4df1ee97d0e5", + "orderId": "268d8761-f3dd-4023-9779-4df1ee97d0e5" + }, + { + "exchange": "anycoin", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 67407.93545444365, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Bank Transfer", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.01830645", + "minFiat": 130.96, + "maxFiat": 5000000, + "minCrypto": 0.002, + "maxCrypto": 76.35358357, + "paymentMethod": "bankTransfer", + "quoteId": "f9076590-1099-471e-9de0-9a654d5fe054", + "validUntil": "2025-02-03T11:27:24.907Z" + }, + { + "exchange": "mercuryo", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 65208.56, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Revolut Pay", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.018294988122311354", + "minFiat": 510.12, + "maxFiat": 382585.63, + "minCrypto": 0.0074615142946901, + "maxCrypto": 5.612822369531468, + "paymentMethod": "revolutPay", + "quoteId": "33caccdb-d0c2-4db9-9ca7-083d5c1bcecf" + }, + { + "exchange": "paybis", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 71390.59272174751, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "PayPal", + "fiatStringAmount": "1234.00", + "receiveStringAmount": "0.01728519056859", + "minFiat": 246.45, + "maxFiat": 24645431.91, + "minCrypto": 0.00384, + "maxCrypto": 384.25632, + "paymentMethod": "paypal", + "quoteId": "f3dd260f-650f-48fa-9564-3f28817ca658", + "validUntil": "2025-02-03T11:23:25+00:00" + }, + { + "exchange": "mercuryo", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 65208.56, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Google Pay", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.018031065754491860", + "minFiat": 510.12, + "maxFiat": 382585.63, + "minCrypto": 0.0074615142946901, + "maxCrypto": 5.612822369531468, + "paymentMethod": "googlePay", + "quoteId": "01d8c1cd-de28-49c4-bfc5-37a882e2cc2a" + }, + { + "exchange": "paybis", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 68848.62718467147, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Revolut Pay", + "fiatStringAmount": "1234.00", + "receiveStringAmount": "0.01792337843847", + "minFiat": 246.45, + "maxFiat": 2464543.19, + "minCrypto": 0.00384, + "maxCrypto": 38.42563, + "paymentMethod": "revolutPay", + "quoteId": "f3dd260f-650f-48fa-9564-3f28817ca658", + "validUntil": "2025-02-03T11:23:25+00:00" + }, + { + "exchange": "mercuryo", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 65208.56, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Apple Pay", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.018031065754491860", + "minFiat": 510.12, + "maxFiat": 382585.63, + "minCrypto": 0.0074615142946901, + "maxCrypto": 5.612822369531468, + "paymentMethod": "applePay", + "quoteId": "37e68f1a-4380-40da-bcc8-505a2006ea1c" + }, + { + "exchange": "mercuryo", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 65208.56, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Credit Card", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.017894120563055016", + "minFiat": 510.12, + "maxFiat": 382585.63, + "minCrypto": 0.0074615142946901, + "maxCrypto": 5.612822369531468, + "paymentMethod": "creditCard", + "quoteId": "0057b5d8-92eb-498b-bb17-457c3eeef0ae" + }, + { + "exchange": "paybis", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 70604.47759732297, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Google Pay", + "fiatStringAmount": "1234.00", + "receiveStringAmount": "0.01747764507285", + "minFiat": 246.45, + "maxFiat": 492908.64, + "minCrypto": 0.00384, + "maxCrypto": 7.68513, + "paymentMethod": "googlePay", + "quoteId": "f3dd260f-650f-48fa-9564-3f28817ca658", + "validUntil": "2025-02-03T11:23:25+00:00" + }, + { + "exchange": "paybis", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 70604.47759732297, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Credit Card", + "fiatStringAmount": "1234.00", + "receiveStringAmount": "0.01747764507285", + "minFiat": 246.45, + "maxFiat": 492908.64, + "minCrypto": 0.00384, + "maxCrypto": 7.68513, + "paymentMethod": "creditCard", + "quoteId": "f3dd260f-650f-48fa-9564-3f28817ca658", + "validUntil": "2025-02-03T11:23:25+00:00" + }, + { + "exchange": "paybis", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 70604.47759732297, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Apple Pay", + "fiatStringAmount": "1234.00", + "receiveStringAmount": "0.01747764507285", + "minFiat": 246.45, + "maxFiat": 492908.64, + "minCrypto": 0.00384, + "maxCrypto": 7.68513, + "paymentMethod": "applePay", + "quoteId": "f3dd260f-650f-48fa-9564-3f28817ca658", + "validUntil": "2025-02-03T11:23:25+00:00" + }, + { + "exchange": "moonpay", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 73452.38095238095, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Google Pay", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.0168", + "minFiat": 500, + "maxFiat": 260000, + "minCrypto": 0.0015, + "maxCrypto": 30000, + "paymentMethod": "googlePay", + "quoteId": "5e607d38-6809-4d9a-866d-2bc9ba6281bc" + }, + { + "exchange": "moonpay", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 73452.38095238095, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Credit Card", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.0168", + "minFiat": 500, + "maxFiat": 260000, + "minCrypto": 0.0015, + "maxCrypto": 30000, + "paymentMethod": "creditCard", + "quoteId": "29163cce-2c50-456e-91e7-cfc24d72ba8c" + }, + { + "exchange": "moonpay", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 73452.38095238095, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Apple Pay", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.0168", + "minFiat": 500, + "maxFiat": 260000, + "minCrypto": 0.0015, + "maxCrypto": 30000, + "paymentMethod": "applePay", + "quoteId": "c324dae0-0b96-43fa-89c3-4f3fa29d409b" + }, + { + "exchange": "simplex", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 78666.46946924996, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Google Pay", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.01568648", + "minFiat": 1232, + "maxFiat": 492838, + "minCrypto": 0.01778704, + "maxCrypto": 7.11481765, + "paymentMethod": "googlePay", + "quoteId": "8c15ae9c-7af9-4316-a36b-95cd3a2ddc72", + "validUntil": "2025-02-03T11:22:33.839Z" + }, + { + "exchange": "simplex", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 78666.46946924996, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Credit Card", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.01568648", + "minFiat": 1232, + "maxFiat": 492838, + "minCrypto": 0.01778704, + "maxCrypto": 7.11481765, + "paymentMethod": "creditCard", + "quoteId": "8c15ae9c-7af9-4316-a36b-95cd3a2ddc72", + "validUntil": "2025-02-03T11:22:33.839Z" + }, + { + "exchange": "simplex", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 78666.46946924996, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Apple Pay", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.01568648", + "minFiat": 1232, + "maxFiat": 492838, + "minCrypto": 0.01778704, + "maxCrypto": 7.11481765, + "paymentMethod": "applePay", + "quoteId": "8c15ae9c-7af9-4316-a36b-95cd3a2ddc72", + "validUntil": "2025-02-03T11:22:33.839Z" + }, + { + "error": "Amount too low, minimum is CZK 1327.", + "exchange": "banxa", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 67549.81388219837, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Google Pay", + "fiatStringAmount": "1234.00", + "receiveStringAmount": "0.01826800", + "minFiat": 1327, + "maxFiat": 50000, + "minCrypto": 0.02068976, + "maxCrypto": 0.77956905, + "paymentMethod": "googlePay", + "quoteId": "7d4a1aec-5d4c-4fa4-b74a-5ae2c6951397", + "partnerData2": "6034" + }, + { + "error": "Amount too low, minimum is CZK 1514.33.", + "exchange": "coinify", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 73866.83954500104, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Credit Card", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.016705737075", + "minFiat": 1514.33, + "maxFiat": 126197.61, + "minCrypto": 0.0236105, + "maxCrypto": 1.96759503, + "paymentMethod": "creditCard", + "quoteId": "b232d5c3-988c-49d5-955c-0287296e78d3" + }, + { + "error": "Amount too low, minimum is CZK 1514.33.", + "exchange": "coinify", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 73866.83954500104, + "wantCrypto": false, + "exp": "t+vWC5JpkRwVcd4SrCj7LQ==", + "country": "CZ", + "paymentMethodName": "Apple Pay", + "fiatStringAmount": "1234", + "receiveStringAmount": "0.016705737075", + "minFiat": 1514.33, + "maxFiat": 126197.61, + "minCrypto": 0.0236105, + "maxCrypto": 1.96759503, + "paymentMethod": "applePay", + "quoteId": "b232d5c3-988c-49d5-955c-0287296e78d3" + }, + { + "error": "This quote is unavailable at the moment.", + "exchange": "moonpay", + "fiatStringAmount": "", + "receiveStringAmount": "", + "minFiat": 500, + "maxFiat": 260000, + "minCrypto": 0.0015, + "maxCrypto": 30000, + "paymentMethod": "paypal", + "quoteId": "0df7f1a7-a321-457f-b0ae-a31af307ecc1" + } +] diff --git a/packages/suite-desktop-core/e2e/fixtures/invity/buy/trade.json b/packages/suite-desktop-core/e2e/fixtures/invity/buy/trade-bitcoin.json similarity index 100% rename from packages/suite-desktop-core/e2e/fixtures/invity/buy/trade.json rename to packages/suite-desktop-core/e2e/fixtures/invity/buy/trade-bitcoin.json diff --git a/packages/suite-desktop-core/e2e/fixtures/invity/buy/trade-ethereum.json b/packages/suite-desktop-core/e2e/fixtures/invity/buy/trade-ethereum.json new file mode 100644 index 00000000000..2f4a6faa2e7 --- /dev/null +++ b/packages/suite-desktop-core/e2e/fixtures/invity/buy/trade-ethereum.json @@ -0,0 +1,34 @@ +{ + "trade": { + "receiveAddress": "0x3f2329C9ADFbcCd9A84f52c906E936A42dA18CB8", + "paymentId": "a77943b27141cfc423ad5dd6df7f2865", + "status": "SUBMITTED", + "originalPaymentId": "c3025b52-8836-49f2-a7c9-07a2560d6034", + "partnerData": "https://trezor.banxa.com?expires=1738581904&id=f32568ce-fd75-44ed-a417-9e7e7d2f2a8c&oid=a77943b27141cfc423ad5dd6df7f2865&signature=14165f0d8e2d24af98efea79efddb9df4e808ac8baec1d5f0487d674e7b6f161", + "exchange": "banxa", + "fiatCurrency": "CZK", + "receiveCurrency": "ethereum", + "rate": 66290.62583937685, + "wantCrypto": false, + "exp": "OnGBiPZ211B633dTxSLnUA==", + "country": "CZ", + "paymentMethodName": "Credit Card", + "fiatStringAmount": "1234.00", + "receiveStringAmount": "0.01861500", + "minFiat": 600, + "maxFiat": 50000, + "minCrypto": 0.00946059, + "maxCrypto": 0.7883824, + "paymentMethod": "creditCard", + "quoteId": "6bb961d0-b927-46b0-97e9-338b6d6c95c6", + "orderId": "dd0d10bc-136a-41f0-8fff-9a760cd341fd", + "partnerData2": "6098" + }, + "tradeForm": { + "form": { + "formMethod": "GET", + "formAction": "https://trezor.banxa.com?expires=1738581904&id=f32568ce-fd75-44ed-a417-9e7e7d2f2a8c&oid=a77943b27141cfc423ad5dd6df7f2865&signature=14165f0d8e2d24af98efea79efddb9df4e808ac8baec1d5f0487d674e7b6f161", + "fields": {} + } + } +} diff --git a/packages/suite-desktop-core/e2e/fixtures/invity/buy/watch.json b/packages/suite-desktop-core/e2e/fixtures/invity/buy/watch.json index b1aaa54a451..4f3ee44045e 100644 --- a/packages/suite-desktop-core/e2e/fixtures/invity/buy/watch.json +++ b/packages/suite-desktop-core/e2e/fixtures/invity/buy/watch.json @@ -1,3 +1,3 @@ { - "status": "SUBMITTED" + "status": "SUCCESS" } diff --git a/packages/suite-desktop-core/e2e/fixtures/invity/index.ts b/packages/suite-desktop-core/e2e/fixtures/invity/index.ts index 26ad7302dc8..607ac94baca 100644 --- a/packages/suite-desktop-core/e2e/fixtures/invity/index.ts +++ b/packages/suite-desktop-core/e2e/fixtures/invity/index.ts @@ -3,10 +3,12 @@ import { cloneDeep } from 'lodash'; import { NetworkSymbol } from '@suite-common/wallet-config'; import buyList from './buy/list.json'; +import buyQuotesBTC from './buy/quotes-bitcoin.json'; +import buyQuotesEthereum from './buy/quotes-ethereum.json'; import buyQuotesSolana from './buy/quotes-solana.json'; -import buyQuotesBTC from './buy/quotes.json'; +import buyTradeBTC from './buy/trade-bitcoin.json'; +import buyTradeEthereum from './buy/trade-ethereum.json'; import buyTradeSolana from './buy/trade-solana.json'; -import buyTradeBTC from './buy/trade.json'; import buyWatch from './buy/watch.json'; import exchangeCoins from './exchange/coins.json'; import exchangeList from './exchange/list.json'; @@ -69,8 +71,10 @@ export { info, buyList, buyQuotesBTC, + buyQuotesEthereum, buyQuotesSolana, buyTradeBTC, + buyTradeEthereum, buyTradeSolana, buyWatch, sellList, diff --git a/packages/suite-desktop-core/e2e/support/pageActions/marketActions.ts b/packages/suite-desktop-core/e2e/support/pageActions/marketActions.ts index 1b92e08572a..d577da59237 100644 --- a/packages/suite-desktop-core/e2e/support/pageActions/marketActions.ts +++ b/packages/suite-desktop-core/e2e/support/pageActions/marketActions.ts @@ -88,6 +88,7 @@ export class MarketActions { readonly buyTermsConfirmButton: Locator; readonly confirmOnTrezorButton: Locator; readonly confirmationSection: Locator; + readonly confirmationAccountDropdown: Locator; readonly confirmationCryptoAmount: Locator; readonly confirmationFiatAmount: Locator; readonly confirmationProvider: Locator; @@ -153,6 +154,9 @@ export class MarketActions { '@trading/offer/confirm-on-trezor-button', ); this.confirmationSection = this.page.getByTestId('@trading/selected-offer'); + this.confirmationAccountDropdown = this.page.getByTestId( + '@trading/verify-options/account/input', + ); this.confirmationCryptoAmount = this.page.getByTestId('@trading/form/info/crypto-amount'); this.confirmationFiatAmount = this.page.getByTestId('@trading/form/info/fiat-amount'); this.confirmationProvider = this.page.getByTestId('@trading/form/info/provider'); diff --git a/packages/suite-desktop-core/e2e/tests/trading/buy-bitcoin.test.ts b/packages/suite-desktop-core/e2e/tests/trading/buy-bitcoin.test.ts index c43b736a229..42ee3cdcb25 100644 --- a/packages/suite-desktop-core/e2e/tests/trading/buy-bitcoin.test.ts +++ b/packages/suite-desktop-core/e2e/tests/trading/buy-bitcoin.test.ts @@ -61,7 +61,9 @@ test.describe('Trading - Buy BTC', { tag: ['@group=other', '@webOnly'] }, () => const watchRequestPromise = page.waitForRequest(invityEndpoint.buyWatch); await page.clock.install(); + await test.step('Confirm the trade and get redirected to transaction detail', async () => { + await marketPage.changeTransactionWatchResponseTo('SUBMITTED'); await marketPage.finishMockedTrade(); await expect(watchRequestPromise).toHavePayload(expectedWatchRequestPayload, { omit: ['partnerData'], diff --git a/packages/suite-desktop-core/e2e/tests/trading/buy-ethereum.test.ts b/packages/suite-desktop-core/e2e/tests/trading/buy-ethereum.test.ts index 1286b637152..401aeebc297 100644 --- a/packages/suite-desktop-core/e2e/tests/trading/buy-ethereum.test.ts +++ b/packages/suite-desktop-core/e2e/tests/trading/buy-ethereum.test.ts @@ -1,5 +1,92 @@ -import { test } from '../../support/fixtures'; +import { localizeNumber } from '@suite-common/wallet-utils'; +import { capitalizeFirstLetter } from '@trezor/utils'; -test.describe('Trading - Buy Solana', { tag: ['@group=other', '@webOnly'] }, () => { - test.skip('Buy Ethereum that is not discovered on wallet yet', () => {}); +import { buyQuotesEthereum, buyTradeEthereum, invityEndpoint } from '../../fixtures/invity'; +import { formatAddress } from '../../support/common'; +import { expect, test } from '../../support/fixtures'; + +// Expected values based on our mocked responses +const fiatAmount = buyQuotesEthereum[3].fiatStringAmount; +const provider = capitalizeFirstLetter(buyQuotesEthereum[3].exchange); +const formattedCryptoAmount = `${localizeNumber(buyQuotesEthereum[3].receiveStringAmount)} ETH`; +const formattedFiatAmount = `CZK ${localizeNumber(fiatAmount, 'en', 2)}`; +const { receiveAddress, paymentMethodName } = buyTradeEthereum.trade; + +test.describe('Trading - Buy Ethereum', { tag: ['@group=other', '@webOnly'] }, () => { + test.beforeEach(async ({ page, marketPage, onboardingPage, dashboardPage }) => { + await marketPage.mockInvity(); + await marketPage.mockInvityTrade(buyTradeEthereum, 'eth'); + await page.route(invityEndpoint.buyQuotes, async route => { + await route.fulfill({ json: buyQuotesEthereum }); + }); + await onboardingPage.completeOnboarding(); + await dashboardPage.discoveryShouldFinish(); + }); + + test('Buy Ethereum that is not discovered on wallet yet', async ({ + page, + dashboardPage, + settingsPage, + devicePrompt, + walletPage, + marketPage, + trezorUserEnvLink, + }) => { + await test.step('Request to buy Ethereum', async () => { + await walletPage.tradingBuyButton.click(); + await marketPage.selectAccount('Ethereum', 'eth'); + await marketPage.setYouPayFiatAmount(fiatAmount); + await expect(marketPage.bestOfferAmount).toHaveText(formattedCryptoAmount); + await expect(marketPage.quoteProvider).toHaveText(provider); + await marketPage.buyBestOfferButton.click(); + }); + + await test.step('Create Ethereum account in trade confirmation dialog', async () => { + await marketPage.buyTermsConfirmButton.click(); + await expect(marketPage.confirmationAccountDropdown).toHaveText( + 'Select ETHEREUM receive account', + ); + await expect(marketPage.confirmationAddress).toHaveText(''); + await expect(page.getByText('Receive address is required')).toBeVisible(); + + await marketPage.confirmationAccountDropdown.click(); + await page.getByRole('option', { name: 'Create a new Ethereum account' }).click(); + await expect(settingsPage.coins.networkButton('eth')).toBeEnabledCoin(); + await page.getByRole('button', { name: 'Find my Ethereum accounts' }).click(); + await dashboardPage.discoveryShouldFinish(); + await expect(marketPage.confirmationAccountDropdown).toHaveText( + 'Ethereum #1Balance: 0 ETH', + ); + + await expect(marketPage.confirmationAddress).toHaveValue(receiveAddress); + }); + + await test.step('Confirm Trade', async () => { + await marketPage.confirmOnTrezorButton.click(); + await expect(devicePrompt.outputValueOf('address')).toHaveText( + formatAddress(receiveAddress), + ); + await devicePrompt.confirmOnDevicePromptIsShown(); + await trezorUserEnvLink.pressYes(); + await devicePrompt.confirmOnDevicePromptIsHidden(); + + await expect(marketPage.confirmationCryptoAmount).toHaveText(formattedCryptoAmount); + await expect(marketPage.confirmationFiatAmount).toHaveText(formattedFiatAmount); + await expect(marketPage.confirmationProvider).toHaveText( + capitalizeFirstLetter(provider), + ); + await expect(marketPage.confirmationPaymentMethod).toHaveText(paymentMethodName); + //TODO: #16766 Uncomment once the issue with the trade confirmation dialog is fixed + // await marketPage.confirmTradeButton.click(); + // }); + + // await test.step('Verify transaction detail', async () => { + // await expect(marketPage.transactionDetailStatus).toHaveText('Approved', { + // timeout: 15_000, + // }); + // await expect(marketPage.confirmationFiatAmount).toHaveText(formattedFiatAmount); + // await expect(marketPage.confirmationCryptoAmount).toHaveText(formattedCryptoAmount); + // await expect(marketPage.confirmationProvider).toHaveText(provider); + }); + }); }); diff --git a/packages/suite-desktop-core/e2e/tests/trading/buy-solana.test.ts b/packages/suite-desktop-core/e2e/tests/trading/buy-solana.test.ts index 25382075cdd..01edf72ad57 100644 --- a/packages/suite-desktop-core/e2e/tests/trading/buy-solana.test.ts +++ b/packages/suite-desktop-core/e2e/tests/trading/buy-solana.test.ts @@ -14,24 +14,22 @@ const formattedFiatAmount = `CZK ${fiatAmount}`; const { receiveAddress, paymentMethodName } = buyTradeSolana.trade; test.describe('Trading - Buy Solana', { tag: ['@group=other', '@webOnly'] }, () => { - test.beforeEach(async ({ marketPage, onboardingPage, dashboardPage }) => { + test.beforeEach(async ({ page, marketPage, onboardingPage, dashboardPage }) => { await marketPage.mockInvity(); await marketPage.mockInvityTrade(buyTradeSolana, 'sol'); + await page.route(invityEndpoint.buyQuotes, async route => { + await route.fulfill({ json: buyQuotesSolana }); + }); await onboardingPage.completeOnboarding(); await dashboardPage.discoveryShouldFinish(); }); test('Buy specific crypto amount of Solana token', async ({ - page, settingsPage, dashboardPage, walletPage, marketPage, }) => { - await page.route(invityEndpoint.buyQuotes, async route => { - await route.fulfill({ json: buyQuotesSolana }); - }); - await test.step('Enable Solana and open its trading', async () => { await settingsPage.navigateTo('coins'); await settingsPage.coins.enableNetwork('sol'); @@ -57,7 +55,6 @@ test.describe('Trading - Buy Solana', { tag: ['@group=other', '@webOnly'] }, () capitalizeFirstLetter(provider), ); await expect(marketPage.confirmationPaymentMethod).toHaveText(paymentMethodName); - await marketPage.changeTransactionWatchResponseTo('SUCCESS'); await marketPage.confirmTradeButton.click(); }); diff --git a/packages/suite/src/views/wallet/trading/common/TradingSelectedOffer/TradingVerify/TradingVerify.tsx b/packages/suite/src/views/wallet/trading/common/TradingSelectedOffer/TradingVerify/TradingVerify.tsx index c564de5c011..becde676120 100644 --- a/packages/suite/src/views/wallet/trading/common/TradingSelectedOffer/TradingVerify/TradingVerify.tsx +++ b/packages/suite/src/views/wallet/trading/common/TradingSelectedOffer/TradingVerify/TradingVerify.tsx @@ -145,6 +145,7 @@ export const TradingVerify = ({ tradingVerifyAccount, cryptoId }: TradingVerifyP )} {selectedAccountOption?.account?.networkType !== 'bitcoin' && (