Browse Source

PasscodeManagerIT: use actual actitivy for test

Can't mock PowerManager on Android < 9

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
Álvaro Brey 2 năm trước cách đây
mục cha
commit
81db4f7b54

+ 15 - 23
app/src/androidTest/java/com/owncloud/android/authentication/PassCodeManagerIT.kt

@@ -22,17 +22,14 @@
 
 package com.owncloud.android.authentication
 
-import android.app.Activity
-import android.os.PowerManager
+import androidx.test.core.app.launchActivity
+import com.nextcloud.client.TestActivity
 import com.nextcloud.client.core.Clock
 import com.nextcloud.client.preferences.AppPreferences
 import com.owncloud.android.ui.activity.SettingsActivity
 import io.mockk.MockKAnnotations
 import io.mockk.every
 import io.mockk.impl.annotations.MockK
-import io.mockk.just
-import io.mockk.mockk
-import io.mockk.runs
 import org.junit.Assert.assertTrue
 import org.junit.Before
 import org.junit.Test
@@ -58,30 +55,25 @@ class PassCodeManagerIT {
 
     @Test
     fun testResumeDuplicateActivity() {
-        // mock activity instead of using real one to avoid dealing with activity transitions
-        val activity: Activity = mockk()
-        val powerManager: PowerManager = mockk()
-        every { powerManager.isScreenOn } returns true
-        every { activity.getSystemService(Activity.POWER_SERVICE) } returns powerManager
-        every { activity.window } returns null
-        every { activity.startActivityForResult(any(), any()) } just runs
-        every { activity.moveTaskToBack(any()) } returns true
-
         // set locked state
         every { appPreferences.lockPreference } returns SettingsActivity.LOCK_PASSCODE
         every { appPreferences.lockTimestamp } returns 200
         every { clockImpl.millisSinceBoot } returns 10000
 
-        // resume activity twice
-        var askedForPin = sut.onActivityResumed(activity)
-        assertTrue("Passcode not requested on first launch", askedForPin)
-        sut.onActivityResumed(activity)
+        launchActivity<TestActivity>().use { scenario ->
+            scenario.onActivity { activity ->
+                // resume activity twice
+                var askedForPin = sut.onActivityResumed(activity)
+                assertTrue("Passcode not requested on first launch", askedForPin)
+                sut.onActivityResumed(activity)
 
-        // stop it once
-        sut.onActivityStopped(activity)
+                // stop it once
+                sut.onActivityStopped(activity)
 
-        // resume again. should ask for passcode
-        askedForPin = sut.onActivityResumed(activity)
-        assertTrue("Passcode not requested on subsequent launch after stop", askedForPin)
+                // resume again. should ask for passcode
+                askedForPin = sut.onActivityResumed(activity)
+                assertTrue("Passcode not requested on subsequent launch after stop", askedForPin)
+            }
+        }
     }
 }