added atomic transaction tests

Signed-off-by: yevh-berdnyk <ie.berdnyk@gmail.com>
This commit is contained in:
Anton Danchenko 2018-06-30 15:17:38 +03:00 committed by yevh-berdnyk
parent d724a12d51
commit f4c156c3f7
No known key found for this signature in database
GPG Key ID: E9B425FDFC4DEA9C
16 changed files with 322 additions and 23 deletions

View File

@ -7,26 +7,30 @@ from tests import info
class NetworkApi:
def __init__(self):
self.etherscan_url = 'http://api-ropsten.etherscan.io/api?'
self.ropsten_url = 'http://api-ropsten.etherscan.io/api?'
self.faucet_url = 'http://51.15.45.169:3001/donate'
self.chat_bot_url = 'http://offsite.chat:8099'
def get_transactions(self, address: str) -> dict:
method = self.etherscan_url + 'module=account&action=txlist&address=0x%s&sort=desc' % address
method = self.ropsten_url + 'module=account&action=txlist&address=0x%s&sort=desc' % address
return requests.request('GET', url=method).json()['result']
def is_transaction_successful(self, transaction_hash: str) -> int:
method = self.etherscan_url + 'module=transaction&action=getstatus&txhash=%s' % transaction_hash
method = self.ropsten_url + 'module=transaction&action=getstatus&txhash=%s' % transaction_hash
return not int(requests.request('GET', url=method).json()['result']['isError'])
def get_balance(self, address):
method = self.etherscan_url + 'module=account&action=balance&address=0x%s&tag=latest' % address
method = self.ropsten_url + 'module=account&action=balance&address=0x%s&tag=latest' % address
for i in range(5):
try:
return int(requests.request('GET', method).json()["result"])
except ValueError:
pass
def get_latest_block_number(self) -> int:
method = self.ropsten_url + 'module=proxy&action=eth_blockNumber'
return int(requests.request('GET', url=method).json()['result'], 0)
def find_transaction_by_hash(self, address: str, transaction_hash: str):
transactions = self.get_transactions(address=address)
for transaction in transactions:

View File

@ -15,7 +15,7 @@ class TestrailReport(BaseTestReport):
self.user = environ.get('TESTRAIL_USER')
self.run_id = None
self.suite_id = 42
self.suite_id = 15
self.project_id = 9
self.outcomes = {
@ -54,10 +54,27 @@ class TestrailReport(BaseTestReport):
def add_run(self, run_name):
request_body = {'suite_id': self.suite_id,
'name': run_name,
'milestone_id': self.actual_milestone_id}
'milestone_id': self.actual_milestone_id,
'case_ids': self.get_regression_cases(),
'include_all': False}
run = self.post('add_run/%s' % self.project_id, request_body)
self.run_id = run['id']
def get_cases(self, section_id):
return self.get('get_cases/%s&suite_id=%s&section_id=%s' % (self.project_id, self.suite_id, section_id))
def get_regression_cases(self):
test_cases = dict()
test_cases['smoke_phase_1'] = 157
test_cases['smoke_phase_2'] = 308
test_cases['upgrade'] = 309
test_cases['negative_tests'] = 458
case_ids = list()
for phase in test_cases:
for case in self.get_cases(test_cases[phase]):
case_ids.append(case['id'])
return case_ids
def add_results(self):
for test in self.get_all_tests():
test_steps = "# Steps: \n"

View File

@ -62,3 +62,25 @@ class TestCreateAccount(SingleDeviceTestCase):
if not home.element_by_text(text).is_element_displayed():
self.errors.append("'%s' text is not shown" % text)
self.verify_no_errors()
@marks.testrail_id(844)
def test_create_account_short_and_mismatch_password(self):
sign_in = SignInView(self.driver)
sign_in.create_account_button.click()
sign_in.password_input.set_value('12345')
mismatch_error = "Password confirmation doesn't match password"
sign_in.next_button.click()
if sign_in.confirm_password_input.is_element_displayed():
self.errors.append('Next button is clickable when password is less then 6 symbols')
sign_in.password_input.set_value('123456')
sign_in.next_button.click()
sign_in.confirm_password_input.set_value('1234567')
sign_in.next_button.click()
if not sign_in.find_text_part(mismatch_error):
self.errors.append("'%s' is not shown")
self.verify_no_errors()

