diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/CoronaTestRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/CoronaTestRepository.kt index bcac8ebee45f9369f3d20b72caac8a8e684597f9..740b2545e474b9cb6cd07ab37c74d066c2071add 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/CoronaTestRepository.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/CoronaTestRepository.kt @@ -1,8 +1,9 @@ package de.rki.coronawarnapp.coronatest -import androidx.annotation.VisibleForTesting import de.rki.coronawarnapp.bugreporting.reportProblem import de.rki.coronawarnapp.coronatest.errors.CoronaTestNotFoundException +import de.rki.coronawarnapp.coronatest.errors.DuplicateCoronaTestException +import de.rki.coronawarnapp.coronatest.errors.UnknownTestTypeException import de.rki.coronawarnapp.coronatest.migration.PCRTestMigration import de.rki.coronawarnapp.coronatest.qrcode.CoronaTestGUID import de.rki.coronawarnapp.coronatest.qrcode.CoronaTestQRCode @@ -71,44 +72,23 @@ class CoronaTestRepository @Inject constructor( private fun getProcessor(type: CoronaTest.Type) = processors.single { it.type == type } - suspend fun registerTest(registrationRequest: TestRegistrationRequest): CoronaTest = when (registrationRequest) { - is CoronaTestQRCode -> registerTestByQRCode(registrationRequest) - is CoronaTestTAN -> registerTestByTAN(registrationRequest) - else -> throw IllegalArgumentException("Unknown test request: $registrationRequest") - } + suspend fun registerTest(request: TestRegistrationRequest): CoronaTest { + Timber.tag(TAG).i("registerTest(request=%s)", request) - @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) - internal suspend fun registerTestByTAN(request: CoronaTestTAN): CoronaTest { - Timber.tag(TAG).i("registerTestByQRCode(request=%s)", request) // We check early, if there is no processor, crash early, "should" never happen though... val processor = getProcessor(request.type) val currentTests = internalData.updateBlocking { if (values.any { it.type == request.type }) { - throw IllegalStateException("There is already a test of this type: ${request.type}.") + throw DuplicateCoronaTestException("There is already a test of this type: ${request.type}.") } - val test = processor.create(request) - Timber.tag(TAG).i("Adding new test: %s", test) - - toMutableMap().apply { this[test.identifier] = test } - } - - return currentTests[request.identifier]!! - } - - @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) - internal suspend fun registerTestByQRCode(request: CoronaTestQRCode): CoronaTest { - Timber.tag(TAG).i("registerTestByQRCode(request=%s)", request) - // We check early, if there is no processor, crash early, "should" never happen though... - val processor = getProcessor(request.type) - - val currentTests = internalData.updateBlocking { - if (values.any { it.type == request.type }) { - throw IllegalStateException("There is already a test of this type: ${request.type}.") + val test = when (request) { + is CoronaTestQRCode -> processor.create(request) + is CoronaTestTAN -> processor.create(request) + else -> throw UnknownTestTypeException("Unknown test request: $request") } - val test = processor.create(request) Timber.tag(TAG).i("Adding new test: %s", test) toMutableMap().apply { this[test.identifier] = test } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/errors/DuplicateCoronaTestException.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/errors/DuplicateCoronaTestException.kt new file mode 100644 index 0000000000000000000000000000000000000000..13efa1802969c3785ee96c53bf823d09600b74b2 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/errors/DuplicateCoronaTestException.kt @@ -0,0 +1,5 @@ +package de.rki.coronawarnapp.coronatest.errors + +class DuplicateCoronaTestException( + message: String +) : IllegalArgumentException(message) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/errors/UnknownTestTypeException.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/errors/UnknownTestTypeException.kt new file mode 100644 index 0000000000000000000000000000000000000000..f68ab2721427b6ba3c284ded591ff17bbc1fa37c --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/errors/UnknownTestTypeException.kt @@ -0,0 +1,5 @@ +package de.rki.coronawarnapp.coronatest.errors + +class UnknownTestTypeException( + message: String +) : IllegalArgumentException(message)