Skip to content
This repository was archived by the owner on Jun 20, 2023. It is now read-only.

Commit c5eb675

Browse files
committed
Merge branch 'release/2.28.x' into release/2.29.x
2 parents 94d948e + bf47cab commit c5eb675

File tree

3 files changed

+74
-16
lines changed

3 files changed

+74
-16
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,25 @@
11
package de.rki.coronawarnapp.installTime
22

3-
import android.content.Context
4-
import de.rki.coronawarnapp.util.di.AppContext
3+
import de.rki.coronawarnapp.util.TimeStamper
4+
import de.rki.coronawarnapp.util.di.AppInstallTime
55
import de.rki.coronawarnapp.util.toLocalDateUserTz
66
import java.time.Instant
77
import java.time.LocalDate
8-
import java.time.Period
8+
import java.time.temporal.ChronoUnit
99

1010
import javax.inject.Inject
1111
import javax.inject.Singleton
1212

1313
@Singleton
1414
class InstallTimeProvider @Inject constructor(
15-
@AppContext private val context: Context
15+
@AppInstallTime private val installTime: Instant,
16+
private val timeStamper: TimeStamper
1617
) {
17-
private val dayOfInstallation: LocalDate = Instant.ofEpochMilli(
18-
context
19-
.packageManager
20-
.getPackageInfo(context.packageName, 0)
21-
.firstInstallTime
22-
)
23-
.toLocalDateUserTz()
18+
private val dayOfInstallation = installTime.toLocalDateUserTz()
2419

2520
val today: LocalDate
26-
get() = Instant.now().toLocalDateUserTz()
21+
get() = timeStamper.nowUTC.toLocalDateUserTz()
2722

2823
val daysSinceInstallation: Int
29-
get() = Period.between(dayOfInstallation, today).days
24+
get() = ChronoUnit.DAYS.between(dayOfInstallation, today).toInt()
3025
}

Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/di/AndroidModule.kt

+6-3
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,12 @@ class AndroidModule {
4040
@Provides
4141
@AppInstallTime
4242
fun installTime(@AppContext context: Context): Instant =
43-
context.packageManager.getPackageInfo(context.packageName, 0).firstInstallTime.run {
44-
Instant.ofEpochMilli(this)
45-
}
43+
context
44+
.packageManager
45+
.getPackageInfo(context.packageName, 0)
46+
.firstInstallTime.run {
47+
Instant.ofEpochMilli(this)
48+
}
4649

4750
@Suppress("DEPRECATION")
4851
@Provides
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package de.rki.coronawarnapp.installTime
2+
3+
import de.rki.coronawarnapp.util.TimeStamper
4+
import io.kotest.matchers.shouldBe
5+
import io.mockk.MockKAnnotations
6+
import io.mockk.every
7+
import io.mockk.impl.annotations.MockK
8+
import org.junit.jupiter.api.BeforeEach
9+
import org.junit.jupiter.api.Test
10+
import testhelpers.BaseTest
11+
import java.time.Instant
12+
13+
internal class InstallTimeProviderTest : BaseTest() {
14+
@MockK lateinit var timeStamper: TimeStamper
15+
16+
@BeforeEach
17+
fun setup() {
18+
MockKAnnotations.init(this)
19+
}
20+
21+
@Test
22+
fun `Days since installation across years`() {
23+
every { timeStamper.nowUTC } returns Instant.parse("2022-11-03T05:35:16.000Z")
24+
25+
InstallTimeProvider(
26+
installTime = Instant.parse("2020-11-03T05:35:16.000Z"),
27+
timeStamper = timeStamper
28+
).daysSinceInstallation shouldBe 730
29+
}
30+
31+
@Test
32+
fun `Days since installation across months`() {
33+
every { timeStamper.nowUTC } returns Instant.parse("2020-12-03T05:35:16.000Z")
34+
35+
InstallTimeProvider(
36+
installTime = Instant.parse("2020-11-03T05:35:16.000Z"),
37+
timeStamper = timeStamper
38+
).daysSinceInstallation shouldBe 30
39+
}
40+
41+
@Test
42+
fun `Days since installation across days`() {
43+
every { timeStamper.nowUTC } returns Instant.parse("2022-11-03T05:35:16.000Z")
44+
45+
InstallTimeProvider(
46+
installTime = Instant.parse("2022-10-24T05:35:16.000Z"),
47+
timeStamper = timeStamper
48+
).daysSinceInstallation shouldBe 10
49+
}
50+
51+
@Test
52+
fun `Days since installation same day`() {
53+
every { timeStamper.nowUTC } returns Instant.parse("2022-11-03T18:35:16.000Z")
54+
55+
InstallTimeProvider(
56+
installTime = Instant.parse("2022-11-03T05:35:16.000Z"),
57+
timeStamper = timeStamper
58+
).daysSinceInstallation shouldBe 0
59+
}
60+
}

0 commit comments

Comments
 (0)