From 4582c25208e34b6e15a15e640e9b6edc46ba5155 Mon Sep 17 00:00:00 2001 From: isabelrios Date: Wed, 19 Feb 2020 13:23:25 +0100 Subject: [PATCH] UITests: New tests for save Login prompt (#8381) * UITests: New tests for save Login prompt * fixing firebase timing issues when webpage loads * adding tests for don't save and check the prompt options * fix detekt issue * fix reviewer comments --- .../androidTest/assets/pages/password.html | 22 +++++++ .../assets/pages/passwordsubmit.html | 9 +++ .../mozilla/fenix/helpers/TestAssetHelper.kt | 6 ++ .../mozilla/fenix/ui/SettingsPrivacyTest.kt | 61 +++++++++++++++++++ .../mozilla/fenix/ui/robots/BrowserRobot.kt | 12 ++++ ...MenuLoginsAndPasswordOptionsToSaveRobot.kt | 38 ++++++++++++ .../SettingsSubMenuLoginsAndPasswordRobot.kt | 8 +++ ...bMenuLoginsAndPasswordsSavedLoginsRobot.kt | 6 ++ 8 files changed, 162 insertions(+) create mode 100644 app/src/androidTest/assets/pages/password.html create mode 100644 app/src/androidTest/assets/pages/passwordsubmit.html create mode 100644 app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordOptionsToSaveRobot.kt diff --git a/app/src/androidTest/assets/pages/password.html b/app/src/androidTest/assets/pages/password.html new file mode 100644 index 000000000..f906d3370 --- /dev/null +++ b/app/src/androidTest/assets/pages/password.html @@ -0,0 +1,22 @@ + + + + + + + + + +
+

Username:

+

Password:

+

+
+ + + + + + diff --git a/app/src/androidTest/assets/pages/passwordsubmit.html b/app/src/androidTest/assets/pages/passwordsubmit.html new file mode 100644 index 000000000..d2e994cda --- /dev/null +++ b/app/src/androidTest/assets/pages/passwordsubmit.html @@ -0,0 +1,9 @@ + + + + + +

Password submitted. Nope just a test.

+ + + diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/TestAssetHelper.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/TestAssetHelper.kt index be7724396..672a0e165 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/helpers/TestAssetHelper.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/TestAssetHelper.kt @@ -83,4 +83,10 @@ object TestAssetHelper { return TestAsset(url, "") } + + fun getSaveLoginAsset(server: MockWebServer): TestAsset { + val url = server.url("pages/password.html").toString().toUri()!! + + return TestAsset(url, "") + } } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsPrivacyTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsPrivacyTest.kt index 0e146575d..0a7566a57 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsPrivacyTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsPrivacyTest.kt @@ -14,8 +14,10 @@ import org.junit.Ignore import org.junit.Test import org.mozilla.fenix.helpers.AndroidAssetDispatcher import org.mozilla.fenix.helpers.HomeActivityTestRule +import org.mozilla.fenix.helpers.TestAssetHelper import org.mozilla.fenix.helpers.TestHelper import org.mozilla.fenix.ui.robots.homeScreen +import org.mozilla.fenix.ui.robots.navigationToolbar /** * Tests for verifying the main three dot menu options @@ -133,6 +135,65 @@ class SettingsPrivacyTest { } } + @Test + fun saveLoginFromPromptTest() { + val saveLoginTest = + TestAssetHelper.getSaveLoginAsset(mockWebServer) + + navigationToolbar { + }.enterURLAndEnterToBrowser(saveLoginTest.url) { + verifySaveLoginPromptIsShown() + // Click save to save the login + saveLoginFromPrompt("Save") + }.openHomeScreen { + }.openThreeDotMenu { + }.openSettings { + TestHelper.scrollToElementByText("Logins and passwords") + }.openLoginsAndPasswordSubMenu { + verifyDefaultView() + verifyDefaultValueSyncLogins() + }.openSavedLogins { + verifySavedLoginsView() + tapSetupLater() + // Verify that the login appears correctly + verifySavedLoginFromPrompt() + } + } + + @Test + fun doNotSaveLoginFromPromptTest() { + val saveLoginTest = TestAssetHelper.getSaveLoginAsset(mockWebServer) + + navigationToolbar { + }.enterURLAndEnterToBrowser(saveLoginTest.url) { + verifySaveLoginPromptIsShown() + // Don't save the login + saveLoginFromPrompt("Don’t save") + }.openHomeScreen { + }.openThreeDotMenu { + }.openSettings { + }.openLoginsAndPasswordSubMenu { + verifyDefaultView() + verifyDefaultValueSyncLogins() + }.openSavedLogins { + verifySavedLoginsView() + tapSetupLater() + // Verify that the login list is empty + verifyNotSavedLoginFromPromt() + } + } + + @Test + fun saveLoginsAndPasswordsOptions() { + homeScreen { + }.openThreeDotMenu { + }.openSettings { + }.openLoginsAndPasswordSubMenu { + }.saveLoginsAndPasswordsOptions { + verifySaveLoginsOptionsView() + } + } + @Ignore("This is a stub test, ignore for now") @Test fun toggleTrackingProtection() { diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/BrowserRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/BrowserRobot.kt index bd80a3277..d8fc2d44e 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/BrowserRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/BrowserRobot.kt @@ -256,6 +256,18 @@ class BrowserRobot { ).perform(ViewActions.click()) } + fun verifySaveLoginPromptIsShown() { + mDevice.waitNotNull(Until.findObjects(By.text("test@example.com")), TestAssetHelper.waitingTime) + val submitButton = mDevice.findObject(By.res("submit")) + submitButton.clickAndWait(Until.newWindow(), TestAssetHelper.waitingTime) + // Click save to save the login + mDevice.waitNotNull(Until.findObjects(By.text("Save"))) + } + + fun saveLoginFromPrompt(optionToSaveLogin: String) { + mDevice.findObject(By.text(optionToSaveLogin)).click() + } + class Transition { private val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) private fun threeDotButton() = onView( diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordOptionsToSaveRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordOptionsToSaveRobot.kt new file mode 100644 index 000000000..b7e3199db --- /dev/null +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordOptionsToSaveRobot.kt @@ -0,0 +1,38 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.ui.robots + +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.matcher.ViewMatchers +import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility +import org.hamcrest.CoreMatchers + +/** + * Implementation of Robot Pattern for the Privacy Settings > saved logins sub menu + */ + +class SettingsSubMenuLoginsAndPasswordOptionsToSaveRobot { + fun verifySaveLoginsOptionsView() { + onView(ViewMatchers.withText("Ask to save")) + .check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))) + + onView(ViewMatchers.withText("Never save")) + .check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))) + } + + class Transition { + fun goBack(interact: SettingsSubMenuLoginsAndPasswordRobot.() -> Unit): SettingsSubMenuLoginsAndPasswordRobot.Transition { + goBackButton().perform(ViewActions.click()) + + SettingsSubMenuLoginsAndPasswordRobot().interact() + return SettingsSubMenuLoginsAndPasswordRobot.Transition() + } + } +} + +private fun goBackButton() = + onView(CoreMatchers.allOf(ViewMatchers.withContentDescription("Navigate up"))) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordRobot.kt index ee28ffc8b..fef4f2be1 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordRobot.kt @@ -65,6 +65,14 @@ class SettingsSubMenuLoginsAndPasswordRobot { SettingsTurnOnSyncRobot().interact() return SettingsTurnOnSyncRobot.Transition() } + + fun saveLoginsAndPasswordsOptions(interact: SettingsSubMenuLoginsAndPasswordOptionsToSaveRobot.() -> Unit): SettingsSubMenuLoginsAndPasswordOptionsToSaveRobot.Transition { + fun saveLoginsAndPasswordButton() = onView(ViewMatchers.withText("Save logins and passwords")) + saveLoginsAndPasswordButton().click() + + SettingsSubMenuLoginsAndPasswordOptionsToSaveRobot().interact() + return SettingsSubMenuLoginsAndPasswordOptionsToSaveRobot.Transition() + } } } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordsSavedLoginsRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordsSavedLoginsRobot.kt index 1040b4791..83ac1f47f 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordsSavedLoginsRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordsSavedLoginsRobot.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.ui.robots import androidx.test.espresso.Espresso.onView import androidx.test.espresso.action.ViewActions +import androidx.test.espresso.assertion.ViewAssertions import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.matcher.ViewMatchers import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility @@ -29,6 +30,11 @@ class SettingsSubMenuLoginsAndPasswordsSavedLoginsRobot { fun tapSetupLater() = onView(ViewMatchers.withText("Later")).perform(ViewActions.click()) + fun verifySavedLoginFromPrompt() = mDevice.waitNotNull(Until.findObjects(By.text("test@example.com"))) + + fun verifyNotSavedLoginFromPromt() = onView(ViewMatchers.withText("test@example.com")) + .check(ViewAssertions.doesNotExist()) + class Transition { fun goBack(interact: SettingsSubMenuLoginsAndPasswordRobot.() -> Unit): SettingsSubMenuLoginsAndPasswordRobot.Transition { goBackButton().perform(ViewActions.click())