@ -4,44 +4,174 @@
package org.mozilla.fenix.home.sessioncontrol.viewholders.topsites
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 mozilla.components.feature.top.sites.TopSite
import mozilla.components.feature.top.sites.TopSite.Type.DEFAULT
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.mozilla.fenix.home.sessioncontrol.AdapterItem
import org.mozilla.fenix.home.sessioncontrol.AdapterItem .TopSitePagerPayload
class TopSitesPagerAdapterTest {
private lateinit var topSitesPagerAdapter : TopSitesPagerAdapter
private val topSite = TopSite (
id = 1L ,
title = " Title1 " ,
url = " https://mozilla.org " ,
null ,
DEFAULT
)
private val topSite2 = TopSite (
id = 2L ,
title = " Title2 " ,
url = " https://mozilla.org " ,
null ,
DEFAULT
)
private val topSite3 = TopSite (
id = 3L ,
title = " Title3 " ,
url = " https://firefox.org " ,
null ,
DEFAULT
)
private val topSite4 = TopSite (
id = 4L ,
title = " Title4 " ,
url = " https://firefox.org " ,
null ,
DEFAULT
)
@Before
fun setup ( ) {
topSitesPagerAdapter = spyk ( TopSitesPagerAdapter ( mockk ( ) ) )
}
@Test
fun testDiffCallback ( ) {
val topSite = TopSite (
id = 1L ,
title = " Title1 " ,
url = " https://mozilla.org " ,
assertEquals (
TopSitesPagerAdapter . TopSiteListDiffCallback . getChangePayload (
listOf ( topSite , topSite3 ) ,
listOf ( topSite , topSite2 )
) ,
TopSitePagerPayload ( setOf ( Pair ( 1 , topSite2 ) ) )
)
}
@Test
fun `GIVEN a payload with topSites for both pages WHEN getCurrentPageChanges THEN return topSites only for current page` ( ) {
val payload = TopSitePagerPayload (
setOf (
Pair ( 0 , topSite ) ,
Pair ( 1 , topSite2 ) ,
Pair ( 2 , topSite3 ) ,
Pair ( 8 , topSite4 )
)
)
val resultPage1 : List < Pair < Int , TopSite > > =
topSitesPagerAdapter . getCurrentPageChanges ( payload , 0 )
val resultPage2 : List < Pair < Int , TopSite > > =
topSitesPagerAdapter . getCurrentPageChanges ( payload , 1 )
assertEquals (
listOf ( Pair ( 0 , topSite ) ,
Pair ( 1 , topSite2 ) ,
Pair ( 2 , topSite3 ) ) ,
resultPage1
)
assertEquals (
listOf ( Pair ( 8 , topSite4 ) ) ,
resultPage2
)
}
@Test
fun `WHEN update is called to delete the 1st of 4 topSites THEN submitList will update 3 topSites` ( ) {
val currentList = mutableListOf ( topSite , topSite2 , topSite3 , topSite4 )
val topSitesAdapter : TopSitesAdapter = mockk ( )
every { topSitesAdapter . currentList } returns currentList
every { topSitesAdapter . submitList ( any ( ) ) } just Runs
val removedTopSite = TopSite (
id = - 1L ,
title = " REMOVED " ,
url = " https://firefox.org " ,
null ,
TopSite . Type . DEFAULT
DEFAULT
)
val payload = TopSitePagerPayload (
setOf (
Pair ( 0 , removedTopSite ) ,
Pair ( 1 , topSite2 ) ,
Pair ( 2 , topSite3 ) ,
Pair ( 3 , topSite4 )
)
)
val topSite2 = TopSite (
id = 2L ,
title = " Title2 " ,
url = " https://mozilla.org " ,
topSitesPagerAdapter . update ( payload , 0 , topSitesAdapter )
val expected = mutableListOf ( topSite2 , topSite3 , topSite4 )
verify { topSitesAdapter . submitList ( expected ) }
}
@Test
fun `WHEN update is called to delete the 4th of 4 topSites THEN submitList will update 1 topSite` ( ) {
val currentList = mutableListOf ( topSite , topSite2 , topSite3 , topSite4 )
val topSitesAdapter : TopSitesAdapter = mockk ( )
every { topSitesAdapter . currentList } returns currentList
every { topSitesAdapter . submitList ( any ( ) ) } just Runs
val removedTopSite = TopSite (
id = - 1L ,
title = " REMOVED " ,
url = " https://firefox.org " ,
null ,
TopSite . Type . DEFAULT
DEFAULT
)
val payload = TopSitePagerPayload (
setOf (
Pair ( 3 , removedTopSite )
)
)
val topSite3 = TopSite (
topSitesPagerAdapter . update ( payload , 0 , topSitesAdapter )
val expected = mutableListOf ( topSite , topSite2 , topSite3 )
verify { topSitesAdapter . submitList ( expected ) }
}
@Test
fun `WHEN update is called to update the 3rd of 4 topSites THEN submitList will contain 4 items` ( ) {
val currentList = mutableListOf ( topSite , topSite2 , topSite3 , topSite4 )
val topSitesAdapter : TopSitesAdapter = mockk ( )
every { topSitesAdapter . currentList } returns currentList
every { topSitesAdapter . submitList ( any ( ) ) } just Runs
val changedTopSite = TopSite (
id = 3L ,
title = " Title2 " ,
title = " CHANGED " ,
url = " https://firefox.org " ,
null ,
TopSite . Type . DEFAULT
DEFAULT
)
assertEquals (
TopSitesPagerAdapter . TopSiteListDiffCallback . getChangePayload (
listOf ( topSite , topSite3 ) ,
listOf ( topSite , topSite2 )
) ,
AdapterItem . TopSitePagerPayload ( setOf ( Pair ( 1 , topSite2 ) ) )
val payload = TopSitePagerPayload (
setOf (
Pair ( 2 , changedTopSite )
)
)
topSitesPagerAdapter . update ( payload , 0 , topSitesAdapter )
val expected = mutableListOf ( topSite , topSite2 , changedTopSite , topSite4 )
verify { topSitesAdapter . submitList ( expected ) }
}
}