@ -37,26 +37,214 @@ class WallpapersUseCasesTest {
private val appStore = AppStore ( )
private val mockSettings = mockk < Settings > ( )
private val mock Downloader = mockk < LegacyWallpaperDownloader > ( relaxed = true )
private val mock FileManager = mockk < LegacyWallpaperFileManager > {
private val mock Legacy Downloader = mockk < LegacyWallpaperDownloader > ( relaxed = true )
private val mock Legacy FileManager = mockk < LegacyWallpaperFileManager > {
every { clean ( any ( ) , any ( ) ) } just runs
}
private val mockMetadataFetcher = mockk < WallpaperMetadataFetcher > ( )
private val mockDownloader = mockk < WallpaperDownloader > ( relaxed = true )
private val mockFileManager = mockk < WallpaperFileManager > {
coEvery { clean ( any ( ) , any ( ) ) } returns mockk ( )
}
@Test
fun `GIVEN legacy use case WHEN initializing THEN the default wallpaper is not downloaded` ( ) = runTest {
val fakeRemoteWallpapers = listOf ( " first " , " second " , " third " ) . map { name ->
makeFakeRemoteWallpaper ( TimeRelation . LATER , name )
}
every { mockSettings . currentWallpaperName } returns " "
coEvery { mockLegacyFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
WallpapersUseCases . LegacyInitializeWallpaperUseCase (
appStore ,
mockLegacyDownloader ,
mockLegacyFileManager ,
mockSettings ,
" en-US " ,
possibleWallpapers = listOf ( Wallpaper . Default ) + fakeRemoteWallpapers
) . invoke ( )
appStore . waitUntilIdle ( )
coVerify ( exactly = 0 ) { mockLegacyDownloader . downloadWallpaper ( Wallpaper . Default ) }
}
@Test
fun `GIVEN legacy use case WHEN initializing THEN default wallpaper is included in available wallpapers` ( ) = runTest {
val fakeRemoteWallpapers = listOf ( " first " , " second " , " third " ) . map { name ->
makeFakeRemoteWallpaper ( TimeRelation . LATER , name )
}
every { mockSettings . currentWallpaperName } returns " "
coEvery { mockLegacyFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
WallpapersUseCases . LegacyInitializeWallpaperUseCase (
appStore ,
mockLegacyDownloader ,
mockLegacyFileManager ,
mockSettings ,
" en-US " ,
possibleWallpapers = listOf ( Wallpaper . Default ) + fakeRemoteWallpapers
) . invoke ( )
appStore . waitUntilIdle ( )
assertTrue ( appStore . state . wallpaperState . availableWallpapers . contains ( Wallpaper . Default ) )
}
@Test
fun `GIVEN legacy use case and wallpapers that expired WHEN invoking initialize use case THEN expired wallpapers are filtered out and cleaned up` ( ) = runTest {
val fakeRemoteWallpapers = listOf ( " first " , " second " , " third " ) . map { name ->
makeFakeRemoteWallpaper ( TimeRelation . LATER , name )
}
val fakeExpiredRemoteWallpapers = listOf ( " expired " ) . map { name ->
makeFakeRemoteWallpaper ( TimeRelation . BEFORE , name )
}
val possibleWallpapers = fakeRemoteWallpapers + fakeExpiredRemoteWallpapers
every { mockSettings . currentWallpaperName } returns " "
coEvery { mockLegacyFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
WallpapersUseCases . LegacyInitializeWallpaperUseCase (
appStore ,
mockLegacyDownloader ,
mockLegacyFileManager ,
mockSettings ,
" en-US " ,
possibleWallpapers = possibleWallpapers
) . invoke ( )
val expectedFilteredWallpaper = fakeExpiredRemoteWallpapers [ 0 ]
appStore . waitUntilIdle ( )
assertFalse ( appStore . state . wallpaperState . availableWallpapers . contains ( expectedFilteredWallpaper ) )
verify { mockLegacyFileManager . clean ( Wallpaper . Default , possibleWallpapers ) }
}
@Test
fun `GIVEN leagacy use case and wallpapers that expired and an expired one is selected WHEN invoking initialize use case THEN selected wallpaper is not filtered out` ( ) = runTest {
val fakeRemoteWallpapers = listOf ( " first " , " second " , " third " ) . map { name ->
makeFakeRemoteWallpaper ( TimeRelation . LATER , name )
}
val expiredWallpaper = makeFakeRemoteWallpaper ( TimeRelation . BEFORE , " expired " )
every { mockSettings . currentWallpaperName } returns expiredWallpaper . name
coEvery { mockLegacyFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
WallpapersUseCases . LegacyInitializeWallpaperUseCase (
appStore ,
mockLegacyDownloader ,
mockLegacyFileManager ,
mockSettings ,
" en-US " ,
possibleWallpapers = fakeRemoteWallpapers + listOf ( expiredWallpaper )
) . invoke ( )
appStore . waitUntilIdle ( )
assertTrue ( appStore . state . wallpaperState . availableWallpapers . contains ( expiredWallpaper ) )
assertEquals ( expiredWallpaper , appStore . state . wallpaperState . currentWallpaper )
}
@Test
fun `GIVEN legacy use case and wallpapers that are in promotions outside of locale WHEN invoking initialize use case THEN promotional wallpapers are filtered out` ( ) = runTest {
val fakeRemoteWallpapers = listOf ( " first " , " second " , " third " ) . map { name ->
makeFakeRemoteWallpaper ( TimeRelation . LATER , name )
}
val locale = " en-CA "
every { mockSettings . currentWallpaperName } returns " "
coEvery { mockLegacyFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
WallpapersUseCases . LegacyInitializeWallpaperUseCase (
appStore ,
mockLegacyDownloader ,
mockLegacyFileManager ,
mockSettings ,
locale ,
possibleWallpapers = fakeRemoteWallpapers
) . invoke ( )
appStore . waitUntilIdle ( )
assertTrue ( appStore . state . wallpaperState . availableWallpapers . isEmpty ( ) )
}
@Test
fun `GIVEN legacy use case and available wallpapers WHEN invoking initialize use case THEN available wallpapers downloaded` ( ) = runTest {
val fakeRemoteWallpapers = listOf ( " first " , " second " , " third " ) . map { name ->
makeFakeRemoteWallpaper ( TimeRelation . LATER , name )
}
every { mockSettings . currentWallpaperName } returns " "
coEvery { mockLegacyFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
WallpapersUseCases . LegacyInitializeWallpaperUseCase (
appStore ,
mockLegacyDownloader ,
mockLegacyFileManager ,
mockSettings ,
" en-US " ,
possibleWallpapers = fakeRemoteWallpapers
) . invoke ( )
for ( fakeRemoteWallpaper in fakeRemoteWallpapers ) {
coVerify { mockLegacyDownloader . downloadWallpaper ( fakeRemoteWallpaper ) }
}
}
@Test
fun `GIVEN legacy use case and a wallpaper has not been selected WHEN invoking initialize use case THEN store contains default` ( ) = runTest {
val fakeRemoteWallpapers = listOf ( " first " , " second " , " third " ) . map { name ->
makeFakeRemoteWallpaper ( TimeRelation . LATER , name )
}
every { mockSettings . currentWallpaperName } returns " "
coEvery { mockLegacyFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
WallpapersUseCases . LegacyInitializeWallpaperUseCase (
appStore ,
mockLegacyDownloader ,
mockLegacyFileManager ,
mockSettings ,
" en-US " ,
possibleWallpapers = fakeRemoteWallpapers
) . invoke ( )
appStore . waitUntilIdle ( )
assertTrue ( appStore . state . wallpaperState . currentWallpaper == Wallpaper . Default )
}
@Test
fun `GIVEN legacy use case a wallpaper is selected and there are available wallpapers WHEN invoking initialize use case THEN these are dispatched to the store` ( ) = runTest {
val selectedWallpaper = makeFakeRemoteWallpaper ( TimeRelation . LATER , " selected " )
val fakeRemoteWallpapers = listOf ( " first " , " second " , " third " ) . map { name ->
makeFakeRemoteWallpaper ( TimeRelation . LATER , name )
}
val possibleWallpapers = listOf ( selectedWallpaper ) + fakeRemoteWallpapers
every { mockSettings . currentWallpaperName } returns selectedWallpaper . name
coEvery { mockLegacyFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
WallpapersUseCases . LegacyInitializeWallpaperUseCase (
appStore ,
mockLegacyDownloader ,
mockLegacyFileManager ,
mockSettings ,
" en-US " ,
possibleWallpapers = possibleWallpapers
) . invoke ( )
appStore . waitUntilIdle ( )
assertEquals ( selectedWallpaper , appStore . state . wallpaperState . currentWallpaper )
assertEquals ( possibleWallpapers , appStore . state . wallpaperState . availableWallpapers )
}
@Test
fun `WHEN initializing THEN the default wallpaper is not downloaded` ( ) = runTest {
val fakeRemoteWallpapers = listOf ( " first " , " second " , " third " ) . map { name ->
makeFakeRemoteWallpaper ( TimeRelation . LATER , name )
}
every { mockSettings . currentWallpaper } returns " "
every { mockSettings . currentWallpaper Name } returns " "
coEvery { mockFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
coEvery { mockMetadataFetcher . downloadWallpaperList ( ) } returns fakeRemoteWallpapers
WallpapersUseCases . LegacyInitializeWallpaperUseCase (
WallpapersUseCases . Default InitializeWallpaperUseCase(
appStore ,
mockDownloader ,
mockFileManager ,
mockMetadataFetcher ,
mockSettings ,
" en-US " ,
possibleWallpapers = listOf ( Wallpaper . Default ) + fakeRemoteWallpapers
) . invoke ( )
appStore . waitUntilIdle ( )
@ -68,16 +256,17 @@ class WallpapersUseCasesTest {
val fakeRemoteWallpapers = listOf ( " first " , " second " , " third " ) . map { name ->
makeFakeRemoteWallpaper ( TimeRelation . LATER , name )
}
every { mockSettings . currentWallpaper } returns " "
every { mockSettings . currentWallpaper Name } returns " "
coEvery { mockFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
coEvery { mockMetadataFetcher . downloadWallpaperList ( ) } returns fakeRemoteWallpapers
WallpapersUseCases . Legacy InitializeWallpaperUseCase(
WallpapersUseCases . Default InitializeWallpaperUseCase(
appStore ,
mockDownloader ,
mockFileManager ,
mockMetadataFetcher ,
mockSettings ,
" en-US " ,
possibleWallpapers = listOf ( Wallpaper . Default ) + fakeRemoteWallpapers
) . invoke ( )
appStore . waitUntilIdle ( )
@ -93,22 +282,23 @@ class WallpapersUseCasesTest {
makeFakeRemoteWallpaper ( TimeRelation . BEFORE , name )
}
val possibleWallpapers = fakeRemoteWallpapers + fakeExpiredRemoteWallpapers
every { mockSettings . currentWallpaper } returns " "
every { mockSettings . currentWallpaper Name } returns " "
coEvery { mockFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
coEvery { mockMetadataFetcher . downloadWallpaperList ( ) } returns possibleWallpapers
WallpapersUseCases . Legacy InitializeWallpaperUseCase(
WallpapersUseCases . Default InitializeWallpaperUseCase(
appStore ,
mockDownloader ,
mockFileManager ,
mockMetadataFetcher ,
mockSettings ,
" en-US " ,
possibleWallpapers = possibleWallpapers
) . invoke ( )
val expectedFilteredWallpaper = fakeExpiredRemoteWallpapers [ 0 ]
appStore . waitUntilIdle ( )
assertFalse ( appStore . state . wallpaperState . availableWallpapers . contains ( expectedFilteredWallpaper ) )
v erify { mockFileManager . clean ( Wallpaper . Default , possibl eWallpapers) }
coV erify { mockFileManager . clean ( Wallpaper . Default , fakeRemot eWallpapers) }
}
@Test
@ -117,16 +307,17 @@ class WallpapersUseCasesTest {
makeFakeRemoteWallpaper ( TimeRelation . LATER , name )
}
val expiredWallpaper = makeFakeRemoteWallpaper ( TimeRelation . BEFORE , " expired " )
every { mockSettings . currentWallpaper } returns expiredWallpaper . name
coEvery { mockFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
every { mockSettings . currentWallpaperName } returns expiredWallpaper . name
coEvery { mockFileManager . lookupExpiredWallpaper ( any ( ) ) } returns expiredWallpaper
coEvery { mockMetadataFetcher . downloadWallpaperList ( ) } returns listOf ( expiredWallpaper ) + fakeRemoteWallpapers
WallpapersUseCases . Legacy InitializeWallpaperUseCase(
WallpapersUseCases . Default InitializeWallpaperUseCase(
appStore ,
mockDownloader ,
mockFileManager ,
mockMetadataFetcher ,
mockSettings ,
" en-US " ,
possibleWallpapers = fakeRemoteWallpapers + listOf ( expiredWallpaper )
) . invoke ( )
appStore . waitUntilIdle ( )
@ -140,20 +331,22 @@ class WallpapersUseCasesTest {
makeFakeRemoteWallpaper ( TimeRelation . LATER , name )
}
val locale = " en-CA "
every { mockSettings . currentWallpaper } returns " "
every { mockSettings . currentWallpaper Name } returns " "
coEvery { mockFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
coEvery { mockMetadataFetcher . downloadWallpaperList ( ) } returns fakeRemoteWallpapers
WallpapersUseCases . Legacy InitializeWallpaperUseCase(
WallpapersUseCases . Default InitializeWallpaperUseCase(
appStore ,
mockDownloader ,
mockFileManager ,
mockMetadataFetcher ,
mockSettings ,
locale ,
possibleWallpapers = fakeRemoteWallpapers
) . invoke ( )
appStore . waitUntilIdle ( )
assertTrue ( appStore . state . wallpaperState . availableWallpapers . isEmpty ( ) )
assertEquals ( 1 , appStore . state . wallpaperState . availableWallpapers . size )
assertEquals ( Wallpaper . Default , appStore . state . wallpaperState . availableWallpapers [ 0 ] )
}
@Test
@ -161,16 +354,17 @@ class WallpapersUseCasesTest {
val fakeRemoteWallpapers = listOf ( " first " , " second " , " third " ) . map { name ->
makeFakeRemoteWallpaper ( TimeRelation . LATER , name )
}
every { mockSettings . currentWallpaper } returns " "
every { mockSettings . currentWallpaper Name } returns " "
coEvery { mockFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
coEvery { mockMetadataFetcher . downloadWallpaperList ( ) } returns fakeRemoteWallpapers
WallpapersUseCases . Legacy InitializeWallpaperUseCase(
WallpapersUseCases . Default InitializeWallpaperUseCase(
appStore ,
mockDownloader ,
mockFileManager ,
mockMetadataFetcher ,
mockSettings ,
" en-US " ,
possibleWallpapers = fakeRemoteWallpapers
) . invoke ( )
for ( fakeRemoteWallpaper in fakeRemoteWallpapers ) {
@ -183,16 +377,17 @@ class WallpapersUseCasesTest {
val fakeRemoteWallpapers = listOf ( " first " , " second " , " third " ) . map { name ->
makeFakeRemoteWallpaper ( TimeRelation . LATER , name )
}
every { mockSettings . currentWallpaper } returns " "
every { mockSettings . currentWallpaper Name } returns " "
coEvery { mockFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
coEvery { mockMetadataFetcher . downloadWallpaperList ( ) } returns fakeRemoteWallpapers
WallpapersUseCases . Legacy InitializeWallpaperUseCase(
WallpapersUseCases . Default InitializeWallpaperUseCase(
appStore ,
mockDownloader ,
mockFileManager ,
mockMetadataFetcher ,
mockSettings ,
" en-US " ,
possibleWallpapers = fakeRemoteWallpapers
) . invoke ( )
appStore . waitUntilIdle ( )
@ -206,21 +401,23 @@ class WallpapersUseCasesTest {
makeFakeRemoteWallpaper ( TimeRelation . LATER , name )
}
val possibleWallpapers = listOf ( selectedWallpaper ) + fakeRemoteWallpapers
every { mockSettings . currentWallpaper } returns selectedWallpaper . name
val allWallpapers = listOf ( Wallpaper . Default ) + possibleWallpapers
every { mockSettings . currentWallpaperName } returns selectedWallpaper . name
coEvery { mockFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
coEvery { mockMetadataFetcher . downloadWallpaperList ( ) } returns possibleWallpapers
WallpapersUseCases . Legacy InitializeWallpaperUseCase(
WallpapersUseCases . Default InitializeWallpaperUseCase(
appStore ,
mockDownloader ,
mockFileManager ,
mockMetadataFetcher ,
mockSettings ,
" en-US " ,
possibleWallpapers = possibleWallpapers
) . invoke ( )
appStore . waitUntilIdle ( )
assertEquals ( selectedWallpaper , appStore . state . wallpaperState . currentWallpaper )
assertEquals ( possible Wallpapers, appStore . state . wallpaperState . availableWallpapers )
assertEquals ( all Wallpapers, appStore . state . wallpaperState . availableWallpapers )
}
@Test
@ -228,8 +425,8 @@ class WallpapersUseCasesTest {
val selectedWallpaper = makeFakeRemoteWallpaper ( TimeRelation . LATER , " selected " )
val slot = slot < String > ( )
coEvery { mockFileManager . lookupExpiredWallpaper ( any ( ) ) } returns null
every { mockSettings . currentWallpaper } returns " "
every { mockSettings . currentWallpaper = capture ( slot ) } just runs
every { mockSettings . currentWallpaper Name } returns " "
every { mockSettings . currentWallpaper Name = capture ( slot ) } just runs
WallpapersUseCases . DefaultSelectWallpaperUseCase (
mockSettings ,