From a141c756342026cba91aceb62dc75a3414f1034e Mon Sep 17 00:00:00 2001 From: Churikova Tetiana Date: Tue, 14 Jun 2022 16:02:48 +0200 Subject: [PATCH] e2e: xfail mark --- test/appium/support/base_test_report.py | 23 ++++- test/appium/support/github_report.py | 9 +- test/appium/support/test_data.py | 5 +- test/appium/support/testrail_report.py | 22 ++++- test/appium/tests/base_test_case.py | 2 +- test/appium/tests/conftest.py | 47 ++++++++-- .../critical/chats/test_1_1_public_chats.py | 2 + .../tests/critical/chats/test_group_chat.py | 2 + .../critical/wallet_and_tx/test_wallet.py | 1 + test/appium/tests/marks.py | 1 + .../tests/medium/test_activity_center.py | 2 +- test/appium/tests/medium/test_chats_m.py | 6 +- .../medium/test_pairing_devices_sync_m.py | 5 +- .../appium/tests/non_func/test_performance.py | 93 +++++++++++++++++++ .../tests/non_func/test_translations.py | 2 +- test/appium/views/base_view.py | 2 +- test/appium/views/send_transaction_view.py | 2 +- test/appium/views/sign_in_view.py | 26 +++++- 18 files changed, 223 insertions(+), 29 deletions(-) diff --git a/test/appium/support/base_test_report.py b/test/appium/support/base_test_report.py index 9ad2a92d71..a565a836c2 100644 --- a/test/appium/support/base_test_report.py +++ b/test/appium/support/base_test_report.py @@ -4,6 +4,7 @@ import hmac import os from hashlib import md5 from sauceclient import SauceException +import re from support.test_data import SingleTestData @@ -42,7 +43,10 @@ class BaseTestReport: if geth: geth_paths = self.save_geth(geth) else: - geth_paths = test.geth_paths + if hasattr(test, 'geth_paths'): + geth_paths = test.geth_paths + else: + geth_paths = '' file_path = self.get_test_report_file_path(test.name) test_dict = { 'testrail_case_id': test.testrail_case_id, @@ -67,7 +71,8 @@ class BaseTestReport: steps=testrun_data['steps'], jobs=testrun_data['jobs'], error=testrun_data['error'], - first_commands=testrun_data['first_commands'])) + first_commands=testrun_data['first_commands'], + xfail=testrun_data['xfail'])) tests.append(SingleTestData(name=test_data['name'], geth_paths=test_data['geth_paths'], testruns=testruns, @@ -120,4 +125,16 @@ class BaseTestReport: @staticmethod def is_test_successful(test): # Test passed if last testrun has passed - return test.testruns[-1].error is None \ No newline at end of file + return test.testruns[-1].error is None + + @staticmethod + def separate_xfail_error(error): + issue_id_list = re.findall(r'#\d+', error) + main_error, no_code_error_str, issue_id = error, '', '' + if issue_id_list: + issue_id = issue_id_list[0] + xfail_error = re.findall(r'\[\[.*\]\]', error) + if xfail_error: + no_code_error_str = xfail_error[0] + main_error = error.replace(no_code_error_str, '') + return (main_error, no_code_error_str, issue_id) \ No newline at end of file diff --git a/test/appium/support/github_report.py b/test/appium/support/github_report.py index f17a7c9e69..9ae129e39d 100644 --- a/test/appium/support/github_report.py +++ b/test/appium/support/github_report.py @@ -1,6 +1,7 @@ import os from support.base_test_report import BaseTestReport from support.testrail_report import TestrailReport +import re class GithubHtmlReport(BaseTestReport): @@ -109,6 +110,7 @@ class GithubHtmlReport(BaseTestReport): for step in last_testrun.steps: test_steps_html.append("
%s
" % step) if last_testrun.error: + error = last_testrun.error[:255] if test_steps_html: html += "

" html += "

" @@ -116,7 +118,12 @@ class GithubHtmlReport(BaseTestReport): html += "%s" % ''.join(test_steps_html[-2:]) html += "
" html += "

" - html += "%s" % last_testrun.error[:255] + (code_error, no_code_error_str, issue_id) = self.separate_xfail_error(error) + if no_code_error_str: + html += "%s" % code_error + html += no_code_error_str + else: + html += "%s" % error html += "

" if test.group_name: html += "

Class: %s

" % test.group_name diff --git a/test/appium/support/test_data.py b/test/appium/support/test_data.py index a98e297949..064af811af 100644 --- a/test/appium/support/test_data.py +++ b/test/appium/support/test_data.py @@ -10,14 +10,15 @@ class SingleTestData(object): self.group_name = grop_name class TestRunData(object): - def __init__(self, steps, jobs, error, first_commands: Dict[str, int]): + def __init__(self, steps, jobs, error, first_commands: Dict[str, int], xfail): self.steps = steps self.jobs = jobs self.error = error self.first_commands = first_commands + self.xfail = xfail def create_new_testrun(self): - self.testruns.append(SingleTestData.TestRunData(list(), dict(), None, dict())) + self.testruns.append(SingleTestData.TestRunData(list(), dict(), None, dict(), xfail='')) class TestSuiteData(object): diff --git a/test/appium/support/testrail_report.py b/test/appium/support/testrail_report.py index 6ab1bc39a9..b3eee594a6 100644 --- a/test/appium/support/testrail_report.py +++ b/test/appium/support/testrail_report.py @@ -182,7 +182,14 @@ class TestrailReport(BaseTestReport): if test.group_name: comment += "# Class: %s \n" % test.group_name if last_testrun.error: - comment += '%s' % ('# Error: \n %s \n' % emoji.demojize(last_testrun.error)) + devices + test_steps + full_error = last_testrun.error + (code_error, no_code_error_str, issue_id) = self.separate_xfail_error(full_error) + if issue_id: + test_rail_xfail = self.make_error_with_gh_issue_link(no_code_error_str, issue_id) + error = "%s %s" % (code_error, test_rail_xfail) + else: + error = full_error + comment += '%s' % ('# Error: \n %s \n' % emoji.demojize(error)) + devices + test_steps else: comment += devices + test_steps data.append( @@ -246,7 +253,13 @@ class TestrailReport(BaseTestReport): case_title += '-------\n' case_title += "## %s) ID %s: [%s](%s) \n" % ( i + 1, test.testrail_case_id, test.name, test_rail_link) - error = "```%s```\n" % last_testrun.error[:255] + full_error = last_testrun.error[:255] + (code_error, no_code_error_str, issue_id) = self.separate_xfail_error(full_error) + if issue_id: + test_rail_xfail = self.make_error_with_gh_issue_link(no_code_error_str, issue_id) + error = "```%s```\n %s \n" % (code_error, test_rail_xfail) + else: + error = "```%s```\n" % full_error for job_id, f in last_testrun.jobs.items(): if last_testrun.first_commands: job_url = self.get_sauce_job_url(job_id=job_id, @@ -289,3 +302,8 @@ class TestrailReport(BaseTestReport): def get_not_executed_tests(self, test_run_id): results = self.get("get_tests/%s&status_id=3" % test_run_id) return [result['case_id'] for result in results["tests"]] + + @staticmethod + def make_error_with_gh_issue_link(error, issue_id): + return error.replace(issue_id, '[%s](https://github.com/status-im/status-react/issues/%s)' % (issue_id, issue_id[1:])) + diff --git a/test/appium/tests/base_test_case.py b/test/appium/tests/base_test_case.py index 26142c83ea..fc5fa22a70 100644 --- a/test/appium/tests/base_test_case.py +++ b/test/appium/tests/base_test_case.py @@ -302,7 +302,7 @@ def create_shared_drivers(quantity): else: loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) - capabilities = {'maxDuration': 2700} + capabilities = {'maxDuration': 3600} drivers = loop.run_until_complete(start_threads(quantity, Driver, drivers, diff --git a/test/appium/tests/conftest.py b/test/appium/tests/conftest.py index 9954ad309e..110e54a40e 100644 --- a/test/appium/tests/conftest.py +++ b/test/appium/tests/conftest.py @@ -216,23 +216,50 @@ def should_save_device_stats(config): def pytest_runtest_makereport(item, call): outcome = yield report = outcome.get_result() - if "xdist_group" in item.keywords._markers and report.when == "setup" and report.failed: - test_suite_data.current_test.group_name = item.instance.__class__.__name__ + + def catch_error(): error = report.longreprtext - exception = re.findall('E.*Message:|E.*Error:|E.*Failed:', error) + failure_pattern = 'E.*Message:|E.*Error:|E.*Failed:' + exception = re.findall(failure_pattern, error) if exception: - error = error.replace(re.findall('E.*Message:|E.*Error:|E.*Failed:', report.longreprtext)[0], '') - test_suite_data.current_test.testruns[-1].error = "Test setup failed: \n" + error - github_report.save_test(test_suite_data.current_test) + error = error.replace(re.findall(failure_pattern, report.longreprtext)[0], '') + return error + + if report.when == 'setup': + error_intro, error = 'Test setup failed:', '' + final_error = '%s %s' % (error_intro, error) + if hasattr(report, 'wasxfail'): + if '[NOTRUN]' in report.wasxfail: + test_suite_data.set_current_test(item.name, testrail_case_id=get_testrail_case_id(item)) + test_suite_data.current_test.create_new_testrun() + if "xdist_group" in item.keywords._markers: + test_suite_data.current_test.group_name = item.instance.__class__.__name__ + error_intro, error = 'Test is not run, e2e blocker ', report.wasxfail + final_error = "%s [[%s]]" % (error_intro, error) + else: + if "xdist_group" in item.keywords._markers: + test_suite_data.current_test.group_name = item.instance.__class__.__name__ + error = catch_error() + final_error = '%s %s [[%s]]' % (error_intro, error, report.wasxfail) + else: + if "xdist_group" in item.keywords._markers and report.failed: + test_suite_data.current_test.group_name = item.instance.__class__.__name__ + error = catch_error() + final_error = '%s %s' % (error_intro, error) + if error: + test_suite_data.current_test.testruns[-1].error = final_error + github_report.save_test(test_suite_data.current_test) + if report.when == 'call': is_sauce_env = item.config.getoption('env') == 'sauce' current_test = test_suite_data.current_test + error = catch_error() if report.failed: - error = report.longreprtext - exception = re.findall('E.*Message:|E.*Error:|E.*Failed:', error) - if exception: - error = error.replace(re.findall('E.*Message:|E.*Error:|E.*Failed:', report.longreprtext)[0], '') current_test.testruns[-1].error = error + if hasattr(report, 'wasxfail'): + current_test.testruns[-1].xfail = report.wasxfail + if error: + current_test.testruns[-1].error = '%s [[%s]]' % (error, report.wasxfail) if is_sauce_env: update_sauce_jobs(current_test.name, current_test.testruns[-1].jobs, report.passed) if item.config.getoption('docker'): diff --git a/test/appium/tests/critical/chats/test_1_1_public_chats.py b/test/appium/tests/critical/chats/test_1_1_public_chats.py index 31f72d5519..b8d0718afe 100644 --- a/test/appium/tests/critical/chats/test_1_1_public_chats.py +++ b/test/appium/tests/critical/chats/test_1_1_public_chats.py @@ -849,6 +849,7 @@ class TestContactBlockMigrateKeycardMultipleSharedDevices(MultipleSharedDeviceTe self.errors.verify_no_errors() @marks.testrail_id(702188) + @marks.xfail(reason="flaky; issue when sometimes history is not fetched from offline for public chat, needs investigation") def test_cellular_settings_on_off_public_chat_fetching_history(self): [home.home_button.double_click() for home in [self.home_1, self.home_2]] public_chat_name, public_chat_message = 'e2e-started-before', 'message to pub chat' @@ -1132,6 +1133,7 @@ class TestEnsStickersMultipleDevicesMerged(MultipleSharedDeviceTestCase): self.home_1.just_fyi('Install free sticker pack and use it in 1-1 chat on Ropsten') self.home_1.get_chat(self.ens).click() self.chat_1.install_sticker_pack_by_name('Status Cat') + self.chat_1.chat_message_input.clear() self.chat_1.sticker_icon.click() if not self.chat_1.sticker_message.is_element_displayed(): self.errors.append('Sticker was not sent') diff --git a/test/appium/tests/critical/chats/test_group_chat.py b/test/appium/tests/critical/chats/test_group_chat.py index 9e386ae1f4..c7764c1053 100644 --- a/test/appium/tests/critical/chats/test_group_chat.py +++ b/test/appium/tests/critical/chats/test_group_chat.py @@ -77,6 +77,7 @@ class TestGroupChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700731) + @marks.xfail(reason="test may fail as sometimes message 'Hey admin' is not delivered; needs investigation") def test_group_chat_join_send_text_messages_push(self): message_to_admin = self.message_to_admin [self.homes[i].home_button.double_click() for i in range(3)] @@ -123,6 +124,7 @@ class TestGroupChatMultipleDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(3998) + @marks.xfail(reason="mysterious issue when PNs are not fetched from offline, can not reproduce on real devices; needs investigation") def test_group_chat_offline_pn(self): [self.homes[i].home_button.double_click() for i in range(3)] chat_name = 'for_offline_pn' diff --git a/test/appium/tests/critical/wallet_and_tx/test_wallet.py b/test/appium/tests/critical/wallet_and_tx/test_wallet.py index 8c2c35b91d..7a5614938c 100644 --- a/test/appium/tests/critical/wallet_and_tx/test_wallet.py +++ b/test/appium/tests/critical/wallet_and_tx/test_wallet.py @@ -253,6 +253,7 @@ class TestWalletManagementDeviceMerged(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(700762) + @marks.xfail(reason="flaky; on e2e builds when switching on rinkeby sometimes no collectibles") def test_wallet_add_account_seed_phrase_collectibles_rinkeby_set_as_profile_image(self): user = wallet_users['E'] self.wallet.driver.set_network_connection(6) diff --git a/test/appium/tests/marks.py b/test/appium/tests/marks.py index 9eaac373b3..7421bb2759 100644 --- a/test/appium/tests/marks.py +++ b/test/appium/tests/marks.py @@ -8,3 +8,4 @@ medium = pytest.mark.medium flaky = pytest.mark.flaky upgrade = pytest.mark.upgrade skip = pytest.mark.skip +xfail = pytest.mark.xfail diff --git a/test/appium/tests/medium/test_activity_center.py b/test/appium/tests/medium/test_activity_center.py index 90ead64714..50340dcb7b 100644 --- a/test/appium/tests/medium/test_activity_center.py +++ b/test/appium/tests/medium/test_activity_center.py @@ -161,7 +161,7 @@ class TestActivityCenterMultipleDeviceMedium(MultipleSharedDeviceTestCase): self.home_1.just_fyi("Device1 joins Group chat 3") group_chat_1 = self.home_1.get_chat(self.group_chat_name_3).click() - group_chat_1.join_chat_button.click() + group_chat_1.join_chat_button.click_if_shown() group_chat_1.home_button.double_click() self.home_2.just_fyi("Device2 mentions Device1 in Group chat 3") diff --git a/test/appium/tests/medium/test_chats_m.py b/test/appium/tests/medium/test_chats_m.py index cdb2392e6a..bf7645a04b 100644 --- a/test/appium/tests/medium/test_chats_m.py +++ b/test/appium/tests/medium/test_chats_m.py @@ -315,7 +315,7 @@ class TestChatMediumMultipleDevice(MultipleSharedDeviceTestCase): cls.new_group_chat_name = "GroupChat after rename" cls.group_chat_1 = cls.home_1.create_group_chat(user_names_to_add=[cls.default_username_2], group_chat_name=cls.initial_group_chat_name) cls.group_chat_2 = cls.home_2.get_chat(cls.initial_group_chat_name).click() - cls.group_chat_2.join_chat_button.click() + cls.group_chat_2.join_chat_button.click_if_shown() [home.home_button.click() for home in (cls.home_1, cls.home_2)] cls.home_1.just_fyi("Creating public chats") @@ -329,6 +329,7 @@ class TestChatMediumMultipleDevice(MultipleSharedDeviceTestCase): cls.message_1, cls.message_2, cls.message_3, cls.message_4 = "Message1", "Message2", "Message3", "Message4" @marks.testrail_id(702066) + @marks.xfail(reason="may fail on setup with remote disconnected error, needs investigation") def test_chat_1_1_push_and_reaction_for_messages_sticker_audio_image(self): # methods with steps to use later in loop @@ -631,7 +632,7 @@ class TestChatMediumMultipleDevice(MultipleSharedDeviceTestCase): chat_1.home_button.click() chat_1 = self.home_1.create_group_chat([full_ens], group_name) chat_2 = self.home_2.get_chat(group_name).click() - chat_2.join_chat_button.click() + chat_2.join_chat_button.click_if_shown() self.home_1.just_fyi('Check ENS and in group chat and suggestions list') chat_1.element_by_text_part(full_ens).wait_for_visibility_of_element(60) @@ -842,6 +843,7 @@ class TestChatKeycardMentionsMediumMultipleDevice(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(702295) + @marks.xfail(reason="mysterious issue when PNs are not fetched from offline, can not reproduce on real devices; needs investigation") def test_keycard_1_1_chat_command_request_and_send_tx_stt_in_1_1_chat_offline_opened_from_push(self): [home.home_button.double_click() for home in (self.home_1, self.home_2)] self.home_1.get_chat(self.sender['username']).click() diff --git a/test/appium/tests/medium/test_pairing_devices_sync_m.py b/test/appium/tests/medium/test_pairing_devices_sync_m.py index bfb592b632..c38e206393 100644 --- a/test/appium/tests/medium/test_pairing_devices_sync_m.py +++ b/test/appium/tests/medium/test_pairing_devices_sync_m.py @@ -37,6 +37,7 @@ class TestPairingSyncMediumMultipleDevicesMerged(MultipleSharedDeviceTestCase): cls.channel_before_1.send_message(cls.message) cls.home_1.home_button.double_click() cls.device_3.put_app_to_background_and_back() + cls.device_2.put_app_to_background_and_back() cls.device_1.just_fyi('Edit profile picture') cls.home_1.profile_button.double_click() @@ -45,11 +46,10 @@ class TestPairingSyncMediumMultipleDevicesMerged(MultipleSharedDeviceTestCase): cls.device_1.just_fyi('Add contact, start group chat') cls.home_1.home_button.click() cls.home_1.add_contact(cls.public_key_3) - cls.device_2.put_app_to_background_and_back() cls.home_1.get_back_to_home_view() cls.chat_1 = cls.home_1.create_group_chat([cls.username_3], cls.group_chat_name) cls.chat_3 = cls.home_3.get_chat(cls.group_chat_name).click() - cls.chat_3.join_chat_button.click() + cls.chat_3.join_chat_button.click_if_shown() cls.device_2.just_fyi("(secondary device): restore same multiaccount on another device") cls.home_2 = cls.device_2.recover_access(passphrase=' '.join(cls.recovery_phrase.values())) @@ -67,6 +67,7 @@ class TestPairingSyncMediumMultipleDevicesMerged(MultipleSharedDeviceTestCase): [device.home_button.double_click() for device in (cls.profile_1, cls.profile_2, cls.device_3)] @marks.testrail_id(702269) + @marks.xfail(reason="too long setup, can fail with Remote end closed connection") def test_pairing_sync_initial_community_send_message(self): # Pricture sync is not implemented yet self.device_2.just_fyi('check that created/joined community and profile details are updated') diff --git a/test/appium/tests/non_func/test_performance.py b/test/appium/tests/non_func/test_performance.py index 2d981e1dbe..1ed33201f8 100644 --- a/test/appium/tests/non_func/test_performance.py +++ b/test/appium/tests/non_func/test_performance.py @@ -1,8 +1,12 @@ +import pytest + from tests import marks from tests.base_test_case import SingleDeviceTestCase from views.sign_in_view import SignInView from datetime import datetime +from tests.users import basic_user import time +import base64 class TestPerformance(SingleDeviceTestCase): @@ -63,3 +67,92 @@ class TestPerformance(SingleDeviceTestCase): "time between submitting a password and successful login is '%s' seconds, while baseline is '%s'!" % (time_to_login, baseline_login)) self.errors.verify_no_errors() + + @marks.skip + def test_genarate_db(self): + sign_in = SignInView(self.driver) + receiver = '0x0467d6ea67b28e017a33aa5d2dd627ce42180f9727e4fb33c8ac813cc9c2d2bf557ba245d70077c06ef31efe5cbb773244ee5fcc1ec89d2eab1b4922ec09babdbe' + sender_passphrase = 'high design enjoy small coconut notable corn quantum blind dish green glow' + home = sign_in.recover_access(sender_passphrase) + profile = home.profile_button.click() + profile.advanced_button.click() + profile.fleet_setting_button.click() + changed_fleet = 'eth.prod' + profile.element_by_text(changed_fleet).click_until_presence_of_element(profile.confirm_button) + profile.confirm_button.click() + sign_in.sign_in() + long_message = '4096 Comunidade das Nações[1][2][3][4] (em inglês: Commonwealth of Nations, ou simplesmente ' \ + 'the Commonwealth[5] , "a Comunidade"), originalmente criada como Comunidade Britânica de Nações ' \ + '(em inglês: British Commonwealth of Nations),[6] é uma organização intergovernamental composta por ' \ + '53 países membros independentes. Todas as nações membros da organização, com exceção de Moçambique ' \ + '(antiga colónia do Império Português) e Ruanda (antiga colónia dos impérios Alemão e Belga), faziam ' \ + 'parte do Império Britânico, do qual se separaram.[7] Os Estados-membros cooperam num quadro ' \ + 'de valores e objetivos comuns, conforme descrito na Declaração de Singapura. Estes incluem ' \ + 'a promoção da democracia, direitos humanos, boa governança, Estado de Direito, liberdade ' \ + 'individual, igualitarismo, livre comércio, multilateralismo e a paz mundial.[8] A ' \ + 'Commonwealth não é uma união política, mas uma organização intergovernamental através da qual' \ + ' os países com diversas origens sociais, políticas e econômicas são considerados como iguais' \ + ' em status. As atividades da Commonwealth são realizadas através do permanente Secretariado ' \ + 'da Commonwealth, chefiado pelo Secretário-Geral, e por reuniões bienais entre os Chefes de ' \ + 'Governo da Commonwealth. O símbolo da sua associação livre é o chefe da Commonwealth, que é ' \ + 'uma posição cerimonial atualmente ocupada pela rainha Isabel II. Isabel II é também a monarca, ' \ + 'separada e independentemente, de 16 membros da Commonwealth, que são conhecidos como os ' \ + '"reinos da Commonwealth". A Commonwealth é um fórum para uma série de organizações não ' \ + 'governamentais, conhecidas coletivamente como a "família da Commonwealth", promovidas através ' \ + 'da intergovernamental Fundação Commonwealth. Os Jogos da Commonwealth, a atividade mais visível ' \ + 'da organização, são um produto de uma dessas entidades. Estas organizações fortalecem a cultura ' \ + 'compartilhada da Commonwealth, que se estende através do esporte comum, patrimônio literário e ' \ + 'práticas políticas e jurídicas. Devido a isso, os países da Commonwealth não são considerados ' \ + '"estrangeiros" uns aos outros. Refletindo esta missão, missões diplomáticas entre os países da ' \ + 'Commonwealth são designadas como Altas Comissões, em vez de embaixadas. Índice Os primeiros-ministros' \ + ' de cinco membros da Commonwealth de 1944 em uma Conferência da Commonwealth Em 1884, ao visitar' \ + ' a Austrália, Lord Rosebery descreveu que o Império Britânico estava a mudar, após algumas de suas ' \ + 'colónias tornaram-se mais independentes.[9] As conferências dos britânicos e das suas colónias ' \ + 'ocorriam periodicamente, desde a primeiro em 1887, levando à criação das conferências imperiais em ' \ + '1911.[10] A proposta concreta foi apresentada por Jan Christian Smuts em 1917 quando ele cunhou o termo ' \ + '"Comunidade Britânica das Nações", e previu o "futuro das relações constitucionais e reajustes ' \ + 'no Império Britânico".[11] Smuts argumentou com sucesso que o império deve ser representado ' \ + 'na Conferência de Versalhes por delegados das colónias, assim como a Grã-Bretanha.[12][13]' \ + ' Na Declaração de Balfour na Conferência Imperial de 1926, a Grã-Bretanha e os seus domínios ' \ + 'concordaram que eles eram "iguais em status, em que ninguém os subordinava em qualquer aspecto ' \ + 'de seus assuntos internos ou externos, embora unidos pela fidelidade comum à Coroa, e livremente ' \ + 'associados como membros da Comunidade Britânica de Nações". Estes aspectos da relação foram ' \ + 'finalmente formalizada pelo Estatuto de Westminster em 1931. O estatuto foi aplicado ao Canadá ' \ + 'sem a necessidade de ratificação, entretanto, a Austrália, Nova Zelândia, e Terra Nova tinham que ' \ + 'ratificar o estatuto para que ela tivesse efeito. A atual província canadiana da Terra Nova ' \ + '(Newfoundland) nunca retificou o estatuto, e em 16 de fevereiro de 1934, com o consentimento ' \ + 'do seu parlamento, o governo de Newfoundland voluntariamente deixou a organização. Newfoundland, ' \ + 'então, mais tarde tornou-se a décima província do Canadá, em 1949.[14] Austrália ratientão, mais tarde ' \ + 'tornou-se a décima província do Canadá, em 1949.[14] Austrália rati então, mais tarde tornou-se a décima' \ + ' província do Canadá, ' + gh_link_message = 'https://github.com/status-im/status-react/issues' + gif = 'https://media.giphy.com/media/7GYHmjk6vlqY8/giphy.gif' + long_arabic_text = 'لك التفاصيل لتكتشف حقيقة وأساس تلك السعادة البشرية، فلا أحد يرفض أو يكره أو يتجنب ا' \ + 'لشعور بالسعادة، ولكن بفضل هؤلاء الأشخاص الذين لا يدركون بأن السعادة لا بد أن نستشعرها بصورة أكثر' \ + ' عقلانية ومنطقية فيعرضهم هذا لمواجهة الظروف الأليمة، وأكرر بأنه لا يوجد من يرغب في الحب ونيل ال' \ + 'منال ويتلذذ بالآلام، الألم هو الألم ولكن نتيجة لظروف ما قد تكمن السعاده فيما نتحمله من كد وأسي.' + text_emoji = '😀 😃 😄 😁 😆 😅 😂 🤣 🥲 ☺️ 😊 😇 🙂 🙃 😉 😌 😍 🥰 😘 😗 😙 😚 😋 😛 😝 😜 🤪 🤨 🧐 🤓 😎 🥸 ' \ + '🤩 🥳 😏 😒 😞 😔 😟 😕 🙁 ☹️ 😣 😖 😫 😩 🥺 😢 😭 😤 😠 😡 🤬 🤯 😳 🥵 🥶 😱 😨 😰 😥 😓 🤗 🤔 ' \ + '🤭 🤫 🤥 😶 😐 😑 😬 🙄 😯 😦 😧 😮 😲 🥱 😴 🤤 😪 😵 🤐 🥴 🤢 🤮 🤧 😷 🤒 🤕 🤑 🤠 😈 👿 👹 👺 ' \ + '🤡 💩 👻 💀 ☠️ 👽 👾 🤖 🎃 😺 😸 😹 😻 😼 😽 🙀 😿 😾' + emoji = '😺' + chinese_text = '吉伊杰杰勒! 艾 诶开 艾艾勒开 西吉艾艾诶.... 娜勒开伊哦吉艾艾弗 诶比勒屁哦 西吉艾艾伊' + base_message = text_emoji + chat = home.add_contact(receiver) + base_message = long_arabic_text + for n in range(14116, 16500): + self.driver.info('Sending %s message' % str(n)) + chat.send_message('%s message \n' + 'with several \n' + 'lines' % str(n)) + if (n/100).is_integer(): + chat.send_message("**Another 100 messages are sent**") + if (n/500).is_integer(): + chat.send_message("__IT IS ALREADY %s IN THIS CHAT__" % str(n)) + + chat.send_message("Below are 1000 emoji cats") + base_message = emoji + for n in range(6000, 7000): + self.driver.info('Sending %s message' % str(n)) + chat.send_message('%s' % base_message) + chat.send_message("Wohooo 7200 messages!") diff --git a/test/appium/tests/non_func/test_translations.py b/test/appium/tests/non_func/test_translations.py index 45dbea74b9..fe258e4ff7 100644 --- a/test/appium/tests/non_func/test_translations.py +++ b/test/appium/tests/non_func/test_translations.py @@ -17,7 +17,7 @@ class TestTranslations(NoDeviceTestCase): with open(os.path.join(directory, 'translations/en.json'), 'r') as f: data = set(json.load(f).keys()) result = [] - paths = ['src/status_im', 'components/src'] + paths = ['src/status_im', 'components/src', 'src'] for root, dirs, files in chain.from_iterable(os.walk(os.path.join(directory, path)) for path in paths): dirs[:] = [d for d in dirs if d not in ['test', 'translations']] for file in [file for file in files if file.endswith('.cljs')]: diff --git a/test/appium/views/base_view.py b/test/appium/views/base_view.py index 283227246a..26c3b8ac17 100644 --- a/test/appium/views/base_view.py +++ b/test/appium/views/base_view.py @@ -349,7 +349,7 @@ class BaseView(object): def click_system_back_button_until_element_is_shown(self, attempts=3, element='home'): counter = 0 - if element is 'home': + if element == 'home': element = self.home_button while not element.is_element_present(1) and counter <= attempts: try: diff --git a/test/appium/views/send_transaction_view.py b/test/appium/views/send_transaction_view.py index a18974fec9..ba36ba3aab 100644 --- a/test/appium/views/send_transaction_view.py +++ b/test/appium/views/send_transaction_view.py @@ -153,7 +153,7 @@ class SendTransactionView(BaseView): if self.element_by_text_part('Transaction failed').is_element_displayed(): self.driver.fail('Transaction failed') self.driver.info("## Transaction is signed!", device=False) - self.ok_button.click() + self.ok_button.click_until_absense_of_element(self.ok_button) return error_text @staticmethod diff --git a/test/appium/views/sign_in_view.py b/test/appium/views/sign_in_view.py index 25cc198397..2d9806d0f9 100644 --- a/test/appium/views/sign_in_view.py +++ b/test/appium/views/sign_in_view.py @@ -3,7 +3,8 @@ import os from tests import common_password, appium_root_project_path from views.base_element import Button, EditBox, Text from views.base_view import BaseView - +import base64 +from tests.base_test_case import AbstractTestCase class MultiAccountButton(Button): class Username(Text): @@ -262,7 +263,6 @@ class SignInView(BaseView): self.sign_in() def import_db(self, seed_phrase, import_db_folder_name, password=common_password): - from tests.base_test_case import AbstractTestCase self.driver.info('## Importing database', device=False) import_file_name = 'export.db' home = self.recover_access(passphrase=seed_phrase, password=password) @@ -282,3 +282,25 @@ class SignInView(BaseView): self.home_button.wait_for_element(40) self.driver.info('## Importing database is finished!', device=False) return self.get_home_view() + + def export_db(self, seed_phrase, file_to_export='export.db', password=common_password): + self.driver.info('## Export database', device=False) + home = self.recover_access(passphrase=seed_phrase, password=password) + profile = home.profile_button.click() + full_path_to_file = os.path.join(appium_root_project_path, 'views/dbs/%s' % file_to_export) + profile.logout() + self.multi_account_on_login_button.wait_for_visibility_of_element(30) + self.get_multiaccount_by_position(1).click() + self.password_input.set_value(common_password) + self.options_button.click() + self.element_by_text('Export unencrypted').wait_and_click(40) + self.element_by_text('Export unencrypted').wait_for_invisibility_of_element(40) + file_base_64 = self.driver.pull_file('%s/export.db' % AbstractTestCase().app_path) + try: + with open(full_path_to_file, "wb") as f: + f.write(base64.b64decode(file_base_64)) + except Exception as e: + print(str(e)) + self.driver.info('## Exporting database is finished!', device=False) + +