diff --git a/appium/api-mocks/apis/attester/attester-endpoints.ts b/appium/api-mocks/apis/attester/attester-endpoints.ts index fd61b3f48..c0d5f1f55 100644 --- a/appium/api-mocks/apis/attester/attester-endpoints.ts +++ b/appium/api-mocks/apis/attester/attester-endpoints.ts @@ -210,5 +210,34 @@ T/X6OnVQdcOI7SvdQI74SxbaHnEeCLDEk7dOhWLJBLuZwK7M3cT6BX+V2v6Fm7SX0hSpDg1HK0KL qHJuDNEmMUvx3cMUd5HtsOFO9JapCp1iCVo2p49CIXA4NUrLETNM2ZddknhbFm8bsK48tTJEH6l4 Wq3aCVXYGg== =Ldag +-----END PGP PUBLIC KEY BLOCK-----`, + keyOlderVersion: `-----BEGIN PGP PUBLIC KEY BLOCK----- + +xjMEYd8pKhYJKwYBBAHaRw8BAQdAXQ9bBzlYPwy3mQD5MIQSkuOyEomESHHo +AAiUi0enB77NKFVwZGF0aW5nIGtleSA8dXBkYXRpbmcua2V5QGV4YW1wbGUu +dGVzdD7CeAQQFgoAIAUCYd8pKgYLCQcIAwIEFQgKAgQWAgEAAhkBAhsDAh4B +AAoJEMfJkMGi6njd9HUA/0ZdZaaOFy0hM+GpEnzK+A/G3bLe9Kulh4jT8+4j +JqcKAP0V+pga+B1v98aeF8cRlgQPEyWtYUqZLcDLBQ6r3BEfDM44BGHfKSoS +CisGAQQBl1UBBQEBB0BPkVSyVsZ+vsF4e4NbVsq/YNjqL0JQI+t6OHc5YxJS +SgMBCAfCYQQYFggACQUCYd8pKgIbDAAKCRDHyZDBoup43Y+gAQDSVD/EDqCE +dSL33ptMlhwRCKHGiKcVmKwucxYkk6apFQEA018565fZcvtb339L2s/IIxLs +4621FX8Sy6kpR7mAzQo= +=3UnZ +-----END PGP PUBLIC KEY BLOCK-----`, + keyNewerVersion: `-----BEGIN PGP PUBLIC KEY BLOCK----- + +xjMEYd8pKhYJKwYBBAHaRw8BAQdAXQ9bBzlYPwy3mQD5MIQSkuOyEomESHHo +AAiUi0enB77NKFVwZGF0aW5nIGtleSA8dXBkYXRpbmcua2V5QGV4YW1wbGUu +dGVzdD7CeAQQFgoAIAUCYd8pKgYLCQcIAwIEFQgKAgQWAgEAAhkBAhsDAh4B +AAoJEMfJkMGi6njd9HUA/0ZdZaaOFy0hM+GpEnzK+A/G3bLe9Kulh4jT8+4j +JqcKAP0V+pga+B1v98aeF8cRlgQPEyWtYUqZLcDLBQ6r3BEfDM44BGHfKSoS +CisGAQQBl1UBBQEBB0BPkVSyVsZ+vsF4e4NbVsq/YNjqL0JQI+t6OHc5YxJS +SgMBCAfCYQQYFggACQUCYd8pKgIbDAAKCRDHyZDBoup43Y+gAQDSVD/EDqCE +dSL33ptMlhwRCKHGiKcVmKwucxYkk6apFQEA018565fZcvtb339L2s/IIxLs +4621FX8Sy6kpR7mAzQrOOARh3yuYEgorBgEEAZdVAQUBAQdAglzBCJCRj29J +THYvVGaNESiiVKmyrTEnXonGUS58TwMDAQgHwmEEGBYIAAkFAmHfK5gCGwwA +CgkQx8mQwaLqeN3PWwD9ErvC+ufnX0O2AmZDz67QfFH6tA1t1/wUEHgzBXEe +gc8BAMaYm3AlSGbX1rJYgUtCWukkLuURdECIzerG2UuP87ID +=dQen -----END PGP PUBLIC KEY BLOCK-----`, }; diff --git a/appium/package.json b/appium/package.json index ee8dbe7fa..f6f6c8d30 100644 --- a/appium/package.json +++ b/appium/package.json @@ -47,6 +47,7 @@ "ts-node": "^10.4.0", "typescript": "^4.4.4", "wdio-video-reporter": "^3.1.3", - "webdriverio": "^7.16.10" + "webdriverio": "^7.16.10", + "moment": "^2.29.1" } -} \ No newline at end of file +} diff --git a/appium/tests/data/index.ts b/appium/tests/data/index.ts index 16fd4ad3a..2ec3ae59c 100644 --- a/appium/tests/data/index.ts +++ b/appium/tests/data/index.ts @@ -53,6 +53,15 @@ export const CommonData = { longEmail: { message: '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nText' }, + updateRecipientPublicKey: { + email: 'updating.key@example.test', + oldSignatureDate: 'Jan 12, 2022 at 11:16:58 AM',//time for CI runs + newSignatureDate: 'Jan 12, 2022 at 11:27:20 AM',//time for CI runs + // oldSignatureDate: 'Jan 12, 2022 at 9:16:58 PM', //- for local run + // newSignatureDate: 'Jan 12, 2022 at 9:27:20 PM', // for local run + oldFingerprints: '7E181662A26EC6748D6FDB1CC7C990C1A2EA78DD, 5C23518345A6595E81EBFEFCA71D94A76202B1D0', + newFingerprints: '7E181662A26EC6748D6FDB1CC7C990C1A2EA78DD, 5C23518345A6595E81EBFEFCA71D94A76202B1D0, 40E4EE0325E38F717737889AC54F277266650211' + }, keyMismatchEmail: { subject: 'Encrypted message with key mismatch', message: 'Could not decrypt:', diff --git a/appium/tests/helpers/DataHelper.ts b/appium/tests/helpers/DataHelper.ts index c9cf34d7d..e046f78fd 100644 --- a/appium/tests/helpers/DataHelper.ts +++ b/appium/tests/helpers/DataHelper.ts @@ -1,7 +1,12 @@ +import moment from "moment"; + class DataHelper { static uniqueValue() { return Math.random().toString(36).substring(2); } + static convertDateToMSec = async (date: string ) => { + return await Date.parse(moment(date.replace('at', '')).toISOString()) + } } export default DataHelper; diff --git a/appium/tests/helpers/PublicKeyHelper.ts b/appium/tests/helpers/PublicKeyHelper.ts new file mode 100644 index 000000000..e107e0dff --- /dev/null +++ b/appium/tests/helpers/PublicKeyHelper.ts @@ -0,0 +1,40 @@ +import MailFolderScreen from "../screenobjects/mail-folder.screen"; +import NewMessageScreen from "../screenobjects/new-message.screen"; +import MenuBarScreen from "../screenobjects/menu-bar.screen"; +import SettingsScreen from "../screenobjects/settings.screen"; +import ContactScreen from "../screenobjects/contacts.screen"; +import ContactPublicKeyScreen from "../screenobjects/contact-public-key.screen"; +import PublicKeyDetailsScreen from "../screenobjects/public-key-details.screen"; + +class PublicKeyHelper { + static loadRecipientInComposeThenCheckSignatureAndFingerprints = async (userEmail: string, signatureDate: string , fingerprintsValue: string ) => { + await MailFolderScreen.checkInboxScreen(); + await MailFolderScreen.clickCreateEmail(); + await NewMessageScreen.setAddRecipient(userEmail); + await NewMessageScreen.checkAddedRecipient(userEmail); + await NewMessageScreen.clickBackButton(); + + // Go to Contacts screen + await MenuBarScreen.clickMenuIcon(); + await MenuBarScreen.checkUserEmail(); + + await MenuBarScreen.clickSettingsButton(); + await SettingsScreen.checkSettingsScreen(); + await SettingsScreen.clickOnSettingItem('Contacts'); + + await ContactScreen.checkContactScreen(); + await ContactScreen.checkContact(userEmail); + + await ContactScreen.clickOnContact(userEmail); + await ContactPublicKeyScreen.checkPgpUserId(userEmail); + await ContactPublicKeyScreen.checkPublicKeyDetailsNotEmpty(); + await ContactPublicKeyScreen.clickOnFingerPrint(); + + await PublicKeyDetailsScreen.checkPublicKeyDetailsScreen(); + await PublicKeyDetailsScreen.checkPublicKeyNotEmpty(); + await PublicKeyDetailsScreen.checkSignatureDateValue(signatureDate); + await PublicKeyDetailsScreen.checkFingerPrintsValue(fingerprintsValue); + } +} + +export default PublicKeyHelper; diff --git a/appium/tests/screenobjects/all-screens.ts b/appium/tests/screenobjects/all-screens.ts index 7ca7f303a..5bcc3846a 100644 --- a/appium/tests/screenobjects/all-screens.ts +++ b/appium/tests/screenobjects/all-screens.ts @@ -13,6 +13,7 @@ import MailFolderScreen from './mail-folder.screen'; import SearchScreen from './search.screen'; import OldVersionAppScreen from './old-version-app.screen'; import EmailProviderScreen from './email-provider.screen'; +import PublicKeyDetailsScreen from './public-key-details.screen'; export { SplashScreen, @@ -29,5 +30,6 @@ export { MailFolderScreen, SearchScreen, OldVersionAppScreen, - EmailProviderScreen + EmailProviderScreen, + PublicKeyDetailsScreen }; diff --git a/appium/tests/screenobjects/contact-public-key.screen.ts b/appium/tests/screenobjects/contact-public-key.screen.ts index ad05e1dee..de5e804dc 100644 --- a/appium/tests/screenobjects/contact-public-key.screen.ts +++ b/appium/tests/screenobjects/contact-public-key.screen.ts @@ -3,8 +3,6 @@ import ElementHelper from "../helpers/ElementHelper"; const SELECTORS = { BACK_BTN: '~aid-back-button', - KEY: '~Key', - PUBLIC_KEY: '-ios class chain:**/XCUIElementTypeOther/XCUIElementTypeStaticText[2]', FINGERPRINT_VALUE: '~fingerprintValue', CREATED_VALUE: '~createdAtValue', EXPIRES_VALUE: '~expiresValue', @@ -13,7 +11,7 @@ const SELECTORS = { EXPIRES_LABEL: '~Expires:', PGD_USER_ID_LABEL: '~User:', PGD_USER_ID_EMAIL: '~userEmail', - TRASH_BUTTON: '~trash' + TRASH_BUTTON: '~trash', }; class ContactPublicKeyScreen extends BaseScreen { @@ -29,14 +27,6 @@ class ContactPublicKeyScreen extends BaseScreen { return $(SELECTORS.BACK_BTN); } - get key() { - return $(SELECTORS.KEY); - } - - get publicKey() { - return $(SELECTORS.PUBLIC_KEY); - } - get fingerPrintLabel() { return $(SELECTORS.FINGERPRINT_LABEL); } @@ -69,13 +59,6 @@ class ContactPublicKeyScreen extends BaseScreen { return $(SELECTORS.PGD_USER_ID_EMAIL); } - checkPublicKeyNotEmpty = async () => { - await (await this.key).waitForDisplayed(); - const pubkeyEl = await this.publicKey; - await pubkeyEl.waitForExist(); - expect(await pubkeyEl.getAttribute('value')).toBeTruthy(); - } - checkPublicKeyDetailsNotEmpty = async () => { await (await this.fingerPrintLabel).waitForDisplayed(); expect(await (await this.fingerPrintValue).getAttribute('value')).toBeTruthy(); @@ -99,6 +82,9 @@ class ContactPublicKeyScreen extends BaseScreen { await ElementHelper.waitAndClick(await this.backButton); } + clickTrashButton = async () => { + await ElementHelper.waitAndClick(await this.trashButton); + } } export default new ContactPublicKeyScreen(); diff --git a/appium/tests/screenobjects/old-version-app.screen.ts b/appium/tests/screenobjects/old-version-app.screen.ts index eed1c6081..ad7ae42ef 100644 --- a/appium/tests/screenobjects/old-version-app.screen.ts +++ b/appium/tests/screenobjects/old-version-app.screen.ts @@ -4,6 +4,7 @@ import ElementHelper from "../helpers/ElementHelper"; const SELECTORS = { BACK_BUTTON: '~arrow left c', SENDER_EMAIL: '~messageSenderLabel', + PUBLIC_KEY: '-ios class chain:**/XCUIElementTypeOther/XCUIElementTypeStaticText[2]' }; class OldVersionAppScreen extends BaseScreen { @@ -18,6 +19,9 @@ class OldVersionAppScreen extends BaseScreen { get senderEmail() { return $(SELECTORS.SENDER_EMAIL); } + get publicKeyValue () { + return $(SELECTORS.PUBLIC_KEY); + } clickBackButton = async () => { await ElementHelper.waitAndClick(await this.backButton); @@ -42,6 +46,12 @@ class OldVersionAppScreen extends BaseScreen { await this.checkEmailSubject(subject); await this.checkEmailText(text); } + + checkPublicKeyNotEmpty = async () => { + const pubkeyEl = await this.publicKeyValue; + await pubkeyEl.waitForExist(); + expect(await pubkeyEl.getAttribute('value')).toBeTruthy(); + } } export default new OldVersionAppScreen(); diff --git a/appium/tests/screenobjects/public-key-details.screen.ts b/appium/tests/screenobjects/public-key-details.screen.ts new file mode 100644 index 000000000..dde5fbb5d --- /dev/null +++ b/appium/tests/screenobjects/public-key-details.screen.ts @@ -0,0 +1,112 @@ +import BaseScreen from './base.screen'; +import ElementHelper from "../helpers/ElementHelper"; + +const SELECTORS = { + BACK_BTN: '~aid-back-button', + SHARE_BUTTON: '~share', + COPY_BUTTON: '~copy', + KEY_LABEL: '~Key', + PUBLIC_KEY_VALUE: '~aid-signature-key', + TRASH_BUTTON: '~trash', + SIGNATURE_LABEL: '~Signature', + SIGNATURE_VALUE: '~aid-signature-date', + LAST_FETCHED_DATE_LABEL: '~Last fetched', + LAST_FETCHED_DATE_VALUE: '~aid-signature-fetched-date', + FINGERPRINTS_VALUE: '~aid-signature-fingerprints', + FINGERPRINTS_LABEL: '~Fingerprints' +}; + +class PublicKeyDetailsScreen extends BaseScreen { + constructor() { + super(SELECTORS.BACK_BTN); + } + + get trashButton() { + return $(SELECTORS.TRASH_BUTTON); + } + + get copyButton() { + return $(SELECTORS.COPY_BUTTON); + } + + get shareButton() { + return $(SELECTORS.SHARE_BUTTON) + } + + get backButton() { + return $(SELECTORS.BACK_BTN); + } + + get keyLabel() { + return $(SELECTORS.KEY_LABEL); + } + + get signatureLabel() { + return $(SELECTORS.SIGNATURE_LABEL) + } + + get signatureValue() { + return $(SELECTORS.SIGNATURE_VALUE); + } + + get publicKeyValue() { + return $(SELECTORS.PUBLIC_KEY_VALUE); + } + + get lastFetchedDateLabel() { + return $(SELECTORS.LAST_FETCHED_DATE_LABEL) + } + + get lastFetchedDateValue() { + return $(SELECTORS.LAST_FETCHED_DATE_VALUE) + } + + get fingerprintsLabel() { + return $(SELECTORS.FINGERPRINTS_LABEL); + } + + get fingerprintsValue() { + return $(SELECTORS.FINGERPRINTS_VALUE) + } + + checkPublicKeyDetailsScreen = async () => { + await (await this.trashButton).waitForDisplayed(); + await (await this.copyButton).waitForDisplayed(); + await (await this.shareButton).waitForDisplayed(); + await expect(await this.keyLabel).toBePresent(); + await expect(await this.signatureLabel).toBePresent(); + await expect(await this.lastFetchedDateLabel).toBePresent(); + await expect(await this.fingerprintsLabel).toBePresent(); + } + + checkPublicKeyNotEmpty = async () => { + const pubkeyEl = await this.publicKeyValue; + await pubkeyEl.waitForExist(); + expect(await pubkeyEl.getAttribute('value')).toBeTruthy(); + } + + checkSignatureDateValue = async (value: string) => { + const signatureValue = await this.signatureValue; + await signatureValue.waitForExist(); + expect(await signatureValue.getValue()).toEqual(value); + } + + getLastFetchedDateValue = async () => { + await (await this.lastFetchedDateLabel).waitForDisplayed(); + const lastFetchedDate = await this.lastFetchedDateValue; + return (await lastFetchedDate.getAttribute('value')); + } + + checkFingerPrintsValue = async (value: string) => { + const fingerprints = await this.fingerprintsValue; + await fingerprints.waitForExist(); + expect(await fingerprints.getAttribute('value')).toEqual(value); + } + + clickBackButton = async () => { + await ElementHelper.waitAndClick(await this.backButton); + } + +} + +export default new PublicKeyDetailsScreen(); diff --git a/appium/tests/specs/live/composeEmail/SelectRecipientByName.spec.ts b/appium/tests/specs/live/composeEmail/SelectRecipientByName.spec.ts index 2c7608763..e21d93a71 100644 --- a/appium/tests/specs/live/composeEmail/SelectRecipientByName.spec.ts +++ b/appium/tests/specs/live/composeEmail/SelectRecipientByName.spec.ts @@ -6,7 +6,8 @@ import { ContactScreen, ContactPublicKeyScreen, SettingsScreen, - MenuBarScreen + MenuBarScreen, + PublicKeyDetailsScreen } from '../../../screenobjects/all-screens'; import { CommonData } from '../../../data'; @@ -73,6 +74,7 @@ describe('COMPOSE EMAIL: ', () => { await ContactPublicKeyScreen.checkPgpUserId(firstContactEmail); await ContactPublicKeyScreen.checkPublicKeyDetailsNotEmpty(); await ContactPublicKeyScreen.clickOnFingerPrint(); - await ContactPublicKeyScreen.checkPublicKeyNotEmpty(); + await PublicKeyDetailsScreen.checkPublicKeyDetailsScreen(); + await PublicKeyDetailsScreen.checkPublicKeyNotEmpty(); }); }); diff --git a/appium/tests/specs/live/update/CheckAppAfterUpdateFromOldVersion.spec.ts b/appium/tests/specs/live/update/CheckAppAfterUpdateFromOldVersion.spec.ts index 38f5c230f..11789c98e 100644 --- a/appium/tests/specs/live/update/CheckAppAfterUpdateFromOldVersion.spec.ts +++ b/appium/tests/specs/live/update/CheckAppAfterUpdateFromOldVersion.spec.ts @@ -10,7 +10,8 @@ import { PublicKeyScreen, ContactScreen, ContactPublicKeyScreen, - SearchScreen + SearchScreen, + PublicKeyDetailsScreen } from '../../../screenobjects/all-screens'; import {CommonData} from "../../../data"; @@ -62,7 +63,7 @@ describe('UPDATE: ', () => { await ContactPublicKeyScreen.checkPgpUserId(firstContactEmail); await ContactPublicKeyScreen.checkPublicKeyDetailsNotEmpty(); await ContactPublicKeyScreen.clickOnFingerPrint(); - await ContactPublicKeyScreen.checkPublicKeyNotEmpty(); + await OldVersionAppScreen.checkPublicKeyNotEmpty(); //close old app version await driver.terminateApp(bundleId); @@ -87,7 +88,7 @@ describe('UPDATE: ', () => { await ContactPublicKeyScreen.checkPgpUserId(firstContactEmail); await ContactPublicKeyScreen.checkPublicKeyDetailsNotEmpty(); await ContactPublicKeyScreen.clickOnFingerPrint(); - await ContactPublicKeyScreen.checkPublicKeyNotEmpty(); + await PublicKeyDetailsScreen.checkPublicKeyNotEmpty(); await ContactPublicKeyScreen.clickBackButton(); await ContactPublicKeyScreen.checkPgpUserId(firstContactEmail); diff --git a/appium/tests/specs/mock/setup/UpdateOlderPubKeyToNewer.spec.ts b/appium/tests/specs/mock/setup/UpdateOlderPubKeyToNewer.spec.ts new file mode 100644 index 000000000..a788a19af --- /dev/null +++ b/appium/tests/specs/mock/setup/UpdateOlderPubKeyToNewer.spec.ts @@ -0,0 +1,112 @@ +import { MockApi } from 'api-mocks/mock'; +import { + SplashScreen, + SetupKeyScreen, + PublicKeyDetailsScreen, + ContactPublicKeyScreen, + MenuBarScreen, + SettingsScreen, + ContactScreen, +} from '../../../screenobjects/all-screens'; +import {attesterPublicKeySamples} from "../../../../api-mocks/apis/attester/attester-endpoints"; +import {CommonData} from "../../../data"; +import DataHelper from "../../../helpers/DataHelper"; +import PublicKeyHelper from "../../../helpers/PublicKeyHelper"; + + +describe('SETUP: ', () => { + + it('app updates older public keys to newer but not vice versa', async () => { + + let firstFetchedDate, secondFetchedDate, thirdFetchedDate, fourthFetchedDate; + + const mockApi = new MockApi(); + + mockApi.fesConfig = { + clientConfiguration: { + flags: ["NO_PRV_CREATE", "NO_PRV_BACKUP", "NO_ATTESTER_SUBMIT", "PRV_AUTOIMPORT_OR_AUTOGEN", "FORBID_STORING_PASS_PHRASE"], + key_manager_url: "https://ekm.flowcrypt.com", + } + }; + mockApi.attesterConfig = { + servedPubkeys: { + 'updating.key@example.test': attesterPublicKeySamples.keyOlderVersion + } + }; + const userEmail = CommonData.updateRecipientPublicKey.email; + const oldSignatureDate = CommonData.updateRecipientPublicKey.oldSignatureDate; + const oldFingerprintsValue = CommonData.updateRecipientPublicKey.oldFingerprints; + const newSignatureDate = CommonData.updateRecipientPublicKey.newSignatureDate; + const newFingerprintsValue = CommonData.updateRecipientPublicKey.newFingerprints; + + await mockApi.withMockedApis(async () => { + //stage 1 + await SplashScreen.login(); + await SetupKeyScreen.setPassPhrase(); + + await PublicKeyHelper.loadRecipientInComposeThenCheckSignatureAndFingerprints(userEmail, oldSignatureDate, oldFingerprintsValue); + firstFetchedDate = await DataHelper.convertDateToMSec(await PublicKeyDetailsScreen.getLastFetchedDateValue()); + + await PublicKeyDetailsScreen.clickBackButton(); + await ContactPublicKeyScreen.checkPgpUserId(userEmail); + await ContactPublicKeyScreen.clickBackButton(); + + await ContactScreen.checkContactScreen(); + await ContactScreen.clickBackButton(); + await SettingsScreen.checkSettingsScreen(); + + await MenuBarScreen.clickMenuIcon(); + await MenuBarScreen.clickInboxButton(); + //stage 2 + mockApi.attesterConfig = { + servedPubkeys: { + 'updating.key@example.test': attesterPublicKeySamples.keyNewerVersion + } + }; + await PublicKeyHelper.loadRecipientInComposeThenCheckSignatureAndFingerprints(userEmail, newSignatureDate, newFingerprintsValue); + + secondFetchedDate = await DataHelper.convertDateToMSec(await PublicKeyDetailsScreen.getLastFetchedDateValue()); + + await expect(firstFetchedDate).toBeLessThan(secondFetchedDate); + + await PublicKeyDetailsScreen.clickBackButton(); + await ContactPublicKeyScreen.checkPgpUserId(userEmail); + await ContactPublicKeyScreen.clickBackButton(); + + await ContactScreen.checkContactScreen(); + await ContactScreen.clickBackButton(); + await SettingsScreen.checkSettingsScreen(); + + await MenuBarScreen.clickMenuIcon(); + await MenuBarScreen.clickInboxButton(); + //stage 3 + mockApi.attesterConfig = { + servedPubkeys: { + 'updating.key@example.test': attesterPublicKeySamples.keyOlderVersion + } + }; + await PublicKeyHelper.loadRecipientInComposeThenCheckSignatureAndFingerprints(userEmail, newSignatureDate, newFingerprintsValue); + + thirdFetchedDate = await DataHelper.convertDateToMSec(await PublicKeyDetailsScreen.getLastFetchedDateValue()); + await expect(secondFetchedDate).toBeLessThan(thirdFetchedDate); + //stage 4 + await PublicKeyDetailsScreen.clickBackButton(); + await ContactPublicKeyScreen.checkPgpUserId(userEmail); + await ContactPublicKeyScreen.clickTrashButton(); + await ContactScreen.checkContactScreen(); + await ContactScreen.checkEmptyList(); + + await ContactScreen.clickBackButton(); + await SettingsScreen.checkSettingsScreen(); + + await MenuBarScreen.clickMenuIcon(); + await MenuBarScreen.clickInboxButton(); + + await PublicKeyHelper.loadRecipientInComposeThenCheckSignatureAndFingerprints(userEmail, oldSignatureDate, oldFingerprintsValue); + + fourthFetchedDate = await DataHelper.convertDateToMSec(await PublicKeyDetailsScreen.getLastFetchedDateValue()); + + await expect(thirdFetchedDate).toBeLessThan(fourthFetchedDate); + }); + }); +});