-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from wojta/auth-test
Aerogear Android SDK Login and logout flow
- Loading branch information
Showing
17 changed files
with
282 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -29,9 +29,6 @@ allprojects { | |
} | ||
} | ||
|
||
|
||
|
||
|
||
task clean(type: Delete) { | ||
delete rootProject.buildDir | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
32 changes: 32 additions & 0 deletions
32
sdk-e2e/src/test/kotlin/org/aerogear/sdk_e2e_tests/Utils.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
package org.aerogear.sdk_e2e_tests | ||
|
||
import java.io.BufferedReader | ||
|
||
/** | ||
* Created on 1/19/18. | ||
*/ | ||
|
||
/** | ||
* Kills android process with [packageName] on connected ADB device. | ||
*/ | ||
fun killAndroidProcess(packageName: String) { | ||
execWithoutOutput(BuildConfig.ADB_EXECUTABLE, "shell", "am", "force-stop", packageName) | ||
} | ||
|
||
/** | ||
* Clears android package data of application with [packageName] on connected ADB device. | ||
*/ | ||
fun clearPackage(packageName: String) { | ||
execWithoutOutput(BuildConfig.ADB_EXECUTABLE, "shell", "pm", "clear", packageName) | ||
} | ||
|
||
/** | ||
* Executes shell command and ignores output. | ||
* @param cmd shell command | ||
* @param args command arguments | ||
*/ | ||
private fun execWithoutOutput(vararg args: String) { | ||
val p = Runtime.getRuntime().exec(args) | ||
val out = p.inputStream.bufferedReader().use(BufferedReader::readText) //there is actually no output expected, so read it all and ignore to prevent hanging | ||
println(out) | ||
} |
4 changes: 2 additions & 2 deletions
4
sdk-e2e/src/test/kotlin/org/aerogear/sdk_e2e_tests/base/BaseTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
19 changes: 19 additions & 0 deletions
19
sdk-e2e/src/test/kotlin/org/aerogear/sdk_e2e_tests/pageobjects/AuthStartScreen.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package org.aerogear.sdk_e2e_tests.pageobjects | ||
|
||
import org.aerogear.akow.pageobject.PageObject | ||
import org.openqa.selenium.WebElement | ||
|
||
/** | ||
* Authentication functionality screen | ||
*/ | ||
interface AuthStartScreen : PageObject { | ||
val loginButton: WebElement | ||
|
||
|
||
/** | ||
* Starts login flow. | ||
*/ | ||
fun startLogin() { | ||
loginButton.click() | ||
} | ||
} |
12 changes: 12 additions & 0 deletions
12
sdk-e2e/src/test/kotlin/org/aerogear/sdk_e2e_tests/pageobjects/AuthenticatedScreen.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package org.aerogear.sdk_e2e_tests.pageobjects | ||
|
||
import org.aerogear.akow.pageobject.PageObject | ||
import org.openqa.selenium.WebElement | ||
|
||
/** | ||
* Screen representing authenticated user. | ||
*/ | ||
interface AuthenticatedScreen : PageObject { | ||
val logoutButton: WebElement | ||
val userNameTextBox:WebElement | ||
} |
29 changes: 29 additions & 0 deletions
29
sdk-e2e/src/test/kotlin/org/aerogear/sdk_e2e_tests/pageobjects/KeycloakLoginScreen.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
package org.aerogear.sdk_e2e_tests.pageobjects | ||
|
||
import org.aerogear.akow.pageobject.PageObject | ||
import org.openqa.selenium.WebElement | ||
|
||
/** | ||
* Keycloak login screen. | ||
*/ | ||
interface KeycloakLoginScreen : PageObject { | ||
val usernameInput: WebElement | ||
val passwordInput: WebElement | ||
val loginButton: WebElement | ||
|
||
/** | ||
* Logs in with [username] and [password]. | ||
*/ | ||
fun login(username: String, password: String) { | ||
usernameInput.apply { | ||
click() | ||
sendKeys(username) | ||
} | ||
passwordInput.apply { | ||
click() | ||
sendKeys(password) | ||
} | ||
loginButton.click() | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
11 changes: 11 additions & 0 deletions
11
.../src/test/kotlin/org/aerogear/sdk_e2e_tests/pageobjects/android/AuthStartAndroidScreen.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package org.aerogear.sdk_e2e_tests.pageobjects.android | ||
|
||
import org.aerogear.akow.pageobject.AndroidScreen | ||
import org.aerogear.sdk_e2e_tests.pageobjects.AuthStartScreen | ||
|
||
/** | ||
* Authentication start screen for Android | ||
*/ | ||
class AuthStartAndroidScreen : AuthStartScreen, AndroidScreen() { | ||
override val loginButton by id("org.aerogear.mobile.example:id/keycloak_login") | ||
} |
12 changes: 12 additions & 0 deletions
12
.../test/kotlin/org/aerogear/sdk_e2e_tests/pageobjects/android/AuthenticatedAndroidScreen.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package org.aerogear.sdk_e2e_tests.pageobjects.android | ||
|
||
import org.aerogear.akow.pageobject.AndroidScreen | ||
import org.aerogear.sdk_e2e_tests.pageobjects.AuthenticatedScreen | ||
|
||
/** | ||
* Created on 3/7/18. | ||
*/ | ||
class AuthenticatedAndroidScreen : AuthenticatedScreen,AndroidScreen() { | ||
override val logoutButton by id ("org.aerogear.mobile.example:id/keycloak_logout") | ||
override val userNameTextBox by id("org.aerogear.mobile.example:id/user_name") | ||
} |
13 changes: 13 additions & 0 deletions
13
.../test/kotlin/org/aerogear/sdk_e2e_tests/pageobjects/android/KeycloakLoginAndroidScreen.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package org.aerogear.sdk_e2e_tests.pageobjects.android | ||
|
||
import org.aerogear.akow.pageobject.AndroidScreen | ||
import org.aerogear.sdk_e2e_tests.pageobjects.KeycloakLoginScreen | ||
|
||
/** | ||
* Created on 3/7/18. | ||
*/ | ||
class KeycloakLoginAndroidScreen : KeycloakLoginScreen,AndroidScreen() { | ||
override val usernameInput by id("username") | ||
override val passwordInput by id("password") | ||
override val loginButton by id("kc-login") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
31 changes: 31 additions & 0 deletions
31
...e/src/test/kotlin/org/aerogear/sdk_e2e_tests/pageobjects/unimportant/ChromeIntroScreen.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
package org.aerogear.sdk_e2e_tests.pageobjects.unimportant | ||
|
||
import io.appium.java_client.MobileElement | ||
import io.appium.java_client.android.AndroidDriver | ||
import org.aerogear.akow.pageobject.AndroidScreen | ||
import org.aerogear.akow.pageobject.PageObject | ||
import org.openqa.selenium.WebElement | ||
|
||
/** | ||
* Chrome intro screen that pops up on Android. | ||
*/ | ||
interface ChromeIntroScreen : PageObject { | ||
val title: WebElement | ||
val acceptButton: WebElement | ||
val noThanksButton: WebElement | ||
|
||
fun acceptNoThanks() { | ||
val oldContext=(driver as AndroidDriver<MobileElement>).context | ||
acceptButton.click() | ||
(driver as AndroidDriver<MobileElement>).context(oldContext) | ||
noThanksButton.click() | ||
} | ||
|
||
override fun checkScreen() = title.text.isNotEmpty() | ||
} | ||
|
||
class ChromeIntroAndroidScreen : ChromeIntroScreen, AndroidScreen() { | ||
override val title by id("com.android.chrome:id/title") | ||
override val acceptButton by id("com.android.chrome:id/terms_accept") | ||
override val noThanksButton by id("com.android.chrome:id/negative_button") | ||
} |
23 changes: 23 additions & 0 deletions
23
sdk-e2e/src/test/kotlin/org/aerogear/sdk_e2e_tests/pageobjects/unimportant/SetPINDialog.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package org.aerogear.sdk_e2e_tests.pageobjects.unimportant | ||
|
||
import org.aerogear.akow.pageobject.AndroidScreen | ||
import org.aerogear.akow.pageobject.PageObject | ||
import org.openqa.selenium.WebElement | ||
|
||
/** | ||
* Fingerprint dialog shown in Chrome on Android. | ||
*/ | ||
interface SetPINDialogScreen : PageObject { | ||
val alertTitle: WebElement | ||
val cancelButton: WebElement | ||
|
||
override fun checkScreen() = alertTitle.text.isNotEmpty() | ||
|
||
fun cancel() = cancelButton.click() | ||
} | ||
|
||
class SetPINDialogAndroidScreen : SetPINDialogScreen, AndroidScreen() { | ||
override val alertTitle by id("android:id/alertTitle") | ||
override val cancelButton by id("android:id/button2") | ||
|
||
} |
69 changes: 69 additions & 0 deletions
69
sdk-e2e/src/test/kotlin/org/aerogear/sdk_e2e_tests/tests/AuthTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
package org.aerogear.sdk_e2e_tests.tests | ||
|
||
import org.aerogear.akow.example.test.pageobjects.MainScreen | ||
import org.aerogear.sdk_e2e_tests.BuildConfig | ||
import org.aerogear.sdk_e2e_tests.base.BaseTest | ||
import org.aerogear.sdk_e2e_tests.clearPackage | ||
import org.aerogear.sdk_e2e_tests.pageobjects.AuthStartScreen | ||
import org.aerogear.sdk_e2e_tests.pageobjects.AuthenticatedScreen | ||
import org.aerogear.sdk_e2e_tests.pageobjects.KeycloakLoginScreen | ||
import org.aerogear.sdk_e2e_tests.pageobjects.unimportant.ChromeIntroScreen | ||
import org.aerogear.sdk_e2e_tests.pageobjects.unimportant.SetPINDialogScreen | ||
import org.junit.Before | ||
import org.junit.Test | ||
import org.junit.runner.RunWith | ||
import org.junit.runners.Parameterized | ||
import kotlin.test.assertEquals | ||
|
||
/** | ||
* Test functionality of Auth module through Example app. | ||
*/ | ||
@RunWith(Parameterized::class) | ||
class AuthTest : BaseTest() { | ||
|
||
private val USERNAME = "user1" | ||
private val PASSWORD = "123" | ||
|
||
/** | ||
* Required to prevent reauthentication with remembered session. | ||
*/ | ||
@Before | ||
fun killBrowserBeforehand() { | ||
clearPackage(BuildConfig.BROWSER_PACKAGE) | ||
} | ||
|
||
@Test | ||
fun testLoginAndLogout() { | ||
akow { | ||
on<MainScreen> { | ||
selectNavigationItem(mnuAuth) | ||
|
||
on<AuthStartScreen> { | ||
startLogin() | ||
} | ||
|
||
androidOnly { | ||
maybeOn<ChromeIntroScreen> { acceptNoThanks() } | ||
maybeOn<SetPINDialogScreen> { cancel() } | ||
} | ||
|
||
on<KeycloakLoginScreen> { | ||
login(USERNAME, PASSWORD) | ||
} | ||
|
||
on<AuthenticatedScreen> { | ||
assertEquals("User 1", userNameTextBox.text) | ||
} | ||
|
||
selectNavigationItem(mnuHome) | ||
|
||
selectNavigationItem(mnuAuth) | ||
|
||
on<AuthenticatedScreen> { | ||
assertEquals("User 1", userNameTextBox.text) | ||
logoutButton.click() | ||
} | ||
} | ||
} | ||
} | ||
} |
Oops, something went wrong.