View File

@ -49,14 +49,12 @@ class TestProfileSingleDevice(SingleDeviceTestCase):
self.errors.append('Can\'t share wallet address via email')
self.verify_no_errors()
@marks.skip
@marks.testrail_id(3704)
def test_copy_contact_code_and_wallet_address(self):
sign_in_view = SignInView(self.driver)
sign_in_view.create_user()
profile_view = sign_in_view.profile_button.click()
profile_view.share_my_contact_key_button.click()
profile_view.share_my_contact_key_button.click()
public_key = profile_view.public_key_text.text
profile_view.public_key_text.long_press_element()
self.driver.press_keycode(278)
@ -96,7 +94,6 @@ class TestProfileSingleDevice(SingleDeviceTestCase):
if not profile_view.profile_picture.is_element_image_equals_template():
pytest.fail('Profile picture was not updated')
@marks.skip
@marks.testrail_id(2374)
def test_backup_seed_phrase(self):
sign_in_view = SignInView(self.driver)

View File

@ -211,5 +211,32 @@ class TestCommands(MultipleDeviceTestCase):
self.errors.append("Request funds message doesn't contain 'Send' button")
except TimeoutException:
self.errors.append('Request funds message was not received')
self.verify_no_errors()
@marks.testrail_id(1417)
def test_contact_profile_send_transaction(self):
self.create_drivers(1)
recipient = transaction_users['B_USER']
sign_in_view = SignInView(self.drivers[0])
sign_in_view.create_user()
home_view = sign_in_view.get_home_view()
sender_public_key = home_view.get_public_key()
sender_address = home_view.public_key_to_address(sender_public_key)
home_view.home_button.click()
self.network_api.get_donate(sender_address)
wallet_view = home_view.wallet_button.click()
wallet_view.set_up_wallet()
home_view.home_button.click()
home_view.add_contact(recipient['public_key'])
chat_view = home_view.get_chat_view()
chat_view.chat_options.click_until_presence_of_element(chat_view.view_profile_button)
chat_view.view_profile_button.click()
chat_view.profile_send_transaction.click()
chat_view.chat_message_input.click()
chat_view.eth_asset.click()
amount = chat_view.get_unique_amount()
chat_view.send_as_keyevent(amount)
chat_view.send_message_button.click()
send_transaction_view = chat_view.get_send_transaction_view()
send_transaction_view.sign_transaction(common_password)
self.network_api.find_transaction_by_unique_amount(recipient['address'], amount)

View File

@ -33,3 +33,16 @@ class TestMessagesPublicChat(SingleDeviceTestCase):
time.sleep(wait_time if wait_time > 0 else 0)
console_view.send_faucet_request()
console_view.chat_element_by_text('Faucet request has been received').wait_for_visibility_of_element()
@marks.testrail_id(1400)
def test_web3_block_number(self):
sign_in_view = SignInView(self.driver)
sign_in_view.create_user()
profile_view = sign_in_view.profile_button.click()
profile_view.advanced_button.click()
profile_view.debug_mode_toggle.click()
home_view = profile_view.home_button.click()
chat_view = home_view.get_chat_with_user('Status Console').click()
chat_view.chat_message_input.send_keys('web3.eth.blockNumber')
chat_view.send_message_button.click()
chat_view.wait_for_element_starts_with_text(str(self.network_api.get_latest_block_number()), 10)

View File

