Skip to content

Commit 8bf083c

Browse files
committed
Added atomic tests for chats and sigh in
Signed-off-by: yevh-berdnyk <ie.berdnyk@gmail.com>
1 parent 73dab56 commit 8bf083c

13 files changed

Lines changed: 325 additions & 17 deletions

test/appium/tests/atomic/__init__.py

Whitespace-only changes.

test/appium/tests/atomic/chats/__init__.py

Whitespace-only changes.
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from tests import marks, transaction_users, common_password
2+
from tests.base_test_case import MultipleDeviceTestCase
3+
from views.sign_in_view import SignInView
4+
5+
6+
@marks.chat
7+
@marks.transaction
8+
class TestCommands(MultipleDeviceTestCase):
9+
10+
@marks.skip
11+
@marks.testrail_case_id(3697)
12+
def test_network_mismatch_for_send_request_commands(self):
13+
recipient = transaction_users['C_USER']
14+
sender = self.senders['d_user'] = transaction_users['D_USER']
15+
self.create_drivers(2)
16+
device_1_sign_in, device_2_sign_in = SignInView(self.drivers[0]), SignInView(self.drivers[1])
17+
for user_details in (sender, device_1_sign_in), (recipient, device_2_sign_in):
18+
user_details[1].recover_access(passphrase=user_details[0]['passphrase'],
19+
password=user_details[0]['password'])
20+
device_1_home, device_2_home = device_1_sign_in.get_home_view(), device_2_sign_in.get_home_view()
21+
22+
device_2_profile = device_2_home.profile_button.click()
23+
device_2_profile.switch_network('Mainnet with upstream RPC')
24+
device_2_sign_in.click_account_by_position(0)
25+
device_2_sign_in.sign_in()
26+
27+
device_1_chat = device_1_home.add_contact(recipient['public_key'])
28+
amount_1 = device_1_chat.get_unique_amount()
29+
device_1_chat.send_transaction_in_1_1_chat(amount_1, common_password, wallet_set_up=True)
30+
assert device_1_chat.chat_element_by_text(amount_1).status.text == 'Sent'
31+
32+
device_2_chat = device_2_home.get_chat_with_user(sender['username']).click()
33+
chat_element_1 = device_2_chat.chat_element_by_text(amount_1)
34+
chat_element_1.wait_for_visibility_of_element(120)
35+
assert chat_element_1.status.text == 'Network mismatch'
36+
assert chat_element_1.contains_text('On testnet')
37+
38+
amount_2 = device_1_chat.get_unique_amount()
39+
device_1_chat.request_transaction_in_1_1_chat(amount_2)
40+
assert device_1_chat.chat_element_by_text(amount_2).status.text == 'Sent'
41+
42+
chat_element_2 = device_2_chat.chat_element_by_text(amount_2)
43+
chat_element_2.wait_for_visibility_of_element(120)
44+
assert chat_element_2.status.text == 'Network mismatch'
45+
assert chat_element_2.contains_text('On testnet')
46+
assert chat_element_2.contains_text('Transaction Request')
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
import random
2+
import string
3+
4+
import pytest
5+
6+
from tests import marks, get_current_time
7+
from tests.base_test_case import MultipleDeviceTestCase
8+
from views.sign_in_view import SignInView
9+
10+
11+
@marks.all
12+
@marks.chat
13+
class TestMessagesOneToOneChat(MultipleDeviceTestCase):
14+
15+
@marks.skip
16+
@marks.testrail_case_id(764)
17+
def test_text_message_1_1_chat(self):
18+
self.create_drivers(2)
19+
device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
20+
for sign_in in device_1, device_2:
21+
sign_in.create_user()
22+
device_1_home, device_2_home = device_1.get_home_view(), device_2.get_home_view()
23+
device_2_public_key = device_2_home.get_public_key()
24+
device_2_home.home_button.click()
25+
26+
device_1_chat = device_1_home.add_contact(device_2_public_key)
27+
28+
message = 'hello'
29+
device_1_chat.chat_message_input.send_keys(message)
30+
device_1_chat.send_message_button.click()
31+
32+
device_2_home.element_by_text(message, 'button').click()
33+
34+
if device_1_chat.chat_element_by_text(message).status.text != 'Seen':
35+
pytest.fail("'Seen' status is shown under the sent text message")
36+
37+
@marks.skip
38+
@marks.testrail_case_id(772)
39+
def test_offline_messaging_1_1_chat(self):
40+
self.create_drivers(2, offline_mode=True)
41+
device_1, device_2 = self.drivers[0], self.drivers[1]
42+
sign_in_1, sign_in_2 = SignInView(device_1), SignInView(device_2)
43+
sign_in_1.create_user()
44+
username_2 = sign_in_2.create_user()
45+
home_1, home_2 = sign_in_1.get_home_view(), sign_in_2.get_home_view()
46+
public_key_1 = home_1.get_public_key()
47+
home_1.home_button.click()
48+
49+
device_1.set_network_connection(1) # airplane mode on primary device
50+
51+
chat_2 = home_2.add_contact(public_key_1)
52+
message_1 = 'test message'
53+
chat_2.chat_message_input.send_keys(message_1)
54+
chat_2.send_message_button.click()
55+
device_2.set_network_connection(1) # airplane mode on secondary device
56+
57+
device_1.set_network_connection(2) # turning on WiFi connection on primary device
58+
59+
chat_element = home_1.get_chat_with_user(username_2)
60+
chat_element.wait_for_visibility_of_element(20)
61+
chat_1 = chat_element.click()
62+
chat_1.chat_element_by_text(message_1).wait_for_visibility_of_element(2)
63+
64+
device_2.set_network_connection(2) # turning on WiFi connection on secondary device
65+
device_1.set_network_connection(1) # airplane mode on primary device
66+
67+
chat_2.element_by_text('Connecting to peers...').wait_for_invisibility_of_element(60)
68+
message_2 = 'one more message'
69+
chat_2.chat_message_input.send_keys(message_2)
70+
chat_2.send_message_button.click()
71+
72+
device_1.set_network_connection(2) # turning on WiFi connection on primary device
73+
74+
chat_1 = chat_element.click()
75+
chat_1.chat_element_by_text(message_2).wait_for_visibility_of_element(180)
76+
77+
@marks.testrail_case_id(3701)
78+
def test_resend_message_offline(self):
79+
self.create_drivers(2, offline_mode=True)
80+
device_1, device_2 = self.drivers[0], self.drivers[1]
81+
sign_in_1, sign_in_2 = SignInView(device_1), SignInView(device_2)
82+
username_1 = 'user_%s' % get_current_time()
83+
sign_in_1.create_user(username_1)
84+
sign_in_2.create_user()
85+
home_1, home_2 = sign_in_1.get_home_view(), sign_in_2.get_home_view()
86+
public_key_2 = home_2.get_public_key()
87+
home_2.home_button.click()
88+
89+
device_1.set_network_connection(1) # airplane mode on primary device
90+
91+
chat_1 = home_1.add_contact(public_key_2)
92+
message = 'test message'
93+
chat_1.chat_message_input.send_keys(message)
94+
chat_1.send_message_button.click()
95+
progress_time = chat_1.chat_element_by_text(message).progress_bar.measure_time_while_element_is_shown()
96+
if not 9 < progress_time < 11:
97+
self.errors.append('Progress indicator is shown during %s seconds' % progress_time)
98+
99+
device_1.set_network_connection(2) # turning on WiFi connection
100+
101+
chat_1.element_by_text('Not sent. Tap for options').click()
102+
if not chat_1.element_by_text('Delete message').is_element_displayed():
103+
self.errors.append("'Delete message' button is not shown for not sent message")
104+
105+
chat_1.connection_status.wait_for_invisibility_of_element(60)
106+
chat_1.element_by_text('Resend').click()
107+
if chat_1.chat_element_by_text(message).status.text != 'Sent':
108+
self.errors.append("Message status is not 'Sent' after resending the message")
109+
110+
chat_2 = home_2.get_chat_with_user(username_1).click()
111+
if not chat_2.chat_element_by_text(message).is_element_displayed(10):
112+
self.errors.append("Message with text '%s' is not received" % message)
113+
114+
self.verify_no_errors()
115+
116+
@marks.testrail_case_id(3710)
117+
def test_messaging_in_different_networks(self):
118+
self.create_drivers(2, offline_mode=True)
119+
device_1, device_2 = self.drivers[0], self.drivers[1]
120+
sign_in_1, sign_in_2 = SignInView(device_1), SignInView(device_2)
121+
username_1 = 'user_%s' % get_current_time()
122+
sign_in_1.create_user(username_1)
123+
sign_in_2.create_user()
124+
home_1, home_2 = sign_in_1.get_home_view(), sign_in_2.get_home_view()
125+
public_key_2 = home_2.get_public_key()
126+
profile_2 = home_2.get_profile_view()
127+
profile_2.switch_network('Mainnet with upstream RPC')
128+
sign_in_2.click_account_by_position(0)
129+
sign_in_2.sign_in()
130+
131+
chat_1 = home_1.add_contact(public_key_2)
132+
message = 'test message'
133+
chat_1.chat_message_input.send_keys(message)
134+
chat_1.send_message_button.click()
135+
136+
chat_2 = home_2.get_chat_with_user(username_1).click()
137+
chat_2.chat_element_by_text(message).wait_for_visibility_of_element()
138+
139+
public_chat_name = ''.join(random.choice(string.ascii_lowercase) for _ in range(7))
140+
chat_1.get_back_to_home_view()
141+
home_1.join_public_chat(public_chat_name)
142+
chat_2.get_back_to_home_view()
143+
home_2.join_public_chat(public_chat_name)
144+
145+
chat_1.chat_message_input.send_keys(message)
146+
chat_1.send_message_button.click()
147+
chat_2.chat_element_by_text(message).wait_for_visibility_of_element()
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import random
2+
import string
3+
4+
from tests import marks
5+
from tests.base_test_case import MultipleDeviceTestCase
6+
from views.sign_in_view import SignInView
7+
8+
9+
@marks.chat
10+
class TestMessagesPublicChat(MultipleDeviceTestCase):
11+
12+
@marks.skip
13+
@marks.testrail_case_id(1383)
14+
def test_public_chat(self):
15+
self.create_drivers(2)
16+
device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
17+
users = list()
18+
chats = list()
19+
chat_name = ''.join(random.choice(string.ascii_lowercase) for _ in range(7))
20+
for sign_in in device_1, device_2:
21+
users.append(sign_in.create_user())
22+
home = sign_in.get_home_view()
23+
chats.append(home.join_public_chat(chat_name))
24+
chat_1, chat_2 = chats[0], chats[1]
25+
26+
if chat_1.connection_status.text != 'Fetching messages...':
27+
self.errors.append("'Fetching messages...' status is not shown")
28+
29+
message = 'hello'
30+
chat_1.chat_message_input.send_keys(message)
31+
chat_1.send_message_button.click()
32+
33+
chat_2.verify_message_is_under_today_text(message, self.errors)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from tests import marks
2+
from tests.base_test_case import MultipleDeviceTestCase
3+
from views.sign_in_view import SignInView
4+
5+
6+
@marks.all
7+
@marks.sign_in
8+
class TestSignIn(MultipleDeviceTestCase):
9+
10+
@marks.testrail_case_id(1432)
11+
def test_offline_login(self):
12+
self.create_drivers(1, offline_mode=True)
13+
driver = self.drivers[0]
14+
sign_in = SignInView(driver)
15+
sign_in.create_user()
16+
17+
driver.close_app()
18+
driver.set_network_connection(1) # airplane mode
19+
20+
driver.launch_app()
21+
sign_in.accept_agreements()
22+
home = sign_in.sign_in()
23+
home.home_button.wait_for_visibility_of_element()
24+
assert home.connection_status.text == 'Offline'

