diff --git a/src/bitmessagekivy/tests/test_draft_message.py b/src/bitmessagekivy/tests/test_draft_message.py index cdcd74d1..bb83ecc1 100644 --- a/src/bitmessagekivy/tests/test_draft_message.py +++ b/src/bitmessagekivy/tests/test_draft_message.py @@ -1,148 +1,220 @@ +from time import time from .telenium_process import TeleniumTestProcess +from telenium.client import TeleniumHttpException from .common import ordered +test_address = {'receiver': 'BM-2cVWtdUzPwF7UNGDrZftWuHWiJ6xxBpiSP'} + class DraftMessage(TeleniumTestProcess): """Draft Screen Functionality Testing""" + test_subject = 'Test Subject text' + test_body = 'Hey, This is draft Message Body' @ordered - def test_save_draft_message(self): - """Select A Draft Screen From Navigaion-Drawer-Box Then - Send a drafted message """ - print("=====================Test - Select A Draft Screen From Navigaion-Drawer-Box=====================") - self.cli.sleep(8) - # this is for opening Nav drawer - self.cli.wait_click('//MDActionTopAppBarButton[@icon=\"menu\"]', timeout=3) - # checking state of Nav drawer - self.assertExists("//MDNavigationDrawer[@state~=\"open\"]", timeout=2) - # Click to open Inbox - self.cli.wait_click('//NavigationItem[@text=\"Inbox\"]', timeout=2) - # Checking Inbox Screen - self.assertExists("//Inbox[@name~=\"inbox\"]", timeout=2) - # Due to animation and transition effect, it needed some halt otherwise it fails - self.cli.sleep(1) + def test_save_message_to_draft(self, **kwargs): + """ + Saving a message to draft box when click back button + """ + # Checking current Screen(Login screen) + self.assert_wait_no_except('//ScreenManager[@current]', timeout=10, value='inbox') + # Checking the composer button is rendered + self.assertExists('//ComposerButton[0]/MDFloatingActionButton[@icon=\"plus\"]', timeout=5) + self.cli.wait_click('//ComposerButton[0]/MDFloatingActionButton', timeout=5) + self.assertExists("//ScreenManager[@current=\"inbox\"]", timeout=5) # Click on Composer Icon(Plus icon) - self.cli.wait_click('//ComposerButton[0]/MDFloatingActionButton[@icon=\"plus\"]', timeout=2) + self.cli.wait_click('//ComposerButton[0]/MDFloatingActionButton[@icon=\"plus\"]', timeout=5) # Checking Message Composer Screen(Create) - self.assertExists("//Create[@name~=\"create\"]", timeout=4) - # ADD SENDER'S ADDRESS - # Checking State of Sender's Address Input Field (Empty) - self.assertExists('//DropDownWidget/ScrollView[0]//MDTextField[@text=\"\"]', timeout=2) - # Open Sender's Address DropDown - self.cli.wait_click( - '//DropDownWidget/ScrollView[0]//BoxLayout[0]/CustomSpinner[0]/ArrowImg[0]', timeout=2) - # Due to animation and transition effect, it needed some halt otherwise it fails - self.cli.sleep(2) - # SENDER FIELD - # Select Sender's Address from Dropdown - self.cli.wait_click( - '//DropDownWidget/ScrollView[0]//BoxLayout[0]/CustomSpinner[0]', timeout=2) - self.cli.click_on('//ComposerSpinnerOption[0]') - # Assert to check Sender's address dropdown open or not - self.assertNotEqual('//DropDownWidget/ScrollView[0]//MDTextField[@text]', '') - # RECEIVER FIELD - # Checking Receiver Address Field - self.assertExists('//DropDownWidget/ScrollView[0]//MyTextInput[@text=\"\"]', timeout=2) - # Entering Receiver Address - self.cli.setattr( - '//DropDownWidget/ScrollView[0]//MyTextInput[0]', "text", 'BM-2cSsuH1bUWBski8bvdqnK2DivMqQCeQA1J') - # Checking Receiver Address filled or not - self.assertNotEqual('//DropDownWidget/ScrollView[0]//MyTextInput[@text]', '') - # CLICK BACK-BUTTON - self.cli.wait_click('//MDToolbar/BoxLayout[0]/MDActionTopAppBarButton[@icon=\"arrow-left\"]', timeout=2) - # Checking current screen(Login) after BACK Press - self.assertExists("//Inbox[@name~=\"inbox\"]", timeout=2) - self.cli.sleep(0.5) - # Click on Composer Icon(Plus icon) - self.cli.wait_click('//ComposerButton[0]/MDFloatingActionButton[@icon=\"plus\"]', timeout=2) - # Checking Message Composer Screen(Create) - self.assertExists("//Create[@name~=\"create\"]", timeout=4) - # ADD SENDER'S ADDRESS - # Checking State of Sender's Address Input Field (Empty) - self.assertExists('//DropDownWidget/ScrollView[0]//MDTextField[@text=\"\"]', timeout=2) - - # Open Sender's Address DropDown - self.cli.wait_click( - '//Create//CustomSpinner[0]/ArrowImg[0]', timeout=2) - # Due to animation and transition effect, it needed some halt otherwise it fails - self.cli.sleep(2) - # Select Sender's Address from Dropdown - self.cli.wait_click( - '//DropDownWidget/ScrollView[0]//CustomSpinner[0]', timeout=2) - self.cli.click_on('//ComposerSpinnerOption[0]') - # Assert to check Sender's address dropdown open or not - self.assertNotEqual('//DropDownWidget/ScrollView[0]//MDTextField[@text]', '') - - # RECEIVER FIELD - # Checking Receiver Address Field - self.assertExists('//DropDownWidget/ScrollView[0]//MyTextInput[@text=\"\"]', timeout=2) - # Entering Receiver Address - self.cli.setattr( - '//DropDownWidget/ScrollView[0]//MyTextInput[0]', "text", 'BM-2cSsuH1bUWBski8bvdqnK2DivMqQCeQA1J') - # Checking Receiver Address filled or not - self.assertNotEqual('//DropDownWidget/ScrollView[0]//MyTextInput[@text]', '') - # ADD SUBJECT - self.cli.setattr('//DropDownWidget/ScrollView[0]//MyMDTextField[0]', 'text', 'Another Draft message') + self.assertExists("//ScreenManager[@current=\"create\"]", timeout=5) + # ADD SUBJECT + self.cli.setattr('//DropDownWidget/ScrollView[0]//MyMDTextField[0]', 'text', self.test_subject) # Checking Subject Field is Entered - self.assertExists('//DropDownWidget/ScrollView[0]//MyMDTextField[@text=\"Another Draft message\"]', timeout=2) + self.assertNotEqual('//DropDownWidget/ScrollView[0]//MyMDTextField[@text]', '') + + # ADD MESSAGE BODY + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/ScrollView[0]/MDTextField[@text]', + 'text', self.test_body) + # Checking Message body is Entered + self.assertNotEqual('//DropDownWidget/ScrollView[0]//ScrollView[0]/MDTextField[@text]', '') + + # Click on Send Icon + self.cli.wait_click('//MDActionTopAppBarButton[@icon=\"send\"]', timeout=2) + # Checking validation Pop up is Opened + self.assertExists('//MDDialog', timeout=5) + # Click "OK" button to dismiss the Popup + self.cli.wait_click('//MDFlatButton[@text=\"Ok\"]', timeout=5) + + # self.cli.sleep(6) + + # RECEIVER FIELD + # Checking Receiver Address Field + self.assertExists('//DropDownWidget/ScrollView[0]//MyTextInput[@text=\"\"]', timeout=2) + # Entering Receiver Address + self.cli.setattr( + '//DropDownWidget/ScrollView[0]//MyTextInput[0]', "text", test_address['receiver']) + # Checking Receiver Address filled or not + self.assertNotEqual('//DropDownWidget/ScrollView[0]//MyTextInput[@text]', '') + + + # Assert to check Sender's address dropdown open or not + self.assertNotEqual('//DropDownWidget/ScrollView[0]//MDTextField[@text]', '') + + self.assertEqual(self.cli.getattr('//Create//CustomSpinner[@is_open]', 'is_open'), False) + # Open Sender's Address DropDown + self.cli.wait_click('//Create//CustomSpinner[0]/ArrowImg[0]', timeout=5) + self.assertEqual(self.cli.getattr('//Create//CustomSpinner[@is_open]', 'is_open'), False) + + # start = time() + # deadline = start + 2 + # while time() < deadline: + # if not self.cli.getattr('//Create//CustomSpinner[@is_open]', 'is_open'): + # self.cli.wait_click('//Create//CustomSpinner[0]/ArrowImg[0]', timeout=5) + # break + # else: + # self.cli.sleep(0.3) + # continue + + # self.cli.sleep(10) + self.assertExists('//ComposerSpinnerOption[0]', timeout=5) + # Select Sender's Address from Dropdown + self.cli.wait_click('//ComposerSpinnerOption[0]', timeout=5) + # Assert to check Sender's address dropdown closed + self.assertEqual(self.cli.getattr('//Create//CustomSpinner[@is_open]', 'is_open'), False) + # CLICK BACK-BUTTON - self.cli.wait_click('//MDToolbar//MDActionTopAppBarButton[@icon=\"arrow-left\"]', timeout=2) + self.cli.wait_click('//MDToolbar/BoxLayout[0]/MDActionTopAppBarButton[@icon=\"arrow-left\"]', timeout=5) # Checking current screen(Login) after BACK Press - self.assertExists("//Inbox[@name~=\"inbox\"]", timeout=2) + self.assertExists("//ScreenManager[@current=\"inbox\"]", timeout=5) + + # self.cli.sleep(0.5) + # # Click on Composer Icon(Plus icon) + # self.cli.wait_click('//ComposerButton[0]/MDFloatingActionButton[@icon=\"plus\"]', timeout=2) + # # Checking Message Composer Screen(Create) + # self.assertExists("//ScreenManager[@current=\"create\"]", timeout=4) + # # ADD SENDER'S ADDRESS + # # Checking State of Sender's Address Input Field (Empty) + # self.assertExists('//DropDownWidget/ScrollView[0]//MDTextField[@text=\"\"]', timeout=2) + + # # Assert to check Sender's address dropdown is closed + # is_open = self.cli.getattr('//Create//CustomSpinner[@is_open]', 'is_open') + # self.assertEqual(is_open, False) + # # Open Sender's Address DropDown + # self.cli.wait_click('//Create//CustomSpinner[0]/ArrowImg[0]', timeout=5) + # # Checking the Address Dropdown is in open State + # is_open = self.cli.getattr('//Create//CustomSpinner[@is_open]', 'is_open') + # # Select Sender's Address from Dropdown + # self.cli.wait_click('//ComposerSpinnerOption[0]', timeout=3) + # # Assert to check Sender's address dropdown is closed + # is_open = self.cli.getattr('//Create//CustomSpinner[@is_open]', 'is_open') + # self.assertEqual(is_open, False) + + + # # Assert to check Sender's address dropdown open or not + # self.assertNotEqual('//DropDownWidget/ScrollView[0]//MDTextField[@text]', '') + + # # RECEIVER FIELD + # # Checking Receiver Address Field + # self.assertExists('//DropDownWidget/ScrollView[0]//MyTextInput[@text=\"\"]', timeout=2) + # # Entering Receiver Address + # self.cli.setattr( + # '//DropDownWidget/ScrollView[0]//MyTextInput[0]', "text", 'BM-2cSsuH1bUWBski8bvdqnK2DivMqQCeQA1J') + # # Checking Receiver Address filled or not + # self.assertNotEqual('//DropDownWidget/ScrollView[0]//MyTextInput[@text]', '') + + # # ADD SUBJECT + # self.cli.setattr('//DropDownWidget/ScrollView[0]//MyMDTextField[0]', 'text', 'Another Draft message') + # # Checking Subject Field is Entered + # self.assertExists('//DropDownWidget/ScrollView[0]//MyMDTextField[@text=\"Another Draft message\"]', timeout=2) + + # # CLICK BACK-BUTTON + # self.cli.wait_click('//MDToolbar//MDActionTopAppBarButton[@icon=\"arrow-left\"]', timeout=2) + # # Checking current screen(Login) after BACK Press + # self.assertExists("//Inbox[@name~=\"inbox\"]", timeout=2) @ordered def test_edit_and_resend_draft_messgae(self): - """Select A Message From List of Messages Then - make changes and send it.""" - print("=====================Test - Edit A Message From Draft Screen=====================") + """Select A Message From Draft Messages Then + make changes and sending it.""" # OPEN NAVIGATION-DRAWER # this is for opening Nav drawer - self.cli.wait_click('//MDActionTopAppBarButton[@icon=\"menu\"]', timeout=3) + self.cli.wait_click('//MDActionTopAppBarButton[@icon=\"menu\"]', timeout=5) # checking state of Nav drawer - self.assertExists("//MDNavigationDrawer[@state~=\"open\"]", timeout=2) + self.assertExists("//MDNavigationDrawer[@state~=\"open\"]", timeout=5) # Click to open Draft Screen - self.cli.wait_click('//NavigationItem[@text=\"Draft\"]', timeout=2) + self.cli.wait_click('//NavigationItem[@text=\"Draft\"]', timeout=5) + # checking state of Nav drawer + # self.assertExists("//MDNavigationDrawer[@state~=\"closed\"]", timeout=2) # Checking Draft Screen - self.assertExists("//Draft[@name~=\"draft\"]", timeout=2) - # Due to animation and transition effect, it needed some halt otherwise it fails + self.assertExists("//ScreenManager[@current=\"draft\"]", timeout=5) + + # Checking messages in draft box + self.assertExists('//SwipeToDeleteItem[0]//TwoLineAvatarIconListItem', timeout=10) self.cli.sleep(1) - # SHOW DRAFT MESSAGE AND SELECT FIRST MESSAGE - self.cli.wait_click('//SwipeToDeleteItem[0]//TwoLineAvatarIconListItem[0]', timeout=2) + # Click on a drafted msg to show details + self.cli.wait_click('//SwipeToDeleteItem[0]//TwoLineAvatarIconListItem[0]', timeout=5) + # Checking current screen Mail Detail - self.assertExists("//MailDetail[@name~=\"mailDetail\"]", timeout=2) + self.assertExists("//ScreenManager[@current=\"mailDetail\"]", timeout=5) + # CLICK EDIT BUTTON - self.cli.wait_click('//MDToolbar/BoxLayout[2]/MDActionTopAppBarButton[@icon=\"pencil\"]', timeout=2) - # Checking Current Screen 'Create' - self.assertExists("//Create[@name~=\"create\"]", timeout=2) - # ADD MESSAGE BODY - self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/ScrollView[0]/MDTextField[@text]', - 'text', 'Hey,This is draft Message Body') - # Checking Message body is Entered - self.assertNotEqual('//DropDownWidget/ScrollView[0]//ScrollView[0]/MDTextField[@text]', '') - # Click on Send Icon - self.cli.wait_click('//MDActionTopAppBarButton[@icon=\"send\"]', timeout=3) - # After Click send, Screen is redirected to Inbox screen - self.assertExists("//Inbox[@name~=\"inbox\"]", timeout=5) + self.cli.wait_click('//MDToolbar/BoxLayout[2]/MDActionTopAppBarButton[@icon=\"pencil\"]', timeout=5) + # Checking Current Screen 'Create'; composer screen. + self.assertExists("//ScreenManager[@current=\"create\"]", timeout=10) + + # Click on Send Icon to send msg + self.cli.wait_click('//MDActionTopAppBarButton[@icon=\"send\"]', timeout=5) + # Redirected to the inbox screen + self.assertExists("//ScreenManager[@current=\"inbox\"]", timeout=10) + # import pdb;pdb.set_trace() + # start = time() + # deadline = start + 5 + # while time() < deadline: + # try: + # # Checking messages in draft box + # # self.assertExists('//SwipeToDeleteItem[0]//TwoLineAvatarIconListItem', timeout=5) + # # SELECT FIRST MESSAGE + # self.cli.wait_click('//SwipeToDeleteItem[0]//TwoLineAvatarIconListItem[0]', timeout=5) + # print('>>>>>>>>>>>>>>>>>>>try') + # except TeleniumHttpException: + # print('>>>>>>>>>>>>>>>>>>>except1') + # # Checking Current Screen + # self.assertExists("//ScreenManager[@current=\"mailDetail\"]", timeout=5) + # break + # print('>>>>>>>>>>>>>>>>>>>except asserrtex') + # self.assertExists("//ScreenManager[@current=\"mailDetail\"]", timeout=5) + # print('>>>>>>>>>>>>>>>>>>><<<<<<<<< asserrtex') + + + # # SELECT FIRST MESSAGE + # self.cli.wait_click('//SwipeToDeleteItem[0]//TwoLineAvatarIconListItem', timeout=5) + # # Checking current screen Mail Detail + # self.assertExists("//ScreenManager[@current=\"mailDetail\"]", timeout=5) + + @ordered def test_delete_draft_message(self): - """Delete A Message From List of Messages""" - print("=====================Test - Delete A Message From List of Messages=====================") - self.cli.sleep(2) + """Deleting a Drafted Message""" + self.assertExists("//ScreenManager[@current=\"inbox\"]", timeout=5) + # Saving a msg to draft to perform delete operation + self.test_save_message_to_draft() # OPEN NAVIGATION-DRAWER # this is for opening Nav drawer - self.cli.wait_click('//MDActionTopAppBarButton[@icon=\"menu\"]', timeout=3) + self.cli.wait_click('//MDActionTopAppBarButton[@icon=\"menu\"]', timeout=5) # checking state of Nav drawer - self.assertExists("//MDNavigationDrawer[@state~=\"open\"]", timeout=2) + self.assertExists("//MDNavigationDrawer[@state~=\"open\"]", timeout=5) # Click to open Draft Screen - self.cli.wait_click('//NavigationItem[@text=\"Draft\"]', timeout=2) + self.cli.wait_click('//NavigationItem[@text=\"Draft\"]', timeout=5) # Checking Draft Screen - self.assertExists("//Draft[@name~=\"draft\"]", timeout=2) + self.assertExists("//ScreenManager[@current=\"draft\"]", timeout=5) + # Asser check that the message is rendered + self.assertExists('//SwipeToDeleteItem[0]//TwoLineAvatarIconListItem[0]', timeout=5) self.cli.sleep(1) - self.cli.wait_click('//SwipeToDeleteItem[0]//TwoLineAvatarIconListItem[0]', timeout=3) + # Click on a mesage to show msg details + self.cli.wait_click('//SwipeToDeleteItem[0]//TwoLineAvatarIconListItem[0]', timeout=5) # Checking Current screen is Mail Detail - self.assertExists("//MailDetail[@name~=\"mailDetail\"]", timeout=3) + self.assertExists("//ScreenManager[@current=\"mailDetail\"]", timeout=5) # Click on trash-can icon to delete - self.cli.wait_click('//MDToolbar//MDActionTopAppBarButton[@icon=\"delete-forever\"]', timeout=2) + self.cli.wait_click('//MDToolbar//MDActionTopAppBarButton[@icon=\"delete-forever\"]', timeout=5) # After Deleting, Screen is redirected to Draft screen - self.assertExists("//Draft[@name~=\"draft\"]", timeout=1) + self.assertExists("//ScreenManager[@current=\"draft\"]", timeout=10) diff --git a/src/bitmessagekivy/tests/test_sent_message.py b/src/bitmessagekivy/tests/test_sent_message.py index cedc144f..abc91873 100644 --- a/src/bitmessagekivy/tests/test_sent_message.py +++ b/src/bitmessagekivy/tests/test_sent_message.py @@ -2,7 +2,8 @@ from telenium.client import TeleniumHttpException from .telenium_process import TeleniumTestProcess from .common import ordered -test_address = {'receiver': 'BM-2cWmjntZ47WKEUtocrdvs19y5CivpKoi1h'} +test_address = {'receiver': 'BM-2cVWtdUzPwF7UNGDrZftWuHWiJ6xxBpiSP'} + class SendMessage(TeleniumTestProcess): """Sent Screen Functionality Testing"""