From 6aadba227be91a25868649d18ae8d4b35ef6b728 Mon Sep 17 00:00:00 2001 From: Ivan Date: Wed, 24 Nov 2021 23:08:47 +0300 Subject: [PATCH 1/5] Signed-only messages not recognized as signed --- .../Threads/ThreadDetailsDecorator.swift | 9 +--- appium/tests/screenobjects/email.screen.ts | 14 +++++- appium/tests/screenobjects/inbox.screen.ts | 8 ++-- .../inbox/CheckAllEmailSignatureCases.ts | 45 +++++++++++++++++++ 4 files changed, 63 insertions(+), 13 deletions(-) create mode 100644 appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts diff --git a/FlowCrypt/Controllers/Threads/ThreadDetailsDecorator.swift b/FlowCrypt/Controllers/Threads/ThreadDetailsDecorator.swift index bf914053c..34db9956d 100644 --- a/FlowCrypt/Controllers/Threads/ThreadDetailsDecorator.swift +++ b/FlowCrypt/Controllers/Threads/ThreadDetailsDecorator.swift @@ -101,16 +101,9 @@ private func makeSignatureBadge(_ input: ThreadDetailsViewController.Input) -> B return nil } - let text: String - if input.processedMessage?.messageType == .encrypted { - text = signature.message - } else { - text = "message_not_signed".localized - } - return BadgeNode.Input( icon: signature.icon, - text: NSAttributedString.text(from: text, style: .regular(12), color: .white), + text: NSAttributedString.text(from: signature.message, style: .regular(12), color: .white), color: signature.color ) } diff --git a/appium/tests/screenobjects/email.screen.ts b/appium/tests/screenobjects/email.screen.ts index ca9044daa..0fdb5a681 100644 --- a/appium/tests/screenobjects/email.screen.ts +++ b/appium/tests/screenobjects/email.screen.ts @@ -53,7 +53,7 @@ class EmailScreen extends BaseScreen { } get senderEmail() { - return $(SELECTORS.SENDER_EMAIL); + return $(SELECTORS.SENDER_EMAIL); } checkEmailAddress = async (email: string) => { @@ -118,7 +118,17 @@ class EmailScreen extends BaseScreen { } confirmDelete = async () => { - await ElementHelper.waitAndClick(await this.confirmDeletingButton) + await ElementHelper.waitAndClick(await this.confirmDeletingButton); + } + + checkEncryptionBadge = async (value: string) => { + const selector = `~${value}`; + await (await $(selector)).waitForDisplayed(); + } + + checkSignatureBadge = async (value: string) => { + const selector = `~${value}`; + await (await $(selector)).waitForDisplayed(); } } diff --git a/appium/tests/screenobjects/inbox.screen.ts b/appium/tests/screenobjects/inbox.screen.ts index cc158e782..41c6f69f0 100644 --- a/appium/tests/screenobjects/inbox.screen.ts +++ b/appium/tests/screenobjects/inbox.screen.ts @@ -28,10 +28,12 @@ class InboxScreen extends BaseScreen { await $(`~${email}`).click(); } - clickOnEmailBySubject = async (subject: string) => { + clickOnEmailBySubject = async (subject: string, withScroll: boolean = true) => { const selector = `~${subject}`; - if (await (await $(selector)).isDisplayed() !== true) { - await TouchHelper.scrollDown(); + if (withScroll) { + if (await (await $(selector)).isDisplayed() !== true) { + await TouchHelper.scrollDown(); + } } await ElementHelper.waitAndClick(await $(selector), 500); } diff --git a/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts b/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts new file mode 100644 index 000000000..65060ef67 --- /dev/null +++ b/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts @@ -0,0 +1,45 @@ +import { + SplashScreen, + SetupKeyScreen, + InboxScreen, + EmailScreen +} from '../../screenobjects/all-screens'; + +describe('INBOX: ', () => { + + it('user is able to view correct signature badge for all cases', async () => { + + await SplashScreen.login(); + await SetupKeyScreen.setPassPhrase(); + await InboxScreen.checkInboxScreen(); + + // signed+encrypted message + const s1 = 'Signed and encrypted message'; + await InboxScreen.clickOnEmailBySubject(s1, false); + await EmailScreen.checkOpenedEmail('e2e.enterprise.test@flowcrypt.com', s1, 'Signed and encrypted message.'); + await EmailScreen.checkEncryptionBadge('encrypted'); + await EmailScreen.checkSignatureBadge('signed'); + await EmailScreen.clickBackButton(); + + // singed only message + const s2 = 'Signed only message'; + await InboxScreen.clickOnEmailBySubject(s2, false); + await EmailScreen.checkOpenedEmail('e2e.enterprise.test@flowcrypt.com', s2, 'Signed only message'); + await EmailScreen.checkEncryptionBadge('not encrypted'); + await EmailScreen.checkSignatureBadge('signed'); + await EmailScreen.clickBackButton(); + + // TODO signed only message with detached signature + + // plain message + const s3 = 'Test 1'; + await InboxScreen.clickOnEmailBySubject(s3); + await EmailScreen.checkOpenedEmail('dmitry@flowcrypt.com', s3, 'Test email'); + await EmailScreen.checkEncryptionBadge('not encrypted'); + await EmailScreen.checkSignatureBadge('not signed'); + await EmailScreen.clickBackButton(); + + // TODO signed-only message where the pubkey is not available + // TODO signed-only message that was tempered during transit + }); +}); From a38e5ea67c9ecdc0cdacf76057315656065a1414 Mon Sep 17 00:00:00 2001 From: Ivan Date: Thu, 25 Nov 2021 23:05:22 +0300 Subject: [PATCH 2/5] Code review fixes --- .../Threads/ThreadDetailsDecorator.swift | 6 +++-- FlowCryptUI/Nodes/BadgeNode.swift | 6 ++++- appium/tests/screenobjects/email.screen.ts | 20 ++++++++++++----- appium/tests/screenobjects/inbox.screen.ts | 12 +++++----- .../inbox/CheckAllEmailSignatureCases.ts | 22 +++++++++++++------ 5 files changed, 45 insertions(+), 21 deletions(-) diff --git a/FlowCrypt/Controllers/Threads/ThreadDetailsDecorator.swift b/FlowCrypt/Controllers/Threads/ThreadDetailsDecorator.swift index a664e2e6b..704a63d11 100644 --- a/FlowCrypt/Controllers/Threads/ThreadDetailsDecorator.swift +++ b/FlowCrypt/Controllers/Threads/ThreadDetailsDecorator.swift @@ -93,7 +93,8 @@ private func makeEncryptionBadge(_ input: ThreadDetailsViewController.Input) -> return BadgeNode.Input( icon: icon, text: NSAttributedString.text(from: text, style: .regular(12), color: .white), - color: color + color: color, + textAccessibilityIdentifier: "encryptionBadge" ) } @@ -105,6 +106,7 @@ private func makeSignatureBadge(_ input: ThreadDetailsViewController.Input) -> B return BadgeNode.Input( icon: signature.icon, text: NSAttributedString.text(from: signature.message, style: .regular(12), color: .white), - color: signature.color + color: signature.color, + textAccessibilityIdentifier: "signatureBadge" ) } diff --git a/FlowCryptUI/Nodes/BadgeNode.swift b/FlowCryptUI/Nodes/BadgeNode.swift index 8dc587a4e..63a62f2e6 100644 --- a/FlowCryptUI/Nodes/BadgeNode.swift +++ b/FlowCryptUI/Nodes/BadgeNode.swift @@ -14,13 +14,16 @@ public final class BadgeNode: ASDisplayNode { public let icon: String? public let text: NSAttributedString? public let color: UIColor? + public let textAccessibilityIdentifier: String public init(icon: String?, text: NSAttributedString?, - color: UIColor?) { + color: UIColor?, + textAccessibilityIdentifier: String) { self.icon = icon self.text = text self.color = color + self.textAccessibilityIdentifier = textAccessibilityIdentifier } } @@ -43,6 +46,7 @@ public final class BadgeNode: ASDisplayNode { automaticallyManagesSubnodes = true textNode.attributedText = input.text + textNode.accessibilityIdentifier = input.textAccessibilityIdentifier backgroundColor = input.color cornerRadius = 4 } diff --git a/appium/tests/screenobjects/email.screen.ts b/appium/tests/screenobjects/email.screen.ts index d455a7a4e..3cc6f46ef 100644 --- a/appium/tests/screenobjects/email.screen.ts +++ b/appium/tests/screenobjects/email.screen.ts @@ -13,7 +13,9 @@ const SELECTORS = { FORWARD_BUTTON: '~Forward', DELETE_BUTTON: '~Delete', CONFIRM_DELETING: '~OK', - SENDER_EMAIL: '~senderEmail' + SENDER_EMAIL: '~senderEmail', + ENCRYPTION_BADGE: '~encryptionBadge', + SIGNATURE_BADGE: '~signatureBadge' }; @@ -66,6 +68,14 @@ class EmailScreen extends BaseScreen { return $(SELECTORS.SENDER_EMAIL); } + get encryptionBadge() { + return $(SELECTORS.ENCRYPTION_BADGE); + } + + get signatureBadge() { + return $(SELECTORS.SIGNATURE_BADGE); + } + checkEmailAddress = async (email: string) => { await (await this.senderEmail).waitForDisplayed(); await expect(await this.senderEmail).toHaveText(email); @@ -140,13 +150,13 @@ class EmailScreen extends BaseScreen { } checkEncryptionBadge = async (value: string) => { - const selector = `~${value}`; - await (await $(selector)).waitForDisplayed(); + await (await this.encryptionBadge).waitForDisplayed(); + await expect(await this.encryptionBadge).toHaveText(value); } checkSignatureBadge = async (value: string) => { - const selector = `~${value}`; - await (await $(selector)).waitForDisplayed(); + await (await this.signatureBadge).waitForDisplayed(); + await expect(await this.signatureBadge).toHaveText(value); } } diff --git a/appium/tests/screenobjects/inbox.screen.ts b/appium/tests/screenobjects/inbox.screen.ts index 41c6f69f0..af15b4406 100644 --- a/appium/tests/screenobjects/inbox.screen.ts +++ b/appium/tests/screenobjects/inbox.screen.ts @@ -28,13 +28,9 @@ class InboxScreen extends BaseScreen { await $(`~${email}`).click(); } - clickOnEmailBySubject = async (subject: string, withScroll: boolean = true) => { + clickOnEmailBySubject = async (subject: string) => { + await browser.pause(2000); // todo: loading inbox. Fix this: wait until loader gone const selector = `~${subject}`; - if (withScroll) { - if (await (await $(selector)).isDisplayed() !== true) { - await TouchHelper.scrollDown(); - } - } await ElementHelper.waitAndClick(await $(selector), 500); } @@ -54,6 +50,10 @@ class InboxScreen extends BaseScreen { await (await this.createEmailButton).waitForDisplayed(); } } + + scrollDown = async () => { + await TouchHelper.scrollDown(); + } } export default new InboxScreen(); diff --git a/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts b/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts index 65060ef67..3867b0824 100644 --- a/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts +++ b/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts @@ -15,7 +15,7 @@ describe('INBOX: ', () => { // signed+encrypted message const s1 = 'Signed and encrypted message'; - await InboxScreen.clickOnEmailBySubject(s1, false); + await InboxScreen.clickOnEmailBySubject(s1); await EmailScreen.checkOpenedEmail('e2e.enterprise.test@flowcrypt.com', s1, 'Signed and encrypted message.'); await EmailScreen.checkEncryptionBadge('encrypted'); await EmailScreen.checkSignatureBadge('signed'); @@ -23,23 +23,31 @@ describe('INBOX: ', () => { // singed only message const s2 = 'Signed only message'; - await InboxScreen.clickOnEmailBySubject(s2, false); - await EmailScreen.checkOpenedEmail('e2e.enterprise.test@flowcrypt.com', s2, 'Signed only message'); + await InboxScreen.clickOnEmailBySubject(s2); + await EmailScreen.checkOpenedEmail('e2e.enterprise.test@flowcrypt.com', s2, s2); await EmailScreen.checkEncryptionBadge('not encrypted'); await EmailScreen.checkSignatureBadge('signed'); await EmailScreen.clickBackButton(); - // TODO signed only message with detached signature + // signed only message with detached signature + const s3 = 'Signed only message with detached signature'; + await InboxScreen.clickOnEmailBySubject(s3); + await EmailScreen.checkOpenedEmail('e2e.enterprise.test@flowcrypt.com', s3, s3); + await EmailScreen.checkEncryptionBadge('not encrypted'); + await EmailScreen.checkSignatureBadge('signed'); + await EmailScreen.clickBackButton(); // plain message - const s3 = 'Test 1'; - await InboxScreen.clickOnEmailBySubject(s3); - await EmailScreen.checkOpenedEmail('dmitry@flowcrypt.com', s3, 'Test email'); + const s4 = 'Test 1'; + await InboxScreen.scrollDown(); + await InboxScreen.clickOnEmailBySubject(s4); + await EmailScreen.checkOpenedEmail('dmitry@flowcrypt.com', s4, 'Test email'); await EmailScreen.checkEncryptionBadge('not encrypted'); await EmailScreen.checkSignatureBadge('not signed'); await EmailScreen.clickBackButton(); // TODO signed-only message where the pubkey is not available + // TODO signed-only message that was tempered during transit }); }); From bba5f0bacce50198969ab8ab354485377fc94a03 Mon Sep 17 00:00:00 2001 From: Ivan Date: Fri, 26 Nov 2021 21:30:35 +0300 Subject: [PATCH 3/5] All cases now --- .../inbox/CheckAllEmailSignatureCases.ts | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts b/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts index 3867b0824..cd7de244a 100644 --- a/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts +++ b/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts @@ -1,7 +1,7 @@ import { SplashScreen, SetupKeyScreen, - InboxScreen, + MailFolderScreen, EmailScreen } from '../../screenobjects/all-screens'; @@ -11,43 +11,44 @@ describe('INBOX: ', () => { await SplashScreen.login(); await SetupKeyScreen.setPassPhrase(); - await InboxScreen.checkInboxScreen(); + await MailFolderScreen.checkInboxScreen(); // signed+encrypted message - const s1 = 'Signed and encrypted message'; - await InboxScreen.clickOnEmailBySubject(s1); - await EmailScreen.checkOpenedEmail('e2e.enterprise.test@flowcrypt.com', s1, 'Signed and encrypted message.'); + await MailFolderScreen.clickOnEmailBySubject('Signed and encrypted message'); await EmailScreen.checkEncryptionBadge('encrypted'); await EmailScreen.checkSignatureBadge('signed'); await EmailScreen.clickBackButton(); // singed only message - const s2 = 'Signed only message'; - await InboxScreen.clickOnEmailBySubject(s2); - await EmailScreen.checkOpenedEmail('e2e.enterprise.test@flowcrypt.com', s2, s2); + await MailFolderScreen.clickOnEmailBySubject('Signed only message'); await EmailScreen.checkEncryptionBadge('not encrypted'); await EmailScreen.checkSignatureBadge('signed'); await EmailScreen.clickBackButton(); // signed only message with detached signature - const s3 = 'Signed only message with detached signature'; - await InboxScreen.clickOnEmailBySubject(s3); - await EmailScreen.checkOpenedEmail('e2e.enterprise.test@flowcrypt.com', s3, s3); + await MailFolderScreen.clickOnEmailBySubject('Signed only message with detached signature'); await EmailScreen.checkEncryptionBadge('not encrypted'); await EmailScreen.checkSignatureBadge('signed'); await EmailScreen.clickBackButton(); // plain message - const s4 = 'Test 1'; - await InboxScreen.scrollDown(); - await InboxScreen.clickOnEmailBySubject(s4); - await EmailScreen.checkOpenedEmail('dmitry@flowcrypt.com', s4, 'Test email'); + await MailFolderScreen.scrollDown(); + await MailFolderScreen.clickOnEmailBySubject('Test 1'); await EmailScreen.checkEncryptionBadge('not encrypted'); - await EmailScreen.checkSignatureBadge('not signed'); + await EmailScreen.checkSignatureBadge('not signed'); await EmailScreen.clickBackButton(); - // TODO signed-only message where the pubkey is not available + await MailFolderScreen.refreshMailList(); - // TODO signed-only message that was tempered during transit + // signed only message where the pubkey is not available + await MailFolderScreen.clickOnEmailBySubject('Signed only message where the pubkey is not available'); + await EmailScreen.checkEncryptionBadge('decrypt error'); + await EmailScreen.clickBackButton(); + + // signed only message that was tempered during transit + await MailFolderScreen.clickOnEmailBySubject('Signed only message that was tempered during transit'); + await EmailScreen.checkEncryptionBadge('not encrypted'); + await EmailScreen.checkSignatureBadge('bad signature'); + await EmailScreen.clickBackButton(); }); }); From 8d535f61d571d29acc807595ccb618f9a766a2a4 Mon Sep 17 00:00:00 2001 From: Ivan Date: Sun, 28 Nov 2021 20:26:17 +0300 Subject: [PATCH 4/5] Move UI test to search approach --- .../Search/SearchViewController.swift | 2 + appium/tests/screenobjects/all-screens.ts | 4 +- .../tests/screenobjects/mail-folder.screen.ts | 4 ++ appium/tests/screenobjects/search.screen.ts | 44 +++++++++++++++ .../inbox/CheckAllEmailSignatureCases.ts | 54 +++++++++++++++---- 5 files changed, 98 insertions(+), 10 deletions(-) create mode 100644 appium/tests/screenobjects/search.screen.ts diff --git a/FlowCrypt/Controllers/Search/SearchViewController.swift b/FlowCrypt/Controllers/Search/SearchViewController.swift index b9330753c..c61b491ae 100644 --- a/FlowCrypt/Controllers/Search/SearchViewController.swift +++ b/FlowCrypt/Controllers/Search/SearchViewController.swift @@ -79,6 +79,7 @@ final class SearchViewController: TableNodeViewController { extension SearchViewController { private func setupUI() { view.backgroundColor = .backgroundColor + view.accessibilityIdentifier = "searchViewController" title = "search_title".localized node.delegate = self node.dataSource = self @@ -244,6 +245,7 @@ extension SearchViewController: UISearchControllerDelegate, UISearchBarDelegate alignment: .left ) searchController.searchBar.searchTextField.textColor = .white + searchController.searchBar.searchTextField.accessibilityIdentifier = "searchField" } } diff --git a/appium/tests/screenobjects/all-screens.ts b/appium/tests/screenobjects/all-screens.ts index cedb21647..778084ee8 100644 --- a/appium/tests/screenobjects/all-screens.ts +++ b/appium/tests/screenobjects/all-screens.ts @@ -10,6 +10,7 @@ import ContactPublicKeyScreen from './contact-public-key.screen'; import PublicKeyScreen from './public-key.screen'; import AttachmentScreen from './attachment.screen'; import MailFolderScreen from './mail-folder.screen' +import SearchScreen from './search.screen' export { SplashScreen, @@ -23,5 +24,6 @@ export { PublicKeyScreen, ContactScreen, ContactPublicKeyScreen, - MailFolderScreen + MailFolderScreen, + SearchScreen }; diff --git a/appium/tests/screenobjects/mail-folder.screen.ts b/appium/tests/screenobjects/mail-folder.screen.ts index 7f1d53f99..f211db453 100644 --- a/appium/tests/screenobjects/mail-folder.screen.ts +++ b/appium/tests/screenobjects/mail-folder.screen.ts @@ -91,6 +91,10 @@ class MailFolderScreen extends BaseScreen { scrollDown = async () => { await TouchHelper.scrollDown(); } + + clickSearchButton = async () => { + await ElementHelper.waitAndClick(await this.searchIcon, 1000); // delay needed on M1 + } } export default new MailFolderScreen(); diff --git a/appium/tests/screenobjects/search.screen.ts b/appium/tests/screenobjects/search.screen.ts new file mode 100644 index 000000000..ab5d8bf31 --- /dev/null +++ b/appium/tests/screenobjects/search.screen.ts @@ -0,0 +1,44 @@ +import BaseScreen from './base.screen'; +import ElementHelper from "../helpers/ElementHelper"; + +const SELECTORS = { + BACK_BUTTON: '~arrow left c', + SCREEN: '~searchViewController', + SEARCH_FIELD: '~searchField' +}; + +class SearchScreen extends BaseScreen { + constructor() { + super(SELECTORS.SCREEN); + } + + get screen() { + return $(SELECTORS.SCREEN) + } + + get backButton() { + return $(SELECTORS.BACK_BUTTON) + } + + get searchField() { + return $(SELECTORS.SEARCH_FIELD); + } + + checkScreen = async () => { + await browser.pause(2000); + await (await this.screen).waitForDisplayed(); + } + + clickBackButton = async () => { + await ElementHelper.waitAndClick(await this.backButton); + } + + searchAndClickEmailBySubject = async (subject: string) => { + await (await this.searchField).setValue(`subject: '${subject}'`); + + const selector = `~${subject}`; + await ElementHelper.waitAndClick(await $(selector), 500); + } +} + +export default new SearchScreen(); diff --git a/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts b/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts index cd7de244a..92224c5d0 100644 --- a/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts +++ b/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts @@ -2,7 +2,8 @@ import { SplashScreen, SetupKeyScreen, MailFolderScreen, - EmailScreen + EmailScreen, + SearchScreen } from '../../screenobjects/all-screens'; describe('INBOX: ', () => { @@ -14,41 +15,76 @@ describe('INBOX: ', () => { await MailFolderScreen.checkInboxScreen(); // signed+encrypted message - await MailFolderScreen.clickOnEmailBySubject('Signed and encrypted message'); + await MailFolderScreen.clickSearchButton(); + + await SearchScreen.checkScreen(); + await SearchScreen.searchAndClickEmailBySubject('Signed and encrypted message'); + await EmailScreen.checkEncryptionBadge('encrypted'); await EmailScreen.checkSignatureBadge('signed'); await EmailScreen.clickBackButton(); + await SearchScreen.checkScreen(); + await SearchScreen.clickBackButton(); + // singed only message - await MailFolderScreen.clickOnEmailBySubject('Signed only message'); + await MailFolderScreen.clickSearchButton(); + + await SearchScreen.checkScreen(); + await SearchScreen.searchAndClickEmailBySubject('Signed only message'); + await EmailScreen.checkEncryptionBadge('not encrypted'); await EmailScreen.checkSignatureBadge('signed'); await EmailScreen.clickBackButton(); + await SearchScreen.checkScreen(); + await SearchScreen.clickBackButton(); + // signed only message with detached signature - await MailFolderScreen.clickOnEmailBySubject('Signed only message with detached signature'); + await MailFolderScreen.clickSearchButton(); + await SearchScreen.searchAndClickEmailBySubject('Signed only message with detached signature'); + await EmailScreen.checkEncryptionBadge('not encrypted'); await EmailScreen.checkSignatureBadge('signed'); await EmailScreen.clickBackButton(); + await SearchScreen.checkScreen(); + await SearchScreen.clickBackButton(); + // plain message - await MailFolderScreen.scrollDown(); - await MailFolderScreen.clickOnEmailBySubject('Test 1'); + await MailFolderScreen.clickSearchButton(); + + await SearchScreen.checkScreen(); + await SearchScreen.searchAndClickEmailBySubject('Test 1'); await EmailScreen.checkEncryptionBadge('not encrypted'); await EmailScreen.checkSignatureBadge('not signed'); await EmailScreen.clickBackButton(); - await MailFolderScreen.refreshMailList(); + await SearchScreen.checkScreen(); + await SearchScreen.clickBackButton(); // signed only message where the pubkey is not available - await MailFolderScreen.clickOnEmailBySubject('Signed only message where the pubkey is not available'); + await MailFolderScreen.clickSearchButton(); + + await SearchScreen.checkScreen(); + await SearchScreen.searchAndClickEmailBySubject('Signed only message where the pubkey is not available'); await EmailScreen.checkEncryptionBadge('decrypt error'); await EmailScreen.clickBackButton(); + await SearchScreen.checkScreen(); + await SearchScreen.clickBackButton(); + // signed only message that was tempered during transit - await MailFolderScreen.clickOnEmailBySubject('Signed only message that was tempered during transit'); + await MailFolderScreen.clickSearchButton(); + + await SearchScreen.checkScreen(); + await SearchScreen.searchAndClickEmailBySubject('Signed only message that was tempered during transit'); + await EmailScreen.checkEncryptionBadge('not encrypted'); await EmailScreen.checkSignatureBadge('bad signature'); await EmailScreen.clickBackButton(); + + await SearchScreen.checkScreen(); + await SearchScreen.clickBackButton(); }); }); From 10131f7d16c120ce46bd25f63969db6da964211a Mon Sep 17 00:00:00 2001 From: Ivan Date: Mon, 29 Nov 2021 19:28:27 +0300 Subject: [PATCH 5/5] UI test fixed --- .../Search/SearchViewController.swift | 5 ++++- appium/tests/screenobjects/search.screen.ts | 12 ++---------- ...ts => CheckAllEmailSignatureCases.spec.ts} | 19 ++----------------- 3 files changed, 8 insertions(+), 28 deletions(-) rename appium/tests/specs/inbox/{CheckAllEmailSignatureCases.ts => CheckAllEmailSignatureCases.spec.ts} (84%) diff --git a/FlowCrypt/Controllers/Search/SearchViewController.swift b/FlowCrypt/Controllers/Search/SearchViewController.swift index 5f05f88e7..4c906f304 100644 --- a/FlowCrypt/Controllers/Search/SearchViewController.swift +++ b/FlowCrypt/Controllers/Search/SearchViewController.swift @@ -79,7 +79,10 @@ final class SearchViewController: TableNodeViewController { extension SearchViewController { private func setupUI() { view.backgroundColor = .backgroundColor + view.accessibilityIdentifier = "searchViewController" + title = "search_title".localized + node.delegate = self node.dataSource = self } @@ -91,7 +94,7 @@ extension SearchViewController { $0.hidesNavigationBarDuringPresentation = false $0.searchBar.tintColor = .white $0.searchBar.setImage(#imageLiteral(resourceName: "search_icn").tinted(.white), for: .search, state: .normal) - $0.searchBar.setImage(#imageLiteral(resourceName: "cancel.png").tinted(.white), for: .clear, state: .normal) + $0.searchBar.setImage(#imageLiteral(resourceName: "cancel").tinted(.white), for: .clear, state: .normal) $0.searchBar.delegate = self $0.searchBar.searchTextField.textColor = .white } diff --git a/appium/tests/screenobjects/search.screen.ts b/appium/tests/screenobjects/search.screen.ts index ab5d8bf31..685631457 100644 --- a/appium/tests/screenobjects/search.screen.ts +++ b/appium/tests/screenobjects/search.screen.ts @@ -4,7 +4,7 @@ import ElementHelper from "../helpers/ElementHelper"; const SELECTORS = { BACK_BUTTON: '~arrow left c', SCREEN: '~searchViewController', - SEARCH_FIELD: '~searchField' + SEARCH_FIELD: '~searchAllEmailField' }; class SearchScreen extends BaseScreen { @@ -12,10 +12,6 @@ class SearchScreen extends BaseScreen { super(SELECTORS.SCREEN); } - get screen() { - return $(SELECTORS.SCREEN) - } - get backButton() { return $(SELECTORS.BACK_BUTTON) } @@ -24,12 +20,8 @@ class SearchScreen extends BaseScreen { return $(SELECTORS.SEARCH_FIELD); } - checkScreen = async () => { - await browser.pause(2000); - await (await this.screen).waitForDisplayed(); - } - clickBackButton = async () => { + await browser.pause(2000); await ElementHelper.waitAndClick(await this.backButton); } diff --git a/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts b/appium/tests/specs/inbox/CheckAllEmailSignatureCases.spec.ts similarity index 84% rename from appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts rename to appium/tests/specs/inbox/CheckAllEmailSignatureCases.spec.ts index 92224c5d0..e3af10387 100644 --- a/appium/tests/specs/inbox/CheckAllEmailSignatureCases.ts +++ b/appium/tests/specs/inbox/CheckAllEmailSignatureCases.spec.ts @@ -17,27 +17,22 @@ describe('INBOX: ', () => { // signed+encrypted message await MailFolderScreen.clickSearchButton(); - await SearchScreen.checkScreen(); await SearchScreen.searchAndClickEmailBySubject('Signed and encrypted message'); await EmailScreen.checkEncryptionBadge('encrypted'); await EmailScreen.checkSignatureBadge('signed'); await EmailScreen.clickBackButton(); - await SearchScreen.checkScreen(); await SearchScreen.clickBackButton(); // singed only message await MailFolderScreen.clickSearchButton(); - - await SearchScreen.checkScreen(); await SearchScreen.searchAndClickEmailBySubject('Signed only message'); await EmailScreen.checkEncryptionBadge('not encrypted'); await EmailScreen.checkSignatureBadge('signed'); await EmailScreen.clickBackButton(); - await SearchScreen.checkScreen(); await SearchScreen.clickBackButton(); // signed only message with detached signature @@ -48,43 +43,33 @@ describe('INBOX: ', () => { await EmailScreen.checkSignatureBadge('signed'); await EmailScreen.clickBackButton(); - await SearchScreen.checkScreen(); await SearchScreen.clickBackButton(); // plain message await MailFolderScreen.clickSearchButton(); - - await SearchScreen.checkScreen(); await SearchScreen.searchAndClickEmailBySubject('Test 1'); + await EmailScreen.checkEncryptionBadge('not encrypted'); await EmailScreen.checkSignatureBadge('not signed'); await EmailScreen.clickBackButton(); - await SearchScreen.checkScreen(); await SearchScreen.clickBackButton(); // signed only message where the pubkey is not available await MailFolderScreen.clickSearchButton(); - - await SearchScreen.checkScreen(); await SearchScreen.searchAndClickEmailBySubject('Signed only message where the pubkey is not available'); + await EmailScreen.checkEncryptionBadge('decrypt error'); await EmailScreen.clickBackButton(); - await SearchScreen.checkScreen(); await SearchScreen.clickBackButton(); // signed only message that was tempered during transit await MailFolderScreen.clickSearchButton(); - - await SearchScreen.checkScreen(); await SearchScreen.searchAndClickEmailBySubject('Signed only message that was tempered during transit'); await EmailScreen.checkEncryptionBadge('not encrypted'); await EmailScreen.checkSignatureBadge('bad signature'); await EmailScreen.clickBackButton(); - - await SearchScreen.checkScreen(); - await SearchScreen.clickBackButton(); }); });