diff --git a/app/src/main/java/org/mozilla/fenix/settings/about/AboutPageAdapter.kt b/app/src/main/java/org/mozilla/fenix/settings/about/AboutPageAdapter.kt index 03e2737fb5..3e38e04ace 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/about/AboutPageAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/about/AboutPageAdapter.kt @@ -6,12 +6,14 @@ package org.mozilla.fenix.settings.about import android.view.LayoutInflater import android.view.ViewGroup +import androidx.annotation.VisibleForTesting import androidx.recyclerview.widget.RecyclerView import org.mozilla.fenix.settings.about.viewholders.AboutItemViewHolder class AboutPageAdapter(private val listener: AboutPageListener) : RecyclerView.Adapter() { - private var aboutList: List? = null + @VisibleForTesting + var aboutList: List? = null fun updateData(items: List) { this.aboutList = items diff --git a/app/src/test/java/org/mozilla/fenix/settings/about/AboutPageAdapterTest.kt b/app/src/test/java/org/mozilla/fenix/settings/about/AboutPageAdapterTest.kt new file mode 100644 index 0000000000..fa693550e3 --- /dev/null +++ b/app/src/test/java/org/mozilla/fenix/settings/about/AboutPageAdapterTest.kt @@ -0,0 +1,101 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.settings.about + +import android.view.ViewGroup +import android.widget.TextView +import assertk.assertThat +import assertk.assertions.isEqualTo +import io.mockk.Runs +import io.mockk.every +import io.mockk.just +import io.mockk.mockk +import io.mockk.spyk +import io.mockk.verify +import kotlinx.android.synthetic.main.about_list_item.view.* +import mozilla.components.support.test.robolectric.testContext +import org.junit.Test +import org.junit.runner.RunWith +import org.mozilla.fenix.TestApplication +import org.mozilla.fenix.settings.about.viewholders.AboutItemViewHolder +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config + +@RunWith(RobolectricTestRunner::class) +@Config(application = TestApplication::class) +class AboutPageAdapterTest { + private var aboutList: List = + mutableListOf( + AboutPageItem.Item( + AboutItem.ExternalLink( + AboutItemType.WHATS_NEW, + "https://mozilla.org" + ), "Libraries" + ), + AboutPageItem.Item(AboutItem.Libraries, "Libraries") + ) + private val listener: AboutPageListener = mockk(relaxed = true) + + @Test + fun `updateData should set the new data and call notifyDataSetChanged()`() { + val adapter = spyk(AboutPageAdapter(listener), recordPrivateCalls = true) + every { adapter.notifyDataSetChanged() } just Runs + + adapter.updateData(aboutList) + + // Wasn't able to test in verify block the 'adapter.aboutList' setter from the updateData method + assertThat(adapter.aboutList).isEqualTo(aboutList) + verify { + adapter.notifyDataSetChanged() + } + } + + @Test + fun `getItemCount on a default instantiated Adapter should return 0`() { + val adapter = AboutPageAdapter(listener) + + assertThat(adapter.itemCount).isEqualTo(0) + } + + @Test + fun `getItemCount after updateData() call should return the correct list size`() { + val adapter = AboutPageAdapter(listener) + + adapter.updateData(aboutList) + + assertThat(adapter.itemCount).isEqualTo(2) + } + + @Test + fun `the adapter uses AboutItemViewHolder`() { + val adapter = AboutPageAdapter(listener) + val parentView: ViewGroup = mockk(relaxed = true) + every { parentView.context } returns testContext + + val viewHolder = adapter.onCreateViewHolder(parentView, AboutItemViewHolder.LAYOUT_ID) + + assertThat(viewHolder::class).isEqualTo(AboutItemViewHolder::class) + } + + @Test + fun `the adapter binds the right item to a ViewHolder`() { + val adapter = AboutPageAdapter(listener) + val parentView: ViewGroup = mockk(relaxed = true) + every { parentView.about_item_title } returns TextView(testContext) + val viewHolder = spyk(AboutItemViewHolder(parentView, mockk())) + every { + adapter.onCreateViewHolder( + parentView, + AboutItemViewHolder.LAYOUT_ID + ) + } returns viewHolder + every { viewHolder.bind(any()) } just Runs + + adapter.updateData(aboutList) + adapter.bindViewHolder(viewHolder, 1) + + verify { viewHolder.bind(adapter.aboutList?.get(1) as AboutPageItem.Item) } + } +}