@ -1,16 +1,13 @@
import random
import string
import emoji
import pytest
from selenium.common.exceptions import TimeoutException
from tests import marks, get_current_time, group_chat_users
from tests import marks, get_current_time, group_chat_users, transaction_users
from tests.base_test_case import MultipleDeviceTestCase, SingleDeviceTestCase
from views.sign_in_view import SignInView
@marks.all
@marks.chat
class TestMessagesOneToOneChatMultiple(MultipleDeviceTestCase):
@ -363,3 +360,25 @@ class TestMessagesOneToOneChatSingle(SingleDeviceTestCase):
if not chat.chat_element_by_text(emoji_unicode).is_element_displayed():
self.errors.append('Message with emoji was not sent in 1-1 chat')
self.verify_no_errors()
class TestChatManagement(SingleDeviceTestCase):
@marks.testrail_id(1428)
def test_clear_history(self):
recipient = transaction_users['E_USER']
sign_in_view = SignInView(self.driver)
sign_in_view.create_user()
home_view = sign_in_view.get_home_view()
home_view.add_contact(recipient['public_key'])
chat_view = home_view.get_chat_view()
for _ in range(4):
chat_view.chat_message_input.send_keys('test message')
chat_view.send_message_button.click()
chat_view.clear_history()
if not chat_view.no_messages_in_chat.is_element_present():
pytest.fail('Message history is shown')
home_view.relogin()
home_view.get_chat_with_user(recipient['username']).click()
if not chat_view.no_messages_in_chat.is_element_present():
pytest.fail('Message history is shown after re-login')

View File

@ -0,0 +1,35 @@
from tests import transaction_users, marks
from tests.base_test_case import SingleDeviceTestCase
from views.sign_in_view import SignInView
class TestTransactionDApp(SingleDeviceTestCase):
@marks.testrail_id(769)
def test_send_transaction_from_daap(self):
sender = transaction_users['B_USER']
sign_in_view = SignInView(self.driver)
sign_in_view.recover_access(sender['passphrase'], sender['password'])
address = transaction_users['B_USER']['address']
initial_balance = self.network_api.get_balance(address)
status_test_dapp = sign_in_view.open_status_test_dapp()
status_test_dapp.wait_for_d_aap_to_load()
status_test_dapp.assets_button.click()
send_transaction_view = status_test_dapp.request_stt_button.click()
send_transaction_view.sign_transaction(sender['password'])
self.network_api.verify_balance_is_updated(initial_balance, address)
@marks.testrail_id(3716)
def test_sign_message_from_daap(self):
password = 'password_for_daap'
sign_in_view = SignInView(self.driver)
sign_in_view.create_user(password)
status_test_dapp = sign_in_view.open_status_test_dapp()
status_test_dapp.wait_for_d_aap_to_load()
status_test_dapp.transactions_button.click()
send_transaction_view = status_test_dapp.sign_message_button.click()
send_transaction_view.find_full_text('Test message')
send_transaction_view.sign_transaction_button.click_until_presence_of_element(
send_transaction_view.enter_password_input)
send_transaction_view.enter_password_input.send_keys(password)
send_transaction_view.sign_transaction_button.click()

View File

