add screenshot tests around the combined server selection

This commit is contained in:
Adam Brown 2022-08-25 14:28:12 +01:00
parent 51888e176c
commit bc6a0a842f

View File

@ -19,23 +19,31 @@ package im.vector.app
import android.os.Build
import android.view.View
import android.widget.FrameLayout
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LifecycleRegistry
import androidx.recyclerview.widget.RecyclerView
import app.cash.paparazzi.DeviceConfig.Companion.PIXEL_3
import app.cash.paparazzi.Paparazzi
import com.airbnb.epoxy.EpoxyController
import com.airbnb.mvrx.Success
import im.vector.app.core.error.DefaultErrorFormatter
import im.vector.app.core.extensions.configureWith
import im.vector.app.core.resources.StringProvider
import im.vector.app.core.utils.DimensionConverter
import im.vector.app.databinding.FragmentFtueServerSelectionCombinedBinding
import im.vector.app.features.home.AvatarRenderer
import im.vector.app.features.home.room.detail.timeline.format.RoomHistoryVisibilityFormatter
import im.vector.app.features.onboarding.OnboardingFlow
import im.vector.app.features.onboarding.OnboardingViewState
import im.vector.app.features.onboarding.SelectedHomeserverState
import im.vector.app.features.onboarding.ftueauth.FtueAuthCombinedServerSelectionFragment
import im.vector.app.features.roomprofile.settings.RoomSettingsController
import im.vector.app.features.roomprofile.settings.RoomSettingsViewState
import im.vector.app.test.fakes.FakeErrorFormatter
import im.vector.app.test.fakes.FakeVectorPreferences
import io.mockk.coJustRun
import io.mockk.every
import io.mockk.mockk
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@ -58,7 +66,40 @@ class PaparazziScreenshotTest {
}
@Test
fun `room settings`() = runTest {
fun `empty server selection`() {
val (view, binding) = paparazzi.inflate(R.layout.fragment_ftue_server_selection_combined, FragmentFtueServerSelectionCombinedBinding::bind)
val stringProvider = StringProvider(paparazzi.resources)
val lifecycleOwner = fakeLifecycleOwner()
FtueAuthCombinedServerSelectionFragment.Controller(lifecycleOwner, binding, stringProvider, FakeErrorFormatter())
.setData(
OnboardingViewState(
onboardingFlow = OnboardingFlow.SignIn,
)
)
paparazzi.snapshot(view)
}
@Test
fun `server selection with content`() {
val (view, binding) = paparazzi.inflate(R.layout.fragment_ftue_server_selection_combined, FragmentFtueServerSelectionCombinedBinding::bind)
val stringProvider = StringProvider(paparazzi.resources)
val lifecycleOwner = fakeLifecycleOwner()
FtueAuthCombinedServerSelectionFragment.Controller(lifecycleOwner, binding, stringProvider, DefaultErrorFormatter(stringProvider))
.setData(
OnboardingViewState(
onboardingFlow = OnboardingFlow.SignIn,
selectedHomeserver = SelectedHomeserverState(userFacingUrl = "matrix.org")
)
)
paparazzi.snapshot(view)
}
@Test
fun `room settings`() {
// Material components aren't fully supported yet https://github.com/cashapp/paparazzi/issues/223
val strings = StringProvider(paparazzi.resources)
val fakeAvatarRender = FakeAvatarRender()
@ -110,6 +151,18 @@ fun setFinalStaticValue(field: Field, value: Any) {
field.set(null, value)
}
private fun <B> Paparazzi.inflate(layoutId: Int, binder: (View) -> B): Pair<View, B> {
val view = inflate<View>(layoutId)
val binding = binder(view)
return view to binding
}
private fun fakeLifecycleOwner(): LifecycleOwner {
val lifecycleOwner = mockk<LifecycleOwner>()
every { lifecycleOwner.lifecycle } returns LifecycleRegistry(lifecycleOwner)
return lifecycleOwner
}
class FakeDimensionConverter {
val instance = mockk<DimensionConverter>().also {