diff --git a/appium/api-mocks/apis/attester/attester-endpoints.ts b/appium/api-mocks/apis/attester/attester-endpoints.ts index c0d5f1f55..e45b9daca 100644 --- a/appium/api-mocks/apis/attester/attester-endpoints.ts +++ b/appium/api-mocks/apis/attester/attester-endpoints.ts @@ -31,6 +31,7 @@ export const getMockAttesterEndpoints = ( return { '/attester/pub/?': async ({ body }, req) => { const email = req.url!.split('/').pop()!.toLowerCase().trim(); + throwErrorIfConfigSaysSo(attesterConfig); if (isGet(req)) { const pubkey = (attesterConfig.servedPubkeys || {})[email]; if (pubkey) { @@ -52,6 +53,8 @@ export const getMockAttesterEndpoints = ( } }, '/attester/test/welcome': async ({ body }, req) => { + throwErrorIfConfigSaysSo(attesterConfig); + if (!attesterConfig.enableTestWelcome) { throw new AttesterErr('Mock Attester received unexpected /test/welcome request', 405); } @@ -69,6 +72,11 @@ export const getMockAttesterEndpoints = ( }, }; } +const throwErrorIfConfigSaysSo = (config: AttesterConfig) => { + if (config.returnError) { + throw new AttesterErr(config.returnError.message, config.returnError.code); + } +} export const attesterPublicKeySamples = { valid: `-----BEGIN PGP PUBLIC KEY BLOCK----- @@ -224,7 +232,7 @@ dSL33ptMlhwRCKHGiKcVmKwucxYkk6apFQEA018565fZcvtb339L2s/IIxLs 4621FX8Sy6kpR7mAzQo= =3UnZ -----END PGP PUBLIC KEY BLOCK-----`, - keyNewerVersion: `-----BEGIN PGP PUBLIC KEY BLOCK----- + keyNewerVersion: `-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYd8pKhYJKwYBBAHaRw8BAQdAXQ9bBzlYPwy3mQD5MIQSkuOyEomESHHo AAiUi0enB77NKFVwZGF0aW5nIGtleSA8dXBkYXRpbmcua2V5QGV4YW1wbGUu @@ -240,4 +248,20 @@ CgkQx8mQwaLqeN3PWwD9ErvC+ufnX0O2AmZDz67QfFH6tA1t1/wUEHgzBXEe gc8BAMaYm3AlSGbX1rJYgUtCWukkLuURdECIzerG2UuP87ID =dQen -----END PGP PUBLIC KEY BLOCK-----`, + revoked: `-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: FlowCrypt iOS 0.2 Gmail Encryption +Comment: Seamlessly send and receive encrypted email + +xjMEYW8BThYJKwYBBAHaRw8BAQdAYtEoS4d+3cwQWXcs3lvMQueypexTYai7 +uXQmxqyOoKrCjAQgFgoAHQUCYW8CLBYhBDkxt0E9uy+mDO+Fzl8Vl4kQoXgK +ACEJEF8Vl4kQoXgKFiEEOTG3QT27L6YM74XOXxWXiRCheAqk5AEApn8X3Oe7 +EFgdfo5lkgh6ubpmgyRUpfYHkQE2/S6K+T0BAPGs2py515aUVAgiRy7bJuoY +DKKbOPL1Npd0bgenKgMGzRVyZXZvZWtkQGZsb3djcnlwdC5jb23CXgQTFgoA +BgUCYW8BawAKCRBfFZeJEKF4ChD/AP9gdm4riyAzyGhD4P8ZGW3GtREk56sW +RBB3A/+RUX+qbAEA3FWCs2bUl6pmasXP8QAi0/zoruZiShR2Y2mVAM3T1ATN +FXJldm9rZWRAZmxvd2NyeXB0LmNvbcJeBBMWCgAGBQJhbwFrAAoJEF8Vl4kQ +oXgKecoBALdrD8nkptLlT8Dg4cF+3swfY1urlbdEfEvIjN60HRDLAP4w3qeS +zZ+OyuqPFaw7dM2KOu4++WigtbxRpDhpQ9U8BQ== +=bMwq +-----END PGP PUBLIC KEY BLOCK-----` }; diff --git a/appium/api-mocks/lib/configuration-types.ts b/appium/api-mocks/lib/configuration-types.ts index 34e9b63f8..a930a403a 100644 --- a/appium/api-mocks/lib/configuration-types.ts +++ b/appium/api-mocks/lib/configuration-types.ts @@ -28,7 +28,8 @@ export type FesConfig = { export type AttesterConfig = { enableSubmittingPubkeys?: boolean, enableTestWelcome?: boolean, - servedPubkeys?: Dict + servedPubkeys?: Dict, + returnError?: { code: number, message: string }, }; export type GoogleConfig = { @@ -37,4 +38,4 @@ export type GoogleConfig = { export type WkdConfig = {}; -export type EkmConfig = {}; \ No newline at end of file +export type EkmConfig = {}; diff --git a/appium/tests/constants.ts b/appium/tests/constants.ts index 0a622d78c..881693f23 100644 --- a/appium/tests/constants.ts +++ b/appium/tests/constants.ts @@ -1,2 +1 @@ -export const DEFAULT_TIMEOUT = 15000; - +export const DEFAULT_TIMEOUT = 15000; \ No newline at end of file diff --git a/appium/tests/data/index.ts b/appium/tests/data/index.ts index d98ddbe36..f7350b3b9 100644 --- a/appium/tests/data/index.ts +++ b/appium/tests/data/index.ts @@ -26,16 +26,16 @@ export const CommonData = { senderName: 'Dmitry at FlowCrypt', firstThreadMessage: 'first message', secondThreadMessage: 'Second thread rendering message\n' + - '\n' + - 'On 04.02.2022 at 11:12 dmitry@flowcrypt.com wrote:\n' + - ' > first message', + '\n' + + 'On 04.02.2022 at 11:12 dmitry@flowcrypt.com wrote:\n' + + ' > first 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' + - '>\n' + - '> On 04.02.2022 at 11:12 dmitry@flowcrypt.com wrote:\n' + - '> > first 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 06', thirdDate: 'Feb 07', @@ -88,7 +88,7 @@ export const CommonData = { updateRecipientPublicKey: { email: 'updating.key@example.test', oldSignatureDate: '12 Jan 2022, 07:16:58 PM',//in UTC - newSignatureDate: '12 Jan 2022, 07:27:20 PM',//in UTC + newSignatureDate: '12 Jan 2022, 07:27:20 PM',//in UTC oldFingerprints: '7E181662A26EC6748D6FDB1CC7C990C1A2EA78DD, 5C23518345A6595E81EBFEFCA71D94A76202B1D0', newFingerprints: '7E181662A26EC6748D6FDB1CC7C990C1A2EA78DD, 5C23518345A6595E81EBFEFCA71D94A76202B1D0, 40E4EE0325E38F717737889AC54F277266650211' }, @@ -193,5 +193,14 @@ export const CommonData = { appPath: { old: path.join(process.cwd(), './FlowCryptOld.app'), new: path.join(process.cwd(), './FlowCrypt.app') + }, + validMockUser: { + email: 'valid@domain.test' + }, + expiredMockUser: { + email: 'expired@domain.test' + }, + revokedMockUser: { + email: 'revoked@domain.test' } }; diff --git a/appium/tests/specs/live/composeEmail/RecipientListLabelCheck.spec.ts b/appium/tests/specs/live/composeEmail/RecipientListLabelCheck.spec.ts index 6555da036..46b0f16bc 100644 --- a/appium/tests/specs/live/composeEmail/RecipientListLabelCheck.spec.ts +++ b/appium/tests/specs/live/composeEmail/RecipientListLabelCheck.spec.ts @@ -6,7 +6,7 @@ import { SplashScreen } from '../../../screenobjects/all-screens'; -import {CommonData} from '../../../data'; +import { CommonData } from '../../../data'; describe('COMPOSE EMAIL: ', () => { @@ -16,7 +16,7 @@ describe('COMPOSE EMAIL: ', () => { const ccRecipientEmail = CommonData.recipientWithExpiredPublicKey.email; const bccRecipientEmail = CommonData.recipientWithoutPublicKey.email; const subject = "Test recipient list label subject" - const message= "Test recipient list label message" + const message = "Test recipient list label message" await SplashScreen.login(); await SetupKeyScreen.setPassPhrase(); diff --git a/appium/tests/specs/live/update/CheckAppAfterUpdateFromOldVersion.spec.ts b/appium/tests/specs/live/update/CheckAppAfterUpdateFromOldVersion.spec.ts index 014166ce4..73c569a2a 100644 --- a/appium/tests/specs/live/update/CheckAppAfterUpdateFromOldVersion.spec.ts +++ b/appium/tests/specs/live/update/CheckAppAfterUpdateFromOldVersion.spec.ts @@ -1,19 +1,19 @@ import { - SplashScreen, - SetupKeyScreen, - MenuBarScreen, - MailFolderScreen, - EmailScreen, - OldVersionAppScreen, - SettingsScreen, - KeysScreen, - PublicKeyScreen, - ContactScreen, - ContactPublicKeyScreen, - SearchScreen, - PublicKeyDetailsScreen + SplashScreen, + SetupKeyScreen, + MenuBarScreen, + MailFolderScreen, + EmailScreen, + OldVersionAppScreen, + SettingsScreen, + KeysScreen, + PublicKeyScreen, + ContactScreen, + ContactPublicKeyScreen, + SearchScreen, + PublicKeyDetailsScreen } from '../../../screenobjects/all-screens'; -import {CommonData} from "../../../data"; +import { CommonData } from "../../../data"; describe('UPDATE: ', () => { diff --git a/appium/tests/specs/mock/setup/CheckRecipientsInOfflineMode.spec.ts b/appium/tests/specs/mock/setup/CheckRecipientsInOfflineMode.spec.ts new file mode 100644 index 000000000..41439bc9b --- /dev/null +++ b/appium/tests/specs/mock/setup/CheckRecipientsInOfflineMode.spec.ts @@ -0,0 +1,69 @@ +import { + SplashScreen, + SetupKeyScreen, + MailFolderScreen, + NewMessageScreen, +} from '../../../screenobjects/all-screens'; +import { CommonData } from '../../../data'; +import { MockApi } from "../../../../api-mocks/mock"; +import { attesterPublicKeySamples } from "../../../../api-mocks/apis/attester/attester-endpoints"; + +describe('COMPOSE EMAIL: ', () => { + + it('check valid, revoked and expired recipients in offline mode', async () => { + + const validEmail = CommonData.validMockUser.email; + const expiredEmail = CommonData.expiredMockUser.email; + const revokedEmail = CommonData.revokedMockUser.email; + + + 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: { + 'valid@domain.test': attesterPublicKeySamples.valid, + 'expired@domain.test': attesterPublicKeySamples.expired, + 'revoked@domain.test': attesterPublicKeySamples.revoked, + } + }; + + await mockApi.withMockedApis(async () => { + await SplashScreen.login(); + await SetupKeyScreen.setPassPhrase(); + await MailFolderScreen.checkInboxScreen(); + + await MailFolderScreen.clickCreateEmail(); + await NewMessageScreen.setAddRecipient(validEmail); + await NewMessageScreen.setAddRecipient(expiredEmail); + await NewMessageScreen.setAddRecipient(revokedEmail); + + await NewMessageScreen.checkAddedRecipientColor(validEmail, 0, 'green'); + await NewMessageScreen.checkAddedRecipientColor(expiredEmail, 1, 'orange'); + await NewMessageScreen.checkAddedRecipientColor(revokedEmail, 2, 'red'); + + await NewMessageScreen.deleteAddedRecipient(2); + await NewMessageScreen.deleteAddedRecipient(1); + await NewMessageScreen.deleteAddedRecipient(0); + + mockApi.attesterConfig = { + returnError: { + code: 400, + message: "some client err" + } + }; + + await NewMessageScreen.setAddRecipient(validEmail); + await NewMessageScreen.setAddRecipient(expiredEmail); + await NewMessageScreen.setAddRecipient(revokedEmail); + + await NewMessageScreen.checkAddedRecipientColor(validEmail, 0, 'green'); + await NewMessageScreen.checkAddedRecipientColor(expiredEmail, 1, 'red'); + await NewMessageScreen.checkAddedRecipientColor(revokedEmail, 2, 'red'); + }); + }); +}); diff --git a/appium/tests/specs/mock/setup/FindEmailOnAttester.spec.ts b/appium/tests/specs/mock/setup/FindEmailOnAttester.spec.ts index a1d59988f..4da7d020b 100644 --- a/appium/tests/specs/mock/setup/FindEmailOnAttester.spec.ts +++ b/appium/tests/specs/mock/setup/FindEmailOnAttester.spec.ts @@ -1,8 +1,8 @@ import { MockApi } from 'api-mocks/mock'; import { - SplashScreen, + SplashScreen, } from '../../../screenobjects/all-screens'; -import {attesterPublicKeySamples} from "../../../../api-mocks/apis/attester/attester-endpoints"; +import { attesterPublicKeySamples } from "../../../../api-mocks/apis/attester/attester-endpoints"; import SetupKeyScreen from "../../../screenobjects/setup-key.screen"; import MailFolderScreen from "../../../screenobjects/mail-folder.screen"; import NewMessageScreen from "../../../screenobjects/new-message.screen"; @@ -18,9 +18,9 @@ describe('SETUP: ', () => { } }; mockApi.attesterConfig = { - servedPubkeys: { - 'available.on@attester.test': attesterPublicKeySamples.valid - } + servedPubkeys: { + 'available.on@attester.test': attesterPublicKeySamples.valid + } }; await mockApi.withMockedApis(async () => { await SplashScreen.login(); diff --git a/appium/tests/specs/mock/setup/RespectsDisallowAttesterSearchForDomainsOnPerDomainBasic.spec.ts b/appium/tests/specs/mock/setup/RespectsDisallowAttesterSearchForDomainsOnPerDomainBasic.spec.ts index 6d1ba49cb..3a4cf30e1 100644 --- a/appium/tests/specs/mock/setup/RespectsDisallowAttesterSearchForDomainsOnPerDomainBasic.spec.ts +++ b/appium/tests/specs/mock/setup/RespectsDisallowAttesterSearchForDomainsOnPerDomainBasic.spec.ts @@ -1,8 +1,8 @@ import { MockApi } from 'api-mocks/mock'; import { - SplashScreen, + SplashScreen, } from '../../../screenobjects/all-screens'; -import {attesterPublicKeySamples} from "../../../../api-mocks/apis/attester/attester-endpoints"; +import { attesterPublicKeySamples } from "../../../../api-mocks/apis/attester/attester-endpoints"; import SetupKeyScreen from "../../../screenobjects/setup-key.screen"; import MailFolderScreen from "../../../screenobjects/mail-folder.screen"; import NewMessageScreen from "../../../screenobjects/new-message.screen"; @@ -21,8 +21,8 @@ describe('SETUP: ', () => { }; mockApi.attesterConfig = { servedPubkeys: { - 'attester@disabled.test': attesterPublicKeySamples.valid, - 'attester@enabled.test': attesterPublicKeySamples.valid + 'attester@disabled.test': attesterPublicKeySamples.valid, + 'attester@enabled.test': attesterPublicKeySamples.valid } }; diff --git a/appium/tests/specs/mock/setup/SetupFailsWithInconsistentClientConfiguration.spec.ts b/appium/tests/specs/mock/setup/SetupFailsWithInconsistentClientConfiguration.spec.ts index 948dab26b..9be6af4fc 100644 --- a/appium/tests/specs/mock/setup/SetupFailsWithInconsistentClientConfiguration.spec.ts +++ b/appium/tests/specs/mock/setup/SetupFailsWithInconsistentClientConfiguration.spec.ts @@ -19,5 +19,4 @@ describe('SETUP: ', () => { await BaseScreen.checkModalMessage('Error\n' + 'Please check if key manager url set correctly'); }); }); - });