From fe5d6615044159bba0b78d39b3fec3864217fa16 Mon Sep 17 00:00:00 2001 From: Dmitry Sotnikov Date: Thu, 17 Feb 2022 11:14:56 +0200 Subject: [PATCH 1/9] added new spec for check thread rendering --- appium/tests/data/index.ts | 8 ++++ .../live/inbox/CheckThreadRendering.spec.ts | 39 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts diff --git a/appium/tests/data/index.ts b/appium/tests/data/index.ts index faec23766..b778842fe 100644 --- a/appium/tests/data/index.ts +++ b/appium/tests/data/index.ts @@ -123,6 +123,14 @@ export const CommonData = { passphrasePasswordErrorMessage: 'Error\nPlease do not use your private key pass phrase as a password for this message.\n\nYou should come up with some other unique password that you can share with recipient.', subjectPasswordErrorMessage: 'Error\nPlease do not include the password in the email subject. Sharing password over email undermines password based encryption.\n\nYou can ask the recipient to also install FlowCrypt, messages between FlowCrypt users don\'t need a password.' }, + threadMessage: { + senderEmail: 'dmitry@flowcrypt.com', + subject: 'test thread rendering', + firstThreadMessage: 'first message', + secondTreadMessage: 'Second thread rendering message', + thirdThreadMessage: 'Third thread rendering message', + + }, recipientWithExpiredPublicKey: { email: 'expired@flowcrypt.com' }, diff --git a/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts b/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts new file mode 100644 index 000000000..0e8b9bf89 --- /dev/null +++ b/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts @@ -0,0 +1,39 @@ +import { + SplashScreen, + SetupKeyScreen, + MailFolderScreen, + EmailScreen, + SearchScreen +} from '../../../screenobjects/all-screens'; + +import { CommonData } from '../../../data'; + +describe('INBOX: ', () => { + + it('check thread rendering', async () => { + + const senderEmail = CommonData.threadMessage.senderEmail; + const userEmail = CommonData.account.email; + const emailSubject = CommonData.threadMessage.subject; + const firstMessage = CommonData.threadMessage.firstThreadMessage; + const secondMessage = CommonData.threadMessage.secondTreadMessage; + const thirdMessage = CommonData.threadMessage.thirdThreadMessage; + + const recipientsButton = CommonData.recipientsListEmail.recipients; + const toLabel = CommonData.recipientsListEmail.to; + const ccLabel = CommonData.recipientsListEmail.cc; + const bccLabel = CommonData.recipientsListEmail.bcc; + + await SplashScreen.login(); + await SetupKeyScreen.setPassPhrase(); + await MailFolderScreen.checkInboxScreen(); + + await MailFolderScreen.clickSearchButton(); + await SearchScreen.searchAndClickEmailBySubject(emailSubject); + + await EmailScreen.checkOpenedEmail(senderEmail, emailSubject, firstMessage); + await EmailScreen.checkRecipientsButton(recipientsButton); + await EmailScreen.clickRecipientsButton(); + await EmailScreen.checkRecipientsList(toLabel, ccLabel, bccLabel); + }); +}); From f1bd57879b7cd8704db3b782b76214648715cd40 Mon Sep 17 00:00:00 2001 From: Anton Kharchevskyi Date: Mon, 21 Feb 2022 13:14:33 +0000 Subject: [PATCH 2/9] Add aid to threads --- .../ThreadMessageInfoCellNode.swift | 49 ++++++++++--------- FlowCryptUI/Nodes/MessageRecipientsNode.swift | 1 - 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/FlowCryptUI/Cell Nodes/ThreadMessageInfoCellNode.swift b/FlowCryptUI/Cell Nodes/ThreadMessageInfoCellNode.swift index 8d98b6b75..96b704863 100644 --- a/FlowCryptUI/Cell Nodes/ThreadMessageInfoCellNode.swift +++ b/FlowCryptUI/Cell Nodes/ThreadMessageInfoCellNode.swift @@ -138,23 +138,15 @@ public final class ThreadMessageInfoCellNode: CellNode { public private(set) var menuNode = ASButtonNode() public private(set) var expandNode = ASImageNode() - private lazy var recipientsListNode: ASDisplayNode = { - MessageRecipientsNode( - input: .init( - recipients: input.recipients, - ccRecipients: input.ccRecipients, - bccRecipients: input.bccRecipients - ) + private lazy var recipientsListNode: ASDisplayNode = MessageRecipientsNode( + input: .init( + recipients: input.recipients, + ccRecipients: input.ccRecipients, + bccRecipients: input.bccRecipients ) - }() - - private lazy var encryptionNode: BadgeNode = { - BadgeNode(input: input.encryptionBadge) - }() - - private lazy var signatureNode: BadgeNode? = { - input.signatureBadge.map(BadgeNode.init) - }() + ) + private lazy var encryptionNode = BadgeNode(input: input.encryptionBadge) + private lazy var signatureNode: BadgeNode? = input.signatureBadge.map(BadgeNode.init) // MARK: - Properties private let input: ThreadMessageInfoCellNode.Input @@ -170,10 +162,12 @@ public final class ThreadMessageInfoCellNode: CellNode { } // MARK: - Init - public init(input: ThreadMessageInfoCellNode.Input, - onReplyTap: ((ThreadMessageInfoCellNode) -> Void)?, - onMenuTap: ((ThreadMessageInfoCellNode) -> Void)?, - onRecipientsTap: ((ThreadMessageInfoCellNode) -> Void)?) { + public init( + input: ThreadMessageInfoCellNode.Input, + onReplyTap: ((ThreadMessageInfoCellNode) -> Void)?, + onMenuTap: ((ThreadMessageInfoCellNode) -> Void)?, + onRecipientsTap: ((ThreadMessageInfoCellNode) -> Void)? + ) { self.input = input self.onReplyTap = onReplyTap self.onMenuTap = onMenuTap @@ -183,14 +177,13 @@ public final class ThreadMessageInfoCellNode: CellNode { automaticallyManagesSubnodes = true senderNode.attributedText = input.sender - senderNode.accessibilityIdentifier = "aid-message-sender-label" - dateNode.attributedText = input.date setupRecipientButton() setupReplyNode() setupMenuNode() setupExpandNode() + setupAccessibilityIdentifiers() } // MARK: - Setup @@ -205,7 +198,6 @@ public final class ThreadMessageInfoCellNode: CellNode { recipientButtonNode.contentSpacing = 4 recipientButtonNode.addTarget(self, action: #selector(onRecipientsNodeTap), forControlEvents: .touchUpInside) - recipientButtonNode.accessibilityIdentifier = "aid-message-recipients-tappable-area" } private func setupReplyNode() { @@ -244,6 +236,17 @@ public final class ThreadMessageInfoCellNode: CellNode { expandNode.contentMode = .center } + // MARK: - AccessibilityIdentifiers + private func setupAccessibilityIdentifiers() { + senderNode.accessibilityIdentifier = "aid-message-sender-label" + recipientButtonNode.accessibilityIdentifier = "aid-message-recipients-tappable-area" + senderNode.accessibilityIdentifier = "aid-sender-label" + dateNode.accessibilityIdentifier = "aid-date-label" + + [senderNode, recipientButtonNode, senderNode, dateNode] + .forEach { $0.isAccessibilityElement = true } + } + // MARK: - Callbacks @objc private func onReplyNodeTap() { onReplyTap?(self) diff --git a/FlowCryptUI/Nodes/MessageRecipientsNode.swift b/FlowCryptUI/Nodes/MessageRecipientsNode.swift index b51577d45..228bec9e8 100644 --- a/FlowCryptUI/Nodes/MessageRecipientsNode.swift +++ b/FlowCryptUI/Nodes/MessageRecipientsNode.swift @@ -39,7 +39,6 @@ public final class MessageRecipientsNode: ASDisplayNode { super.init() automaticallyManagesSubnodes = true - setupBorder() } From 6e4fa2168f865d03e1f4df2e0321959d87cd88be Mon Sep 17 00:00:00 2001 From: Anton Kharchevskyi Date: Mon, 21 Feb 2022 15:28:54 +0000 Subject: [PATCH 3/9] Add index based aid to thread messages --- .../Threads/ThreadDetailsDecorator.swift | 5 +++-- .../Threads/ThreadDetailsViewController.swift | 15 +++++++++------ .../Cell Nodes/MessageTextSubjectNode.swift | 5 ++++- .../Cell Nodes/ThreadMessageInfoCellNode.swift | 12 ++++++++---- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/FlowCrypt/Controllers/Threads/ThreadDetailsDecorator.swift b/FlowCrypt/Controllers/Threads/ThreadDetailsDecorator.swift index 5db52970c..ece131c45 100644 --- a/FlowCrypt/Controllers/Threads/ThreadDetailsDecorator.swift +++ b/FlowCrypt/Controllers/Threads/ThreadDetailsDecorator.swift @@ -10,7 +10,7 @@ import FlowCryptUI import UIKit extension ThreadMessageInfoCellNode.Input { - init(threadMessage: ThreadDetailsViewController.Input) { + init(threadMessage: ThreadDetailsViewController.Input, index: Int) { let sender = threadMessage.rawMessage.sender ?? "message_unknown_sender".localized let recipientPrefix = "to".localized let recipientsList = threadMessage.rawMessage @@ -40,7 +40,8 @@ extension ThreadMessageInfoCellNode.Input { date: .text(from: date, style: style, color: dateColor), isExpanded: threadMessage.isExpanded, shouldShowRecipientsList: threadMessage.shouldShowRecipientsList, - buttonColor: .colorFor(darkStyle: .white, lightStyle: .main) + buttonColor: .colorFor(darkStyle: .white, lightStyle: .main), + index: index ) } } diff --git a/FlowCrypt/Controllers/Threads/ThreadDetailsViewController.swift b/FlowCrypt/Controllers/Threads/ThreadDetailsViewController.swift index 135394ec8..42ce7322a 100644 --- a/FlowCrypt/Controllers/Threads/ThreadDetailsViewController.swift +++ b/FlowCrypt/Controllers/Threads/ThreadDetailsViewController.swift @@ -439,9 +439,11 @@ extension ThreadDetailsViewController { } } - private func retryVerifyingSignatureWithRemotelyFetchedKeys(message: Message, - folder: String, - indexPath: IndexPath) { + private func retryVerifyingSignatureWithRemotelyFetchedKeys( + message: Message, + folder: String, + indexPath: IndexPath + ) { Task { do { let processedMessage = try await messageService.getAndProcessMessage( @@ -551,11 +553,12 @@ extension ThreadDetailsViewController: ASTableDelegate, ASTableDataSource { return MessageSubjectNode(subject.attributed(.medium(18))) } - let message = self.input[indexPath.section - 1] + let messageIndex = indexPath.section - 1 + let message = self.input[messageIndex] if indexPath.row == 0 { return ThreadMessageInfoCellNode( - input: .init(threadMessage: message), + input: .init(threadMessage: message, index: messageIndex), onReplyTap: { [weak self] _ in self?.handleReplyTap(at: indexPath) }, onMenuTap: { [weak self] _ in self?.handleMenuTap(at: indexPath) }, onRecipientsTap: { [weak self] _ in self?.handleRecipientsTap(at: indexPath) } @@ -567,7 +570,7 @@ extension ThreadDetailsViewController: ASTableDelegate, ASTableDataSource { } guard indexPath.row > 1 else { - return MessageTextSubjectNode(processedMessage.attributedMessage) + return MessageTextSubjectNode(processedMessage.attributedMessage, index: messageIndex) } let attachmentIndex = indexPath.row - 2 diff --git a/FlowCryptUI/Cell Nodes/MessageTextSubjectNode.swift b/FlowCryptUI/Cell Nodes/MessageTextSubjectNode.swift index 7ffd1694b..f375d29f3 100644 --- a/FlowCryptUI/Cell Nodes/MessageTextSubjectNode.swift +++ b/FlowCryptUI/Cell Nodes/MessageTextSubjectNode.swift @@ -11,9 +11,12 @@ import AsyncDisplayKit public final class MessageTextSubjectNode: CellNode { private let textNode = ASEditableTextNode() - public init(_ text: NSAttributedString?) { + public init(_ text: NSAttributedString?, index: Int) { super.init() textNode.attributedText = text + textNode.isAccessibilityElement = true + textNode.accessibilityIdentifier = "aid-message-\(index)" + DispatchQueue.main.async { self.textNode.textView.isSelectable = true self.textNode.textView.isEditable = false diff --git a/FlowCryptUI/Cell Nodes/ThreadMessageInfoCellNode.swift b/FlowCryptUI/Cell Nodes/ThreadMessageInfoCellNode.swift index 96b704863..96f8f922f 100644 --- a/FlowCryptUI/Cell Nodes/ThreadMessageInfoCellNode.swift +++ b/FlowCryptUI/Cell Nodes/ThreadMessageInfoCellNode.swift @@ -23,6 +23,7 @@ public final class ThreadMessageInfoCellNode: CellNode { public let isExpanded: Bool public let shouldShowRecipientsList: Bool public let buttonColor: UIColor + public let index: Int public init( encryptionBadge: BadgeNode.Input, @@ -35,7 +36,8 @@ public final class ThreadMessageInfoCellNode: CellNode { date: NSAttributedString, isExpanded: Bool, shouldShowRecipientsList: Bool, - buttonColor: UIColor + buttonColor: UIColor, + index: Int ) { self.encryptionBadge = encryptionBadge self.signatureBadge = signatureBadge @@ -48,6 +50,7 @@ public final class ThreadMessageInfoCellNode: CellNode { self.isExpanded = isExpanded self.shouldShowRecipientsList = shouldShowRecipientsList self.buttonColor = buttonColor + self.index = index } var replyImage: UIImage? { createButtonImage("arrow.turn.up.left") } @@ -238,10 +241,11 @@ public final class ThreadMessageInfoCellNode: CellNode { // MARK: - AccessibilityIdentifiers private func setupAccessibilityIdentifiers() { - senderNode.accessibilityIdentifier = "aid-message-sender-label" recipientButtonNode.accessibilityIdentifier = "aid-message-recipients-tappable-area" - senderNode.accessibilityIdentifier = "aid-sender-label" - dateNode.accessibilityIdentifier = "aid-date-label" + + expandNode.accessibilityIdentifier = "aid-expand-image-\(input.index)" + senderNode.accessibilityIdentifier = "aid-sender-\(input.index)" + dateNode.accessibilityIdentifier = "aid-date-\(input.index)" [senderNode, recipientButtonNode, senderNode, dateNode] .forEach { $0.isAccessibilityElement = true } From e23ffa16bc470407456045c554f38ac088debc57 Mon Sep 17 00:00:00 2001 From: Anton Kharchevskyi Date: Tue, 22 Feb 2022 21:03:22 +0000 Subject: [PATCH 4/9] Add aid value --- FlowCryptUI/Cell Nodes/MessageTextSubjectNode.swift | 1 + FlowCryptUI/Cell Nodes/ThreadMessageInfoCellNode.swift | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/FlowCryptUI/Cell Nodes/MessageTextSubjectNode.swift b/FlowCryptUI/Cell Nodes/MessageTextSubjectNode.swift index f375d29f3..f74ff8c6a 100644 --- a/FlowCryptUI/Cell Nodes/MessageTextSubjectNode.swift +++ b/FlowCryptUI/Cell Nodes/MessageTextSubjectNode.swift @@ -16,6 +16,7 @@ public final class MessageTextSubjectNode: CellNode { textNode.attributedText = text textNode.isAccessibilityElement = true textNode.accessibilityIdentifier = "aid-message-\(index)" + textNode.accessibilityValue = text?.string DispatchQueue.main.async { self.textNode.textView.isSelectable = true diff --git a/FlowCryptUI/Cell Nodes/ThreadMessageInfoCellNode.swift b/FlowCryptUI/Cell Nodes/ThreadMessageInfoCellNode.swift index 96f8f922f..f47642342 100644 --- a/FlowCryptUI/Cell Nodes/ThreadMessageInfoCellNode.swift +++ b/FlowCryptUI/Cell Nodes/ThreadMessageInfoCellNode.swift @@ -242,7 +242,7 @@ public final class ThreadMessageInfoCellNode: CellNode { // MARK: - AccessibilityIdentifiers private func setupAccessibilityIdentifiers() { recipientButtonNode.accessibilityIdentifier = "aid-message-recipients-tappable-area" - + expandNode.accessibilityIdentifier = "aid-expand-image-\(input.index)" senderNode.accessibilityIdentifier = "aid-sender-\(input.index)" dateNode.accessibilityIdentifier = "aid-date-\(input.index)" From e3038866e231335c75f59c92535c28fc3dd353e2 Mon Sep 17 00:00:00 2001 From: Dmitry Sotnikov Date: Wed, 23 Feb 2022 14:12:02 +0200 Subject: [PATCH 5/9] added new spec for check thread rendering --- appium/tests/data/index.ts | 19 ++++++++++ appium/tests/screenobjects/email.screen.ts | 37 +++++++++++++++---- .../screenobjects/old-version-app.screen.ts | 2 +- .../live/inbox/CheckThreadRendering.spec.ts | 33 +++++++++++++++++ 4 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts diff --git a/appium/tests/data/index.ts b/appium/tests/data/index.ts index faec23766..f946c5d1d 100644 --- a/appium/tests/data/index.ts +++ b/appium/tests/data/index.ts @@ -20,6 +20,25 @@ export const CommonData = { message: 'test email from gmail', sender: 'e2e.enterprise.test@flowcrypt.com' }, + threadMessage: { + subject: 'test thread rendering', + sender: 'dmitry@flowcrypt.com', + firstThreadMessage: 'first message', + secondThreadMessage: 'Second thread rendering message\n' + + '\n' + + 'On 04.02.2022 at 11:12 dmitry@flowcrypt.com wrote:\n' + + ' > first message', + thirdThreadMessage: 'Third thread rendering message' + + '\n' + + 'On 2022-02-07 at 06:56, e2e.enterprise.test@flowcrypt.com wrote:\n' + + '> Second thread rendering message\n' + + '>\n' + + '> On 04.02.2022 at 11:12 dmitry@flowcrypt.com wrote:\n' + + '> > first message', + firstDate: 'Feb 04', + secondDate: 'Feb 07', + thirdDate: 'Feb 08', + }, sender: { email: 'dmitry@flowcrypt.com', }, diff --git a/appium/tests/screenobjects/email.screen.ts b/appium/tests/screenobjects/email.screen.ts index c96e664c9..0fa3a044f 100644 --- a/appium/tests/screenobjects/email.screen.ts +++ b/appium/tests/screenobjects/email.screen.ts @@ -105,10 +105,6 @@ class EmailScreen extends BaseScreen { return $(SELECTORS.CANCEL_BUTTON); } - get senderEmail() { - return $(SELECTORS.SENDER_EMAIL); - } - get encryptionBadge() { return $(SELECTORS.ENCRYPTION_BADGE); } @@ -121,8 +117,12 @@ class EmailScreen extends BaseScreen { return $(SELECTORS.ATTACHMENT_TEXT_VIEW); } - checkEmailAddress = async (email: string) => { - await ElementHelper.checkStaticText(await this.senderEmail, email); + senderEmail = async (index: number = 0) =>{ + return $(`~aid-sender-${index}`) + } + + checkEmailAddress = async (email: string, index: number = 0)=> { + await ElementHelper.checkStaticText(await this.senderEmail(index), email); } checkEmailSubject = async (subject: string) => { @@ -130,9 +130,10 @@ class EmailScreen extends BaseScreen { await (await $(selector)).waitForDisplayed(); } - checkEmailText = async (text: string) => { - const selector = `~${text}`; + checkEmailText = async (text: string, index: number = 0) => { + const selector = `~aid-message-${index}`; await (await $(selector)).waitForDisplayed(); + await expect(await $(selector)).toHaveTextContaining(text) } checkOpenedEmail = async (email: string, subject: string, text: string) => { @@ -141,6 +142,26 @@ class EmailScreen extends BaseScreen { await this.checkEmailText(text); } + checkThreadMessage = async (email: string, subject: string, text: string, date: string, index: number = 0)=> { + await this.checkEmailAddress(email, index); + await this.checkEmailSubject(subject); + await this.clickExpandButtonByIndex(index); + await this.checkEmailText(text, index); + await this.checkDate(date, index); + } + + clickExpandButtonByIndex = async (index: number) => { + const element = (`~aid-expand-image-${index}`); + if(await (await $(element)).isDisplayed()) { + await ElementHelper.waitAndClick(await $(element)); + } + } + + checkDate = async (date: string, index: number) => { + const element = await $(`~aid-date-${index}`); + await ElementHelper.checkStaticText(await element, date); + } + clickBackButton = async () => { await ElementHelper.waitAndClick(await this.backButton); } diff --git a/appium/tests/screenobjects/old-version-app.screen.ts b/appium/tests/screenobjects/old-version-app.screen.ts index ad7ae42ef..b5138deca 100644 --- a/appium/tests/screenobjects/old-version-app.screen.ts +++ b/appium/tests/screenobjects/old-version-app.screen.ts @@ -24,7 +24,7 @@ class OldVersionAppScreen extends BaseScreen { } clickBackButton = async () => { - await ElementHelper.waitAndClick(await this.backButton); + await ElementHelper.waitAndClick(await this.backButton, 500); } checkEmailAddress = async (email: string) => { diff --git a/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts b/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts new file mode 100644 index 000000000..5ad305a37 --- /dev/null +++ b/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts @@ -0,0 +1,33 @@ +import { + SplashScreen, + SetupKeyScreen, + MailFolderScreen, + EmailScreen, +} from '../../../screenobjects/all-screens'; + +import { CommonData } from '../../../data'; + +describe('INBOX: ', () => { + + it('check thread rendering', async () => { + + const senderEmail = CommonData.threadMessage.sender; + const emailSubject = CommonData.threadMessage.subject; + const firstMessage = CommonData.threadMessage.firstThreadMessage; + const secondMessage = CommonData.threadMessage.secondThreadMessage; + const thirdMessage = CommonData.threadMessage.thirdThreadMessage; + const userEmail = CommonData.account.email; + const dateFirst = CommonData.threadMessage.firstDate; + const dateSecond = CommonData.threadMessage.secondDate; + const dateThird = CommonData.threadMessage.thirdDate; + + await SplashScreen.login(); + await SetupKeyScreen.setPassPhrase(); + await MailFolderScreen.checkInboxScreen(); + + await MailFolderScreen.clickOnEmailBySubject(emailSubject); + await EmailScreen.checkThreadMessage(senderEmail, emailSubject, thirdMessage, dateThird, 2); + await EmailScreen.checkThreadMessage(userEmail, emailSubject, secondMessage, dateSecond, 1); + await EmailScreen.checkThreadMessage(senderEmail, emailSubject, firstMessage, dateFirst); + }); +}); From 1ba40ced099077d1f7a1efc7599a1264fbfef730 Mon Sep 17 00:00:00 2001 From: Dmitry Sotnikov Date: Wed, 23 Feb 2022 18:10:59 +0200 Subject: [PATCH 6/9] added fixes for tests --- appium/tests/data/index.ts | 10 +-------- appium/tests/screenobjects/email.screen.ts | 21 ++++++++++++------- .../live/inbox/CheckThreadRendering.spec.ts | 1 - 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/appium/tests/data/index.ts b/appium/tests/data/index.ts index 1bdf37ba1..c2d8034ac 100644 --- a/appium/tests/data/index.ts +++ b/appium/tests/data/index.ts @@ -28,7 +28,7 @@ export const CommonData = { '\n' + 'On 04.02.2022 at 11:12 dmitry@flowcrypt.com wrote:\n' + ' > first message', - thirdThreadMessage: 'Third thread rendering message' + + thirdThreadMessage: 'Third thread rendering message\n' + '\n' + 'On 2022-02-07 at 06:56, e2e.enterprise.test@flowcrypt.com wrote:\n' + '> Second thread rendering message\n' + @@ -142,14 +142,6 @@ export const CommonData = { passphrasePasswordErrorMessage: 'Error\nPlease do not use your private key pass phrase as a password for this message.\n\nYou should come up with some other unique password that you can share with recipient.', subjectPasswordErrorMessage: 'Error\nPlease do not include the password in the email subject. Sharing password over email undermines password based encryption.\n\nYou can ask the recipient to also install FlowCrypt, messages between FlowCrypt users don\'t need a password.' }, - threadMessage: { - senderEmail: 'dmitry@flowcrypt.com', - subject: 'test thread rendering', - firstThreadMessage: 'first message', - secondTreadMessage: 'Second thread rendering message', - thirdThreadMessage: 'Third thread rendering message', - - }, recipientWithExpiredPublicKey: { email: 'expired@flowcrypt.com' }, diff --git a/appium/tests/screenobjects/email.screen.ts b/appium/tests/screenobjects/email.screen.ts index 0fa3a044f..b71a13be8 100644 --- a/appium/tests/screenobjects/email.screen.ts +++ b/appium/tests/screenobjects/email.screen.ts @@ -122,7 +122,9 @@ class EmailScreen extends BaseScreen { } checkEmailAddress = async (email: string, index: number = 0)=> { - await ElementHelper.checkStaticText(await this.senderEmail(index), email); + const element = await this.senderEmail(index); + await (await element).waitForDisplayed(); + await expect(await (await element).getValue()).toEqual(email); } checkEmailSubject = async (subject: string) => { @@ -131,10 +133,12 @@ class EmailScreen extends BaseScreen { } checkEmailText = async (text: string, index: number = 0) => { - const selector = `~aid-message-${index}`; - await (await $(selector)).waitForDisplayed(); - await expect(await $(selector)).toHaveTextContaining(text) - } + const selector = `~aid-message-${index}`; + await (await $(selector)).waitForDisplayed(); + console.log(await $(selector).getValue()); + + await expect(await $(selector).getValue()).toContain(text) + } checkOpenedEmail = async (email: string, subject: string, text: string) => { await this.checkEmailAddress(email); @@ -143,8 +147,8 @@ class EmailScreen extends BaseScreen { } checkThreadMessage = async (email: string, subject: string, text: string, date: string, index: number = 0)=> { - await this.checkEmailAddress(email, index); await this.checkEmailSubject(subject); + await this.checkEmailAddress(email, index); await this.clickExpandButtonByIndex(index); await this.checkEmailText(text, index); await this.checkDate(date, index); @@ -158,8 +162,9 @@ class EmailScreen extends BaseScreen { } checkDate = async (date: string, index: number) => { - const element = await $(`~aid-date-${index}`); - await ElementHelper.checkStaticText(await element, date); + const element = `~aid-date-${index}`; + await (await $(element)).waitForDisplayed(); + await expect(await $(element).getValue()).toEqual(date) } clickBackButton = async () => { diff --git a/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts b/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts index acd3c5d7d..c6416acac 100644 --- a/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts +++ b/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts @@ -4,7 +4,6 @@ import { MailFolderScreen, EmailScreen } from '../../../screenobjects/all-screens'; - import { CommonData } from '../../../data'; describe('INBOX: ', () => { From 07f801c4748ba626dc2670f0c44819d0df37c792 Mon Sep 17 00:00:00 2001 From: Dmitry Sotnikov Date: Mon, 14 Mar 2022 14:24:35 +0200 Subject: [PATCH 7/9] added fixes for PR --- appium/tests/screenobjects/email.screen.ts | 22 +++++++++---------- .../live/inbox/CheckThreadRendering.spec.ts | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/appium/tests/screenobjects/email.screen.ts b/appium/tests/screenobjects/email.screen.ts index b71a13be8..dd0733b05 100644 --- a/appium/tests/screenobjects/email.screen.ts +++ b/appium/tests/screenobjects/email.screen.ts @@ -117,11 +117,11 @@ class EmailScreen extends BaseScreen { return $(SELECTORS.ATTACHMENT_TEXT_VIEW); } - senderEmail = async (index: number = 0) =>{ + senderEmail = async (index: string = "0") =>{ return $(`~aid-sender-${index}`) } - checkEmailAddress = async (email: string, index: number = 0)=> { + checkEmailAddress = async (email: string, index: string = "0")=> { const element = await this.senderEmail(index); await (await element).waitForDisplayed(); await expect(await (await element).getValue()).toEqual(email); @@ -132,13 +132,13 @@ class EmailScreen extends BaseScreen { await (await $(selector)).waitForDisplayed(); } - checkEmailText = async (text: string, index: number = 0) => { - const selector = `~aid-message-${index}`; - await (await $(selector)).waitForDisplayed(); - console.log(await $(selector).getValue()); + checkEmailText = async (text: string, index: string = "0") => { + const selector = `~aid-message-${index}`; + await (await $(selector)).waitForDisplayed(); + console.log(await $(selector).getValue()); - await expect(await $(selector).getValue()).toContain(text) - } + await expect(await $(selector).getValue()).toContain(text) + } checkOpenedEmail = async (email: string, subject: string, text: string) => { await this.checkEmailAddress(email); @@ -146,7 +146,7 @@ class EmailScreen extends BaseScreen { await this.checkEmailText(text); } - checkThreadMessage = async (email: string, subject: string, text: string, date: string, index: number = 0)=> { + checkThreadMessage = async (email: string, subject: string, text: string, date: string, index: string = "0")=> { await this.checkEmailSubject(subject); await this.checkEmailAddress(email, index); await this.clickExpandButtonByIndex(index); @@ -154,14 +154,14 @@ class EmailScreen extends BaseScreen { await this.checkDate(date, index); } - clickExpandButtonByIndex = async (index: number) => { + clickExpandButtonByIndex = async (index: string) => { const element = (`~aid-expand-image-${index}`); if(await (await $(element)).isDisplayed()) { await ElementHelper.waitAndClick(await $(element)); } } - checkDate = async (date: string, index: number) => { + checkDate = async (date: string, index: string) => { const element = `~aid-date-${index}`; await (await $(element)).waitForDisplayed(); await expect(await $(element).getValue()).toEqual(date) diff --git a/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts b/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts index c6416acac..2c87afcc8 100644 --- a/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts +++ b/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts @@ -24,8 +24,8 @@ describe('INBOX: ', () => { await MailFolderScreen.checkInboxScreen(); await MailFolderScreen.clickOnEmailBySubject(emailSubject); - await EmailScreen.checkThreadMessage(senderEmail, emailSubject, thirdMessage, dateThird, 2); - await EmailScreen.checkThreadMessage(userEmail, emailSubject, secondMessage, dateSecond, 1); + await EmailScreen.checkThreadMessage(senderEmail, emailSubject, thirdMessage, dateThird, "2"); + await EmailScreen.checkThreadMessage(userEmail, emailSubject, secondMessage, dateSecond, "1"); await EmailScreen.checkThreadMessage(senderEmail, emailSubject, firstMessage, dateFirst); }); }); From 7b764c2725c7f98389f93b43fc0f00ba6fdb28f2 Mon Sep 17 00:00:00 2001 From: Dmitry Sotnikov Date: Mon, 14 Mar 2022 15:33:37 +0200 Subject: [PATCH 8/9] added fixes for index parameter --- appium/tests/screenobjects/email.screen.ts | 12 ++++++------ .../specs/live/inbox/CheckThreadRendering.spec.ts | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/appium/tests/screenobjects/email.screen.ts b/appium/tests/screenobjects/email.screen.ts index dd0733b05..272514f26 100644 --- a/appium/tests/screenobjects/email.screen.ts +++ b/appium/tests/screenobjects/email.screen.ts @@ -117,11 +117,11 @@ class EmailScreen extends BaseScreen { return $(SELECTORS.ATTACHMENT_TEXT_VIEW); } - senderEmail = async (index: string = "0") =>{ + senderEmail = async (index = 0) =>{ return $(`~aid-sender-${index}`) } - checkEmailAddress = async (email: string, index: string = "0")=> { + checkEmailAddress = async (email: string, index = 0)=> { const element = await this.senderEmail(index); await (await element).waitForDisplayed(); await expect(await (await element).getValue()).toEqual(email); @@ -132,7 +132,7 @@ class EmailScreen extends BaseScreen { await (await $(selector)).waitForDisplayed(); } - checkEmailText = async (text: string, index: string = "0") => { + checkEmailText = async (text: string, index = 0) => { const selector = `~aid-message-${index}`; await (await $(selector)).waitForDisplayed(); console.log(await $(selector).getValue()); @@ -146,7 +146,7 @@ class EmailScreen extends BaseScreen { await this.checkEmailText(text); } - checkThreadMessage = async (email: string, subject: string, text: string, date: string, index: string = "0")=> { + checkThreadMessage = async (email: string, subject: string, text: string, date: string, index = 0) => { await this.checkEmailSubject(subject); await this.checkEmailAddress(email, index); await this.clickExpandButtonByIndex(index); @@ -154,14 +154,14 @@ class EmailScreen extends BaseScreen { await this.checkDate(date, index); } - clickExpandButtonByIndex = async (index: string) => { + clickExpandButtonByIndex = async (index: any) => { const element = (`~aid-expand-image-${index}`); if(await (await $(element)).isDisplayed()) { await ElementHelper.waitAndClick(await $(element)); } } - checkDate = async (date: string, index: string) => { + checkDate = async (date: string, index: any) => { const element = `~aid-date-${index}`; await (await $(element)).waitForDisplayed(); await expect(await $(element).getValue()).toEqual(date) diff --git a/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts b/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts index 2c87afcc8..c6416acac 100644 --- a/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts +++ b/appium/tests/specs/live/inbox/CheckThreadRendering.spec.ts @@ -24,8 +24,8 @@ describe('INBOX: ', () => { await MailFolderScreen.checkInboxScreen(); await MailFolderScreen.clickOnEmailBySubject(emailSubject); - await EmailScreen.checkThreadMessage(senderEmail, emailSubject, thirdMessage, dateThird, "2"); - await EmailScreen.checkThreadMessage(userEmail, emailSubject, secondMessage, dateSecond, "1"); + await EmailScreen.checkThreadMessage(senderEmail, emailSubject, thirdMessage, dateThird, 2); + await EmailScreen.checkThreadMessage(userEmail, emailSubject, secondMessage, dateSecond, 1); await EmailScreen.checkThreadMessage(senderEmail, emailSubject, firstMessage, dateFirst); }); }); From eeb65e459a3a4d26e5bd643b02dce0e36bfeef63 Mon Sep 17 00:00:00 2001 From: Dmitry Sotnikov Date: Mon, 14 Mar 2022 18:04:46 +0200 Subject: [PATCH 9/9] added fixes for date format --- appium/tests/data/index.ts | 4 ++-- appium/tests/screenobjects/email.screen.ts | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/appium/tests/data/index.ts b/appium/tests/data/index.ts index fb7bf6596..ebab09bca 100644 --- a/appium/tests/data/index.ts +++ b/appium/tests/data/index.ts @@ -36,8 +36,8 @@ export const CommonData = { '> On 04.02.2022 at 11:12 dmitry@flowcrypt.com wrote:\n' + '> > first message', firstDate: 'Feb 04', - secondDate: 'Feb 07', - thirdDate: 'Feb 08', + secondDate: 'Feb 06', + thirdDate: 'Feb 07', }, sender: { email: 'dmitry@flowcrypt.com', diff --git a/appium/tests/screenobjects/email.screen.ts b/appium/tests/screenobjects/email.screen.ts index 272514f26..a8d088b41 100644 --- a/appium/tests/screenobjects/email.screen.ts +++ b/appium/tests/screenobjects/email.screen.ts @@ -1,6 +1,7 @@ import BaseScreen from './base.screen'; import { CommonData } from "../data"; import ElementHelper from "../helpers/ElementHelper"; +import moment from "moment"; const SELECTORS = { BACK_BTN: '~aid-back-button', @@ -164,7 +165,8 @@ class EmailScreen extends BaseScreen { checkDate = async (date: string, index: any) => { const element = `~aid-date-${index}`; await (await $(element)).waitForDisplayed(); - await expect(await $(element).getValue()).toEqual(date) + const convertedDate = moment(await $(element).getValue()).utcOffset(0).format('MMM DD'); + await expect(convertedDate).toEqual(date) } clickBackButton = async () => {