Goerli contracts, go-version bump: 3a46b051...3cd92fda

This commit is contained in:
Churikova Tetiana 2022-07-20 16:03:42 +02:00
parent a07bc82c37
commit 28a2113874
No known key found for this signature in database
GPG Key ID: 0D4EA7B33B47E6D8
38 changed files with 253 additions and 193 deletions

View File

@ -1,10 +1,10 @@
DEBUG_WEBVIEW=1 DEBUG_WEBVIEW=1
DEFAULT_NETWORK=testnet_rpc DEFAULT_NETWORK=goerli_rpc
ETHEREUM_DEV_CLUSTER=1 ETHEREUM_DEV_CLUSTER=1
EXTENSIONS=0 EXTENSIONS=0
FLEET=eth.staging FLEET=eth.staging
GROUP_CHATS_ENABLED=1 GROUP_CHATS_ENABLED=1
LOG_LEVEL=info LOG_LEVEL=debug
MAILSERVER_CONFIRMATIONS_ENABLED=0 MAILSERVER_CONFIRMATIONS_ENABLED=0
PAIRING_POPUP_DISABLED=1 PAIRING_POPUP_DISABLED=1
PFS_ENCRYPTION_ENABLED=1 PFS_ENCRYPTION_ENABLED=1
@ -23,8 +23,8 @@ QR_READ_TEST_MENU=1
ENABLE_ROOT_ALERT=0 ENABLE_ROOT_ALERT=0
MAX_IMAGES_BATCH=5 MAX_IMAGES_BATCH=5
APN_TOPIC=im.status.ethereum.pr APN_TOPIC=im.status.ethereum.pr
VERIFY_TRANSACTION_CHAIN_ID=3 VERIFY_TRANSACTION_CHAIN_ID=5
VERIFY_ENS_CHAIN_ID=3 VERIFY_ENS_CHAIN_ID=5
TEST_STATEOFUS=1 TEST_STATEOFUS=1
DATABASE_MANAGEMENT_ENABLED=1 DATABASE_MANAGEMENT_ENABLED=1
COMMUNITIES_ENABLED=1 COMMUNITIES_ENABLED=1

View File

@ -1,11 +1,11 @@
CACHED_WEBVIEWS_ENABLED=1 CACHED_WEBVIEWS_ENABLED=1
DEBUG_WEBVIEW=1 DEBUG_WEBVIEW=1
DEFAULT_NETWORK=testnet_rpc DEFAULT_NETWORK=goerli_rpc
ETHEREUM_DEV_CLUSTER=1 ETHEREUM_DEV_CLUSTER=1
EXTENSIONS=0 EXTENSIONS=0
FLEET=eth.prod FLEET=eth.prod
GROUP_CHATS_ENABLED=1 GROUP_CHATS_ENABLED=1
LOG_LEVEL=info LOG_LEVEL=debug
MAILSERVER_CONFIRMATIONS_ENABLED=1 MAILSERVER_CONFIRMATIONS_ENABLED=1
MAINNET_WARNING_ENABLED=1 MAINNET_WARNING_ENABLED=1
PFS_ENCRYPTION_ENABLED=1 PFS_ENCRYPTION_ENABLED=1
@ -22,8 +22,8 @@ KEYCARD_TEST_MENU=0
ENABLE_ROOT_ALERT=1 ENABLE_ROOT_ALERT=1
DISABLE_WALLET_ON_MOBILE_NETWORK=1 DISABLE_WALLET_ON_MOBILE_NETWORK=1
APN_TOPIC=im.status.ethereum.pr APN_TOPIC=im.status.ethereum.pr
VERIFY_TRANSACTION_CHAIN_ID=3 VERIFY_TRANSACTION_CHAIN_ID=5
VERIFY_ENS_CHAIN_ID=3 VERIFY_ENS_CHAIN_ID=5
TEST_STATEOFUS=1 TEST_STATEOFUS=1
BLANK_PREVIEW=0 BLANK_PREVIEW=0
MAX_IMAGES_BATCH=5 MAX_IMAGES_BATCH=5

View File

@ -139,10 +139,10 @@
{"mainnet_rpc" true}}}})))) {"mainnet_rpc" true}}}}))))
(testing "is on a different network" (testing "is on a different network"
(testing "it returns false when not enabled" (testing "it returns false when not enabled"
(is (not (model/custom-bootnodes-in-use? {:db {:networks/current-network "testnet_rpc"}})))) (is (not (model/custom-bootnodes-in-use? {:db {:networks/current-network "goerli_rpc"}}))))
(testing "it returns true when enabled" (testing "it returns true when enabled"
(is (not (model/custom-bootnodes-in-use? (is (not (model/custom-bootnodes-in-use?
{:db {:networks/current-network "testnet_rpc" {:db {:networks/current-network "goerli_rpc"
:multiaccount {:custom-bootnodes-enabled? :multiaccount {:custom-bootnodes-enabled?
{"mainnnet_rpc" true}}}})))))) {"mainnnet_rpc" true}}}}))))))

View File

@ -150,6 +150,7 @@
[chain-id] [chain-id]
(case chain-id (case chain-id
3 50 3 50
5 10
1 10)) 1 10))
(fx/defn register-name (fx/defn register-name

View File

@ -4,18 +4,22 @@
(def contracts (def contracts
{:status/snt {:status/snt
{:mainnet "0x744d70fdbe2ba4cf95131626614a1763df805b9e" {:mainnet "0x744d70fdbe2ba4cf95131626614a1763df805b9e"
:testnet "0xc55cf4b03948d7ebc8b9e8bad92643703811d162"} :testnet "0xc55cf4b03948d7ebc8b9e8bad92643703811d162"
:goerli "0x3D6AFAA395C31FCd391fE3D562E75fe9E8ec7E6a"}
:status/tribute-to-talk :status/tribute-to-talk
{:testnet "0xC61aa0287247a0398589a66fCD6146EC0F295432"} {:testnet "0xC61aa0287247a0398589a66fCD6146EC0F295432"}
:status/stickers :status/stickers
{:testnet "0x8cc272396be7583c65bee82cd7b743c69a87287d" {:testnet "0x8cc272396be7583c65bee82cd7b743c69a87287d"
:mainnet "0x0577215622f43a39f4bc9640806dfea9b10d2a36"} :mainnet "0x0577215622f43a39f4bc9640806dfea9b10d2a36"
:goerli "0x07f7CB0C0a4ab3e0999AfE8b3997Da34880f05d0"}
:status/sticker-market :status/sticker-market
{:testnet "0x6CC7274aF9cE9572d22DFD8545Fb8c9C9Bcb48AD" {:testnet "0x6CC7274aF9cE9572d22DFD8545Fb8c9C9Bcb48AD"
:mainnet "0x12824271339304d3a9f7e096e62a2a7e73b4a7e7"} :mainnet "0x12824271339304d3a9f7e096e62a2a7e73b4a7e7"
:goerli "0xf1E149A7DF70D5Ff1E265daAa738d785D3274717"}
:status/sticker-pack :status/sticker-pack
{:testnet "0xf852198d0385c4b871e0b91804ecd47c6ba97351" {:testnet "0xf852198d0385c4b871e0b91804ecd47c6ba97351"
:mainnet "0x110101156e8F0743948B2A61aFcf3994A8Fb172e"}}) :mainnet "0x110101156e8F0743948B2A61aFcf3994A8Fb172e"
:goerli "0x8D3fD2EA24bD53a8Bd2b1026727db8bbe9A8C8Af"}})
(defn get-address (defn get-address
[db contract] [db contract]

View File

@ -6,6 +6,7 @@
(is (= (ethereum/chain-id->chain-keyword 1) :mainnet)) (is (= (ethereum/chain-id->chain-keyword 1) :mainnet))
(is (= (ethereum/chain-id->chain-keyword 3) :testnet)) (is (= (ethereum/chain-id->chain-keyword 3) :testnet))
(is (= (ethereum/chain-id->chain-keyword 4) :rinkeby)) (is (= (ethereum/chain-id->chain-keyword 4) :rinkeby))
(is (= (ethereum/chain-id->chain-keyword 5) :goerli))
(is (= (ethereum/chain-id->chain-keyword 5777) :custom))) (is (= (ethereum/chain-id->chain-keyword 5777) :custom)))
(deftest coordinates (deftest coordinates

View File

@ -83,6 +83,10 @@
:symbol :SNT :symbol :SNT
:decimals 18}} :decimals 18}}
:testnet {"0xc55cf4b03948d7ebc8b9e8bad92643703811d162" {:address "0xc55cf4b03948d7ebc8b9e8bad92643703811d162" :testnet {"0xc55cf4b03948d7ebc8b9e8bad92643703811d162" {:address "0xc55cf4b03948d7ebc8b9e8bad92643703811d162"
:name "Status Test Token"
:symbol :STT
:decimals 18}}
:goerli {"0x3d6afaa395c31fcd391fe3d562e75fe9e8ec7e6a" {:address "0x3d6afaa395c31fcd391fe3d562e75fe9e8ec7e6a"
:name "Status Test Token" :name "Status Test Token"
:symbol :STT :symbol :STT
:decimals 18}}}) :decimals 18}}})

View File

@ -7,6 +7,7 @@
(def ens-registries (def ens-registries
{:mainnet "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" {:mainnet "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"
:testnet "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" :testnet "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"
:goerli "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"
:rinkeby "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"}) :rinkeby "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"})
(def default-address "0x0000000000000000000000000000000000000000") (def default-address "0x0000000000000000000000000000000000000000")

View File

@ -30,7 +30,7 @@
(merge (merge
{:mainnet "0xDB5ac1a559b02E12F29fC0eC0e37Be8E046DEF49"} {:mainnet "0xDB5ac1a559b02E12F29fC0eC0e37Be8E046DEF49"}
(when config/test-stateofus? (when config/test-stateofus?
{:testnet "0x11d9F481effd20D76cEE832559bd9Aca25405841"}))) {:goerli "0xD1f7416F91E7Eb93dD96A61F12FC092aD6B67B11"})))
(def registrars-cache (atom {})) (def registrars-cache (atom {}))

View File

