diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt
index 3ce3ac2efdf276050c9c9ae1d5413d7300382ec1..6be3628848ace7942f65bfd7a9de2d23b32e9b6a 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt
@@ -542,7 +542,7 @@ object LocalData {
     }
 
     fun devicePairingSuccessfulTimestamp(value: Long) =
-        with(getSharedPreferenceInstance().edit()) {
+        getSharedPreferenceInstance().edit(true) {
             putLong(
                 CoronaWarnApplication.getAppContext()
                     .getString(R.string.preference_device_pairing_successful_time),
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/SubmissionServiceTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/SubmissionServiceTest.kt
new file mode 100644
index 0000000000000000000000000000000000000000..f086a73f7ab9354afd7587edaf436ee61a765dae
--- /dev/null
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/SubmissionServiceTest.kt
@@ -0,0 +1,162 @@
+package de.rki.coronawarnapp.service.submission
+
+import de.rki.coronawarnapp.exception.NoGUIDOrTANSetException
+import de.rki.coronawarnapp.exception.NoRegistrationTokenSetException
+import de.rki.coronawarnapp.http.WebRequestBuilder
+import de.rki.coronawarnapp.storage.LocalData
+import de.rki.coronawarnapp.transaction.SubmitDiagnosisKeysTransaction
+import de.rki.coronawarnapp.util.formatter.TestResult
+import io.mockk.Runs
+import io.mockk.coEvery
+import io.mockk.every
+import io.mockk.just
+import io.mockk.mockkObject
+import io.mockk.verify
+import kotlinx.coroutines.runBlocking
+import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.Before
+import org.junit.Test
+
+class SubmissionServiceTest {
+    private val guid = "123456-12345678-1234-4DA7-B166-B86D85475064"
+    private val registrationToken = "asdjnskjfdniuewbheboqudnsojdff"
+
+    @Before
+    fun setUp() {
+        mockkObject(LocalData)
+        mockkObject(WebRequestBuilder)
+        mockkObject(SubmitDiagnosisKeysTransaction)
+
+        every { LocalData.teletan() } returns null
+        every { LocalData.testGUID() } returns null
+        every { LocalData.registrationToken() } returns null
+    }
+
+    @Test(expected = NoGUIDOrTANSetException::class)
+    fun registerDeviceWithoutTANOrGUIDFails() {
+        runBlocking {
+            SubmissionService.asyncRegisterDevice()
+        }
+    }
+
+    @Test
+    fun registrationWithGUIDSucceeds() {
+        every { LocalData.testGUID() } returns guid
+
+        every { LocalData.testGUID(any()) } just Runs
+        every { LocalData.registrationToken(any()) } just Runs
+        every { LocalData.devicePairingSuccessfulTimestamp(any()) } just Runs
+
+        coEvery {
+            WebRequestBuilder.getInstance()
+                .asyncGetRegistrationToken(any(), SubmissionConstants.QR_CODE_KEY_TYPE)
+        } returns registrationToken
+
+        runBlocking {
+            SubmissionService.asyncRegisterDevice()
+        }
+
+        verify(exactly = 1) {
+            LocalData.registrationToken(registrationToken)
+            LocalData.devicePairingSuccessfulTimestamp(any())
+            LocalData.testGUID(null)
+        }
+    }
+
+    @Test
+    fun registrationWithTeleTANSucceeds() {
+        every { LocalData.teletan() } returns guid
+
+        every { LocalData.teletan(any()) } just Runs
+        every { LocalData.registrationToken(any()) } just Runs
+        every { LocalData.devicePairingSuccessfulTimestamp(any()) } just Runs
+
+        coEvery {
+            WebRequestBuilder.getInstance()
+                .asyncGetRegistrationToken(any(), SubmissionConstants.TELE_TAN_KEY_TYPE)
+        } returns registrationToken
+
+        runBlocking {
+            SubmissionService.asyncRegisterDevice()
+        }
+
+        verify(exactly = 1) {
+            LocalData.registrationToken(registrationToken)
+            LocalData.devicePairingSuccessfulTimestamp(any())
+            LocalData.teletan(null)
+        }
+    }
+
+    @Test(expected = NoRegistrationTokenSetException::class)
+    fun requestTestResultWithoutRegistrationTokenFails() {
+        runBlocking {
+            SubmissionService.asyncRequestTestResult()
+        }
+    }
+
+    @Test
+    fun requestTestResultSucceeds() {
+        every { LocalData.registrationToken() } returns registrationToken
+        coEvery {
+            WebRequestBuilder.getInstance().asyncGetTestResult(registrationToken)
+        } returns TestResult.NEGATIVE.value
+
+        runBlocking {
+            assertThat(SubmissionService.asyncRequestTestResult(), equalTo(TestResult.NEGATIVE))
+        }
+    }
+
+    @Test(expected = NoRegistrationTokenSetException::class)
+    fun submitExposureKeysWithoutRegistrationTokenFails() {
+        runBlocking {
+            SubmissionService.asyncSubmitExposureKeys(listOf())
+        }
+    }
+
+    @Test
+    fun submitExposureKeysSucceeds() {
+        every { LocalData.registrationToken() } returns registrationToken
+        coEvery { SubmitDiagnosisKeysTransaction.start(registrationToken, any()) } just Runs
+
+        runBlocking {
+            SubmissionService.asyncSubmitExposureKeys(listOf())
+        }
+    }
+
+    @Test
+    fun deleteRegistrationTokenSucceeds() {
+        every { LocalData.registrationToken(null) } just Runs
+        every { LocalData.devicePairingSuccessfulTimestamp(0L) } just Runs
+
+        SubmissionService.deleteRegistrationToken()
+
+        verify(exactly = 1) {
+            LocalData.registrationToken(null)
+            LocalData.devicePairingSuccessfulTimestamp(0L)
+        }
+    }
+
+    @Test
+    fun containsValidGUID() {
+        // valid
+        assertThat(
+            SubmissionService.containsValidGUID("https://bs-sd.de/covid-19/?$guid"),
+            equalTo(true)
+        )
+
+        // invalid
+        assertThat(
+            SubmissionService.containsValidGUID("https://no-guid-here"),
+            equalTo(false)
+        )
+    }
+
+    @Test
+    fun extractGUID() {
+        assertThat(
+            SubmissionService.extractGUID("https://bs-sd.de/covid-19/?$guid"),
+            equalTo(guid)
+        )
+    }
+}
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/VerificationServiceTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/VerificationServiceTest.kt
deleted file mode 100644
index 16f069c15ba8d80bfbe487d13fa58ac088362843..0000000000000000000000000000000000000000
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/VerificationServiceTest.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package de.rki.coronawarnapp.service.submission
-
-import org.hamcrest.CoreMatchers.equalTo
-import org.hamcrest.MatcherAssert.assertThat
-import org.junit.Test
-
-class VerificationServiceTest {
-
-    @Test
-    fun containsValidGUID() {
-        // valid
-        val guid = "123456-12345678-1234-4DA7-B166-B86D85475064"
-        assertThat(
-            SubmissionService.containsValidGUID("https://bs-sd.de/covid-19/?$guid"),
-            equalTo(true)
-        )
-
-        // invalid
-        assertThat(
-            SubmissionService.containsValidGUID("https://no-guid-here"),
-            equalTo(false)
-        )
-    }
-
-    @Test
-    fun extractGUID() {
-        val guid = "123456-12345678-1234-4DA7-B166-B86D85475064"
-        assertThat(
-            SubmissionService.extractGUID("https://bs-sd.de/covid-19/?$guid"),
-            equalTo(guid)
-        )
-    }
-}