package Ġorg . kotlin academy Ċ Ċ import Ġorg . kotlin academy . data .* Ċ import Ġorg . kotlin academy . presentation . news . News Presenter Ċ import Ġorg . kotlin academy . presentation . news . News View Ċ import Ġorg . kotlin academy . resp ositor ies . News Repository Ċ import Ġkotlin . test .* Ċ Ċ class ĠNews Presenter UnitTest Ġ: ĠBase UnitTest () Ġ{ ĊĊĠĠĠ Ġ@ Js Name (" getting And Display ing Test ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` When ĠonCreate , Ġloads Ġand Ġdisplays Ġlist Ġof Ġnews `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠNews View () ĊĠĠĠĠĠĠĠ Ġval Ġrepo Ġ= Ġnews Repository Ġ{ Ġsome News Data Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= ĠNews Presenter ( Un conf ined , Ġview , Ġrepo ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġpresenter . onCreate () ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( some News Data . articles , Ġview . news Data ?. filter Is Instance < Article >()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( some News Data . infos , Ġview . news Data ?. filter Is Instance < Info >()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( some News Data . pu zz lers , Ġview . news Data ?. filter Is Instance < P uzz ler >()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 , Ġview . news Data ?. size ) ĊĠĠĠĠĠĠĠ Ġview . assert No Errors () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Js Name (" loader Test ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` When ĠonCreate , Ġloader Ġis Ġdisplayed Ġduring Ġrepository Ġusage Ġbut Ġnot Ġbefore Ġand Ġafter ĠonCreate Ġoperation `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠNews View () ĊĊĠĠĠĠĠĠĠ Ġvar Ġrepository Used Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġrepo Ġ= Ġnews Repository Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( view . loading ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository Used Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsome News Data ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= ĠNews Presenter ( Un conf ined , Ġview , Ġrepo ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( view . loading ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġpresenter . onCreate () ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( repository Used ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( view . loading ) ĊĠĠĠĠĠĠĠ Ġview . assert No Errors () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Js Name (" error Test ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` When Ġrepository Ġreturns Ġerror , Ġit Ġis Ġshown Ġon Ġview `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠNews View () ĊĠĠĠĠĠĠĠ Ġval Ġrepo Ġ= Ġnews Repository Ġ{ Ġthrow Ġsome Error Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= ĠNews Presenter ( Un conf ined , Ġview , Ġrepo ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġpresenter . onCreate () ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertNull ( view . news Data ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġview . display ed Errors . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( some Error , Ġview . display ed Errors [ 0 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Js Name (" refresh Error Test ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` When Ġrepository Ġreturns Ġan Ġerror , Ġrefresh Ġdisplays Ġanother Ġone `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠNews View () ĊĠĠĠĠĠĠĠ Ġval Ġrepo Ġ= Ġnews Repository Ġ{ Ġthrow Ġsome Error Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= ĠNews Presenter ( Un conf ined , Ġview , Ġrepo ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġpresenter . onCreate () ĊĠĠĠĠĠĠĠ Ġpresenter . on Refresh () ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertNull ( view . news Data ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġview . display ed Errors . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( some Error , Ġview . display ed Errors [ 0 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals ( some Error , Ġview . display ed Errors [ 1 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Js Name (" refresh Test ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` When Ġdifferent Ġdata Ġare Ġserved Ġafter Ġrefresh , Ġthey Ġare Ġdisplayed `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠNews View () ĊĠĠĠĠĠĠĠ Ġvar Ġfirst Run Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġrepo Ġ= Ġnews Repository Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Run ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Run Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsome News Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNews Data ( some Articles List 2 Sorted , Ġempty List (), Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= ĠNews Presenter ( Un conf ined , Ġview , Ġrepo ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġpresenter . onCreate () ĊĠĠĠĠĠĠĠ Ġpresenter . on Refresh () ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( some Articles List 2 Sorted , Ġview . news Data ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġview . times Show List Called ) ĊĠĠĠĠĠĠĠ Ġview . assert No Errors () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Js Name (" refresh Display Test ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` During Ġrefresh , Ġswipe Refresh Ġis Ġdisplayed Ġand Ġloading Ġis Ġnot `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠNews View () ĊĠĠĠĠĠĠĠ ĠassertFalse ( view . loading ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( view . refresh ) ĊĠĠĠĠĠĠĠ Ġvar ĠonCreate Run Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġvar Ġtimes Repository Used Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġrepo Ġ= Ġnews Repository Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimes Repository Used ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( onCreate Run ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( view . loading ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( view . refresh ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonCreate Run Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( view . loading ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( view . refresh ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsome News Data ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= ĠNews Presenter ( Un conf ined , Ġview , Ġrepo ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġpresenter . onCreate () ĊĠĠĠĠĠĠĠ Ġpresenter . on Refresh () ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġtimes Repository Used ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( view . loading ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( view . refresh ) ĊĠĠĠĠĠĠĠ Ġview . assert No Errors () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Js Name (" news Order Test ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` News Ġorder Ġtest `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠNews View () ĊĠĠĠĠĠĠĠ Ġval Ġsome News Data Ġ= ĠNews Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticles Ġ= ĠlistOf ( some Article 1 , Ġsome Article 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfos Ġ= ĠlistOf ( some Info ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp uzz lers Ġ= ĠlistOf ( some P uzz ler 2 , Ġsome P uzz ler ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcorrect Order Ġ= ĠlistOf ( some Info , Ġsome Article 1 , Ġsome P uzz ler , Ġsome Article 2 , Ġsome P uzz ler 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġrepo Ġ= Ġnews Repository Ġ{ Ġsome News Data Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= ĠNews Presenter ( Un conf ined , Ġview , Ġrepo ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġpresenter . onCreate () ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( correct Order , Ġview . news Data ) ĊĠĠĠĠĠĠĠ Ġview . assert No Errors () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Js Name (" refresh No Changes Test ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` When Ġnothing Ġchanged , Ġlist Ġis Ġnot Ġcalled Ġagain `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠNews View () ĊĠĠĠĠĠĠĠ Ġval Ġrepo Ġ= Ġnews Repository Ġ{ Ġsome News Data Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= ĠNews Presenter ( Un conf ined , Ġview , Ġrepo ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġpresenter . onCreate () ĊĠĠĠĠĠĠĠ Ġpresenter . on Refresh () ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġview . times Show List Called ) ĊĠĠĠĠĠĠĠ Ġview . assert No Errors () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Js Name (" refresh After Clean Changes Test ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` After Ġcache Ġclean , Ġthe Ġsame Ġdata Ġis Ġdisplayed `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠNews View () ĊĠĠĠĠĠĠĠ Ġval Ġrepo Ġ= Ġnews Repository Ġ{ Ġsome News Data Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= ĠNews Presenter ( Un conf ined , Ġview , Ġrepo ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġpresenter . onCreate () ĊĠĠĠĠĠĠĠ Ġpresenter . clean Cache () ĊĠĠĠĠĠĠĠ Ġpresenter . on Refresh () ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġview . times Show List Called ) ĊĠĠĠĠĠĠĠ Ġview . assert No Errors () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Js Name (" sorting Test ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` News Ġare Ġsorted Ġfrom Ġne vest Ġto Ġoldest `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarticle 1 Ġ= Ġsome Article 1 . copy ( dateTime Ġ= Ġnow ) ĊĠĠĠĠĠĠĠ Ġval Ġinfo 2 Ġ= Ġsome Info . copy ( dateTime Ġ= Ġnow Ġ- Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġp uzz ler 3 Ġ= Ġsome P uzz ler . copy ( dateTime Ġ= Ġnow Ġ- Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġarticle 4 Ġ= Ġsome Article 2 . copy ( dateTime Ġ= Ġnow Ġ- Ġ 2 0 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġp uzz ler 5 Ġ= Ġsome P uzz ler 2 . copy ( dateTime Ġ= Ġnow Ġ- Ġ 3 0 0 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġcheck News ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠNews Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticles Ġ= ĠlistOf ( article 1 , Ġarticle 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfos Ġ= ĠlistOf ( info 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp uzz lers Ġ= ĠlistOf ( pu zz ler 5 , Ġp uzz ler 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠlistOf ( article 1 , Ġinfo 2 , Ġp uzz ler 3 , Ġarticle 4 , Ġp uzz ler 5 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck News ( data : ĠNews Data , Ġresult : ĠList < News >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠNews View () ĊĠĠĠĠĠĠĠ Ġval Ġrepo Ġ= Ġnews Repository Ġ{ Ġdata Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= ĠNews Presenter ( Un conf ined , Ġview , Ġrepo ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġpresenter . onCreate () ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( result , Ġview . news Data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnews Repository ( get News Data : Ġ() Ġ-> ĠNews Data ) Ġ= Ġobject Ġ: ĠNews Repository Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġget News Data (): ĠNews Data Ġ= Ġget News Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠNews View () Ġ= Ġobject Ġ: ĠNews View Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġloading : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġrefresh : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġnews Data : ĠList < News >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġdisplayed Errors : ĠList < Throwable > Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġvar Ġtimes Show List Called Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshow List ( news : ĠList < News >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimes Show List Called ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnews Data Ġ= Ġnews ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshow Error ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplayed Errors Ġ+= Ġerror ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġlog Error ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġerror ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġassert No Errors () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplayed Errors . forEach Ġ{ Ġthrow Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġdisplayed Errors . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠC ancellable () Ġ= Ġobject Ġ{} Ċ }