@ -28,6 +28,10 @@
:symbol :ETH :symbol :ETH
:symbol-display :ETHri :symbol-display :ETHri
:decimals 18} :decimals 18}
:goerli {:name "Goerli Ether"
:symbol :ETH
:symbol-display :ETHgo
:decimals 18}
:xdai {:name "xDAI" :xdai {:name "xDAI"
:symbol :ETH :symbol :ETH
:symbol-display :xDAI :symbol-display :xDAI

View File

@ -17,13 +17,15 @@
(def etherscan-supported? (def etherscan-supported?
#{(ethereum/chain-keyword->chain-id :mainnet) #{(ethereum/chain-keyword->chain-id :mainnet)
(ethereum/chain-keyword->chain-id :testnet) (ethereum/chain-keyword->chain-id :testnet)
(ethereum/chain-keyword->chain-id :goerli)
(ethereum/chain-keyword->chain-id :rinkeby)}) (ethereum/chain-keyword->chain-id :rinkeby)})
(def binance-mainnet-chain-id (ethereum/chain-keyword->chain-id :bsc)) (def binance-mainnet-chain-id (ethereum/chain-keyword->chain-id :bsc))
(def binance-testnet-chain-id (ethereum/chain-keyword->chain-id :bsc-testnet)) (def binance-testnet-chain-id (ethereum/chain-keyword->chain-id :bsc-testnet))
(def network->subdomain {3 "ropsten" (def network->subdomain {3 "ropsten"
4 "rinkeby"}) 4 "rinkeby"
5 "goerli"})
(defn get-transaction-details-url [chain-id hash] (defn get-transaction-details-url [chain-id hash]
{:pre [(number? chain-id) (string? hash)] {:pre [(number? chain-id) (string? hash)]

View File

@ -87,6 +87,7 @@
:wallet/visible-tokens {:testnet #{:STT :wallet/visible-tokens {:testnet #{:STT
:HND} :HND}
:mainnet #{:SNT} :mainnet #{:SNT}
:goerli #{:STT}
:rinkeby #{:MOKSHA :rinkeby #{:MOKSHA
:KDO} :KDO}
:xdai #{}} :xdai #{}}

View File

@ -13,6 +13,7 @@
:mainnet (i18n/label :t/mainnet-network) :mainnet (i18n/label :t/mainnet-network)
:testnet (i18n/label :t/ropsten-network) :testnet (i18n/label :t/ropsten-network)
:rinkeby (i18n/label :t/rinkeby-network) :rinkeby (i18n/label :t/rinkeby-network)
:goerli (i18n/label :t/goerli-network)
:custom (i18n/label :t/custom))] :custom (i18n/label :t/custom))]
[quo/list-item [quo/list-item
{:title name {:title name
@ -48,7 +49,7 @@
:default-value (get-in manage-network [:url :value]) :default-value (get-in manage-network [:url :value])
:on-change-text #(re-frame/dispatch [::network/input-changed :url %])}]]] :on-change-text #(re-frame/dispatch [::network/input-changed :url %])}]]]
[quo/list-header (i18n/label :t/network-chain)] [quo/list-header (i18n/label :t/network-chain)]
[list/flat-list {:data [:mainnet :testnet :rinkeby :custom] [list/flat-list {:data [:mainnet :testnet :rinkeby :goerli :custom]
:key-fn (fn [_ i] (str i)) :key-fn (fn [_ i] (str i))
:render-data manage-network :render-data manage-network
:render-fn render-network-type}] :render-fn render-network-type}]

View File

@ -23,6 +23,7 @@
(def mainnet-rpc-url (str "https://mainnet.infura.io/v3/" INFURA_TOKEN)) (def mainnet-rpc-url (str "https://mainnet.infura.io/v3/" INFURA_TOKEN))
(def testnet-rpc-url (str "https://ropsten.infura.io/v3/" INFURA_TOKEN)) (def testnet-rpc-url (str "https://ropsten.infura.io/v3/" INFURA_TOKEN))
(def goerli-rpc-url (str "https://goerli.infura.io/v3/" INFURA_TOKEN))
(def bootnodes-settings-enabled? (enabled? (get-config :BOOTNODES_SETTINGS_ENABLED "1"))) (def bootnodes-settings-enabled? (enabled? (get-config :BOOTNODES_SETTINGS_ENABLED "1")))
(def rpc-networks-only? (enabled? (get-config :RPC_NETWORKS_ONLY "1"))) (def rpc-networks-only? (enabled? (get-config :RPC_NETWORKS_ONLY "1")))
(def mailserver-confirmations-enabled? (enabled? (get-config :MAILSERVER_CONFIRMATIONS_ENABLED))) (def mailserver-confirmations-enabled? (enabled? (get-config :MAILSERVER_CONFIRMATIONS_ENABLED)))
@ -57,7 +58,7 @@
(string/upper-case (get-config :LOG_LEVEL ""))) (string/upper-case (get-config :LOG_LEVEL "")))
(def fleet (get-config :FLEET "eth.staging")) (def fleet (get-config :FLEET "eth.staging"))
(def apn-topic (get-config :APN_TOPIC "im.status.ethereum")) (def apn-topic (get-config :APN_TOPIC "im.status.ethereum"))
(def default-network (get-config :DEFAULT_NETWORK "testnet_rpc")) (def default-network (get-config :DEFAULT_NETWORK "goerli_rpc"))
(def pow-target (js/parseFloat (get-config :POW_TARGET "0.0001"))) (def pow-target (js/parseFloat (get-config :POW_TARGET "0.0001")))
(def pow-time (js/parseInt (get-config :POW_TIME "1"))) (def pow-time (js/parseInt (get-config :POW_TIME "1")))
(def max-installations 2) (def max-installations 2)
@ -67,12 +68,12 @@
(def verify-transaction-chain-id (js/parseInt (get-config :VERIFY_TRANSACTION_CHAIN_ID "1"))) (def verify-transaction-chain-id (js/parseInt (get-config :VERIFY_TRANSACTION_CHAIN_ID "1")))
(def verify-transaction-url (if (= :mainnet (ethereum/chain-id->chain-keyword verify-transaction-chain-id)) (def verify-transaction-url (if (= :mainnet (ethereum/chain-id->chain-keyword verify-transaction-chain-id))
mainnet-rpc-url mainnet-rpc-url
testnet-rpc-url)) goerli-rpc-url))
(def verify-ens-chain-id (js/parseInt (get-config :VERIFY_ENS_CHAIN_ID "1"))) (def verify-ens-chain-id (js/parseInt (get-config :VERIFY_ENS_CHAIN_ID "1")))
(def verify-ens-url (if (= :mainnet (ethereum/chain-id->chain-keyword verify-ens-chain-id)) (def verify-ens-url (if (= :mainnet (ethereum/chain-id->chain-keyword verify-ens-chain-id))
mainnet-rpc-url mainnet-rpc-url
testnet-rpc-url)) goerli-rpc-url))
(def verify-ens-contract-address (get-config :VERIFY_ENS_CONTRACT_ADDRESS ((ethereum/chain-id->chain-keyword verify-ens-chain-id) ens/ens-registries))) (def verify-ens-contract-address (get-config :VERIFY_ENS_CONTRACT_ADDRESS ((ethereum/chain-id->chain-keyword verify-ens-chain-id) ens/ens-registries)))
(def default-multiaccount (def default-multiaccount
@ -137,7 +138,7 @@
:config {:NetworkId (ethereum/chain-keyword->chain-id :goerli) :config {:NetworkId (ethereum/chain-keyword->chain-id :goerli)
:DataDir "/ethereum/goerli_rpc" :DataDir "/ethereum/goerli_rpc"
:UpstreamConfig {:Enabled true :UpstreamConfig {:Enabled true
:URL (str "https://goerli.infura.io/v3/" INFURA_TOKEN)}}} :URL goerli-rpc-url}}}
{:id "bsc_testnet_rpc", {:id "bsc_testnet_rpc",
:chain-explorer-link "https://testnet.bscscan.com/address/", :chain-explorer-link "https://testnet.bscscan.com/address/",
:name "BSC testnet", :name "BSC testnet",

View File

@ -3,7 +3,7 @@
"_comment": "Instead use: scripts/update-status-go.sh <rev>", "_comment": "Instead use: scripts/update-status-go.sh <rev>",
"owner": "status-im", "owner": "status-im",
"repo": "status-go", "repo": "status-go",
"version": "v0.103.2", "version": "v0.103.3",
"commit-sha1": "3a46b051149e567e2be48bd9eb8e6703b01ae86f", "commit-sha1": "3cd92fda7875ae22244d40a589ea921bc61bdaef",
"src-sha256": "1vbd71crazy4jq7pvwiv0vzw3nfa8wl22k88vga5ppz0nz196cm7" "src-sha256": "1m4954qhd1vqap74scn03hbp2wfxwsjq8n24japqp4scjcq6gngw"
} }

View File

@ -16,7 +16,8 @@ import support.api.web3_api as w3
class NetworkApi(object): class NetworkApi(object):
def __init__(self): def __init__(self):
self.network_url = 'http://api-ropsten.etherscan.io/api?' # self.network_url = 'http://api-ropsten.etherscan.io/api?'
self.network_url = 'http://api-goerli.etherscan.io/api?'
self.faucet_url = 'https://faucet-ropsten.status.im/donate' self.faucet_url = 'https://faucet-ropsten.status.im/donate'
self.faucet_backup_address = w3.account_address self.faucet_backup_address = w3.account_address
self.headers = { self.headers = {
@ -114,7 +115,7 @@ class NetworkApi(object):
self.log("Failed iterate transactions(Etherscan unexpected error): " + str(e)) self.log("Failed iterate transactions(Etherscan unexpected error): " + str(e))
continue continue
def wait_for_confirmation_of_transaction(self, address, amount, confirmations=3, token=False): def wait_for_confirmation_of_transaction(self, address, amount, confirmations=6, token=False):
start_time = time.time() start_time = time.time()
if token: if token:
token_info = "token transaction" token_info = "token transaction"

File diff suppressed because one or more lines are too long

View File

@ -57,8 +57,11 @@ mailserver_hk = 'mail-01.ac-cn-hongkong-c'
mailserver_gc = 'mail-01.gc-us-central1-a' mailserver_gc = 'mail-01.gc-us-central1-a'
test_dapp_web_url = "status-im.github.io/dapp" test_dapp_web_url = "status-im.github.io/dapp"
test_dapp_url = 'simpledapp.eth' # TODO: temp due to goerli transition
test_dapp_name = 'simpledapp.eth' # test_dapp_url = 'simpledapp.eth'
# test_dapp_name = 'simpledapp.eth'
test_dapp_url = 'https://bafybeidzlqpkbtvpjtxnzgew6ffxhozq5f4ojbk64iq3tjl7lkjue2biby.ipfs.infura-ipfs.io/'
test_dapp_name = 'bafybeidzlqpkbtvpjtxnzgew6ffxhozq5f4ojbk64iq3tjl7lkjue2biby.ipfs.infura-ipfs.io'
emojis = {'thumbs-up': 2, 'thumbs-down': 3, 'love': 1, 'laugh': 4, 'angry': 6, 'sad': 5} emojis = {'thumbs-up': 2, 'thumbs-down': 3, 'love': 1, 'laugh': 4, 'angry': 6, 'sad': 5}

View File

@ -4,7 +4,7 @@ import time
from tests import marks, common_password from tests import marks, common_password
from tests.base_test_case import MultipleSharedDeviceTestCase, create_shared_drivers from tests.base_test_case import MultipleSharedDeviceTestCase, create_shared_drivers
from tests.users import transaction_senders, basic_user, ens_user, ens_user_ropsten from tests.users import transaction_senders, basic_user, ens_user, ens_user_message_sender
from views.sign_in_view import SignInView from views.sign_in_view import SignInView
import pytest import pytest
@ -1039,7 +1039,7 @@ class TestEnsStickersMultipleDevicesMerged(MultipleSharedDeviceTestCase):
self.chat_2.just_fyi("Check that message is fetched for receiver") self.chat_2.just_fyi("Check that message is fetched for receiver")
self.home_2.get_chat(self.sender['username']).click() self.home_2.get_chat(self.sender['username']).click()
chat_2_reciever_message = self.chat_2.get_incoming_transaction(transaction_value=amount) chat_2_reciever_message = self.chat_2.get_incoming_transaction(transaction_value=amount)
chat_2_reciever_message.transaction_status.wait_for_element_text(chat_2_reciever_message.confirmed) chat_2_reciever_message.transaction_status.wait_for_element_text(chat_2_reciever_message.confirmed, wait_time=60)
@marks.testrail_id(702155) @marks.testrail_id(702155)
def test_ens_mention_nickname_1_1_chat(self): def test_ens_mention_nickname_1_1_chat(self):
@ -1118,13 +1118,13 @@ class TestEnsStickersMultipleDevicesMerged(MultipleSharedDeviceTestCase):
else: else:
self.errors.append('No PN on mention in public chat! ') self.errors.append('No PN on mention in public chat! ')
self.home_2.click_system_back_button(2) self.home_2.click_system_back_button(2)
if self.home_2.element_starts_with_text(self.reciever['ens']).is_element_differs_from_template('ment_new.png', if self.home_2.element_starts_with_text(self.reciever['ens']).is_element_differs_from_template('ment_new_1.png',
2): 2):
self.errors.append('Mention is not highlighted!') self.errors.append('Mention is not highlighted!')
self.errors.verify_no_errors() self.errors.verify_no_errors()
@marks.testrail_id(702157) @marks.testrail_id(702157)
def test_sticker_1_1_public_chat(self): def test_sticker_1_1_public_chat_mainnet(self):
self.home_2.status_in_background_button.click_if_shown() self.home_2.status_in_background_button.click_if_shown()
[home.home_button.double_click() for home in (self.home_1, self.home_2)] [home.home_button.double_click() for home in (self.home_1, self.home_2)]
profile_2 = self.home_2.profile_button.click() profile_2 = self.home_2.profile_button.click()
@ -1136,11 +1136,13 @@ class TestEnsStickersMultipleDevicesMerged(MultipleSharedDeviceTestCase):
self.chat_2.sticker_icon.click() self.chat_2.sticker_icon.click()
if not self.chat_2.chat_item.is_element_displayed(): if not self.chat_2.chat_item.is_element_displayed():
self.errors.append('Cannot use purchased stickers') self.errors.append('Cannot use purchased stickers')
self.home_2.profile_button.click()
profile_2.switch_network('Goerli with upstream RPC')
self.home_1.just_fyi('Install free sticker pack and use it in 1-1 chat on Ropsten') self.home_1.just_fyi('Install free sticker pack and use it in 1-1 chat on Goerli')
self.home_1.get_chat(self.ens).click() self.home_1.get_chat(self.ens).click()
self.chat_1.chat_message_input.clear() self.chat_1.chat_message_input.clear()
self.chat_1.install_sticker_pack_by_name('Status Cat') self.chat_1.install_sticker_pack_by_name()
self.chat_1.sticker_icon.click() self.chat_1.sticker_icon.click()
if not self.chat_1.sticker_message.is_element_displayed(): if not self.chat_1.sticker_message.is_element_displayed():
self.errors.append('Sticker was not sent') self.errors.append('Sticker was not sent')
@ -1156,16 +1158,17 @@ class TestEnsStickersMultipleDevicesMerged(MultipleSharedDeviceTestCase):
if not self.chat_1.chat_item.is_element_displayed(): if not self.chat_1.chat_item.is_element_displayed():
self.errors.append('Sticker was not sent from Recent') self.errors.append('Sticker was not sent from Recent')
self.home_2.just_fyi('Check that can install stickers by tapping on sticker message') # self.home_2.just_fyi('Check that can install stickers by tapping on sticker message')
# TODO: disabled because of #13683
self.home_2.home_button.double_click() self.home_2.home_button.double_click()
self.home_2.get_chat(self.sender['username']).click() self.home_2.get_chat(self.sender['username']).click()
self.chat_2.chat_item.click() # self.chat_2.chat_item.click()
self.chat_2.element_by_text_part('Free').wait_and_click(40) # self.chat_2.element_by_text_part('Free').wait_and_click(40)
if self.chat_2.element_by_text_part('Free').is_element_displayed(): # if self.chat_2.element_by_text_part('Free').is_element_displayed():
self.errors.append('Stickerpack was not installed') # self.errors.append('Stickerpack was not installed')
self.chat_2.just_fyi('Check that can navigate to another user profile via long tap on sticker message') self.chat_2.just_fyi('Check that can navigate to another user profile via long tap on sticker message')
self.chat_2.close_sticker_view_icon.click() # self.chat_2.close_sticker_view_icon.click()
self.chat_2.chat_item.long_press_element() self.chat_2.chat_item.long_press_element()
self.chat_2.element_by_text('View Details').click() self.chat_2.element_by_text('View Details').click()
self.chat_2.profile_send_message.wait_and_click() self.chat_2.profile_send_message.wait_and_click()
@ -1180,7 +1183,7 @@ class TestEnsStickersMultipleDevicesMerged(MultipleSharedDeviceTestCase):
chat = self.home_1.start_new_chat_button.click() chat = self.home_1.start_new_chat_button.click()
self.home_1.just_fyi("Validation: invalid public key and invalid ENS") self.home_1.just_fyi("Validation: invalid public key and invalid ENS")
for invalid_chat_key in (basic_user['public_key'][:-1], ens_user_ropsten['ens'][:-2]): for invalid_chat_key in (basic_user['public_key'][:-1], ens_user_message_sender['ens'][:-2]):
chat.public_key_edit_box.clear() chat.public_key_edit_box.clear()
chat.public_key_edit_box.set_value(invalid_chat_key) chat.public_key_edit_box.set_value(invalid_chat_key)
chat.confirm() chat.confirm()
@ -1189,8 +1192,8 @@ class TestEnsStickersMultipleDevicesMerged(MultipleSharedDeviceTestCase):
self.home_1.just_fyi("Check that valid ENS is resolved") self.home_1.just_fyi("Check that valid ENS is resolved")
chat.public_key_edit_box.clear() chat.public_key_edit_box.clear()
chat.public_key_edit_box.set_value(ens_user_ropsten['ens']) chat.public_key_edit_box.set_value(ens_user_message_sender['ens'])
resolved_ens = '%s.stateofus.eth' % ens_user_ropsten['ens'] resolved_ens = '%s.stateofus.eth' % ens_user_message_sender['ens']
if not chat.element_by_text(resolved_ens).is_element_displayed(10): if not chat.element_by_text(resolved_ens).is_element_displayed(10):
self.errors.append('ENS name is not resolved after pasting chat key') self.errors.append('ENS name is not resolved after pasting chat key')
self.home_1.close_button.click() self.home_1.close_button.click()

View File

@ -233,7 +233,7 @@ class TestRestoreOneDeviceMerged(MultipleSharedDeviceTestCase):
self.sign_in = SignInView(self.drivers[0]) self.sign_in = SignInView(self.drivers[0])
self.passphrase = fill_string_with_char(self.user['passphrase'].upper(), ' ', 3, True, True) self.passphrase = fill_string_with_char(self.user['passphrase'].upper(), ' ', 3, True, True)
self.password = basic_user['special_chars_password'] self.password = basic_user['special_chars_password']
self.assets = ['ETH', 'YEENUS', 'STT']
self.home = self.sign_in.recover_access(passphrase=self.passphrase, password=self.password) self.home = self.sign_in.recover_access(passphrase=self.passphrase, password=self.password)
@marks.testrail_id(700748) @marks.testrail_id(700748)
@ -392,8 +392,8 @@ class TestRestoreOneDeviceMerged(MultipleSharedDeviceTestCase):
self.errors.append("Was not redirected to Key management screen when Manage keys from logged in state!") self.errors.append("Was not redirected to Key management screen when Manage keys from logged in state!")
self.home.just_fyi("Checking keycard banner and starting migrate multiaccount to keycard: no db saved") self.home.just_fyi("Checking keycard banner and starting migrate multiaccount to keycard: no db saved")
self.sign_in.close_button.click() self.sign_in.close_button.click_if_shown()
self.sign_in.navigate_up_button.click() self.sign_in.navigate_up_button.click_if_shown()
self.sign_in.multi_account_on_login_button.wait_for_visibility_of_element(30) self.sign_in.multi_account_on_login_button.wait_for_visibility_of_element(30)
self.sign_in.get_multiaccount_by_position(1).click() self.sign_in.get_multiaccount_by_position(1).click()
if not self.sign_in.get_keycard_banner.is_element_displayed(): if not self.sign_in.get_keycard_banner.is_element_displayed():
@ -443,7 +443,7 @@ class TestRestoreOneDeviceMerged(MultipleSharedDeviceTestCase):
self.sign_in.just_fyi('Check that after migrating account with assets is restored') self.sign_in.just_fyi('Check that after migrating account with assets is restored')
wallet = self.sign_in.wallet_button.click() wallet = self.sign_in.wallet_button.click()
for asset in ['ETH', 'ADI', 'STT']: for asset in self.assets:
if wallet.get_asset_amount_by_name(asset) == 0: if wallet.get_asset_amount_by_name(asset) == 0:
self.errors.append('Asset %s was not restored' % asset) self.errors.append('Asset %s was not restored' % asset)

View File

@ -1,7 +1,7 @@
import pytest import pytest
from tests import marks from tests import marks
from tests.base_test_case import MultipleSharedDeviceTestCase, create_shared_drivers from tests.base_test_case import MultipleSharedDeviceTestCase, create_shared_drivers
from tests.users import transaction_senders, basic_user, ens_user, ens_user_ropsten from tests.users import transaction_senders, basic_user, ens_user, ens_user_message_sender
from views.sign_in_view import SignInView from views.sign_in_view import SignInView
@ -203,7 +203,7 @@ class TestPairingSyncMultipleDevicesMerged(MultipleSharedDeviceTestCase):
def test_pairing_sync_contacts_add_remove_set_nickname_ens(self): def test_pairing_sync_contacts_add_remove_set_nickname_ens(self):
[device.home_button.double_click() for device in (self.profile_1, self.profile_2)] [device.home_button.double_click() for device in (self.profile_1, self.profile_2)]
new_contact, new_nickname = transaction_senders['F'], "completely_new_nick" new_contact, new_nickname = transaction_senders['F'], "completely_new_nick"
self.home_1.add_contact(ens_user_ropsten['ens']) self.home_1.add_contact(ens_user_message_sender['ens'])
self.home_1.home_button.click() self.home_1.home_button.click()
self.home_1.add_contact(new_contact['public_key']) self.home_1.add_contact(new_contact['public_key'])
@ -211,7 +211,7 @@ class TestPairingSyncMultipleDevicesMerged(MultipleSharedDeviceTestCase):
self.profile_2.profile_button.double_click() self.profile_2.profile_button.double_click()
self.profile_2.contacts_button.scroll_to_element(direction='up') self.profile_2.contacts_button.scroll_to_element(direction='up')
self.profile_2.contacts_button.click() self.profile_2.contacts_button.click()
for contact in (new_contact['username'], '@%s' % ens_user_ropsten['ens']): for contact in (new_contact['username'], '@%s' % ens_user_message_sender['ens']):
if not self.profile_2.element_by_text(contact).is_element_displayed(): if not self.profile_2.element_by_text(contact).is_element_displayed():
self.errors.append("'%s' new contact is not synced!" % contact) self.errors.append("'%s' new contact is not synced!" % contact)

View File

@ -5,7 +5,7 @@ from support.utilities import get_merged_txs_list
from tests import marks, common_password, pin, puk, pair_code from tests import marks, common_password, pin, puk, pair_code
from tests.base_test_case import MultipleSharedDeviceTestCase, create_shared_drivers from tests.base_test_case import MultipleSharedDeviceTestCase, create_shared_drivers
from tests.users import transaction_senders, basic_user, wallet_users, ens_user_ropsten, ens_user from tests.users import transaction_senders, basic_user, wallet_users, ens_user_message_sender, ens_user
from views.sign_in_view import SignInView from views.sign_in_view import SignInView
@ -22,13 +22,14 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase):
self.sign_in = SignInView(self.drivers[0]) self.sign_in = SignInView(self.drivers[0])
self.home = self.sign_in.recover_access(self.user['passphrase']) self.home = self.sign_in.recover_access(self.user['passphrase'])
self.wallet = self.home.wallet_button.click() self.wallet = self.home.wallet_button.click()
self.assets = ('ETH', 'ADI', 'STT') self.assets = ('ETH', 'YEENUS', 'STT')
self.token_8_dec = 'YEENUS'
[self.wallet.wait_balance_is_changed(asset) for asset in self.assets] [self.wallet.wait_balance_is_changed(asset) for asset in self.assets]
self.initial_balances = dict() self.initial_balances = dict()
for asset in self.assets: for asset in self.assets:
self.initial_balances[asset] = self.wallet.get_asset_amount_by_name(asset) self.initial_balances[asset] = self.wallet.get_asset_amount_by_name(asset)
self.wallet.send_transaction(amount=self.amount_eth, recipient=self.recipient_address) self.wallet.send_transaction(amount=self.amount_eth, recipient=self.recipient_address)
self.wallet.send_transaction(amount=self.amount_adi, recipient=self.recipient_address, asset_name='ADI') self.wallet.send_transaction(amount=self.amount_adi, recipient=self.recipient_address, asset_name=self.token_8_dec)
@marks.testrail_id(700763) @marks.testrail_id(700763)
def test_send_tx_eth_check_logcat(self): def test_send_tx_eth_check_logcat(self):
@ -44,8 +45,8 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase):
self.wallet.driver.fail(values_in_logcat) self.wallet.driver.fail(values_in_logcat)
@marks.testrail_id(700764) @marks.testrail_id(700764)
def test_send_tx_token_7_decimals(self): def test_send_tx_token_8_decimals(self):
asset = 'ADI' asset = self.token_8_dec
self.wallet.just_fyi("Checking tx with 7 decimals") self.wallet.just_fyi("Checking tx with 7 decimals")
transaction_adi = self.wallet.find_transaction_in_history(amount=self.amount_adi, asset=asset, return_hash=True) transaction_adi = self.wallet.find_transaction_in_history(amount=self.amount_adi, asset=asset, return_hash=True)
self.wallet.wallet_button.double_click() self.wallet.wallet_button.double_click()
@ -58,11 +59,12 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase):
status_test_dapp = self.home.open_status_test_dapp() status_test_dapp = self.home.open_status_test_dapp()
status_test_dapp.wait_for_d_aap_to_load() status_test_dapp.wait_for_d_aap_to_load()
self.wallet.just_fyi("Checking request STT") # TODO: temp due to goerli transition
status_test_dapp.assets_button.click() # self.wallet.just_fyi("Checking request STT")
status_test_dapp.request_stt_button.wait_for_element(60) # status_test_dapp.assets_button.click()
send_transaction = status_test_dapp.request_stt_button.click() # status_test_dapp.request_stt_button.wait_for_element(60)
send_transaction.sign_transaction() # send_transaction = status_test_dapp.request_stt_button.click()
# send_transaction.sign_transaction()
self.wallet.just_fyi("Checking signing message") self.wallet.just_fyi("Checking signing message")
status_test_dapp.transactions_button.click() status_test_dapp.transactions_button.click()
@ -102,7 +104,7 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase):
@marks.testrail_id(700765) @marks.testrail_id(700765)
def test_send_tx_custom_token_18_decimals_invalid_password(self): def test_send_tx_custom_token_18_decimals_invalid_password(self):
contract_address, name, symbol, decimals = '0x101848D5C5bBca18E6b4431eEdF6B95E9ADF82FA', 'Weenus 💪', 'WEENUS', '18' contract_address, name, symbol, decimals = '0xaFF4481D10270F50f203E0763e2597776068CBc5', 'Weenus 💪', 'WEENUS', '18'
self.home.wallet_button.double_click() self.home.wallet_button.double_click()
self.wallet.just_fyi("Check that can add custom token") self.wallet.just_fyi("Check that can add custom token")
@ -165,8 +167,8 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase):
account_name = 'my_acc_name' account_name = 'my_acc_name'
account_address = '0x8c2E3Cd844848E79cFd4671cE45C12F210b630d7' account_address = '0x8c2E3Cd844848E79cFd4671cE45C12F210b630d7'
recent_add_to_fav_name = 'my_Recent_STT' recent_add_to_fav_name = 'my_Recent_STT'
recent_add_to_fav_address = '0x58d8c3d70ce4fa4b9fb10a665c8712238746f2ff' recent_add_to_fav_address = '0xcf2272205cc0cf96cfbb9dd740bd681d1e86901e'
ens_status, ens_other = ens_user_ropsten, ens_user ens_status, ens_other = ens_user_message_sender, ens_user
basic_add_to_fav_name = 'my_basic_address' basic_add_to_fav_name = 'my_basic_address'
self.drivers[0].reset() self.drivers[0].reset()
@ -195,7 +197,7 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase):
send_tr.just_fyi('Set one of my accounts') send_tr.just_fyi('Set one of my accounts')
send_tr.chose_recipient_button.click_if_shown() send_tr.chose_recipient_button.click_if_shown()
send_tr.element_by_translation_id("my-accounts").click() send_tr.element_by_translation_id("my-accounts").scroll_and_click()
send_tr.element_by_text(account_name).click() send_tr.element_by_text(account_name).click()
if send_tr.enter_recipient_address_text.text != send_tr.get_formatted_recipient_address(account_address): if send_tr.enter_recipient_address_text.text != send_tr.get_formatted_recipient_address(account_address):
self.errors.append('Added account is not resolved as recipient') self.errors.append('Added account is not resolved as recipient')
@ -203,11 +205,11 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase):
send_tr.just_fyi('Set contract address from recent and check smart contract error') send_tr.just_fyi('Set contract address from recent and check smart contract error')
send_tr.chose_recipient_button.click() send_tr.chose_recipient_button.click()
send_tr.element_by_translation_id("recent").click() send_tr.element_by_translation_id("recent").click()
send_tr.element_by_text('↓ 1000 MDS').click() send_tr.element_by_text('↑ 0.02 ETHgo').scroll_and_click()
if not send_tr.element_by_translation_id("warning-sending-to-contract-descr").is_element_displayed(): if not send_tr.element_by_translation_id("warning-sending-to-contract-descr").is_element_displayed():
self.driver.fail('No warning is shown at attempt to set as recipient smart contract') self.driver.fail('No warning is shown at attempt to set as recipient smart contract')
send_tr.ok_button.click() send_tr.ok_button.click()
send_tr.element_by_text('↑ 0.001 ETHro').scroll_and_click() send_tr.element_by_text('↓ 2 STT').scroll_and_click()
send_tr.add_to_favorites(recent_add_to_fav_name) send_tr.add_to_favorites(recent_add_to_fav_name)
wallet.element_by_translation_id("recent").click() wallet.element_by_translation_id("recent").click()
@ -241,7 +243,7 @@ class TestSendTxDeviceMerged(MultipleSharedDeviceTestCase):
self.errors.append('ENS from contact is not resolved as recipient') self.errors.append('ENS from contact is not resolved as recipient')
send_tr.just_fyi('Set different ENS options') send_tr.just_fyi('Set different ENS options')
send_tr.set_recipient_address(ens_other['ens_another']) send_tr.set_recipient_address(ens_other['ens'])
if send_tr.enter_recipient_address_text.text != send_tr.get_formatted_recipient_address(ens_other['address']): if send_tr.enter_recipient_address_text.text != send_tr.get_formatted_recipient_address(ens_other['address']):
self.errors.append('ENS address on another domain is not resolved as recipient') self.errors.append('ENS address on another domain is not resolved as recipient')
send_tr.set_recipient_address('%s.stateofus.eth' % ens_status['ens']) send_tr.set_recipient_address('%s.stateofus.eth' % ens_status['ens'])
@ -277,7 +279,7 @@ class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase):
self.home = self.sign_in.recover_access(passphrase=self.user['passphrase'], keycard=True) self.home = self.sign_in.recover_access(passphrase=self.user['passphrase'], keycard=True)
self.wallet = self.home.wallet_button.click() self.wallet = self.home.wallet_button.click()
self.assets = ('ETH', 'ADI', 'STT') self.assets = ('ETH', 'YEENUS', 'STT')
[self.wallet.wait_balance_is_changed(asset) for asset in self.assets] [self.wallet.wait_balance_is_changed(asset) for asset in self.assets]
self.initial_balances = dict() self.initial_balances = dict()
for asset in self.assets: for asset in self.assets:
@ -321,11 +323,13 @@ class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase):
status_test_dapp = self.home.open_status_test_dapp() status_test_dapp = self.home.open_status_test_dapp()
status_test_dapp.wait_for_d_aap_to_load() status_test_dapp.wait_for_d_aap_to_load()
self.wallet.just_fyi("Requesting STT in dapp") # TODO: temp due to goerli transition
status_test_dapp.assets_button.click() # self.wallet.just_fyi("Requesting STT in dapp")
send_tx = status_test_dapp.request_stt_button.click() # status_test_dapp.assets_button.click()
send_tx.sign_transaction(keycard=True) # send_tx = status_test_dapp.request_stt_button.click()
# send_tx.sign_transaction(keycard=True)
send_tx = self.home.get_send_transaction_view()
self.wallet.just_fyi("Checking signing message") self.wallet.just_fyi("Checking signing message")
status_test_dapp.transactions_button.click() status_test_dapp.transactions_button.click()
status_test_dapp.sign_message_button.click() status_test_dapp.sign_message_button.click()
@ -357,9 +361,10 @@ class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase):
self.sign_in.driver.fail('Second send transaction screen did not appear!') self.sign_in.driver.fail('Second send transaction screen did not appear!')
send_tx.sign_transaction(keycard=True) send_tx.sign_transaction(keycard=True)
self.wallet.just_fyi('Verify that wallet balance is updated after receiving money from faucet') # TODO: temp due to goerli transition
self.home.wallet_button.click() # self.wallet.just_fyi('Verify that wallet balance is updated after receiving money from faucet')
self.wallet.wait_balance_is_changed('STT', initial_balance=self.initial_balances['STT']) # self.home.wallet_button.click()
# self.wallet.wait_balance_is_changed('STT', initial_balance=self.initial_balances['STT'])
self.errors.verify_no_errors() self.errors.verify_no_errors()
@marks.testrail_id(700770) @marks.testrail_id(700770)
@ -385,14 +390,14 @@ class TestKeycardTxOneDeviceMerged(MultipleSharedDeviceTestCase):
self.sign_in.just_fyi("Check balance will be restored after going back online") self.sign_in.just_fyi("Check balance will be restored after going back online")
self.sign_in.toggle_airplane_mode() self.sign_in.toggle_airplane_mode()
wallet = self.home.wallet_button.click() wallet = self.home.wallet_button.click()
[wallet.wait_balance_is_changed(asset) for asset in ("ETH", "LXS")] [wallet.wait_balance_is_changed(asset) for asset in ("ETH", "STT")]
self.wallet.just_fyi("Checking whole tx history after backing from offline") self.wallet.just_fyi("Checking whole tx history after backing from offline")
self.wallet.accounts_status_account.click() self.wallet.accounts_status_account.click()
address = user['address'] address = user['address']
ropsten_txs = self.network_api.get_transactions(address) eth_txs = self.network_api.get_transactions(address)
ropsten_tokens = self.network_api.get_token_transactions(address) token_txs = self.network_api.get_token_transactions(address)
expected_txs_list = get_merged_txs_list(ropsten_txs, ropsten_tokens) expected_txs_list = get_merged_txs_list(eth_txs, token_txs)
transactions = self.wallet.transaction_history_button.click() transactions = self.wallet.transaction_history_button.click()
if self.wallet.element_by_translation_id("transactions-history-empty").is_element_displayed(): if self.wallet.element_by_translation_id("transactions-history-empty").is_element_displayed():
self.wallet.pull_to_refresh() self.wallet.pull_to_refresh()

