diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsFragmentTest.kt
new file mode 100644
index 0000000000000000000000000000000000000000..763d8b1b3cd93ab1ecc238e8920c85ac6df29e66
--- /dev/null
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsFragmentTest.kt
@@ -0,0 +1,162 @@
+package de.rki.coronawarnapp.covidcertificate.person.ui.details
+
+import android.content.Context
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.action.ViewActions.swipeUp
+import androidx.test.espresso.matcher.ViewMatchers.withId
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import dagger.Module
+import dagger.android.ContributesAndroidInjector
+import de.rki.coronawarnapp.R
+import de.rki.coronawarnapp.covidcertificate.common.certificate.CertificatePersonIdentifier
+import de.rki.coronawarnapp.covidcertificate.person.core.PersonCertificates
+import de.rki.coronawarnapp.covidcertificate.person.ui.details.items.CertificateItem
+import de.rki.coronawarnapp.covidcertificate.person.ui.details.items.CwaUserCard
+import de.rki.coronawarnapp.covidcertificate.person.ui.details.items.PersonDetailsQrCard
+import de.rki.coronawarnapp.covidcertificate.person.ui.details.items.RecoveryCertificateCard
+import de.rki.coronawarnapp.covidcertificate.person.ui.details.items.TestCertificateCard
+import de.rki.coronawarnapp.covidcertificate.person.ui.details.items.VaccinationCertificateCard
+import de.rki.coronawarnapp.covidcertificate.recovery.core.RecoveryCertificate
+import de.rki.coronawarnapp.covidcertificate.test.core.TestCertificate
+import de.rki.coronawarnapp.covidcertificate.vaccination.core.VaccinationCertificate
+import de.rki.coronawarnapp.util.TimeAndDateExtensions.toLocalDateUserTz
+import de.rki.coronawarnapp.util.ui.SingleLiveEvent
+import io.mockk.MockKAnnotations
+import io.mockk.every
+import io.mockk.impl.annotations.MockK
+import io.mockk.mockk
+import org.joda.time.Instant
+import org.joda.time.LocalDate
+import org.joda.time.format.DateTimeFormat
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import testhelpers.BaseUITest
+import testhelpers.Screenshot
+import testhelpers.launchFragment2
+import testhelpers.launchFragmentInContainer2
+import testhelpers.takeScreenshot
+
+@RunWith(AndroidJUnit4::class)
+class PersonDetailsFragmentTest : BaseUITest() {
+    @MockK lateinit var viewModel: PersonDetailsViewModel
+    private lateinit var bitmap: Bitmap
+    private val args = PersonDetailsFragmentArgs("code").toBundle()
+
+    @Before
+    fun setUp() {
+        MockKAnnotations.init(this, relaxed = true)
+        viewModel.apply {
+            every { events } returns SingleLiveEvent()
+            every { uiState } returns MutableLiveData()
+        }
+
+        bitmap = BitmapFactory.decodeResource(
+            ApplicationProvider.getApplicationContext<Context>().resources,
+            R.drawable.test_qr_code
+        )
+        setupMockViewModel(
+            object : PersonDetailsViewModel.Factory {
+                override fun create(personIdentifierCode: String): PersonDetailsViewModel = viewModel
+            }
+        )
+    }
+
+    @Test
+    fun launch_fragment() {
+        launchFragment2<PersonDetailsFragment>(fragmentArgs = args)
+    }
+
+    @Test
+    @Screenshot
+    fun capture_fragment_cwa_user() {
+        every { viewModel.uiState } returns certificateData(true)
+
+        launchFragmentInContainer2<PersonDetailsFragment>(fragmentArgs = args)
+        takeScreenshot<PersonDetailsFragment>("cwa")
+
+        onView(withId(R.id.coordinator_layout)).perform(swipeUp())
+        takeScreenshot<PersonDetailsFragment>("cwa_2")
+    }
+
+    @Test
+    @Screenshot
+    fun capture_fragment_not_cwa_user() {
+        every { viewModel.uiState } returns certificateData()
+        launchFragmentInContainer2<PersonDetailsFragment>(fragmentArgs = args)
+        takeScreenshot<PersonDetailsFragment>("not_cwa")
+    }
+
+    private fun certificateData(isCwa: Boolean = false): LiveData<List<CertificateItem>> = MutableLiveData(
+        mutableListOf<CertificateItem>().apply {
+            val testCertificate = mockTestCertificate()
+            val vaccinationCertificate1 = mockVaccinationCertificate(number = 1, final = false)
+            val vaccinationCertificate2 = mockVaccinationCertificate(number = 2, final = true)
+            val recoveryCertificate = mockRecoveryCertificate()
+            val personCertificates = PersonCertificates(
+                listOf(testCertificate, vaccinationCertificate1, vaccinationCertificate2), isCwaUser = isCwa
+            )
+
+            add(PersonDetailsQrCard.Item(testCertificate, bitmap))
+            add(CwaUserCard.Item(personCertificates) {})
+            add(VaccinationCertificateCard.Item(vaccinationCertificate1, isCurrentCertificate = false) {})
+            add(VaccinationCertificateCard.Item(vaccinationCertificate2, isCurrentCertificate = false) {})
+            add(TestCertificateCard.Item(testCertificate, isCurrentCertificate = true) {})
+            add(RecoveryCertificateCard.Item(recoveryCertificate, isCurrentCertificate = false) {})
+        }
+    )
+
+    private fun mockTestCertificate(): TestCertificate = mockk<TestCertificate>().apply {
+        every { certificateId } returns "testCertificateId"
+        every { fullName } returns "Andrea Schneider"
+        every { testType } returns "PCR-Test"
+        every { dateOfBirth } returns LocalDate.parse("18.04.1943", DateTimeFormat.forPattern("dd.MM.yyyy"))
+        every { sampleCollectedAt } returns Instant.parse("2021-05-31T11:35:00.000Z")
+        every { registeredAt } returns Instant.parse("2021-05-21T11:35:00.000Z")
+        every { personIdentifier } returns CertificatePersonIdentifier(
+            firstNameStandardized = "firstNameStandardized",
+            lastNameStandardized = "lastNameStandardized",
+            dateOfBirth = LocalDate.now()
+        )
+    }
+
+    private fun mockVaccinationCertificate(
+        number: Int = 1,
+        final: Boolean = false
+    ): VaccinationCertificate =
+        mockk<VaccinationCertificate>().apply {
+            every { certificateId } returns "vaccinationCertificateId$number"
+            every { vaccinatedAt } returns Instant.parse("2021-06-01T11:35:00.000Z").toLocalDateUserTz()
+            every { personIdentifier } returns CertificatePersonIdentifier(
+                firstNameStandardized = "firstNameStandardized",
+                lastNameStandardized = "lastNameStandardized",
+                dateOfBirth = LocalDate.now()
+            )
+            every { doseNumber } returns number
+            every { totalSeriesOfDoses } returns 2
+            every { isFinalShot } returns final
+        }
+
+    private fun mockRecoveryCertificate(): RecoveryCertificate =
+        mockk<RecoveryCertificate>().apply {
+            every { certificateId } returns "recoveryCertificateId"
+            every { validUntil } returns Instant.parse("2021-05-31T11:35:00.000Z").toLocalDateUserTz()
+        }
+
+    @After
+    fun tearDown() {
+        clearAllViewModels()
+    }
+}
+
+@Module
+abstract class PersonDetailsFragmentTestModule {
+    @ContributesAndroidInjector
+    abstract fun personDetailsFragment(): PersonDetailsFragment
+}
diff --git a/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt b/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt
index c6f07abb184aac30316929b9b25cceab162e6ea8..f2f255c7a58302c1514c3a854a70f3d27f746e6e 100644
--- a/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt
+++ b/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt
@@ -3,6 +3,7 @@ package testhelpers
 import dagger.Module
 import de.rki.coronawarnapp.bugreporting.DebugLogTestModule
 import de.rki.coronawarnapp.bugreporting.DebugLogUploadTestModule
+import de.rki.coronawarnapp.covidcertificate.person.ui.details.PersonDetailsFragmentTestModule
 import de.rki.coronawarnapp.covidcertificate.person.ui.overview.PersonOverviewFragmentTestModule
 import de.rki.coronawarnapp.covidcertificate.test.ui.CovidCertificateDetailsFragmentTestModule
 import de.rki.coronawarnapp.covidcertificate.vaccination.ui.details.VaccinationDetailsFragmentTestModule
@@ -93,6 +94,7 @@ import de.rki.coronawarnapp.ui.vaccination.CovidCertificateInfoFragmentTestModul
         RequestCovidCertificateFragmentTestModule::class,
         CovidCertificateDetailsFragmentTestModule::class,
         PersonOverviewFragmentTestModule::class,
+        PersonDetailsFragmentTestModule::class,
     ]
 )
 class FragmentTestModuleRegistrar