Fix broken tests (#406)
* Correct Home Activity Test to prevent crashing * Fix broken tests * Fix tests
This commit is contained in:
parent
5b540dbc38
commit
288970483b
@ -7,23 +7,20 @@ import androidx.test.espresso.Espresso.onView
|
|||||||
import androidx.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu
|
import androidx.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu
|
||||||
import androidx.test.espresso.action.ViewActions.click
|
import androidx.test.espresso.action.ViewActions.click
|
||||||
import androidx.test.espresso.action.ViewActions.closeSoftKeyboard
|
import androidx.test.espresso.action.ViewActions.closeSoftKeyboard
|
||||||
import androidx.test.espresso.action.ViewActions.pressBack
|
|
||||||
import androidx.test.espresso.action.ViewActions.pressKey
|
import androidx.test.espresso.action.ViewActions.pressKey
|
||||||
import androidx.test.espresso.action.ViewActions.typeText
|
import androidx.test.espresso.action.ViewActions.typeText
|
||||||
import androidx.test.espresso.assertion.ViewAssertions.matches
|
import androidx.test.espresso.assertion.ViewAssertions.matches
|
||||||
import androidx.test.espresso.contrib.DrawerActions
|
|
||||||
import androidx.test.espresso.intent.Intents
|
import androidx.test.espresso.intent.Intents
|
||||||
import androidx.test.espresso.intent.Intents.intended
|
import androidx.test.espresso.intent.Intents.intended
|
||||||
import androidx.test.espresso.intent.Intents.times
|
|
||||||
import androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent
|
import androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent
|
||||||
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
|
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
|
||||||
import androidx.test.espresso.matcher.ViewMatchers.isRoot
|
|
||||||
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
|
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
|
||||||
import androidx.test.espresso.matcher.ViewMatchers.withId
|
import androidx.test.espresso.matcher.ViewMatchers.withId
|
||||||
import androidx.test.espresso.matcher.ViewMatchers.withText
|
import androidx.test.espresso.matcher.ViewMatchers.withText
|
||||||
import androidx.test.rule.ActivityTestRule
|
import androidx.test.rule.ActivityTestRule
|
||||||
import androidx.test.runner.AndroidJUnit4
|
import androidx.test.runner.AndroidJUnit4
|
||||||
import android.view.KeyEvent
|
import android.view.KeyEvent
|
||||||
|
import androidx.test.espresso.matcher.RootMatchers.isDialog
|
||||||
import apps.amine.bou.readerforselfoss.utils.Config
|
import apps.amine.bou.readerforselfoss.utils.Config
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
@ -84,11 +81,14 @@ class HomeActivityEspressoTest {
|
|||||||
onView(withMenu(id = R.id.refresh, titleId = R.string.menu_home_refresh))
|
onView(withMenu(id = R.id.refresh, titleId = R.string.menu_home_refresh))
|
||||||
.perform(click())
|
.perform(click())
|
||||||
|
|
||||||
|
onView(withText(android.R.string.ok))
|
||||||
|
.inRoot(isDialog()).check(matches(isDisplayed())).perform(click())
|
||||||
|
|
||||||
openActionBarOverflowOrOptionsMenu(context)
|
openActionBarOverflowOrOptionsMenu(context)
|
||||||
|
|
||||||
onView(withText(R.string.action_disconnect)).perform(click())
|
onView(withText(R.string.action_disconnect)).perform(click())
|
||||||
|
|
||||||
intended(hasComponent(LoginActivity::class.java.name), times(1))
|
intended(hasComponent(LoginActivity::class.java.name))
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: test articles opening and actions for cards and lists
|
// TODO: test articles opening and actions for cards and lists
|
||||||
|
@ -85,7 +85,7 @@ class LoginActivityEspressoTest {
|
|||||||
|
|
||||||
onView(withId(R.id.signInButton)).perform(click())
|
onView(withId(R.id.signInButton)).perform(click())
|
||||||
|
|
||||||
onView(withId(R.id.urlLayout)).check(matches(isHintOrErrorEnabled()))
|
onView(withId(R.id.urlView)).check(matches(isHintOrErrorEnabled()))
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Add tests for multiple false urls with dialog
|
// TODO: Add tests for multiple false urls with dialog
|
||||||
@ -101,19 +101,19 @@ class LoginActivityEspressoTest {
|
|||||||
|
|
||||||
onView(withId(R.id.signInButton)).perform(click())
|
onView(withId(R.id.signInButton)).perform(click())
|
||||||
|
|
||||||
onView(withId(R.id.loginLayout)).check(matches(isHintOrErrorEnabled()))
|
onView(withId(R.id.loginView)).check(matches(isHintOrErrorEnabled()))
|
||||||
onView(withId(R.id.passwordLayout)).check(matches(isHintOrErrorEnabled()))
|
onView(withId(R.id.passwordView)).check(matches(isHintOrErrorEnabled()))
|
||||||
|
|
||||||
onView(withId(R.id.loginView)).perform(click()).perform(
|
onView(withId(R.id.loginView)).perform(click()).perform(
|
||||||
typeText(username),
|
typeText(username),
|
||||||
closeSoftKeyboard()
|
closeSoftKeyboard()
|
||||||
)
|
)
|
||||||
|
|
||||||
onView(withId(R.id.passwordLayout)).check(matches(isHintOrErrorEnabled()))
|
onView(withId(R.id.passwordView)).check(matches(isHintOrErrorEnabled()))
|
||||||
|
|
||||||
onView(withId(R.id.signInButton)).perform(click())
|
onView(withId(R.id.signInButton)).perform(click())
|
||||||
|
|
||||||
onView(withId(R.id.passwordLayout)).check(
|
onView(withId(R.id.passwordView)).check(
|
||||||
matches(
|
matches(
|
||||||
isHintOrErrorEnabled()
|
isHintOrErrorEnabled()
|
||||||
)
|
)
|
||||||
@ -141,9 +141,9 @@ class LoginActivityEspressoTest {
|
|||||||
|
|
||||||
onView(withId(R.id.signInButton)).perform(click())
|
onView(withId(R.id.signInButton)).perform(click())
|
||||||
|
|
||||||
onView(withId(R.id.urlLayout)).check(matches(isHintOrErrorEnabled()))
|
onView(withId(R.id.urlView)).check(matches(isHintOrErrorEnabled()))
|
||||||
onView(withId(R.id.loginLayout)).check(matches(isHintOrErrorEnabled()))
|
onView(withId(R.id.loginView)).check(matches(isHintOrErrorEnabled()))
|
||||||
onView(withId(R.id.passwordLayout)).check(matches(isHintOrErrorEnabled()))
|
onView(withId(R.id.passwordView)).check(matches(isHintOrErrorEnabled()))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -167,6 +167,7 @@ class LoginActivityEspressoTest {
|
|||||||
|
|
||||||
onView(withId(R.id.signInButton)).perform(click())
|
onView(withId(R.id.signInButton)).perform(click())
|
||||||
|
|
||||||
|
Thread.sleep(2000)
|
||||||
intended(hasComponent(HomeActivity::class.java.name))
|
intended(hasComponent(HomeActivity::class.java.name))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package apps.amine.bou.readerforselfoss
|
package apps.amine.bou.readerforselfoss
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.preference.PreferenceManager
|
import android.preference.PreferenceManager
|
||||||
@ -10,6 +11,7 @@ import androidx.test.espresso.intent.Intents.times
|
|||||||
import androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent
|
import androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent
|
||||||
import androidx.test.rule.ActivityTestRule
|
import androidx.test.rule.ActivityTestRule
|
||||||
import androidx.test.runner.AndroidJUnit4
|
import androidx.test.runner.AndroidJUnit4
|
||||||
|
import apps.amine.bou.readerforselfoss.utils.Config
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
|
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
@ -22,6 +24,9 @@ class MainActivityEspressoTest {
|
|||||||
|
|
||||||
lateinit var intent: Intent
|
lateinit var intent: Intent
|
||||||
lateinit var preferencesEditor: SharedPreferences.Editor
|
lateinit var preferencesEditor: SharedPreferences.Editor
|
||||||
|
private lateinit var url: String
|
||||||
|
private lateinit var username: String
|
||||||
|
private lateinit var password: String
|
||||||
|
|
||||||
@Rule @JvmField
|
@Rule @JvmField
|
||||||
val rule = ActivityTestRule(MainActivity::class.java, true, false)
|
val rule = ActivityTestRule(MainActivity::class.java, true, false)
|
||||||
@ -32,31 +37,39 @@ class MainActivityEspressoTest {
|
|||||||
val context = getInstrumentation().targetContext
|
val context = getInstrumentation().targetContext
|
||||||
|
|
||||||
// create a SharedPreferences editor
|
// create a SharedPreferences editor
|
||||||
preferencesEditor = PreferenceManager.getDefaultSharedPreferences(context).edit()
|
preferencesEditor = context.getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE).edit()
|
||||||
|
|
||||||
|
url = BuildConfig.LOGIN_URL
|
||||||
|
username = BuildConfig.LOGIN_USERNAME
|
||||||
|
password = BuildConfig.LOGIN_PASSWORD
|
||||||
|
|
||||||
Intents.init()
|
Intents.init()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun checkFirstOpenLaunchesIntro() {
|
fun checkFirstOpenLaunchesIntro() {
|
||||||
preferencesEditor.putBoolean("firstStart", true)
|
preferencesEditor.putString("url", "")
|
||||||
|
preferencesEditor.putString("password", "")
|
||||||
|
preferencesEditor.putString("login", "")
|
||||||
preferencesEditor.commit()
|
preferencesEditor.commit()
|
||||||
|
|
||||||
rule.launchActivity(intent)
|
rule.launchActivity(intent)
|
||||||
|
|
||||||
intended(hasComponent(MainActivity::class.java.name))
|
intended(hasComponent(LoginActivity::class.java.name))
|
||||||
intended(hasComponent(LoginActivity::class.java.name), times(0))
|
intended(hasComponent(HomeActivity::class.java.name), times(0))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun checkNotFirstOpenLaunchesLogin() {
|
fun checkNotFirstOpenLaunchesLogin() {
|
||||||
preferencesEditor.putBoolean("firstStart", false)
|
preferencesEditor.putString("url", url)
|
||||||
|
preferencesEditor.putString("password", password)
|
||||||
|
preferencesEditor.putString("login", username)
|
||||||
preferencesEditor.commit()
|
preferencesEditor.commit()
|
||||||
|
|
||||||
rule.launchActivity(intent)
|
rule.launchActivity(intent)
|
||||||
|
|
||||||
intended(hasComponent(MainActivity::class.java.name))
|
intended(hasComponent(MainActivity::class.java.name))
|
||||||
intended(hasComponent(LoginActivity::class.java.name))
|
intended(hasComponent(HomeActivity::class.java.name))
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package apps.amine.bou.readerforselfoss
|
package apps.amine.bou.readerforselfoss
|
||||||
|
|
||||||
import com.google.android.material.textfield.TextInputLayout
|
|
||||||
import androidx.test.espresso.matcher.ViewMatchers
|
import androidx.test.espresso.matcher.ViewMatchers
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.widget.EditText
|
||||||
import org.hamcrest.Description
|
import org.hamcrest.Description
|
||||||
import org.hamcrest.Matcher
|
import org.hamcrest.Matcher
|
||||||
import org.hamcrest.Matchers
|
import org.hamcrest.Matchers
|
||||||
@ -14,11 +14,11 @@ fun isHintOrErrorEnabled(): Matcher<View> =
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun matchesSafely(item: View?): Boolean {
|
override fun matchesSafely(item: View?): Boolean {
|
||||||
if (item !is TextInputLayout) {
|
if (item !is EditText) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
return item.isHintEnabled || item.isErrorEnabled
|
return item.error.isNotEmpty()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
package apps.amine.bou.readerforselfoss
|
package apps.amine.bou.readerforselfoss.utils
|
||||||
|
|
||||||
import apps.amine.bou.readerforselfoss.utils.Config
|
|
||||||
import apps.amine.bou.readerforselfoss.utils.parseDate
|
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class DateUtilsTest {
|
class DateUtilsTest {
|
Loading…
Reference in New Issue
Block a user