View File

@ -21,9 +21,9 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase):
self.sign_in.switch_to_mobile(before_login=True) self.sign_in.switch_to_mobile(before_login=True)
self.home = self.sign_in.recover_access(self.user['passphrase']) self.home = self.sign_in.recover_access(self.user['passphrase'])
self.wallet = self.home.wallet_button.click() self.wallet = self.home.wallet_button.click()
[self.wallet.wait_balance_is_changed(asset) for asset in ('ETH', 'MDS', 'STT')] [self.wallet.wait_balance_is_changed(asset) for asset in ('ETH', 'YEENUS', 'STT')]
self.initial_balances = {'ETH': self.wallet.get_asset_amount_by_name('ETH'), self.initial_balances = {'ETH': self.wallet.get_asset_amount_by_name('ETH'),
'ADI': 0, 'YEENUS': self.wallet.get_asset_amount_by_name('YEENUS'),
'STT': self.wallet.get_asset_amount_by_name('STT')} 'STT': self.wallet.get_asset_amount_by_name('STT')}
@marks.testrail_id(700756) @marks.testrail_id(700756)
@ -117,7 +117,7 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase):
@marks.testrail_id(700758) @marks.testrail_id(700758)
def test_wallet_manage_assets(self): def test_wallet_manage_assets(self):
asset = "HND" asset = "ZEENUS"
self.sign_in.just_fyi("Getting back to main wallet view") self.sign_in.just_fyi("Getting back to main wallet view")
self.wallet.get_back_to_home_view() self.wallet.get_back_to_home_view()
@ -128,11 +128,9 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase):
self.errors.append('%s asset is not shown in wallet' % asset) self.errors.append('%s asset is not shown in wallet' % asset)
self.sign_in.just_fyi("Check that 0 asset is not disappearing after relogin") self.sign_in.just_fyi("Check that 0 asset is not disappearing after relogin")
profile = self.wallet.profile_button.click() self.wallet.reopen_app()
profile.relogin()
self.sign_in.wallet_button.click() self.sign_in.wallet_button.click()
if not self.wallet.asset_by_name(asset).is_element_displayed(): self.wallet.asset_by_name(asset).scroll_to_element()
self.errors.append('%s asset is not shown in wallet after relogin' % asset)
self.sign_in.just_fyi("Deselecting asset") self.sign_in.just_fyi("Deselecting asset")
self.wallet.multiaccount_more_options.click() self.wallet.multiaccount_more_options.click()

