package Ġio . github . d roid ka igi . feed er Ċ Ċ import Ġio . github . d roid ka igi . feed er . data . Feed Repository Impl Ċ import Ġio . github . d roid ka igi . feed er . data . fake Feed Api Ċ import Ġio . github . d roid ka igi . feed er . data . fake Feed Item Dao Ċ import Ġio . github . d roid ka igi . feed er . data . fake UserData Store Ċ import Ġio . github . d roid ka igi . feed er . feed . Feed ViewModel Ċ import Ġio . github . d roid ka igi . feed er . feed . Feed ViewModel . Event . Change Favorite Filter Ċ import Ġio . github . d roid ka igi . feed er . feed . Feed ViewModel . Event . Toggle Favorite Ċ import Ġio . github . d roid ka igi . feed er . feed . fake Feed ViewModel Ċ import Ġio . github . d roid ka igi . feed er . view model . Real Feed ViewModel Ċ import Ġio . kot est . matchers . comp ar ables . shouldBe GreaterThan Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . kot est . matchers . types . shouldBe InstanceOf Ċ import Ġkotlinx . coroutines . Internal Cor outines Api Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . Parameterized Ċ Ċ @ Internal Cor outines Api Ċ @ RunWith ( Parameterized :: class ) Ċ class ĠFeed ViewModel Test ( ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġprivate Ġval Ġfeed ViewModel Factory : ĠFeed ViewModel Factory , Ċ ) Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġcoroutine Test Rule Ġ= ĠCor outine Test Rule () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcontents () Ġ= Ġcoroutine Test Rule . test Dispatcher . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠReplace Ġwhen Ġit Ġfixed Ġhttps :// github . com / cash app / tur bine / issues / 1 0 ĊĠĠĠĠĠĠĠ Ġval Ġfeed ViewModel Ġ= Ġfeed ViewModel Factory . create () ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Content Ġ= Ġfeed ViewModel . state . value . filtered Feed Contents ĊĊĠĠĠĠĠĠĠ Ġfirst Content . size ĠshouldBe GreaterThan Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfavorite _ Add () Ġ= Ġcoroutine Test Rule . test Dispatcher . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfeed ViewModel Ġ= Ġfeed ViewModel Factory . create () ĊĠĠĠĠĠĠĠ Ġval Ġfirst Content Ġ= Ġfeed ViewModel . state . value . filtered Feed Contents ĊĠĠĠĠĠĠĠ Ġfirst Content . favorites ĠshouldBe Ġset Of () ĊĊĠĠĠĠĠĠĠ Ġfeed ViewModel . event ( Toggle Favorite ( first Content . feed Item Contents [ 0 ])) ĊĊĠĠĠĠĠĠĠ Ġval Ġsecond Content Ġ= Ġfeed ViewModel . state . value . filtered Feed Contents ĊĠĠĠĠĠĠĠ Ġsecond Content . favorites ĠshouldBe Ġset Of ( first Content . feed Item Contents [ 0 ]. id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfavorite _ Remove () Ġ= Ġcoroutine Test Rule . test Dispatcher . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfeed ViewModel Ġ= Ġfeed ViewModel Factory . create () ĊĠĠĠĠĠĠĠ Ġval Ġfirst Content Ġ= Ġfeed ViewModel . state . value . filtered Feed Contents ĊĠĠĠĠĠĠĠ Ġfirst Content . favorites ĠshouldBe Ġset Of () ĊĊĠĠĠĠĠĠĠ Ġfeed ViewModel . event ( Toggle Favorite ( feed Item Ġ= Ġfirst Content . feed Item Contents [ 0 ])) ĊĠĠĠĠĠĠĠ Ġfeed ViewModel . event ( Toggle Favorite ( feed Item Ġ= Ġfirst Content . feed Item Contents [ 0 ])) ĊĊĠĠĠĠĠĠĠ Ġval Ġsecond Content Ġ= Ġfeed ViewModel . state . value . filtered Feed Contents ĊĠĠĠĠĠĠĠ Ġsecond Content . favorites ĠshouldBe Ġset Of () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfavorite _ Filter () Ġ= Ġcoroutine Test Rule . test Dispatcher . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfeed ViewModel Ġ= Ġfeed ViewModel Factory . create () ĊĠĠĠĠĠĠĠ Ġval Ġfirst Content Ġ= Ġfeed ViewModel . state . value . filtered Feed Contents ĊĠĠĠĠĠĠĠ Ġfirst Content . favorites ĠshouldBe Ġset Of () ĊĠĠĠĠĠĠĠ Ġval Ġfavorite Contents Ġ= Ġfirst Content . feed Item Contents [ 1 ] ĊĊĠĠĠĠĠĠĠ Ġfeed ViewModel . event ( Toggle Favorite ( feed Item Ġ= Ġfavorite Contents )) ĊĠĠĠĠĠĠĠ Ġfeed ViewModel . event ( Change Favorite Filter ( Filters ( filter Favorite Ġ= Ġtrue ))) ĊĊĠĠĠĠĠĠĠ Ġval Ġsecond Content Ġ= Ġfeed ViewModel . state . value . filtered Feed Contents ĊĠĠĠĠĠĠĠ Ġsecond Content . contents [ 0 ]. first . id ĠshouldBe Ġfavorite Contents . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġerror When Fetch () Ġ= Ġcoroutine Test Rule . test Dispatcher . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfeed ViewModel Ġ= Ġfeed ViewModel Factory . create ( error Fetch Data Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġfirst Content Ġ= Ġfeed ViewModel . state . value . filtered Feed Contents ĊĠĠĠĠĠĠĠ Ġfirst Content . favorites ĠshouldBe Ġset Of () ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Effect Ġ= Ġfeed ViewModel . effect . first () ĊĊĠĠĠĠĠĠĠ Ġfirst Effect . shouldBe InstanceOf < Feed ViewModel . Effect . ErrorMessage >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFeed ViewModel Factory ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠviewModel Factory : Ġ( error Fetch Data : ĠBoolean ) Ġ-> ĊĠĠĠĠĠĠĠ ĠFeed ViewModel , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Fetch Data : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġ): ĠFeed ViewModel Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠviewModel Factory ( error Fetch Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Parameterized . Parameters ( name Ġ= Ġ"{ 0 }") ĊĠĠĠĠĠĠĠ Ġfun Ġdata () Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Real ĠViewModel Ġand ĠRepository ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeed ViewModel Factory Ġ{ Ġerror Fetch Data : ĠBoolean Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal Feed ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository Ġ= ĠFeed Repository Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Api Ġ= Ġfake Feed Api ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Fetch Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Error . ApiException . Server Exception ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Item Dao Ġ= Ġfake Feed Item Dao ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Fetch Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Error . Unknown Exception ( Throwable (" Database ĠException ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store Ġ= Ġfake UserData Store () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fake ViewModel ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeed ViewModel Factory Ġ{ Ġerror Fetch Data : ĠBoolean Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfake Feed ViewModel ( error Fetch Data Ġ= Ġerror Fetch Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