From b25cf2ed889bc65e4f4af6eb9d17e4c482048341 Mon Sep 17 00:00:00 2001 From: chris-cwa <69595386+chris-cwa@users.noreply.github.com> Date: Fri, 19 Mar 2021 14:24:13 +0100 Subject: [PATCH] Update check in(EXPOSUREAPP-5886) (#2640) * updated checkin entity * updated checkin entity * satisfying tests, detekt, ktlint, circle-ci, ... * satisfying instrumented tests * fixed more unit tests, removed unnecessary null-check * renamed field * made signature base 64 * fixed tests * fixed signature tests * ktlint * no more use of blob * updated repository * fixed unit tests * fixed instrumented tests * renamed tests * fixed merge conflicts --- .../1.json | 32 ++++++---- .../bugreporting/DebugLogFragmentTest.kt | 3 +- .../storage/CheckInDatabaseData.kt | 14 +++-- .../FragmentTestModuleRegistrar.kt | 2 +- .../eventregistration/checkins/CheckIn.kt | 9 ++- .../checkins/CheckInRepository.kt | 13 ++-- .../checkins/download/CheckInsPackage.kt | 16 +++-- .../checkins/split/CheckInSplitter.kt | 2 +- .../entity/TraceLocationCheckInEntity.kt | 8 ++- .../attendee/checkins/CheckInsViewModel.kt | 16 +++-- .../checkins/CheckInRepositoryTest.kt | 42 ++++++++----- .../DefaultCheckInsTransformerTest.kt | 20 ++++--- .../checkins/split/CheckInSplitterTest.kt | 59 ++++++------------- .../TraceLocationCategoryViewModelTest.kt | 2 +- 14 files changed, 135 insertions(+), 103 deletions(-) diff --git a/Corona-Warn-App/schemas/de.rki.coronawarnapp.eventregistration.storage.TraceLocationDatabase/1.json b/Corona-Warn-App/schemas/de.rki.coronawarnapp.eventregistration.storage.TraceLocationDatabase/1.json index f5c14553b..0c3879814 100644 --- a/Corona-Warn-App/schemas/de.rki.coronawarnapp.eventregistration.storage.TraceLocationDatabase/1.json +++ b/Corona-Warn-App/schemas/de.rki.coronawarnapp.eventregistration.storage.TraceLocationDatabase/1.json @@ -2,11 +2,11 @@ "formatVersion": 1, "database": { "version": 1, - "identityHash": "48d71b0a00d0c7fe01ffe05d5fecb512", + "identityHash": "3130771db80d789cd0ef50b8d24e0354", "entities": [ { "tableName": "checkin", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `guid` TEXT NOT NULL, `version` INTEGER NOT NULL, `type` INTEGER NOT NULL, `description` TEXT NOT NULL, `address` TEXT NOT NULL, `traceLocationStart` TEXT, `traceLocationEnd` TEXT, `defaultCheckInLengthInMinutes` INTEGER, `signature` TEXT NOT NULL, `checkInStart` TEXT NOT NULL, `checkInEnd` TEXT, `targetCheckInEnd` TEXT, `createJournalEntry` INTEGER NOT NULL)", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `guid` TEXT NOT NULL, `guidHash` TEXT NOT NULL, `version` INTEGER NOT NULL, `type` INTEGER NOT NULL, `description` TEXT NOT NULL, `address` TEXT NOT NULL, `traceLocationStart` TEXT, `traceLocationEnd` TEXT, `defaultCheckInLengthInMinutes` INTEGER, `traceLocationBytes` TEXT NOT NULL, `signature` TEXT NOT NULL, `checkInStart` TEXT NOT NULL, `checkInEnd` TEXT NOT NULL, `completed` INTEGER NOT NULL, `createJournalEntry` INTEGER NOT NULL)", "fields": [ { "fieldPath": "id", @@ -20,6 +20,12 @@ "affinity": "TEXT", "notNull": true }, + { + "fieldPath": "guidHashBase64", + "columnName": "guidHash", + "affinity": "TEXT", + "notNull": true + }, { "fieldPath": "version", "columnName": "version", @@ -63,7 +69,13 @@ "notNull": false }, { - "fieldPath": "signature", + "fieldPath": "traceLocationBytesBase64", + "columnName": "traceLocationBytes", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "signatureBase64", "columnName": "signature", "affinity": "TEXT", "notNull": true @@ -78,13 +90,13 @@ "fieldPath": "checkInEnd", "columnName": "checkInEnd", "affinity": "TEXT", - "notNull": false + "notNull": true }, { - "fieldPath": "targetCheckInEnd", - "columnName": "targetCheckInEnd", - "affinity": "TEXT", - "notNull": false + "fieldPath": "completed", + "columnName": "completed", + "affinity": "INTEGER", + "notNull": true }, { "fieldPath": "createJournalEntry", @@ -155,7 +167,7 @@ "notNull": false }, { - "fieldPath": "signature", + "fieldPath": "signatureBase64", "columnName": "signature", "affinity": "TEXT", "notNull": true @@ -174,7 +186,7 @@ "views": [], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '48d71b0a00d0c7fe01ffe05d5fecb512')" + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '3130771db80d789cd0ef50b8d24e0354')" ] } } \ No newline at end of file diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/bugreporting/DebugLogFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/bugreporting/DebugLogFragmentTest.kt index 00b450294..c97a39b0d 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/bugreporting/DebugLogFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/bugreporting/DebugLogFragmentTest.kt @@ -53,7 +53,7 @@ class DebugLogFragmentTest : BaseUITest() { fun setup() { MockKAnnotations.init(this, relaxed = true) inactiveViewModel = setupViewModels(false, 0) - activeViewModel = setupViewModels(true, 9410 ) + activeViewModel = setupViewModels(true, 9410) setupMockViewModel( object : DebugLogViewModel.Factory { @@ -127,4 +127,3 @@ abstract class DebugLogTestModule { @ContributesAndroidInjector abstract fun debugLogFragment(): DebugLogFragment } - diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/eventregistration/storage/CheckInDatabaseData.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/eventregistration/storage/CheckInDatabaseData.kt index 32f3d6094..3434c4b92 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/eventregistration/storage/CheckInDatabaseData.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/eventregistration/storage/CheckInDatabaseData.kt @@ -8,6 +8,7 @@ object CheckInDatabaseData { val testCheckIn = TraceLocationCheckInEntity( guid = "testGuid1", + guidHashBase64 = "", version = 1, type = TraceLocationOuterClass.TraceLocationType.LOCATION_TYPE_TEMPORARY_OTHER.number, description = "testDescription1", @@ -15,15 +16,17 @@ object CheckInDatabaseData { traceLocationStart = Instant.parse("2021-01-01T12:00:00.000Z"), traceLocationEnd = Instant.parse("2021-01-01T15:00:00.000Z"), defaultCheckInLengthInMinutes = 15, - signature = "Signature", + traceLocationBytesBase64 = "", + signatureBase64 = "Signature", checkInStart = Instant.parse("2021-01-01T12:30:00.000Z"), checkInEnd = Instant.parse("2021-01-01T14:00:00.000Z"), - targetCheckInEnd = Instant.parse("2021-01-01T12:45:00.000Z"), + completed = false, createJournalEntry = true ) val testCheckInWithoutCheckOutTime = TraceLocationCheckInEntity( guid = "testGuid2", + guidHashBase64 = "", version = 1, type = TraceLocationOuterClass.TraceLocationType.LOCATION_TYPE_TEMPORARY_OTHER.number, description = "testDescription2", @@ -31,10 +34,11 @@ object CheckInDatabaseData { traceLocationStart = null, traceLocationEnd = null, defaultCheckInLengthInMinutes = null, - signature = "Signature", + traceLocationBytesBase64 = "", + signatureBase64 = "Signature", checkInStart = Instant.parse("2021-01-01T12:30:00.000Z"), - checkInEnd = null, - targetCheckInEnd = Instant.parse("2021-01-01T12:45:00.000Z"), + checkInEnd = Instant.parse("2021-01-01T14:00:00.000Z"), + completed = false, createJournalEntry = true ) } diff --git a/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt b/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt index 46e4496f1..ecb1c406e 100644 --- a/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt +++ b/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt @@ -72,7 +72,7 @@ import de.rki.coronawarnapp.ui.tracing.TracingDetailsFragmentTestTestModule ContactDiaryEditPersonsFragmentTestModule::class, // Statistics StatisticsExplanationFragmentTestModule::class, - //Bugreporting + // Bugreporting DebugLogUploadTestModule::class, DebugLogTestModule::class ] diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/CheckIn.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/CheckIn.kt index 39a15fbce..0c3b0f922 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/CheckIn.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/CheckIn.kt @@ -1,11 +1,13 @@ package de.rki.coronawarnapp.eventregistration.checkins +import okio.ByteString import org.joda.time.Instant @Suppress("LongParameterList") data class CheckIn( val id: Long, val guid: String, + val guidHash: ByteString, val version: Int, val type: Int, val description: String, @@ -13,9 +15,10 @@ data class CheckIn( val traceLocationStart: Instant?, val traceLocationEnd: Instant?, val defaultCheckInLengthInMinutes: Int?, - val signature: String, + val traceLocationBytes: ByteString, + val signature: ByteString, val checkInStart: Instant, - val checkInEnd: Instant?, - val targetCheckInEnd: Instant?, + val checkInEnd: Instant, + val completed: Boolean, val createJournalEntry: Boolean ) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/CheckInRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/CheckInRepository.kt index 248a3c2df..78e830582 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/CheckInRepository.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/CheckInRepository.kt @@ -8,6 +8,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch +import okio.ByteString.Companion.decodeBase64 import javax.inject.Inject class CheckInRepository @Inject constructor( @@ -50,6 +51,7 @@ class CheckInRepository @Inject constructor( private fun TraceLocationCheckInEntity.toCheckIn() = CheckIn( id = id, guid = guid, + guidHash = guidHashBase64.decodeBase64()!!, version = version, type = type, description = description, @@ -57,16 +59,18 @@ private fun TraceLocationCheckInEntity.toCheckIn() = CheckIn( traceLocationStart = traceLocationStart, traceLocationEnd = traceLocationEnd, defaultCheckInLengthInMinutes = defaultCheckInLengthInMinutes, - signature = signature, + traceLocationBytes = traceLocationBytesBase64.decodeBase64()!!, + signature = signatureBase64.decodeBase64()!!, checkInStart = checkInStart, checkInEnd = checkInEnd, - targetCheckInEnd = targetCheckInEnd, + completed = completed, createJournalEntry = createJournalEntry ) private fun CheckIn.toEntity() = TraceLocationCheckInEntity( id = id, guid = guid, + guidHashBase64 = guidHash.base64(), version = version, type = type, description = description, @@ -74,9 +78,10 @@ private fun CheckIn.toEntity() = TraceLocationCheckInEntity( traceLocationStart = traceLocationStart, traceLocationEnd = traceLocationEnd, defaultCheckInLengthInMinutes = defaultCheckInLengthInMinutes, - signature = signature, + traceLocationBytesBase64 = traceLocationBytes.base64(), + signatureBase64 = signature.base64(), checkInStart = checkInStart, checkInEnd = checkInEnd, - targetCheckInEnd = targetCheckInEnd, + completed = completed, createJournalEntry = createJournalEntry ) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/download/CheckInsPackage.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/download/CheckInsPackage.kt index 64a3ccf60..7de508fb6 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/download/CheckInsPackage.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/download/CheckInsPackage.kt @@ -1,6 +1,8 @@ package de.rki.coronawarnapp.eventregistration.checkins.download import de.rki.coronawarnapp.eventregistration.checkins.CheckIn +import okio.ByteString.Companion.EMPTY +import okio.ByteString.Companion.toByteString import org.joda.time.DateTime import org.joda.time.Instant @@ -27,6 +29,7 @@ private const val TYPE_EVENT = 2 private val dummyEventCheckIn1: CheckIn = CheckIn( id = 1L, guid = "eventOne", + guidHash = EMPTY, version = 1, type = TYPE_LOCATION, description = "Restaurant", @@ -34,34 +37,37 @@ private val dummyEventCheckIn1: CheckIn = CheckIn( traceLocationStart = null, traceLocationEnd = null, defaultCheckInLengthInMinutes = null, - signature = "signature", + traceLocationBytes = EMPTY, + signature = "signature".toByteArray().toByteString(), checkInStart = Instant.ofEpochMilli( DateTime(2021, 2, 2012, 11, 45).millis ), checkInEnd = Instant.ofEpochMilli( DateTime(2021, 2, 20, 12, 15).millis ), - targetCheckInEnd = null, + completed = false, createJournalEntry = false ) private val dummyEventCheckIn2: CheckIn = CheckIn( id = 1L, guid = "eventOne", + guidHash = EMPTY, version = 1, type = TYPE_EVENT, - description = "Women in tech meetup", + description = "People in tech meetup", address = "Technology Park", traceLocationStart = null, traceLocationEnd = null, defaultCheckInLengthInMinutes = null, - signature = "signature2", + traceLocationBytes = EMPTY, + signature = "signature2".toByteArray().toByteString(), checkInStart = Instant.ofEpochMilli( DateTime(2021, 3, 20, 18, 45).millis ), checkInEnd = Instant.ofEpochMilli( DateTime(2021, 3, 20, 20, 15).millis ), - targetCheckInEnd = null, + completed = false, createJournalEntry = false ) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/split/CheckInSplitter.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/split/CheckInSplitter.kt index 7152e3e36..89df718fe 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/split/CheckInSplitter.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/checkins/split/CheckInSplitter.kt @@ -14,7 +14,7 @@ import kotlin.math.ceil */ fun CheckIn.splitByMidnightUTC(): List<CheckIn> { val startTimeSeconds = checkInStart.seconds - val endTimeSeconds = checkInEnd?.seconds ?: return listOf(copy()) // Should not arrive here ,but just in case + val endTimeSeconds = checkInEnd.seconds val durationSecondsUTC = endTimeSeconds - startTimeSeconds.toMidnightUTC() Timber.i("durationSecondsUTC=$durationSecondsUTC") diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/storage/entity/TraceLocationCheckInEntity.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/storage/entity/TraceLocationCheckInEntity.kt index 354715f9c..493fd68ae 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/storage/entity/TraceLocationCheckInEntity.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/eventregistration/storage/entity/TraceLocationCheckInEntity.kt @@ -9,6 +9,7 @@ import org.joda.time.Instant data class TraceLocationCheckInEntity( @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id") val id: Long = 0L, @ColumnInfo(name = "guid") val guid: String, + @ColumnInfo(name = "guidHash") val guidHashBase64: String, @ColumnInfo(name = "version") val version: Int, @ColumnInfo(name = "type") val type: Int, @ColumnInfo(name = "description") val description: String, @@ -16,9 +17,10 @@ data class TraceLocationCheckInEntity( @ColumnInfo(name = "traceLocationStart") val traceLocationStart: Instant?, @ColumnInfo(name = "traceLocationEnd") val traceLocationEnd: Instant?, @ColumnInfo(name = "defaultCheckInLengthInMinutes") val defaultCheckInLengthInMinutes: Int?, - @ColumnInfo(name = "signature") val signature: String, + @ColumnInfo(name = "traceLocationBytes") val traceLocationBytesBase64: String, + @ColumnInfo(name = "signature") val signatureBase64: String, @ColumnInfo(name = "checkInStart") val checkInStart: Instant, - @ColumnInfo(name = "checkInEnd") val checkInEnd: Instant?, - @ColumnInfo(name = "targetCheckInEnd") val targetCheckInEnd: Instant?, + @ColumnInfo(name = "checkInEnd") val checkInEnd: Instant, + @ColumnInfo(name = "completed") val completed: Boolean, @ColumnInfo(name = "createJournalEntry") val createJournalEntry: Boolean ) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsViewModel.kt index 677374af7..a6642cb20 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsViewModel.kt @@ -19,6 +19,8 @@ import de.rki.coronawarnapp.util.viewmodel.CWAViewModel import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.map +import okio.ByteString.Companion.EMPTY +import okio.ByteString.Companion.toByteString import org.joda.time.Duration import org.joda.time.Instant import timber.log.Timber @@ -98,6 +100,7 @@ private val FAKE_CHECKINS = listOf( CheckIn( id = 1, guid = "testGuid2", + guidHash = EMPTY, version = 1, type = 1, description = "Jahrestreffen der deutschen SAP Anwendergruppe", @@ -105,15 +108,17 @@ private val FAKE_CHECKINS = listOf( traceLocationStart = null, traceLocationEnd = null, defaultCheckInLengthInMinutes = 3 * 60, - signature = "Signature", + traceLocationBytes = EMPTY, + signature = "Signature".toByteArray().toByteString(), checkInStart = Instant.now().minus(Duration.standardHours(2)), - checkInEnd = null, - targetCheckInEnd = Instant.now().plus(Duration.standardHours(1)), + checkInEnd = Instant.now(), + completed = false, createJournalEntry = true ), CheckIn( id = 2, guid = "testGuid1", + guidHash = EMPTY, version = 1, type = 2, description = "CWA Launch Party", @@ -121,10 +126,11 @@ private val FAKE_CHECKINS = listOf( traceLocationStart = Instant.parse("2021-01-01T12:00:00.000Z"), traceLocationEnd = Instant.parse("2021-01-01T15:00:00.000Z"), defaultCheckInLengthInMinutes = 15, - signature = "Signature", + traceLocationBytes = EMPTY, + signature = "Signature".toByteArray().toByteString(), checkInStart = Instant.parse("2021-01-01T12:30:00.000Z"), checkInEnd = Instant.parse("2021-01-01T14:00:00.000Z"), - targetCheckInEnd = Instant.parse("2021-01-01T12:45:00.000Z"), + completed = true, createJournalEntry = true ) ) diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/eventregistration/checkins/CheckInRepositoryTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/eventregistration/checkins/CheckInRepositoryTest.kt index c699b8bd7..ebd8bcd9b 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/eventregistration/checkins/CheckInRepositoryTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/eventregistration/checkins/CheckInRepositoryTest.kt @@ -13,6 +13,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runBlockingTest +import okio.ByteString.Companion.EMPTY import org.joda.time.Instant import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test @@ -43,10 +44,12 @@ class CheckInRepositoryTest : BaseTest() { coEvery { checkInDao.insert(any()) } returns 0L runBlockingTest { val time = Instant.ofEpochMilli(1397210400000) + val end = Instant.ofEpochMilli(1397210400001) createInstance(scope = this).addCheckIn( CheckIn( id = 0L, guid = "41da2115-eba2-49bd-bf17-adb3d635ddaf", + guidHash = EMPTY, version = 1, type = 2, description = "brothers birthday", @@ -54,10 +57,11 @@ class CheckInRepositoryTest : BaseTest() { traceLocationStart = time, traceLocationEnd = null, defaultCheckInLengthInMinutes = null, - signature = "abc", + traceLocationBytes = EMPTY, + signature = EMPTY, checkInStart = time, - checkInEnd = null, - targetCheckInEnd = null, + checkInEnd = end, + completed = false, createJournalEntry = false ) ) @@ -66,6 +70,7 @@ class CheckInRepositoryTest : BaseTest() { TraceLocationCheckInEntity( id = 0L, guid = "41da2115-eba2-49bd-bf17-adb3d635ddaf", + guidHashBase64 = "", version = 1, type = 2, description = "brothers birthday", @@ -73,10 +78,11 @@ class CheckInRepositoryTest : BaseTest() { traceLocationStart = time, traceLocationEnd = null, defaultCheckInLengthInMinutes = null, - signature = "abc", + traceLocationBytesBase64 = "", + signatureBase64 = "", checkInStart = time, - checkInEnd = null, - targetCheckInEnd = null, + checkInEnd = end, + completed = false, createJournalEntry = false ) ) @@ -94,6 +100,7 @@ class CheckInRepositoryTest : BaseTest() { CheckIn( id = 0L, guid = "6e5530ce-1afc-4695-a4fc-572e6443eacd", + guidHash = EMPTY, version = 1, type = 2, description = "sisters birthday", @@ -101,10 +108,11 @@ class CheckInRepositoryTest : BaseTest() { traceLocationStart = start, traceLocationEnd = end, defaultCheckInLengthInMinutes = null, - signature = "efg", + traceLocationBytes = EMPTY, + signature = EMPTY, checkInStart = start, checkInEnd = end, - targetCheckInEnd = end, + completed = false, createJournalEntry = false ) ) @@ -113,6 +121,7 @@ class CheckInRepositoryTest : BaseTest() { TraceLocationCheckInEntity( id = 0L, guid = "6e5530ce-1afc-4695-a4fc-572e6443eacd", + guidHashBase64 = "", version = 1, type = 2, description = "sisters birthday", @@ -120,10 +129,11 @@ class CheckInRepositoryTest : BaseTest() { traceLocationStart = start, traceLocationEnd = end, defaultCheckInLengthInMinutes = null, - signature = "efg", + traceLocationBytesBase64 = "", + signatureBase64 = "", checkInStart = start, checkInEnd = end, - targetCheckInEnd = end, + completed = false, createJournalEntry = false ) ) @@ -139,6 +149,7 @@ class CheckInRepositoryTest : BaseTest() { TraceLocationCheckInEntity( id = 0L, guid = "6e5530ce-1afc-4695-a4fc-572e6443eacd", + guidHashBase64 = "", version = 1, type = 2, description = "sisters birthday", @@ -146,10 +157,11 @@ class CheckInRepositoryTest : BaseTest() { traceLocationStart = start, traceLocationEnd = end, defaultCheckInLengthInMinutes = null, - signature = "efg", + traceLocationBytesBase64 = "", + signatureBase64 = "", checkInStart = start, checkInEnd = end, - targetCheckInEnd = end, + completed = false, createJournalEntry = false ) ) @@ -158,6 +170,8 @@ class CheckInRepositoryTest : BaseTest() { CheckIn( id = 0L, guid = "6e5530ce-1afc-4695-a4fc-572e6443eacd", + guidHash = EMPTY, + traceLocationBytes = EMPTY, version = 1, type = 2, description = "sisters birthday", @@ -165,10 +179,10 @@ class CheckInRepositoryTest : BaseTest() { traceLocationStart = start, traceLocationEnd = end, defaultCheckInLengthInMinutes = null, - signature = "efg", + signature = EMPTY, checkInStart = start, checkInEnd = end, - targetCheckInEnd = end, + completed = false, createJournalEntry = false ) ) diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/eventregistration/checkins/DefaultCheckInsTransformerTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/eventregistration/checkins/DefaultCheckInsTransformerTest.kt index 6b981947c..ecd98df37 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/eventregistration/checkins/DefaultCheckInsTransformerTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/eventregistration/checkins/DefaultCheckInsTransformerTest.kt @@ -3,6 +3,8 @@ package de.rki.coronawarnapp.eventregistration.checkins import com.google.protobuf.ByteString import de.rki.coronawarnapp.server.protocols.internal.pt.TraceLocationOuterClass import io.kotest.matchers.shouldBe +import okio.ByteString.Companion.EMPTY +import okio.ByteString.Companion.decodeBase64 import org.joda.time.Instant import org.junit.jupiter.api.Test import testhelpers.BaseTest @@ -16,6 +18,7 @@ class DefaultCheckInsTransformerTest : BaseTest() { val checkIn1 = CheckIn( id = 0, guid = "3055331c-2306-43f3-9742-6d8fab54e848", + guidHash = EMPTY, version = 1, type = 2, description = "description1", @@ -23,16 +26,18 @@ class DefaultCheckInsTransformerTest : BaseTest() { traceLocationStart = Instant.ofEpochMilli(2687955 * 1_000L), traceLocationEnd = Instant.ofEpochMilli(2687991 * 1_000L), defaultCheckInLengthInMinutes = 10, - signature = "signature1", + traceLocationBytes = EMPTY, + signature = "c2lnbmF0dXJlMQ==".decodeBase64()!!, checkInStart = Instant.ofEpochMilli(2687955 * 1_000L), checkInEnd = Instant.ofEpochMilli(2687991 * 1_000L), - targetCheckInEnd = null, + completed = false, createJournalEntry = true ) val checkIn2 = CheckIn( id = 1, guid = "fca84b37-61c0-4a7c-b2f8-825cadd506cf", + guidHash = EMPTY, version = 1, type = 1, description = "description2", @@ -40,13 +45,14 @@ class DefaultCheckInsTransformerTest : BaseTest() { traceLocationStart = null, traceLocationEnd = null, defaultCheckInLengthInMinutes = 20, - signature = "signature2", + traceLocationBytes = EMPTY, + signature = "c2lnbmF0dXJlMg==".decodeBase64()!!, checkInStart = Instant.ofEpochMilli(2687955 * 1_000L), - checkInEnd = null, - targetCheckInEnd = null, + checkInEnd = Instant.ofEpochMilli(2687956 * 1_000L), + completed = false, createJournalEntry = false ) - + val outCheckIns = checkInTransformer.transform( listOf( checkIn1, @@ -89,7 +95,7 @@ class DefaultCheckInsTransformerTest : BaseTest() { signature shouldBe ByteString.copyFrom("signature2".toByteArray()) } startIntervalNumber shouldBe 2687955 - endIntervalNumber shouldBe 0 + endIntervalNumber shouldBe 2687956 // TODO transmissionRiskLevel shouldBe } } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/eventregistration/checkins/split/CheckInSplitterTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/eventregistration/checkins/split/CheckInSplitterTest.kt index ec69a2792..3ee4abca6 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/eventregistration/checkins/split/CheckInSplitterTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/eventregistration/checkins/split/CheckInSplitterTest.kt @@ -2,6 +2,8 @@ package de.rki.coronawarnapp.eventregistration.checkins.split import de.rki.coronawarnapp.eventregistration.checkins.CheckIn import io.kotest.matchers.shouldBe +import okio.ByteString.Companion.EMPTY +import okio.ByteString.Companion.decodeBase64 import org.joda.time.Instant import org.junit.jupiter.api.Test @@ -16,6 +18,7 @@ class CheckInSplitterTest : BaseTest() { private val defaultCheckIn = CheckIn( id = 1L, guid = "eventOne", + guidHash = EMPTY, version = 1, type = 1, description = "Restaurant", @@ -23,17 +26,17 @@ class CheckInSplitterTest : BaseTest() { traceLocationStart = null, traceLocationEnd = null, defaultCheckInLengthInMinutes = null, - signature = "signature", + traceLocationBytes = EMPTY, + signature = "c2lnbmF0dXJl".decodeBase64()!!, checkInStart = Instant.now(), checkInEnd = Instant.now(), - targetCheckInEnd = null, + completed = false, createJournalEntry = false ) @Test - fun `Scenario 1`() { + fun `same-day check-in`() { /* - Example 1 - same-day check-in localCheckIn = { start: '2021-03-04 09:30', end: '2021-03-04 09:45' } splitInto = [{ start: '2021-03-04 09:30', end: '2021-03-04 09:45' } // no split */ @@ -49,27 +52,8 @@ class CheckInSplitterTest : BaseTest() { } @Test - fun `Scenario 2`() { + fun `same-start-end-times check-in`() { /* - Example 2 - no-checkout-time check-in - localCheckIn = { start: '2021-03-04 09:30', end: null } - splitInto = [{ start: '2021-03-04 09:30', end: null } // no split - */ - val checkIn = defaultCheckIn.copy( - checkInStart = Instant.parse("2021-03-04T09:30:00Z"), - checkInEnd = null - ) - - checkIn.splitByMidnightUTC().apply { - size shouldBe 1 // No splitting - get(0) shouldBe checkIn - } - } - - @Test - fun `Scenario 3`() { - /* - Example 3 - same-start-end-times check-in localCheckIn = { start: '2021-03-04 09:30', end: '2021-03-04 09:30' } splitInto = [{ start: '2021-03-04 09:30', end: '2021-03-04 09:30' } // no split */ @@ -85,9 +69,8 @@ class CheckInSplitterTest : BaseTest() { } @Test - fun `Scenario 4`() { + fun `2-days check-in`() { /* - // Example 4 - 2-days check-in localCheckIn = { start: '2021-03-04 09:30', end: '2021-03-05 09:45' } splitInto = [ { start: '2021-03-04 09:30', end: '2021-03-05 00:00' }, @@ -115,9 +98,8 @@ class CheckInSplitterTest : BaseTest() { } @Test - fun `Scenario 5`() { + fun `3-days check-in`() { /* - // Example 5 - 3-days check-in localCheckIn = { start: '2021-03-04 09:30', end: '2021-03-06 09:45' } splitInto = [ { start: '2021-03-04 09:30', end: '2021-03-05 00:00' }, @@ -150,9 +132,8 @@ class CheckInSplitterTest : BaseTest() { } @Test - fun `Scenario 6`() { + fun `2-days-different-months check-in`() { /* - // Example 6 - 2-days-different-months check-in localCheckIn = { start: '2021-02-28 09:30', end: '2021-03-01 12:45' } splitInto = [ { start: '2021-02-28 09:30', end: '2021-03-01 00:00' }, @@ -180,9 +161,8 @@ class CheckInSplitterTest : BaseTest() { } @Test - fun `Scenario 7`() { + fun `2-days-different-years check-in`() { /* - // Example 7 - 2-days-different-years check-in localCheckIn = { start: '2021-12-31 09:30', end: '2022-01-01 12:45' } splitInto = [ { start: '2021-12-31 09:30', end: '2022-01-01 00:00' }, @@ -210,9 +190,8 @@ class CheckInSplitterTest : BaseTest() { } @Test - fun `Scenario 8`() { + fun `3-days-different-months-leap-year check-in`() { /* - // Example 8 - 3-days-different-months-leap-year check-in localCheckIn = { start: '2020-02-28 09:30', end: '2020-03-01 12:45' } splitInto = [ { start: '2020-02-28 09:30', end: '2020-02-29 00:00' }, @@ -246,9 +225,8 @@ class CheckInSplitterTest : BaseTest() { } @Test - fun `Scenario 9`() { + fun `2-dates duration lower than day check-in`() { /* - // Example 9 - 2-dates duration < day check-in localCheckIn = { start: '2021-03-04 09:30', end: '2021-03-05 09:15' } splitInto = [ { start: '2021-03-04 09:30', end: '2021-03-05 00:00' }, @@ -276,9 +254,8 @@ class CheckInSplitterTest : BaseTest() { } @Test - fun `Scenario 10`() { + fun `2-dates duration lower than day - same start and end times check-in`() { /* - // Example 10 - 2-dates duration < day - same start and end times check-in localCheckIn = { start: '2021-03-04 09:00', end: '2021-03-05 09:00' } splitInto = [ { start: '2021-03-04 09:00', end: '2021-03-05 00:00' }, @@ -306,9 +283,8 @@ class CheckInSplitterTest : BaseTest() { } @Test - fun `Scenario 11`() { + fun `midnight times check-in`() { /* - // Example 11 - midnight times check-in localCheckIn = { start: '2021-03-04 00:00', end: '2021-03-05 00:00' } splitInto = [ { start: '2021-03-04 00:00', end: '2021-03-05 00:00' } // No split @@ -330,9 +306,8 @@ class CheckInSplitterTest : BaseTest() { } @Test - fun `Scenario 12`() { + fun `2min-2dates check-in`() { /* - // Example 12 - 2min-2dates check-in localCheckIn = { start: '2021-03-04 23:59', end: '2021-03-05 00:01' } splitInto = [ { start: '2021-03-04 00:00', end: '2021-03-05 00:00' } // No split diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/eventregistration/organizer/category/TraceLocationCategoryViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/eventregistration/organizer/category/TraceLocationCategoryViewModelTest.kt index fb3176ba1..9e323401d 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/eventregistration/organizer/category/TraceLocationCategoryViewModelTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/eventregistration/organizer/category/TraceLocationCategoryViewModelTest.kt @@ -14,7 +14,7 @@ import testhelpers.extensions.InstantExecutorExtension import testhelpers.extensions.observeForTesting @ExtendWith(InstantExecutorExtension::class) -internal class TraceLocationCategoryViewModelTest : BaseTest(){ +internal class TraceLocationCategoryViewModelTest : BaseTest() { @Test fun `viewModel should emit correct categoryItems`() { -- GitLab