@ -0,0 +1,163 @@
import pytest
from selenium.common.exceptions import TimeoutException
from tests import transaction_users, get_current_time, transaction_users_wallet, marks, common_password
from tests.base_test_case import SingleDeviceTestCase, MultipleDeviceTestCase
from views.sign_in_view import SignInView
from views.web_views.base_web_view import BaseWebView
@marks.transaction
class TestTransactionWallet(SingleDeviceTestCase):
@marks.testrail_id(766)
def test_send_eth_from_wallet_to_contact(self):
recipient = transaction_users['F_USER']
sender = transaction_users['E_USER']
sign_in_view = SignInView(self.driver)
sign_in_view.recover_access(sender['passphrase'], sender['password'])
home_view = sign_in_view.get_home_view()
home_view.add_contact(recipient['public_key'])
home_view.get_back_to_home_view()
wallet_view = home_view.wallet_button.click()
wallet_view.set_up_wallet()
send_transaction = wallet_view.send_transaction_button.click()
send_transaction.amount_edit_box.click()
transaction_amount = send_transaction.get_unique_amount()
send_transaction.amount_edit_box.set_value(transaction_amount)
send_transaction.confirm()
send_transaction.chose_recipient_button.click()
send_transaction.recent_recipients_button.click()
recent_recipient = send_transaction.element_by_text(recipient['username'])
send_transaction.recent_recipients_button.click_until_presence_of_element(recent_recipient)
recent_recipient.click()
send_transaction.sign_transaction_button.click()
send_transaction.enter_password_input.click()
send_transaction.send_as_keyevent(sender['password'])
send_transaction.sign_transaction_button.click()
send_transaction.got_it_button.click()
self.network_api.find_transaction_by_unique_amount(sender['address'], transaction_amount)
@marks.testrail_id(767)
def test_send_eth_from_wallet_to_address(self):
recipient = transaction_users['E_USER']
sender = transaction_users['F_USER']
sign_in_view = SignInView(self.driver)
sign_in_view.recover_access(sender['passphrase'], sender['password'])
home_view = sign_in_view.get_home_view()
wallet_view = home_view.wallet_button.click()
wallet_view.set_up_wallet()
send_transaction = wallet_view.send_transaction_button.click()
send_transaction.amount_edit_box.click()
transaction_amount = send_transaction.get_unique_amount()
send_transaction.amount_edit_box.set_value(transaction_amount)
send_transaction.confirm()
send_transaction.chose_recipient_button.click()
send_transaction.enter_recipient_address_button.click()
send_transaction.enter_recipient_address_input.set_value(recipient['address'])
send_transaction.done_button.click()
send_transaction.sign_transaction_button.click()
send_transaction.enter_password_input.click()
send_transaction.send_as_keyevent(sender['password'])
send_transaction.sign_transaction_button.click()
send_transaction.got_it_button.click()
self.network_api.find_transaction_by_unique_amount(sender['address'], transaction_amount)
@marks.testrail_id(1430)
def test_send_stt_from_wallet(self):
sender = transaction_users_wallet['A_USER']
recipient = transaction_users_wallet['B_USER']
sign_in_view = SignInView(self.driver)
sign_in_view.recover_access(sender['passphrase'], sender['password'])
home_view = sign_in_view.get_home_view()
home_view.add_contact(recipient['public_key'])
home_view.get_back_to_home_view()
wallet_view = home_view.wallet_button.click()
wallet_view.set_up_wallet()
send_transaction = wallet_view.send_transaction_button.click()
send_transaction.select_asset_button.click_until_presence_of_element(send_transaction.stt_button)
send_transaction.stt_button.click()
send_transaction.amount_edit_box.click()
send_transaction.amount_edit_box.set_value(send_transaction.get_unique_amount())
send_transaction.confirm()
send_transaction.chose_recipient_button.click()
send_transaction.enter_recipient_address_button.click()
send_transaction.enter_recipient_address_input.set_value(recipient['address'])
send_transaction.done_button.click()
send_transaction.sign_transaction_button.click()
send_transaction.enter_password_input.send_keys(sender['password'])
send_transaction.sign_transaction_button.click()
send_transaction.got_it_button.click()
@marks.testrail_id(2164)
def test_transaction_wrong_password_wallet(self):
recipient = transaction_users['E_USER']
sender = transaction_users['F_USER']
sign_in_view = SignInView(self.driver)
sign_in_view.recover_access(sender['passphrase'], sender['password'])
home_view = sign_in_view.get_home_view()
wallet_view = home_view.wallet_button.click()
wallet_view.set_up_wallet()
send_transaction = wallet_view.send_transaction_button.click()
send_transaction.amount_edit_box.click()
transaction_amount = send_transaction.get_unique_amount()
send_transaction.amount_edit_box.set_value(transaction_amount)
send_transaction.confirm()
send_transaction.chose_recipient_button.click()
send_transaction.enter_recipient_address_button.click()
send_transaction.enter_recipient_address_input.set_value(recipient['address'])
send_transaction.done_button.click()
send_transaction.sign_transaction_button.click()
send_transaction.enter_password_input.click()
send_transaction.enter_password_input.send_keys('wrong_password')
send_transaction.sign_transaction_button.click()
send_transaction.find_full_text('Wrong password', 20)
@marks.testrail_id(1452)
def test_transaction_appears_in_history(self):
recipient = transaction_users['B_USER']
sign_in_view = SignInView(self.driver)
sign_in_view.create_user()
home_view = sign_in_view.get_home_view()
transaction_amount = home_view.get_unique_amount()
sender_public_key = home_view.get_public_key()
sender_address = home_view.public_key_to_address(sender_public_key)
home_view.home_button.click()
self.network_api.get_donate(sender_address)
wallet_view = home_view.wallet_button.click()
wallet_view.set_up_wallet()
wallet_view.wait_balance_changed_on_wallet_screen()
send_transaction = wallet_view.send_transaction_button.click()
send_transaction.amount_edit_box.click()
send_transaction.amount_edit_box.set_value(transaction_amount)
send_transaction.confirm()
send_transaction.chose_recipient_button.click()
send_transaction.enter_recipient_address_button.click()
send_transaction.enter_recipient_address_input.set_value(recipient['address'])
send_transaction.done_button.click()
send_transaction.sign_transaction_button.click()
send_transaction.enter_password_input.send_keys(common_password)
send_transaction.sign_transaction_button.click()
send_transaction.got_it_button.click()
self.network_api.find_transaction_by_unique_amount(recipient['address'], transaction_amount)
transactions_view = wallet_view.transaction_history_button.click()
transactions_view.transactions_table.find_transaction(amount=transaction_amount)
@marks.testrail_id(2163)
def test_send_eth_from_wallet_incorrect_address(self):
recipient = transaction_users['E_USER']
sender = transaction_users['F_USER']
sign_in_view = SignInView(self.driver)
sign_in_view.recover_access(sender['passphrase'], sender['password'])
home_view = sign_in_view.get_home_view()
wallet_view = home_view.wallet_button.click()
wallet_view.set_up_wallet()
send_transaction = wallet_view.send_transaction_button.click()
send_transaction.amount_edit_box.click()
transaction_amount = send_transaction.get_unique_amount()
send_transaction.amount_edit_box.set_value(transaction_amount)
send_transaction.confirm()
send_transaction.chose_recipient_button.click()
send_transaction.enter_recipient_address_button.click()
send_transaction.enter_recipient_address_input.set_value(recipient['public_key'])
send_transaction.done_button.click()
send_transaction.find_text_part('Invalid address:', 20)