test/appium/tests/marks.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@
1010
message_reliability = pytest.mark.message_reliability
1111
transaction = pytest.mark.transaction
1212
wallet = pytest.mark.wallet
13+
sign_in = pytest.mark.sign_in
1314
skip = pytest.mark.skip

test/appium/tests/test_messaging.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -290,10 +290,10 @@ def test_offline_messaging_1_1_chat(self):
290290
sign_in_2.click_account_by_position(0)
291291
sign_in_2.sign_in()
292292
sign_in_2.home_button.wait_for_visibility_of_element()
293-
if not home_2.offline_label.is_element_displayed():
293+
if home_2.connection_status.text != 'Offline':
294294
self.errors.append('Offline label is not shown on Home view while being offline')
295295
chat_2 = home_2.get_chat_with_user(username_1).click()
296-
if not chat_2.offline_label.is_element_displayed():
296+
if chat_2.connection_status.text != 'Offline':
297297
self.errors.append('Offline label is not shown on Chat view while being offline')
298298
device_2.set_network_connection(2) # turning on WiFi connection
299299
chat_2.wait_for_message_in_one_to_one_chat(message_text, self.errors, wait_time=120)
@@ -326,10 +326,10 @@ def test_offline_messaging_group_chat(self):
326326
chat_element_2.wait_for_visibility_of_element()
327327
device_2.set_network_connection(1) # airplane mode
328328