View File

@ -1,9 +1,11 @@
import time
import pytest import pytest
from tests import marks, common_password, used_fleet from tests import marks, common_password, used_fleet
from tests.base_test_case import create_shared_drivers, MultipleSharedDeviceTestCase from tests.base_test_case import create_shared_drivers, MultipleSharedDeviceTestCase
from views.sign_in_view import SignInView from views.sign_in_view import SignInView
from tests.users import basic_user, ens_user, ens_user_ropsten, transaction_senders, chat_users from tests.users import basic_user, ens_user, ens_user_message_sender, transaction_senders, chat_users
@pytest.mark.xdist_group(name="one_1") @pytest.mark.xdist_group(name="one_1")
@ -14,7 +16,7 @@ class TestBrowserProfileOneDevice(MultipleSharedDeviceTestCase):
self.drivers, self.loop = create_shared_drivers(1) self.drivers, self.loop = create_shared_drivers(1)
self.sign_in = SignInView(self.drivers[0]) self.sign_in = SignInView(self.drivers[0])
self.home = self.sign_in.create_user() self.home = self.sign_in.create_user()
self.wiki_texts = ['Español', '日本語', 'Français', '中文', 'Português'] self.wiki_texts = ['Español', '日本語', '中文', 'Português']
@marks.testrail_id(702149) @marks.testrail_id(702149)
def test_browser_can_access_images_by_link(self): def test_browser_can_access_images_by_link(self):
@ -78,30 +80,26 @@ class TestBrowserProfileOneDevice(MultipleSharedDeviceTestCase):
# Switching back to ropsten # Switching back to ropsten
web_page.profile_button.click() web_page.profile_button.click()
profile.switch_network('Ropsten with upstream RPC') profile.switch_network('Goerli with upstream RPC')
self.errors.verify_no_errors() self.errors.verify_no_errors()
@marks.testrail_id(702179) @marks.testrail_id(702179)
def test_browser_refresh_page(self): def test_browser_refresh_page(self):
dapp = self.home.dapp_tab_button.click() dapp = self.home.dapp_tab_button.click()
url = 'app.uniswap.org' url = 'status.im'
dapp.just_fyi("Check refresh button")
web_page = dapp.open_url(url) web_page = dapp.open_url(url)
dapp.allow_button.click_if_shown()
element_on_start_page = dapp.element_by_text('Select a token')
dapp.allow_button.click_if_shown()
element_on_start_page.scroll_and_click()
# when bottom sheet is opened, elements by text couldn't be found self.home.just_fyi("Open collapsed menu and check required element is shown")
element_on_start_page.wait_for_invisibility_of_element(20) web_page.open_right_collapsed_menu()
element_on_start_page = dapp.element_by_text('Get Involved')
element_on_start_page.wait_for_visibility_of_element(20)
self.home.just_fyi("Tap on Refresh and check that popup is closed")
web_page.browser_refresh_page_button.click() web_page.browser_refresh_page_button.click()
time.sleep(2)
if not element_on_start_page.is_element_displayed(30): if element_on_start_page.is_element_displayed(10):
self.errors.append("Page failed to be refreshed") self.errors.append("Page failed to be refreshed")
self.errors.verify_no_errors() self.errors.verify_no_errors()
@marks.testrail_id(702151) @marks.testrail_id(702151)
@ -187,21 +185,23 @@ class TestBrowserProfileOneDevice(MultipleSharedDeviceTestCase):
@marks.testrail_id(702159) @marks.testrail_id(702159)
def test_profile_invite_friends(self): def test_profile_invite_friends(self):
chat_key = self.home.get_public_key_and_username()
self.home.home_button.double_click() self.home.home_button.double_click()
self.home.just_fyi("Check it via 'Invite friends' on home view") self.home.just_fyi("Check it via 'Invite friends' on home view")
self.home.invite_friends_button.click() self.home.invite_friends_button.click()
self.home.share_via_messenger() self.home.share_via_messenger()
self.home.element_by_text_part("Hey join me on Status: https://join.status.im/u/0x") if not self.home.element_by_text_part('Hey join me on Status: https://join.status.im/u/%s' % chat_key).is_element_displayed(20):
self.home.click_system_back_button() self.errors.append("No expected message in input field when sharing via 'Invite friend'")
self.home.click_system_back_button_until_element_is_shown()
self.home.just_fyi("Check it via bottom sheet menu") self.home.just_fyi("Check it via bottom sheet menu")
self.home.plus_button.click() self.home.plus_button.click()
self.home.chats_menu_invite_friends_button.click() self.home.chats_menu_invite_friends_button.click()
self.home.share_via_messenger() self.home.share_via_messenger()
self.home.element_by_text_part("Hey join me on Status: https://join.status.im/u/0x") if not self.home.element_by_text_part('Hey join me on Status: https://join.status.im/u/%s' % chat_key).is_element_displayed(20):
self.home.click_system_back_button() self.errors.append("No expected message in input field when sharing via 'bottom sheet'")
self.home.click_system_back_button_until_element_is_shown()
self.errors.verify_no_errors() self.errors.verify_no_errors()
@marks.testrail_id(702160) @marks.testrail_id(702160)
@ -215,8 +215,8 @@ class TestBrowserProfileOneDevice(MultipleSharedDeviceTestCase):
users = { users = {
'scanning_ens_with_stateofus_domain_deep_link': { 'scanning_ens_with_stateofus_domain_deep_link': {
'contact_code': 'https://join.status.im/u/%s.stateofus.eth' % ens_user_ropsten['ens'], 'contact_code': 'https://join.status.im/u/%s.stateofus.eth' % ens_user_message_sender['ens'],
'username': ens_user_ropsten['username'] 'username': ens_user_message_sender['username']
}, },
'scanning_public_key': { 'scanning_public_key': {
'contact_code': transaction_senders['A']['public_key'], 'contact_code': transaction_senders['A']['public_key'],
@ -289,8 +289,8 @@ class TestBrowserProfileOneDevice(MultipleSharedDeviceTestCase):
if not profile.element_by_text_part('custom_ropsten').is_element_displayed(): if not profile.element_by_text_part('custom_ropsten').is_element_displayed():
self.driver.fail("Network custom_ropsten was not added!") self.driver.fail("Network custom_ropsten was not added!")
profile.get_back_to_home_view() profile.get_back_to_home_view()
# Switching back to Ropsten for the next cases # Switching back to Goerli for the next cases
profile.switch_network('Ropsten with upstream RPC') profile.switch_network('Goerli with upstream RPC')
self.errors.verify_no_errors() self.errors.verify_no_errors()
@ -374,13 +374,11 @@ class TestBrowserProfileOneDevice(MultipleSharedDeviceTestCase):
profile = self.home.profile_button.click() profile = self.home.profile_button.click()
profile.advanced_button.click() profile.advanced_button.click()
default_log_level = 'INFO' default_log_level = 'DEBUG'
if not profile.element_by_text(default_log_level).is_element_displayed(): if not profile.element_by_text(default_log_level).is_element_displayed():
self.errors.append('%s is not selected by default' % default_log_level) self.errors.append('%s is not selected by default' % default_log_level)
if self.home.find_values_in_geth('lvl=trce', 'lvl=dbug'): if self.home.find_values_in_geth('lvl=trce'):
self.errors.append('"%s" is set, but found another entries!' % default_log_level) self.errors.append('"%s" is set, but found another entries!' % default_log_level)
if not self.home.find_values_in_geth('lvl=info'):
self.errors.append('"%s" is set, but no entries are found!' % default_log_level)
self.home.just_fyi('Set another loglevel and check that changes are applied') self.home.just_fyi('Set another loglevel and check that changes are applied')
profile.log_level_setting_button.click() profile.log_level_setting_button.click()

View File

@ -185,6 +185,7 @@ class TestTimelineHistoryNodesBootnodesMultipleDeviceMergedMedium(MultipleShared
self.errors.verify_no_errors() self.errors.verify_no_errors()
@marks.testrail_id(702286) @marks.testrail_id(702286)
@marks.xfail(reason="flaky; history was not fetched after enabling use_history_node - something needs investigation")
def test_profile_use_history_node_disable_enable(self): def test_profile_use_history_node_disable_enable(self):
[home.home_button.double_click() for home in (self.home_1, self.home_2)] [home.home_button.double_click() for home in (self.home_1, self.home_2)]
self.home_1.toggle_airplane_mode() self.home_1.toggle_airplane_mode()
@ -224,7 +225,7 @@ class TestTimelineHistoryNodesBootnodesMultipleDeviceMergedMedium(MultipleShared
self.errors.verify_no_errors() self.errors.verify_no_errors()
@marks.testrail_id(702287) @marks.testrail_id(702287)
@marks.xfail(reason="may be failed due to #13333") #@marks.xfail(reason="may be failed due to #13333")
def test_profile_can_not_connect_to_custom_history_node_add_delete(self): def test_profile_can_not_connect_to_custom_history_node_add_delete(self):
self.home_1.profile_button.double_click() self.home_1.profile_button.double_click()
self.home_2.home_button.double_click() self.home_2.home_button.double_click()
@ -716,6 +717,7 @@ class TestChatMediumMultipleDevice(MultipleSharedDeviceTestCase):
self.errors.verify_no_errors() self.errors.verify_no_errors()
@pytest.mark.xdist_group(name="one_3") @pytest.mark.xdist_group(name="one_3")
@marks.medium @marks.medium
class TestGroupChatMultipleDeviceMediumMerged(MultipleSharedDeviceTestCase): class TestGroupChatMultipleDeviceMediumMerged(MultipleSharedDeviceTestCase):

View File

@ -4,7 +4,7 @@ from selenium.common.exceptions import NoSuchElementException
from tests import marks, test_dapp_url from tests import marks, test_dapp_url
from tests.base_test_case import create_shared_drivers, MultipleSharedDeviceTestCase from tests.base_test_case import create_shared_drivers, MultipleSharedDeviceTestCase
from tests.users import dummy_user, transaction_senders, basic_user, \ from tests.users import dummy_user, transaction_senders, basic_user, \
ens_user_ropsten, ens_user ens_user_message_sender, ens_user
from views.sign_in_view import SignInView from views.sign_in_view import SignInView
@ -22,11 +22,11 @@ class TestDeeplinkChatProfileOneDevice(MultipleSharedDeviceTestCase):
self.nickname = 'dummy_user' self.nickname = 'dummy_user'
self.search_list_1 = { self.search_list_1 = {
basic_user['username']: basic_user['username'], basic_user['username']: basic_user['username'],
ens_user_ropsten['username']: ens_user_ropsten['ens'], ens_user_message_sender['username']: ens_user_message_sender['ens'],
self.public_chat_name: self.public_chat_name, self.public_chat_name: self.public_chat_name,
self.nickname: self.nickname, self.nickname: self.nickname,
dummy_user['username']: self.nickname, dummy_user['username']: self.nickname,
ens_user_ropsten['ens']: ens_user_ropsten['ens'] ens_user_message_sender['ens']: ens_user_message_sender['ens']
} }
self.public_chat = self.home.join_public_chat(self.public_chat_name) self.public_chat = self.home.join_public_chat(self.public_chat_name)
self.public_chat.get_back_to_home_view() self.public_chat.get_back_to_home_view()
@ -56,7 +56,7 @@ class TestDeeplinkChatProfileOneDevice(MultipleSharedDeviceTestCase):
@marks.testrail_id(702245) @marks.testrail_id(702245)
def test_deep_link_open_user_profile(self): def test_deep_link_open_user_profile(self):
for user_ident in ens_user['ens'], ens_user['ens_another'], ens_user['public_key']: for user_ident in ens_user['ens'], ens_user['ens_upgrade'], ens_user['public_key']:
self.drivers[0].close_app() self.drivers[0].close_app()
deep_link = 'status-im://u/%s' % user_ident deep_link = 'status-im://u/%s' % user_ident
self.sign_in.open_weblink_and_login(deep_link) self.sign_in.open_weblink_and_login(deep_link)
@ -148,8 +148,8 @@ class TestDeeplinkChatProfileOneDevice(MultipleSharedDeviceTestCase):
self.public_chat.set_nickname(self.nickname) self.public_chat.set_nickname(self.nickname)
self.public_chat.home_button.click() self.public_chat.home_button.click()
ens_name_status, ens_name_another_domain, public_chat_name = ens_user_ropsten['ens'], \ ens_name_status, ens_name_another_domain, public_chat_name = ens_user_message_sender['ens'], \
ens_user['ens_another'], 'some-pub-chat' ens_user['ens'], 'some-pub-chat'
search_list_2 = { search_list_2 = {
ens_name_status: { ens_name_status: {
'home': { 'home': {

View File

@ -1,8 +1,8 @@
import pytest import pytest
from tests import marks from tests import marks, test_dapp_url
from tests.base_test_case import create_shared_drivers, MultipleSharedDeviceTestCase from tests.base_test_case import create_shared_drivers, MultipleSharedDeviceTestCase
from tests.users import transaction_senders, basic_user, ens_user_ropsten, ens_user from tests.users import transaction_senders, basic_user, ens_user_message_sender, ens_user
from views.chat_view import ChatView from views.chat_view import ChatView
from views.profile_view import ProfileView from views.profile_view import ProfileView
from views.send_transaction_view import SendTransactionView from views.send_transaction_view import SendTransactionView
@ -139,7 +139,7 @@ class TestPermissionsScanQrOneDevice(MultipleSharedDeviceTestCase):
camera_dapp.just_fyi("Relogin and check camera access still needs to be allowed") camera_dapp.just_fyi("Relogin and check camera access still needs to be allowed")
self.home.profile_button.click() self.home.profile_button.click()
profile.relogin() profile.reopen_app()
self.home.dapp_tab_button.click() self.home.dapp_tab_button.click()
camera_dapp.open_tabs_button.click() camera_dapp.open_tabs_button.click()
dapp.element_by_text_part("https").click() dapp.element_by_text_part("https").click()
@ -155,16 +155,16 @@ class TestPermissionsScanQrOneDevice(MultipleSharedDeviceTestCase):
url_data = { url_data = {
'ens_with_stateofus_domain_deep_link': { 'ens_with_stateofus_domain_deep_link': {
'url': 'https://join.status.im/u/%s.stateofus.eth' % ens_user_ropsten['ens'], 'url': 'https://join.status.im/u/%s.stateofus.eth' % ens_user_message_sender['ens'],
'username': '@%s' % ens_user_ropsten['ens'] 'username': '@%s' % ens_user_message_sender['ens']
}, },
'ens_without_stateofus_domain_deep_link': { 'ens_without_stateofus_domain_deep_link': {
'url': 'https://join.status.im/u/%s' % ens_user_ropsten['ens'], 'url': 'https://join.status.im/u/%s' % ens_user_message_sender['ens'],
'username': '@%s' % ens_user_ropsten['ens'] 'username': '@%s' % ens_user_message_sender['ens']
}, },
'ens_another_domain_deep_link': { 'ens_another_domain_deep_link': {
'url': 'status-im://u/%s' % ens_user['ens_another'], 'url': 'status-im://u/%s' % ens_user['ens'],
'username': '@%s' % ens_user['ens_another'] 'username': '@%s' % ens_user['ens']
}, },
'own_profile_key_deep_link': { 'own_profile_key_deep_link': {
'url': 'https://join.status.im/u/%s' % self.public_key, 'url': 'https://join.status.im/u/%s' % self.public_key,
@ -225,8 +225,8 @@ class TestPermissionsScanQrOneDevice(MultipleSharedDeviceTestCase):
url_data = { url_data = {
'ens_without_stateofus_domain_deep_link': { 'ens_without_stateofus_domain_deep_link': {
'url': 'https://join.status.im/u/%s' % ens_user_ropsten['ens'], 'url': 'https://join.status.im/u/%s' % ens_user_message_sender['ens'],
'username': '@%s' % ens_user_ropsten['ens'] 'username': '@%s' % ens_user_message_sender['ens']
}, },
'other_user_profile_key_deep_link': { 'other_user_profile_key_deep_link': {
@ -245,19 +245,19 @@ class TestPermissionsScanQrOneDevice(MultipleSharedDeviceTestCase):
'username': transaction_senders['A']['username'] 'username': transaction_senders['A']['username']
}, },
'wallet_validation_wrong_address_transaction': { 'wallet_validation_wrong_address_transaction': {
'url': 'ethereum:0x744d70fdbe2ba4cf95131626614a1763df805b9e@3/transfer?address=blablabla&uint256=1e10', 'url': 'ethereum:0x744d70fdbe2ba4cf95131626614a1763df805b9e@5/transfer?address=blablabla&uint256=1e10',
'error': 'Invalid address', 'error': 'Invalid address',
}, },
'wallet_eip_ens_for_receiver': { 'wallet_eip_ens_for_receiver': {
'url': 'ethereum:0xc55cf4b03948d7ebc8b9e8bad92643703811d162@3/transfer?address=nastya.stateofus.eth&uint256=1e-1', 'url': 'ethereum:0x3d6afaa395c31fcd391fe3d562e75fe9e8ec7e6a@5/transfer?address=%s.stateofus.eth&uint256=1e-1' % ens_user_message_sender['ens'],
'data': { 'data': {
'asset': 'STT', 'asset': 'STT',
'amount': '0.1', 'amount': '0.1',
'address': '0x58d8…F2ff', 'address': '0x75fF…4184',
}, },
}, },
'wallet_eip_payment_link': { 'wallet_eip_payment_link': {
'url': 'ethereum:pay-0xc55cf4b03948d7ebc8b9e8bad92643703811d162@3/transfer?address=0x3d597789ea16054a084ac84ce87f50df9198f415&uint256=1e1', 'url': 'ethereum:pay-0x3d6afaa395c31fcd391fe3d562e75fe9e8ec7e6a@5/transfer?address=0x3d597789ea16054a084ac84ce87f50df9198f415&uint256=1e1',
'data': { 'data': {
'amount': '10', 'amount': '10',
'asset': 'STT', 'asset': 'STT',
@ -265,10 +265,10 @@ class TestPermissionsScanQrOneDevice(MultipleSharedDeviceTestCase):
}, },
}, },
'dapp_deep_link': { 'dapp_deep_link': {
'url': 'https://join.status.im/b/simpledapp.eth', 'url': 'https://join.status.im/b/%s' % test_dapp_url,
}, },
'dapp_deep_link_https': { 'dapp_deep_link_https': {
'url': 'https://join.status.im/b/https://simpledapp.eth', 'url': 'https://join.status.im/b/%s' % test_dapp_url,
}, },
'public_chat_deep_link': { 'public_chat_deep_link': {
'url': 'https://join.status.im/baga-ma-2020', 'url': 'https://join.status.im/baga-ma-2020',
@ -309,8 +309,7 @@ class TestPermissionsScanQrOneDevice(MultipleSharedDeviceTestCase):
wallet.home_button.click() wallet.home_button.click()
if 'dapp' in key: if 'dapp' in key:
self.home.open_in_status_button.click() self.home.open_in_status_button.click()
if not (chat.allow_button.is_element_displayed() or chat.element_by_text( if not chat.allow_button.is_element_displayed():
"Can't find web3 library").is_element_displayed()):
self.errors.append('No allow button is shown in case of navigating to Status dapp!') self.errors.append('No allow button is shown in case of navigating to Status dapp!')
chat.dapp_tab_button.click() chat.dapp_tab_button.click()
chat.home_button.click() chat.home_button.click()
@ -343,11 +342,11 @@ class TestPermissionsScanQrOneDevice(MultipleSharedDeviceTestCase):
url_data = { url_data = {
'ens_for_receiver': { 'ens_for_receiver': {
'url': 'ethereum:0xc55cf4b03948d7ebc8b9e8bad92643703811d162@3/transfer?address=nastya.stateofus.eth&uint256=1e-1', 'url': 'ethereum:0x3D6AFAA395C31FCd391fE3D562E75fe9E8ec7E6a@5/transfer?address=%s.stateofus.eth&uint256=1e-1' % ens_user_message_sender['ens'],
'data': { 'data': {
'asset': 'STT', 'asset': 'STT',
'amount': '0.1', 'amount': '0.1',
'address': '0x58d8…F2ff', 'address': '0x75fF…4184',
}, },
}, },
# 'gas_settings': { # 'gas_settings': {
@ -361,7 +360,7 @@ class TestPermissionsScanQrOneDevice(MultipleSharedDeviceTestCase):
# }, # },
# }, # },
'payment_link': { 'payment_link': {
'url': 'ethereum:pay-0xc55cf4b03948d7ebc8b9e8bad92643703811d162@3/transfer?address=0x3d597789ea16054a084ac84ce87f50df9198f415&uint256=1e1', 'url': 'ethereum:pay-0x3D6AFAA395C31FCd391fE3D562E75fe9E8ec7E6a@5/transfer?address=0x3d597789ea16054a084ac84ce87f50df9198f415&uint256=1e1',
'data': { 'data': {
'amount': '10', 'amount': '10',
'asset': 'STT', 'asset': 'STT',
@ -369,7 +368,7 @@ class TestPermissionsScanQrOneDevice(MultipleSharedDeviceTestCase):
}, },
}, },
'validation_amount_too_presize': { 'validation_amount_too_presize': {
'url': 'ethereum:0xc55cf4b03948d7ebc8b9e8bad92643703811d162@3/transfer?address=0x101848D5C5bBca18E6b4431eEdF6B95E9ADF82FA&uint256=1e-19', 'url': 'ethereum:0x3D6AFAA395C31FCd391fE3D562E75fe9E8ec7E6a@5/transfer?address=0x101848D5C5bBca18E6b4431eEdF6B95E9ADF82FA&uint256=1e-19',
'data': { 'data': {
'amount': '1e-19', 'amount': '1e-19',
'asset': 'STT', 'asset': 'STT',
@ -379,10 +378,10 @@ class TestPermissionsScanQrOneDevice(MultipleSharedDeviceTestCase):
'send_transaction_validation_error': 'Amount is too precise', 'send_transaction_validation_error': 'Amount is too precise',
}, },
'validation_amount_too_big': { 'validation_amount_too_big': {
'url': 'ethereum:0x101848D5C5bBca18E6b4431eEdF6B95E9ADF82FA@3?value=1e25', 'url': 'ethereum:0x101848D5C5bBca18E6b4431eEdF6B95E9ADF82FA@5?value=1e25',
'data': { 'data': {
'amount': '10000000', 'amount': '10000000',
'asset': 'ETHro', 'asset': 'ETHgo',
'address': '0x1018…82FA', 'address': '0x1018…82FA',
}, },
@ -393,12 +392,12 @@ class TestPermissionsScanQrOneDevice(MultipleSharedDeviceTestCase):
'error': 'Network does not match', 'error': 'Network does not match',
'data': { 'data': {
'amount': '0.1', 'amount': '0.1',
'asset': 'ETHro', 'asset': 'ETHgo',
'address': '0x1018…82FA', 'address': '0x1018…82FA',
}, },
}, },
'validation_wrong_address': { 'validation_wrong_address': {
'url': 'ethereum:0x744d70fdbe2ba4cf95131626614a1763df805b9e@3/transfer?address=blablabla&uint256=1e10', 'url': 'ethereum:0x744d70fdbe2ba4cf95131626614a1763df805b9e@5/transfer?address=blablabla&uint256=1e10',
'error': 'Invalid address', 'error': 'Invalid address',
}, },
} }

View File

@ -3,7 +3,7 @@ import random
from tests import marks, mailserver_ams, mailserver_gc, mailserver_hk, used_fleet, common_password,\ from tests import marks, mailserver_ams, mailserver_gc, mailserver_hk, used_fleet, common_password,\
pair_code, unique_password pair_code, unique_password
from tests.users import user_mainnet, chat_users, recovery_users, transaction_senders, basic_user,\ from tests.users import user_mainnet, chat_users, recovery_users, transaction_senders, basic_user,\
wallet_users, ens_user_ropsten, ens_user wallet_users, ens_user_message_sender, ens_user
from tests.base_test_case import SingleDeviceTestCase from tests.base_test_case import SingleDeviceTestCase
from views.sign_in_view import SignInView from views.sign_in_view import SignInView
import support.api.web3_api as w3 import support.api.web3_api as w3
@ -44,7 +44,7 @@ class TestChatManagement(SingleDeviceTestCase):
sign_in.toggle_mobile_data() sign_in.toggle_mobile_data()
sign_in.element_by_text_part('Stop syncing').wait_and_click(60) sign_in.element_by_text_part('Stop syncing').wait_and_click(60)
sign_in.wallet_button.click() sign_in.wallet_button.click()
if not wallet_view.element_by_text_part('LXS').is_element_displayed(): if not wallet_view.element_by_text_part('XEENUS').is_element_displayed():
self.errors.append('Token balance is not fetched while on cellular network!') self.errors.append('Token balance is not fetched while on cellular network!')
wallet_view.just_fyi('Add watch-only account when on cellular network') wallet_view.just_fyi('Add watch-only account when on cellular network')
@ -60,7 +60,7 @@ class TestChatManagement(SingleDeviceTestCase):
wallet_view.just_fyi('Check that balance is changed after go back to WI-FI') wallet_view.just_fyi('Check that balance is changed after go back to WI-FI')
sign_in.toggle_mobile_data() sign_in.toggle_mobile_data()
for asset in ('ADI', 'STT'): for asset in ('YEENUS', 'STT'):
wallet_view.asset_by_name(asset).scroll_to_element() wallet_view.asset_by_name(asset).scroll_to_element()
wallet_view.wait_balance_is_changed(asset, wait_time=60) wallet_view.wait_balance_is_changed(asset, wait_time=60)
@ -487,7 +487,7 @@ class TestChatManagement(SingleDeviceTestCase):
sign_in = SignInView(self.driver) sign_in = SignInView(self.driver)
errors = {'send_transaction_screen': { errors = {'send_transaction_screen': {
'too_precise': 'Amount is too precise. Max number of decimals is 7.', 'too_precise': 'Amount is too precise. Max number of decimals is 8.',
'insufficient_funds': 'Insufficient funds' 'insufficient_funds': 'Insufficient funds'
}, },
'sending_screen': { 'sending_screen': {
@ -499,14 +499,14 @@ class TestChatManagement(SingleDeviceTestCase):
sign_in.recover_access(sender['passphrase']) sign_in.recover_access(sender['passphrase'])
wallet = sign_in.wallet_button.click() wallet = sign_in.wallet_button.click()
wallet.wait_balance_is_changed('ADI') wallet.wait_balance_is_changed('YEENUS')
wallet.accounts_status_account.click() wallet.accounts_status_account.click()
screen = 'send transaction screen from wallet' screen = 'send transaction screen from wallet'
sign_in.just_fyi('Checking %s on %s' % (errors['send_transaction_screen']['too_precise'], screen)) sign_in.just_fyi('Checking %s on %s' % (errors['send_transaction_screen']['too_precise'], screen))
initial_amount_adi = wallet.get_asset_amount_by_name('ADI') initial_amount_adi = wallet.get_asset_amount_by_name('YEENUS')
send_transaction = wallet.send_transaction_button.click() send_transaction = wallet.send_transaction_button.click()
adi_button = send_transaction.asset_by_name('ADI') adi_button = send_transaction.asset_by_name('YEENUS')
send_transaction.select_asset_button.click_until_presence_of_element( send_transaction.select_asset_button.click_until_presence_of_element(
send_transaction.eth_asset_in_select_asset_bottom_sheet_button) send_transaction.eth_asset_in_select_asset_bottom_sheet_button)
adi_button.click() adi_button.click()
@ -533,7 +533,7 @@ class TestChatManagement(SingleDeviceTestCase):
wallet.get_account_by_name(account_name).click() wallet.get_account_by_name(account_name).click()
wallet.send_transaction_button.click() wallet.send_transaction_button.click()
send_transaction.amount_edit_box.set_value('0') send_transaction.amount_edit_box.set_value('0')
send_transaction.set_recipient_address(ens_user_ropsten['ens']) send_transaction.set_recipient_address(ens_user_message_sender['ens'])
send_transaction.next_button.click() send_transaction.next_button.click()
wallet.ok_got_it_button.wait_and_click(30) wallet.ok_got_it_button.wait_and_click(30)
if not send_transaction.validation_error_element.is_element_displayed(10): if not send_transaction.validation_error_element.is_element_displayed(10):
@ -569,8 +569,8 @@ class TestChatManagement(SingleDeviceTestCase):
send_transaction = wallet.send_transaction_button.click() send_transaction = wallet.send_transaction_button.click()
amount = '0.000%s' % str(random.randint(100000, 999999)) + '1' amount = '0.000%s' % str(random.randint(100000, 999999)) + '1'
send_transaction.amount_edit_box.set_value(amount) self.value = send_transaction.amount_edit_box.set_value(amount)
send_transaction.set_recipient_address(ens_user_ropsten['ens']) send_transaction.set_recipient_address(ens_user_message_sender['ens'])
send_transaction.next_button.click() send_transaction.next_button.click()
wallet.ok_got_it_button.wait_and_click(30) wallet.ok_got_it_button.wait_and_click(30)
send_transaction.network_fee_button.click() send_transaction.network_fee_button.click()
@ -630,8 +630,9 @@ class TestChatManagement(SingleDeviceTestCase):
wallet.just_fyi('Verify custom fee data on tx screen') wallet.just_fyi('Verify custom fee data on tx screen')
wallet.swipe_up() wallet.swipe_up()
for key in expected_params: for key in expected_params:
if not wallet.element_by_text_part(expected_params[key]).is_element_displayed(): if key != 'fee_cap':
self.errors.append("Custom tx param %s is not shown on tx history screen" % key) if not wallet.element_by_text_part(expected_params[key]).is_element_displayed():
self.errors.append("Custom tx param %s is not shown on tx history screen" % key)
wallet.just_fyi("Check below fee popup on mainnet") wallet.just_fyi("Check below fee popup on mainnet")
profile = wallet.profile_button.click() profile = wallet.profile_button.click()
@ -641,7 +642,7 @@ class TestChatManagement(SingleDeviceTestCase):
send_transaction = wallet.send_transaction_button.click_until_presence_of_element(send_transaction.amount_edit_box) send_transaction = wallet.send_transaction_button.click_until_presence_of_element(send_transaction.amount_edit_box)
send_transaction.amount_edit_box.set_value(0) send_transaction.amount_edit_box.set_value(0)
send_transaction.set_recipient_address(ens_user_ropsten['ens']) send_transaction.set_recipient_address(ens_user_message_sender['ens'])
send_transaction.next_button.click() send_transaction.next_button.click()
wallet.element_by_translation_id("network-fee").click() wallet.element_by_translation_id("network-fee").click()
if not wallet.element_by_translation_id("tx-fail-description2").is_element_displayed(): if not wallet.element_by_translation_id("tx-fail-description2").is_element_displayed():
@ -740,7 +741,7 @@ class TestChatManagement(SingleDeviceTestCase):
send_tx.next_button.click() send_tx.next_button.click()
send_tx.set_up_wallet_when_sending_tx() send_tx.set_up_wallet_when_sending_tx()
send_tx.advanced_button.click() send_tx.advanced_button.click()
send_tx.nonce_input.set_value('4') send_tx.nonce_input.set_value('0')
send_tx.nonce_save_button.click() send_tx.nonce_save_button.click()
error_text = send_tx.sign_transaction(error=True) error_text = send_tx.sign_transaction(error=True)
if error_text != 'nonce too low': if error_text != 'nonce too low':
@ -770,13 +771,13 @@ class TestChatManagement(SingleDeviceTestCase):
@marks.testrail_id(6219) @marks.testrail_id(6219)
def test_profile_set_primary_ens_custom_domain(self): def test_profile_set_primary_ens_custom_domain(self):
home = SignInView(self.driver).recover_access(ens_user['passphrase']) home = SignInView(self.driver).recover_access(ens_user['passphrase'])
ens_second, ens_main = ens_user['ens_another'], ens_user['ens'] ens_second, ens_main = ens_user['ens_upgrade'], ens_user['ens']
home.just_fyi('add 2 ENS names in Profile') home.just_fyi('add 2 ENS names in Profile')
profile = home.profile_button.click() profile = home.profile_button.click()
dapp = profile.connect_existing_ens(ens_main) dapp = profile.connect_existing_ens(ens_main)
profile.element_by_translation_id("ens-add-username").wait_and_click() profile.element_by_translation_id("ens-add-username").wait_and_click()
profile.element_by_translation_id("ens-want-custom-domain").wait_and_click()
dapp.ens_name_input.set_value(ens_second) dapp.ens_name_input.set_value(ens_second)
dapp.check_ens_name.click_until_presence_of_element(dapp.element_by_translation_id("ens-got-it")) dapp.check_ens_name.click_until_presence_of_element(dapp.element_by_translation_id("ens-got-it"))
dapp.element_by_translation_id("ens-got-it").wait_and_click() dapp.element_by_translation_id("ens-got-it").wait_and_click()
@ -1055,12 +1056,15 @@ class TestChatManagement(SingleDeviceTestCase):
self.wallet = self.home.wallet_button.click() self.wallet = self.home.wallet_button.click()
self.address = self.wallet.get_wallet_address() self.address = self.wallet.get_wallet_address()
self.chat_key = self.home.get_public_key_and_username() self.chat_key = self.home.get_public_key_and_username()
self.wallet.just_fyi("Get required donate")
w3.donate_testnet_eth(self.address, amount=0.1, inscrease_default_gas_price=10) w3.donate_testnet_eth(self.address, amount=0.1, inscrease_default_gas_price=10)
self.home.wallet_button.click() self.home.wallet_button.click()
self.wallet.wait_balance_is_changed() self.wallet.wait_balance_is_changed()
w3.donate_testnet_token('STT', address=self.address, amount=10, inscrease_default_gas_price=10) w3.donate_testnet_token('STT', address=self.address, amount=10, inscrease_default_gas_price=10)
self.wallet.wait_balance_is_changed('STT', scan_tokens=True) self.wallet.wait_balance_is_changed('STT', scan_tokens=True)
self.wallet.just_fyi("Purchase ENS")
self.profile = self.home.profile_button.click() self.profile = self.home.profile_button.click()
self.profile.ens_usernames_button.wait_and_click() self.profile.ens_usernames_button.wait_and_click()
self.dapp = self.home.get_dapp_view() self.dapp = self.home.get_dapp_view()
@ -1077,24 +1081,40 @@ class TestChatManagement(SingleDeviceTestCase):
self.error.append("ENS name %s is not purchasing" % self.ens_name) self.error.append("ENS name %s is not purchasing" % self.ens_name)
self.dapp.ens_got_it.click() self.dapp.ens_got_it.click()
if self.dapp.registration_in_progress.is_element_displayed(10): if self.dapp.registration_in_progress.is_element_displayed(10):
self.dapp.registration_in_progress.wait_for_invisibility_of_element(300) self.dapp.registration_in_progress.wait_for_invisibility_of_element(400)
self.dapp.element_by_text(self.ens_name).click() self.dapp.element_by_text(self.ens_name).click()
for text in ("10 SNT, deposit unlocked", self.chat_key, self.address.lower()): for text in ("10 SNT, deposit unlocked", self.chat_key, self.address.lower()):
if not self.dapp.element_by_text(text).is_element_displayed(10): if not self.dapp.element_by_text(text).is_element_displayed(10):
self.errors.append("%s is not displayed after ENS purchasing" % text) self.errors.append("%s is not displayed after ENS purchasing" % text)
if not w3.get_address_from_ens(self.ens_name) == self.address:
self.errors.append("ENS name %s is not resolved to correct address %s" % (self.ens_name, self.address))
self.wallet.just_fyi("Send leftovers") self.wallet.just_fyi("Send leftovers")
self.wallet.wallet_button.click() self.wallet.wallet_button.double_click()
send_transaction = self.wallet.send_transaction_from_main_screen.click() address = self.wallet.get_wallet_address()
send_transaction = self.wallet.send_transaction_button.click()
send_transaction.set_max_button.click() send_transaction.set_max_button.click()
send_transaction.confirm() send_transaction.confirm()
send_transaction.chose_recipient_button.click() send_transaction.chose_recipient_button.click()
send_transaction.set_recipient_address(w3.ACCOUNT_ADDRESS) send_transaction.set_recipient_address(w3.ACCOUNT_ADDRESS)
send_transaction.sign_transaction_button.click() send_transaction.sign_transaction_button.click()
send_transaction.sign_transaction() send_transaction.sign_transaction()
self.wallet.just_fyi("Verify purchased ENS")
self.home.home_button.click()
self.home.plus_button.click_until_presence_of_element(self.home.start_new_chat_button)
chat = self.home.start_new_chat_button.click()
chat.public_key_edit_box.click()
chat.public_key_edit_box.send_keys(self.ens_name)
if not self.home.element_by_translation_id("can-not-add-yourself").is_element_displayed(20):
self.errors.append(
"Public key in not resolved correctly from %s ENS name on stateofus!" % self.ens_name)
self.home.get_back_to_home_view()
self.wallet.wallet_button.double_click()
self.wallet.send_transaction_from_main_screen.click_until_presence_of_element(send_transaction.chose_recipient_button)
send_transaction.chose_recipient_button.scroll_and_click()
send_transaction.set_recipient_address(self.ens_name)
if not send_transaction.element_by_text_part(send_transaction.get_formatted_recipient_address(address)).is_element_displayed(5):
self.errors.append("Wallet address in not resolved correctly from %s ENS name on stateofus!" % self.ens_name)
self.errors.verify_no_errors() self.errors.verify_no_errors()
@marks.testrail_id(6300) @marks.testrail_id(6300)

View File

@ -5,7 +5,7 @@ import pytest
from tests import common_password, marks, test_dapp_name from tests import common_password, marks, test_dapp_name
from tests.base_test_case import MultipleSharedDeviceTestCase, create_shared_drivers from tests.base_test_case import MultipleSharedDeviceTestCase, create_shared_drivers
from tests.users import transaction_senders, basic_user, ens_user_ropsten from tests.users import transaction_senders, basic_user, ens_user_message_sender
from views.sign_in_view import SignInView from views.sign_in_view import SignInView
@ -24,6 +24,8 @@ class TestKeycardMediumMultipleDevicesMerged(MultipleSharedDeviceTestCase):
self.home.home_button.click() self.home.home_button.click()
@marks.testrail_id(702317) @marks.testrail_id(702317)
@marks.skip
# TODO: skipped until fix #13606 and full transition to Goerli
def test_keycard_testdapp_sign_typed_message(self): def test_keycard_testdapp_sign_typed_message(self):
test_dapp = self.home.open_status_test_dapp() test_dapp = self.home.open_status_test_dapp()
test_dapp.wait_for_d_aap_to_load() test_dapp.wait_for_d_aap_to_load()
@ -53,7 +55,7 @@ class TestKeycardMediumMultipleDevicesMerged(MultipleSharedDeviceTestCase):
@marks.testrail_id(702319) @marks.testrail_id(702319)
def test_keycard_send_tx_eth_to_ens(self): def test_keycard_send_tx_eth_to_ens(self):
self.home.home_button.double_click() self.home.home_button.double_click()
chat = self.home.add_contact(ens_user_ropsten['ens']) chat = self.home.add_contact(ens_user_message_sender['ens'])
chat.commands_button.click() chat.commands_button.click()
amount = chat.get_unique_amount() amount = chat.get_unique_amount()
@ -67,7 +69,7 @@ class TestKeycardMediumMultipleDevicesMerged(MultipleSharedDeviceTestCase):
send_transaction.sign_transaction(keycard=True) send_transaction.sign_transaction(keycard=True)
chat_sender_message = chat.get_outgoing_transaction() chat_sender_message = chat.get_outgoing_transaction()
self.network_api.wait_for_confirmation_of_transaction(self.user['address'], amount) self.network_api.wait_for_confirmation_of_transaction(self.user['address'], amount)
chat_sender_message.transaction_status.wait_for_element_text(chat_sender_message.confirmed) chat_sender_message.transaction_status.wait_for_element_text(chat_sender_message.confirmed, 60)
@marks.testrail_id(702320) @marks.testrail_id(702320)
def test_keycard_profile_pin_puk_edit(self): def test_keycard_profile_pin_puk_edit(self):
@ -233,6 +235,8 @@ class TestWalletTestDappMediumMultipleDevicesMerged(MultipleSharedDeviceTestCase
self.errors.verify_no_errors() self.errors.verify_no_errors()
@marks.testrail_id(702325) @marks.testrail_id(702325)
@marks.skip
# TODO: skipped until fix #13606 and full transition to Goerli
def test_testdapp_sign_typed_message(self): def test_testdapp_sign_typed_message(self):
self.home.just_fyi("Checking sign typed message") self.home.just_fyi("Checking sign typed message")
test_dapp = self.home.open_status_test_dapp(allow_all=True) test_dapp = self.home.open_status_test_dapp(allow_all=True)
@ -291,8 +295,8 @@ class TestWalletTestDappMediumMultipleDevicesMerged(MultipleSharedDeviceTestCase
def test_wallet_asset_search(self): def test_wallet_asset_search(self):
self.home.wallet_button.double_click() self.home.wallet_button.double_click()
search_list_assets = { search_list_assets = {
'd': ['Adi Test Token', 'Handy Test Token', 'Modest Test Token'], 'ee': ['XEENUS', 'YEENUS', 'ZEENUS'],
'MD': ['MDS'] 'ST': ['STT']
} }
self.home.just_fyi('Searching for asset by name and symbol') self.home.just_fyi('Searching for asset by name and symbol')
self.wallet.multiaccount_more_options.click() self.wallet.multiaccount_more_options.click()
@ -349,8 +353,9 @@ class TestWalletTestDappMediumMultipleDevicesMerged(MultipleSharedDeviceTestCase
self.home.just_fyi('check correct account is shown for transaction if sending from DApp') self.home.just_fyi('check correct account is shown for transaction if sending from DApp')
profile.dapp_tab_button.click(desired_element_text='Accounts') profile.dapp_tab_button.click(desired_element_text='Accounts')
status_test_dapp.assets_button.click() status_test_dapp.transactions_button.click_until_presence_of_element(
send_transaction = status_test_dapp.request_stt_button.click() status_test_dapp.send_one_tx_in_batch_button)
send_transaction = status_test_dapp.send_one_tx_in_batch_button.click()
send_transaction.ok_got_it_button.click_if_shown() send_transaction.ok_got_it_button.click_if_shown()
address = send_transaction.get_formatted_recipient_address(self.sub_acc_address) address = send_transaction.get_formatted_recipient_address(self.sub_acc_address)
if not send_transaction.element_by_text(address).is_element_displayed(): if not send_transaction.element_by_text(address).is_element_displayed():

Binary file not shown.

View File

@ -191,7 +191,7 @@ class TestUpgradeApplication(SingleDeviceTestCase):
sign_in.just_fyi('Check that balance is preserved') sign_in.just_fyi('Check that balance is preserved')
accounts = dapp_data.wallets accounts = dapp_data.wallets
wallet = profile.wallet_button.click() wallet = profile.wallet_button.click()
for asset in ('ETH', 'ADI', 'STT'): for asset in ('ETH', 'YEENUS', 'STT'):
wallet.wait_balance_is_changed(asset=asset) wallet.wait_balance_is_changed(asset=asset)
sign_in.just_fyi('Check accounts inside multiaccount') sign_in.just_fyi('Check accounts inside multiaccount')
@ -215,13 +215,13 @@ class TestUpgradeApplication(SingleDeviceTestCase):
sign_in = SignInView(self.driver) sign_in = SignInView(self.driver)
home = sign_in.recover_access(passphrase=user['passphrase'], keycard=True) home = sign_in.recover_access(passphrase=user['passphrase'], keycard=True)
wallet = home.wallet_button.click() wallet = home.wallet_button.click()
wallet.wait_balance_is_changed(asset='ADI', scan_tokens=True) wallet.wait_balance_is_changed(asset='YEENUS', scan_tokens=True)
home.upgrade_app() home.upgrade_app()
home.just_fyi('Check that can login with restored from mnemonic keycard account') home.just_fyi('Check that can login with restored from mnemonic keycard account')
sign_in.sign_in(keycard=True) sign_in.sign_in(keycard=True)
home.wallet_button.click() home.wallet_button.click()
for asset in ['ETH', 'ADI', 'STT']: for asset in ['ETH', 'YEENUS', 'STT']:
if wallet.get_asset_amount_by_name(asset) == 0: if wallet.get_asset_amount_by_name(asset) == 0:
self.errors.append('Asset %s was not restored' % asset) self.errors.append('Asset %s was not restored' % asset)

View File

@ -592,7 +592,7 @@ class ChatView(BaseView):
self.quote_username_in_message_input = EditBox(self.driver, self.quote_username_in_message_input = EditBox(self.driver,
xpath="//android.view.ViewGroup[@content-desc='cancel-message-reply']/..//android.widget.TextView[1]") xpath="//android.view.ViewGroup[@content-desc='cancel-message-reply']/..//android.widget.TextView[1]")
self.cancel_reply_button = Button(self.driver, accessibility_id="cancel-message-reply") self.cancel_reply_button = Button(self.driver, accessibility_id="cancel-message-reply")
self.chat_item = Button(self.driver, accessibility_id="chat-item") self.chat_item = Button(self.driver, xpath="(//*[@content-desc='chat-item'])[1]")
self.chat_name_editbox = EditBox(self.driver, accessibility_id="chat-name-input") self.chat_name_editbox = EditBox(self.driver, accessibility_id="chat-name-input")
self.commands_button = CommandsButton(self.driver) self.commands_button = CommandsButton(self.driver)
self.send_command = SendCommand(self.driver) self.send_command = SendCommand(self.driver)
@ -883,7 +883,7 @@ class ChatView(BaseView):
self.driver.info("Moving to messages by time marker: '%s'" % marker) self.driver.info("Moving to messages by time marker: '%s'" % marker)
Button(self.driver, xpath="//*[@text='%s'']" % marker).scroll_to_element(depth=50, direction='up') Button(self.driver, xpath="//*[@text='%s'']" % marker).scroll_to_element(depth=50, direction='up')
def install_sticker_pack_by_name(self, pack_name='Status Cat'): def install_sticker_pack_by_name(self, pack_name='HCPP20'):
self.driver.info("## Installing '%s' stickerpack" % pack_name, device=False) self.driver.info("## Installing '%s' stickerpack" % pack_name, device=False)
self.chat_message_input.click() self.chat_message_input.click()
self.show_stickers_button.click() self.show_stickers_button.click()

View File

@ -1,4 +1,4 @@
from tests.users import ens_user_ropsten from tests.users import ens_user_message_sender
main = { main = {
'name' : 'main chat', 'name' : 'main chat',
'messages': { 'messages': {
@ -34,7 +34,7 @@ make_admin = {
timeline = { timeline = {
'link': 'https://join.status.im/u/0x045efbcc044e5ae21ac3cf111ea6df6186e0cc50a2cd747f52a56d19ce516e683c66cb47f4b0a21110859aea9592dfba1e0bf4af11ff3eab995f844b3673643bf1', 'link': 'https://join.status.im/u/0x045efbcc044e5ae21ac3cf111ea6df6186e0cc50a2cd747f52a56d19ce516e683c66cb47f4b0a21110859aea9592dfba1e0bf4af11ff3eab995f844b3673643bf1',
'text': 'Hey there!', 'text': 'Hey there!',
'resolved_username': ens_user_ropsten['username'] 'resolved_username': ens_user_message_sender['username']
} }
profile = { profile = {

View File

@ -1,4 +1,4 @@
from tests.users import basic_user, ens_user_ropsten from tests.users import basic_user, ens_user_message_sender
contacts ={ contacts ={
'blocked': 'Athletic Lean Noctilio', 'blocked': 'Athletic Lean Noctilio',
@ -6,8 +6,8 @@ contacts ={
'synced': { 'synced': {
'nickname': 'My buddy', 'nickname': 'My buddy',
'username_nickname': 'Worthy Shady Harrier', 'username_nickname': 'Worthy Shady Harrier',
'ens': '@%s'% ens_user_ropsten['ens'], 'ens': '@%s'% ens_user_message_sender['ens'],
'username_ens': ens_user_ropsten['username'], 'username_ens': ens_user_message_sender['username'],
}, },
'added': { 'added': {
'name': 'my_second_buddy', 'name': 'my_second_buddy',

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -175,7 +175,7 @@ class WalletView(BaseView):
self.accounts_status_account.scroll_to_element(direction='up') self.accounts_status_account.scroll_to_element(direction='up')
return return
def wait_balance_is_changed(self, asset='ETH', initial_balance=0, wait_time=400, scan_tokens=False, navigate_to_home=True): def wait_balance_is_changed(self, asset='ETH', initial_balance=0, wait_time=120, scan_tokens=False, navigate_to_home=True):
self.driver.info('Waiting %ss for %s updated balance' % (wait_time, asset)) self.driver.info('Waiting %ss for %s updated balance' % (wait_time, asset))
counter = 0 counter = 0
while True: while True:

View File

@ -2,6 +2,7 @@ import time
from views.base_element import EditBox, Button, BaseElement from views.base_element import EditBox, Button, BaseElement
from views.base_view import BaseView from views.base_view import BaseView
from appium.webdriver.common.touch_action import TouchAction
class BaseWebView(BaseView): class BaseWebView(BaseView):
@ -86,3 +87,8 @@ class BaseWebView(BaseView):
bookmark_name = self.bookmark_name_input.text bookmark_name = self.bookmark_name_input.text
self.save_bookmark_button.click() self.save_bookmark_button.click()
return bookmark_name return bookmark_name
def open_right_collapsed_menu(self):
# written for status.im
size = self.driver.get_window_size()
TouchAction(self.driver).tap(None, size["width"] * 0.92, size["height"] * 0.2, 1).perform()