View File

@ -143,8 +143,8 @@ def update_sauce_jobs(test_name, job_ids, passed):
def get_testrail_case_id(obj):
if 'testrail_case_id' in obj.keywords._markers:
return obj.keywords._markers['testrail_case_id'].args[0]
if 'testrail_id' in obj.keywords._markers:
return obj.keywords._markers['testrail_id'].args[0]
def pytest_runtest_setup(item):

View File

@ -14,3 +14,4 @@ transaction = pytest.mark.transaction
wallet = pytest.mark.wallet
sign_in = pytest.mark.sign_in
skip = pytest.mark.skip
console = pytest.mark.console

View File

@ -162,8 +162,8 @@ class TestTransaction(SingleDeviceTestCase):
@marks.testrail_case_id(3452)
def test_sign_transaction_twice(self):
recipient = transaction_users['F_USER']
sender = transaction_users['E_USER']
recipient = transaction_users['E_USER']
sender = transaction_users['F_USER']
sign_in_view = SignInView(self.driver)
sign_in_view.recover_access(sender['passphrase'], sender['password'])
home_view = sign_in_view.get_home_view()

View File

@ -311,6 +311,11 @@ class ChatView(BaseView):
self.element_by_text(chat_name).is_element_present():
errors.append('Chat was not deleted')
def clear_history(self):
self.chat_options.click()
self.clear_history_button.click()
self.clear_button.click()
def send_transaction_in_1_1_chat(self, amount, password, wallet_set_up=False):
self.commands_button.click()
self.send_command.click()

View File

@ -90,7 +90,7 @@ class HomeView(BaseView):
break
def get_chat_with_user(self, username):
return ChatElement(self.driver, username)
return ChatElement(self.driver, username[:25])
def add_contact(self, public_key):
start_new_chat = self.plus_button.click()

View File

@ -65,10 +65,6 @@ class ChooseRecipientButton(BaseButton):
super(ChooseRecipientButton, self).__init__(driver)
self.locator = self.Locator.accessibility_id('choose-recipient-button')
def click(self):
desired_element = EnterRecipientAddressButton(self.driver)
self.click_until_presence_of_element(desired_element=desired_element)
class EnterRecipientAddressButton(BaseButton):
def __init__(self, driver):