329-
if not home_2.offline_label.is_element_displayed():
329+
if home_2.connection_status.text != 'Offline':
330330
self.errors.append('Offline label is not shown on Home view while being offline')
331331
chat_2 = chat_element_2.click()
332-
if not chat_2.offline_label.is_element_displayed():
332+
if chat_2.connection_status.text != 'Offline':
333333
self.errors.append('Offline label is not shown on Chat view while being offline')
334334

335335
message_text = 'test message'

test/appium/views/base_element.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import os
44

55
import time
6+
from timeit import timeit
7+
68
from PIL import Image, ImageChops
79
from appium.webdriver.common.mobileby import MobileBy
810
from appium.webdriver.common.touch_action import TouchAction
@@ -153,6 +155,16 @@ def long_press_element(self):
153155
action = TouchAction(self.driver)
154156
action.long_press(element).release().perform()
155157

158+
def measure_time_before_element_appears(self, max_wait_time=30):
159+
def wrapper():
160+
return self.wait_for_visibility_of_element(max_wait_time)
161+
return timeit(wrapper, number=1)
162+
163+
def measure_time_while_element_is_shown(self, max_wait_time=30):
164+
def wrapper():
165+
return self.wait_for_invisibility_of_element(max_wait_time)
166+
return timeit(wrapper, number=1)
167+
156168

