Skip to content

Commit 911805d

Browse files
committed
test(applock): add comprehensive test suite
1 parent ea94594 commit 911805d

File tree

11 files changed

+2043
-0
lines changed

11 files changed

+2043
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package net.thunderbird.app.common.feature.applock
2+
3+
import android.app.Activity
4+
import android.os.Build
5+
import androidx.fragment.app.FragmentActivity
6+
import assertk.assertThat
7+
import assertk.assertions.isEmpty
8+
import assertk.assertions.isEqualTo
9+
import assertk.assertions.single
10+
import net.thunderbird.core.android.testing.RobolectricTest
11+
import net.thunderbird.feature.applock.api.AppLockGate
12+
import org.junit.Test
13+
import org.robolectric.Robolectric
14+
import org.robolectric.annotation.Config
15+
16+
@Config(sdk = [Build.VERSION_CODES.TIRAMISU])
17+
class AppLockActivityLifecycleCallbacksTest : RobolectricTest() {
18+
19+
@Test
20+
fun `should not crash when factory is null`() {
21+
val testSubject = AppLockActivityLifecycleCallbacks(gateFactory = null)
22+
val activity = Robolectric.buildActivity(FragmentActivity::class.java).create().get()
23+
24+
testSubject.onActivityCreated(activity, null)
25+
}
26+
27+
@Test
28+
fun `should create gate for FragmentActivity`() {
29+
val fakeFactory = FakeAppLockGateFactory()
30+
val testSubject = AppLockActivityLifecycleCallbacks(gateFactory = fakeFactory)
31+
val activity = Robolectric.buildActivity(FragmentActivity::class.java).create().get()
32+
33+
testSubject.onActivityCreated(activity, null)
34+
35+
assertThat(fakeFactory.createdActivities).single().isEqualTo(activity)
36+
}
37+
38+
@Test
39+
fun `should not create gate for plain Activity`() {
40+
val fakeFactory = FakeAppLockGateFactory()
41+
val testSubject = AppLockActivityLifecycleCallbacks(gateFactory = fakeFactory)
42+
val activity = Robolectric.buildActivity(Activity::class.java).create().get()
43+
44+
testSubject.onActivityCreated(activity, null)
45+
46+
assertThat(fakeFactory.createdActivities).isEmpty()
47+
}
48+
49+
private class FakeAppLockGateFactory : AppLockGate.Factory {
50+
val createdActivities = mutableListOf<FragmentActivity>()
51+
52+
override fun create(activity: FragmentActivity): AppLockGate {
53+
createdActivities.add(activity)
54+
return FakeAppLockGate()
55+
}
56+
}
57+
58+
private class FakeAppLockGate : AppLockGate
59+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package net.thunderbird.feature.applock.impl.data
2+
3+
import android.os.Build
4+
import androidx.test.core.app.ApplicationProvider
5+
import assertk.assertThat
6+
import assertk.assertions.isEqualTo
7+
import assertk.assertions.isFalse
8+
import assertk.assertions.isTrue
9+
import net.thunderbird.feature.applock.api.AppLockConfig
10+
import org.junit.Test
11+
import org.junit.runner.RunWith
12+
import org.robolectric.RobolectricTestRunner
13+
import org.robolectric.annotation.Config
14+
15+
@RunWith(RobolectricTestRunner::class)
16+
@Config(sdk = [Build.VERSION_CODES.TIRAMISU])
17+
class AppLockConfigStoreTest {
18+
19+
private val testSubject = AppLockConfigStore(ApplicationProvider.getApplicationContext())
20+
21+
@Test
22+
fun `should return default config when nothing is stored`() {
23+
val config = testSubject.getConfig()
24+
25+
assertThat(config.isEnabled).isFalse()
26+
assertThat(config.timeoutMillis).isEqualTo(AppLockConfig.DEFAULT_TIMEOUT_MILLIS)
27+
}
28+
29+
@Test
30+
fun `should persist and retrieve enabled state`() {
31+
testSubject.setConfig(AppLockConfig(isEnabled = true))
32+
33+
val config = testSubject.getConfig()
34+
35+
assertThat(config.isEnabled).isTrue()
36+
}
37+
38+
@Test
39+
fun `should persist and retrieve timeout`() {
40+
testSubject.setConfig(AppLockConfig(timeoutMillis = 60_000L))
41+
42+
val config = testSubject.getConfig()
43+
44+
assertThat(config.timeoutMillis).isEqualTo(60_000L)
45+
}
46+
47+
@Test
48+
fun `should persist and retrieve full config`() {
49+
val expected = AppLockConfig(isEnabled = true, timeoutMillis = 120_000L)
50+
51+
testSubject.setConfig(expected)
52+
53+
assertThat(testSubject.getConfig()).isEqualTo(expected)
54+
}
55+
56+
@Test
57+
fun `should overwrite previous config`() {
58+
testSubject.setConfig(AppLockConfig(isEnabled = true, timeoutMillis = 60_000L))
59+
testSubject.setConfig(AppLockConfig(isEnabled = false, timeoutMillis = 30_000L))
60+
61+
val config = testSubject.getConfig()
62+
63+
assertThat(config.isEnabled).isFalse()
64+
assertThat(config.timeoutMillis).isEqualTo(30_000L)
65+
}
66+
}

0 commit comments

Comments
 (0)