@ -36,48 +36,61 @@ class AppStateTest {
)
)
)
)
var result = state . getFilteredStories ( 2 )
val result = state . getFilteredStories ( )
assertNull ( result . firstOrNull { it . category != POCKET _STORIES _DEFAULT _CATEGORY _NAME } )
result = state . getFilteredStories ( 5 )
assertNull ( result . firstOrNull { it . category != POCKET _STORIES _DEFAULT _CATEGORY _NAME } )
assertNull ( result . firstOrNull { it . category != POCKET _STORIES _DEFAULT _CATEGORY _NAME } )
}
}
@Test
@Test
fun `GIVEN no category is selected WHEN getFilteredStories is called THEN no more than the indicated number of stories are returned` ( ) {
fun `GIVEN no category is selected WHEN getFilteredStories is called THEN no more than the default stories number are returned from the default category` ( ) {
val defaultStoriesCategoryWithManyStories = PocketRecommendedStoriesCategory (
POCKET _STORIES _DEFAULT _CATEGORY _NAME ,
getFakePocketStories ( POCKET _STORIES _TO _SHOW _COUNT + 2 )
)
val state = AppState (
val state = AppState (
pocketStoriesCategories = listOf (
pocketStoriesCategories = listOf (
otherStoriesCategory , anotherStoriesCategory , defaultStoriesCategory
otherStoriesCategory , anotherStoriesCategory , defaultStoriesCategory WithManyStories
)
)
)
)
// Asking for fewer than available
val result = state . getFilteredStories ( )
var result = state . getFilteredStories ( 2 )
assertEquals ( 2 , result . size )
// Asking for more than available
assertEquals ( POCKET _STORIES _TO _SHOW _COUNT , result . size )
result = state . getFilteredStories ( 5 )
assertEquals ( 3 , result . size )
}
}
@Test
@Test
fun `GIVEN a category is selected WHEN getFilteredStories is called for fewer than in the category THEN only stories from that category are returned`( ) {
fun `GIVEN a category is selected WHEN getFilteredStories is called THEN only stories from that category are returned`( ) {
val state = AppState (
val state = AppState (
pocketStoriesCategories = listOf ( otherStoriesCategory , anotherStoriesCategory , defaultStoriesCategory ) ,
pocketStoriesCategories = listOf ( otherStoriesCategory , anotherStoriesCategory , defaultStoriesCategory ) ,
pocketStoriesCategoriesSelections = listOf ( PocketRecommendedStoriesSelectedCategory ( otherStoriesCategory . name ) )
pocketStoriesCategoriesSelections = listOf ( PocketRecommendedStoriesSelectedCategory ( otherStoriesCategory . name ) )
)
)
var result = state . getFilteredStories ( 2 )
val result = state . getFilteredStories ( )
assertEquals ( 2 , result . size )
assertNull ( result . firstOrNull { it . category != otherStoriesCategory . name } )
result = state . getFilteredStories ( 3 )
assertEquals ( 3 , result . size )
assertNull ( result . firstOrNull { it . category != otherStoriesCategory . name } )
assertNull ( result . firstOrNull { it . category != otherStoriesCategory . name } )
}
}
@Test
@Test
fun `GIVEN two categories are selected WHEN getFilteredStories is called for fewer than in both THEN only stories from those categories are returned` ( ) {
fun `GIVEN a category is selected WHEN getFilteredStories is called THEN no more than the default stories number are returned from the selected category` ( ) {
val otherStoriesCategoryWithManyStories =
PocketRecommendedStoriesCategory (
" other " ,
getFakePocketStories ( POCKET _STORIES _TO _SHOW _COUNT + 2 , " other " )
)
val state = AppState (
pocketStoriesCategories =
listOf ( otherStoriesCategoryWithManyStories , anotherStoriesCategory , defaultStoriesCategory ) ,
pocketStoriesCategoriesSelections =
listOf ( PocketRecommendedStoriesSelectedCategory ( otherStoriesCategoryWithManyStories . name ) )
)
val result = state . getFilteredStories ( )
assertEquals ( POCKET _STORIES _TO _SHOW _COUNT , result . size )
}
@Test
fun `GIVEN two categories are selected WHEN getFilteredStories is called THEN only stories from those categories are returned` ( ) {
val state = AppState (
val state = AppState (
pocketStoriesCategories = listOf ( otherStoriesCategory , anotherStoriesCategory , defaultStoriesCategory ) ,
pocketStoriesCategories = listOf ( otherStoriesCategory , anotherStoriesCategory , defaultStoriesCategory ) ,
pocketStoriesCategoriesSelections = listOf (
pocketStoriesCategoriesSelections = listOf (
@ -86,15 +99,7 @@ class AppStateTest {
)
)
)
)
var result = state . getFilteredStories ( 2 )
val result = state . getFilteredStories ( )
assertEquals ( 2 , result . size )
assertNull (
result . firstOrNull {
it . category != otherStoriesCategory . name && it . category != anotherStoriesCategory . name
}
)
result = state . getFilteredStories ( 6 )
assertEquals ( 6 , result . size )
assertEquals ( 6 , result . size )
assertNull (
assertNull (
result . firstOrNull {
result . firstOrNull {
@ -103,23 +108,6 @@ class AppStateTest {
)
)
}
}
@Test
fun `GIVEN two categories are selected WHEN getFilteredStories is called for an odd number of stories THEN there are more by one stories from the newest category` ( ) {
val state = AppState (
pocketStoriesCategories = listOf ( otherStoriesCategory , anotherStoriesCategory , defaultStoriesCategory ) ,
pocketStoriesCategoriesSelections = listOf (
PocketRecommendedStoriesSelectedCategory ( otherStoriesCategory . name , selectionTimestamp = 0 ) ,
PocketRecommendedStoriesSelectedCategory ( anotherStoriesCategory . name , selectionTimestamp = 1 )
)
)
val result = state . getFilteredStories ( 5 )
assertEquals ( 5 , result . size )
assertEquals ( 2 , result . filter { it . category == otherStoriesCategory . name } . size )
assertEquals ( 3 , result . filter { it . category == anotherStoriesCategory . name } . size )
}
@Test
@Test
fun `GIVEN no category is selected WHEN getFilteredStoriesCount is called THEN return an empty result` ( ) {
fun `GIVEN no category is selected WHEN getFilteredStoriesCount is called THEN return an empty result` ( ) {
val result = getFilteredStoriesCount ( emptyList ( ) , 1 )
val result = getFilteredStoriesCount ( emptyList ( ) , 1 )
@ -250,7 +238,7 @@ class AppStateTest {
)
)
)
)
val result = state . getFilteredStories ( 6 )
val result = state . getFilteredStories ( )
assertEquals ( 6 , result . size )
assertEquals ( 6 , result . size )
assertSame ( secondCategory . stories [ 2 ] , result . first ( ) )
assertSame ( secondCategory . stories [ 2 ] , result . first ( ) )
@ -271,7 +259,7 @@ class AppStateTest {
)
)
)
)
val result = state . getFilteredStories ( 6 )
val result = state . getFilteredStories ( )
assertEquals ( 3 , result . size )
assertEquals ( 3 , result . size )
assertNull ( result . firstOrNull { it . category != anotherStoriesCategory . name } )
assertNull ( result . firstOrNull { it . category != anotherStoriesCategory . name } )