157169
class BaseEditBox(BaseElement):
158170

test/appium/views/base_view.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,11 @@ def click(self):
146146
info('Tap on %s' % self.name)
147147

148148

149-
class OfflineLabelText(BaseText):
149+
class ConnectionStatusText(BaseText):
150150
def __init__(self, driver):
151-
super(OfflineLabelText, self).__init__(driver)
152-
self.locator = self.Locator.text_selector('Offline')
151+
super(ConnectionStatusText, self).__init__(driver)
152+
self.locator = self.Locator.xpath_selector(
153+
"//*[@content-desc='connection-status-text']/android.widget.TextView")
153154

154155

155156
class BaseView(object):
@@ -172,7 +173,7 @@ def __init__(self, driver):
172173
self.save_button = SaveButton(self.driver)
173174
self.done_button = DoneButton(self.driver)
174175
self.delete_button = DeleteButton(self.driver)
175-
self.offline_label = OfflineLabelText(self.driver)
176+
self.connection_status = ConnectionStatusText(self.driver)
176177

177178
self.apps_button = AppsButton(self.driver)
178179
self.status_app_icon = StatusAppIcon(self.driver)
@@ -186,8 +187,9 @@ def __init__(self, driver):
186187

187188
def accept_agreements(self):
188189
iterations = int()
189-
from views.sign_in_view import CreateAccountButton
190-
while iterations <= 3 and not CreateAccountButton(self.driver).is_element_displayed():
190+
from views.sign_in_view import CreateAccountButton, PasswordInput
191+
while iterations <= 3 and not (CreateAccountButton(self.driver).is_element_displayed() or PasswordInput(
192+
self.driver).is_element_displayed()):
191193
for button in self.ok_button, self.continue_button:
192194
try:
193195
button.wait_for_element(15)

0 commit comments

Comments
 (0)