/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 6 ĠOl mo ĠGal leg os ĠH ern Ã¡n dez Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġes . v og h dev . pr jd agger 2 Ċ Ċ import Ġandroid . content . Context Ċ Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito Annotations Ċ import Ġorg . mockito . invocation . Invocation On Mock Ċ import Ġorg . mockito . stub bing . Answer Ċ Ċ import Ġes . v og h dev . pr jd agger 2 . global . App Ċ import Ġes . v og h dev . pr jd agger 2 . global . di . Main Module Ċ import Ġes . v og h dev . pr jd agger 2 . global . di . Root Component Ċ import Ġes . v og h dev . pr jd agger 2 . global . model . User Ċ import Ġes . v og h dev . pr jd agger 2 . inter actor . Get Users Interactor Ċ import Ġes . v og h dev . pr jd agger 2 . ui . presenter . UserList Presenter Ċ import Ġes . v og h dev . pr jd agger 2 . use case . Get Users Ċ Ċ import Ġjunit . framework . Assert . assertNotNull Ċ import Ġorg . mockito . Matchers . any Ċ import Ġorg . mockito . Mockito . do Answer Ċ import Ġorg . mockito . Mockito . mock Ċ import Ġorg . mockito . Mockito . times Ċ import Ġorg . mockito . Mockito . verify Ċ import Ġorg . mockito . Mockito .` when ` Ċ Ċ class ĠUser List Presenter Test Ġ: ĠBase UnitTest () Ġ{ ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġinternal Ġvar Ġmock Interactor : ĠGet Users Interactor ? Ġ= Ġnull ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġinternal Ġvar Ġmock Error Interactor : ĠGet Users Interactor ? Ġ= Ġnull ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġinternal Ġvar Ġmock App : ĠApp ? Ġ= Ġnull ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġinternal Ġvar Ġmock Component : ĠRoot Component ? Ġ= Ġnull ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġinternal Ġvar Ġmock Module : ĠMain Module ? Ġ= Ġnull ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġinternal Ġvar Ġmock Context : ĠContext ? Ġ= Ġnull ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġinternal Ġvar Ġmock View : ĠUser ListView ? Ġ= Ġnull ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġinternal Ġvar Ġmock User : ĠUser ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito Annotations . init Mocks ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Create AN on Null Mock ed Presenter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġgiven AM ock ed Presenter () ĊĠĠĠĠĠĠĠ ĠassertNotNull ( presenter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Show Loading On Start () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġgiven AM ock ed Presenter () ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġpresenter . initialize () ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġverify ( mock View !! , Ġtimes ( 1 )). show Loading () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Call Get Users On Start () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġgiven AM ock ed Presenter () ĊĠĠĠĠĠĠĠ Ġpresenter . initialize () ĊĠĠĠĠĠĠĠ Ġverify ( mock Interactor !! , Ġtimes ( 1 )). get Async ( any ( Get Users . Listener :: class . java )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Show No Internet Message When Internet IsNot Available () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġgiven AM ock ed Presenter With No Internet () ĊĠĠĠĠĠĠĠ Ġpresenter . initialize () ĊĠĠĠĠĠĠĠ Ġverify ( mock View !! , Ġtimes ( 1 )). show No Internet Message () ĊĠĠĠĠĠĠĠ Ġverify ( mock View !! , Ġtimes ( 1 )). hide Loading () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Not Show UserList When Internet IsNot Available () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġgiven AM ock ed Presenter With No Internet () ĊĠĠĠĠĠĠĠ Ġpresenter . initialize () ĊĠĠĠĠĠĠĠ Ġverify ( mock View !! , Ġtimes ( 1 )). hide Loading () ĊĠĠĠĠĠĠĠ Ġverify ( mock View !! , Ġtimes ( 0 )). show UserList ( ArrayList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Not Show API Error When Internet IsNot Available () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġgiven AM ock ed Presenter With No Internet () ĊĠĠĠĠĠĠĠ Ġpresenter . initialize () ĊĠĠĠĠĠĠĠ Ġverify ( mock View !! , Ġtimes ( 1 )). hide Loading () ĊĠĠĠĠĠĠĠ Ġverify ( mock View !! , Ġtimes ( 0 )). show UserList Error ( any ( Exception :: class . java )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Show ErrorMessage When Th eres An Error InThe API () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġgiven AM ock ed Presenter With Broken API () ĊĠĠĠĠĠĠĠ Ġpresenter . initialize () ĊĠĠĠĠĠĠĠ Ġverify ( mock View !! , Ġtimes ( 1 )). hide Loading () ĊĠĠĠĠĠĠĠ Ġverify ( mock View !! , Ġtimes ( 1 )). show UserList Error ( any ( Exception :: class . java )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Not Show No Internet Message When There Is An Error InThe API () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġgiven AM ock ed Presenter With Broken API () ĊĠĠĠĠĠĠĠ Ġpresenter . initialize () ĊĠĠĠĠĠĠĠ Ġverify ( mock View !! , Ġtimes ( 1 )). hide Loading () ĊĠĠĠĠĠĠĠ Ġverify ( mock View !! , Ġtimes ( 0 )). show No Internet Message () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Show UserList After Api Returns Results () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Answer ( object Ġ: ĠAnswer < Any > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( Throwable :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġanswer ( invocation : ĠInvocation On Mock ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusers Ġ= Ġgenerate Mock UserList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġinvocation . arguments [ 0 ] Ġas ĠGet Users . Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Users Received ( users , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}). ` when `( mock Interactor !! ). get Async ( any ( Get Users . Listener :: class . java )) ĊĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġgiven AM ock ed Presenter () ĊĠĠĠĠĠĠĠ Ġpresenter . initialize () ĊĠĠĠĠĠĠĠ Ġverify ( mock View !! , Ġtimes ( 1 )). show UserList ( ArrayList ()) ĊĠĠĠĠĠĠĠ Ġverify ( mock View !! , Ġtimes ( 1 )). hide Loading () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Display UserName When AR ow Is Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġgiven AM ock ed Presenter () ĊĠĠĠĠĠĠĠ Ġmock User ?. let Ġ{ Ġpresenter . on User Row Clicked ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġmock User ?. let Ġ{ Ġverify ( mock View !! , Ġtimes ( 1 )). show User Clicked Message ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġmock User ?. let Ġ{ Ġverify ( mock View !! , Ġtimes ( 0 )). make User Say Hello ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Display A Hello Message When User Picture Is Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġgiven AM ock ed Presenter () ĊĠĠĠĠĠĠĠ Ġmock User ?. let Ġ{ Ġpresenter . on User Picture Clicked ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġmock User ?. let Ġ{ Ġverify ( mock View !! , Ġtimes ( 1 )). make User Say Hello ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġmock User ?. let Ġ{ Ġverify ( mock View !! , Ġtimes ( 0 )). show User Clicked Message ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Do Nothing On Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġgiven AM ock ed Presenter () ĊĠĠĠĠĠĠĠ Ġpresenter . resume () ĊĠĠĠĠĠĠĠ Ġverify ( mock Interactor !! , Ġtimes ( 0 )). get Async ( any ( Get Users . Listener :: class . java )) ĊĠĠĠĠĠĠĠ Ġverify ( mock Error Interactor !! , Ġtimes ( 0 )). get Async ( any ( Get Users . Listener :: class . java )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Do Nothing On Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġgiven AM ock ed Presenter () ĊĠĠĠĠĠĠĠ Ġpresenter . pause () ĊĠĠĠĠĠĠĠ Ġverify ( mock Interactor !! , Ġtimes ( 0 )). get Async ( any ( Get Users . Listener :: class . java )) ĊĠĠĠĠĠĠĠ Ġverify ( mock Error Interactor !! , Ġtimes ( 0 )). get Async ( any ( Get Users . Listener :: class . java )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġshould Do Nothing On Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġgiven AM ock ed Presenter () ĊĠĠĠĠĠĠĠ Ġpresenter . destroy () ĊĠĠĠĠĠĠĠ Ġverify ( mock Interactor !! , Ġtimes ( 0 )). get Async ( any ( Get Users . Listener :: class . java )) ĊĠĠĠĠĠĠĠ Ġverify ( mock Error Interactor !! , Ġtimes ( 0 )). get Async ( any ( Get Users . Listener :: class . java )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgiven AM ock ed Environment () Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( mock Context !!. application Context ). thenReturn ( mock App ) ĊĠĠĠĠĠĠĠ Ġ` when `( mock App !!. component ). thenReturn ( mock Component ) ĊĠĠĠĠĠĠĠ Ġ` when `( mock App !!. main Module ). thenReturn ( mock Module ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgiven AM ock ed Presenter (): ĠUser List Presenter Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven AM ock ed Environment () ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġmock Context ?. let Ġ{ ĠUser List Presenter ( it , Ġmock Interactor ) Ġ} ĊĠĠĠĠĠĠĠ Ġpresenter !!. view Ġ= Ġmock View !! ĊĠĠĠĠĠĠĠ Ġreturn Ġpresenter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgiven AM ock ed Presenter With No Internet (): ĠUser List Presenter Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven AM ock ed Environment () ĊĠĠĠĠĠĠĠ Ġdo Answer ( object Ġ: ĠAnswer < Any > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( Throwable :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġanswer ( invocation : ĠInvocation On Mock ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( invocation . arguments [ 0 ] Ġas ĠGet Users . Listener ). on No Internet Available () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}). ` when `( mock Error Interactor !! ). get Async ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany ( Get Users . Listener :: class . java )) ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġmock Context ?. let Ġ{ ĠUser List Presenter ( it , Ġmock Error Interactor ) Ġ} ĊĠĠĠĠĠĠĠ Ġpresenter !!. view Ġ= Ġmock View !! ĊĠĠĠĠĠĠĠ Ġreturn Ġpresenter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgiven AM ock ed Presenter With Broken API (): ĠUser List Presenter Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven AM ock ed Environment () ĊĠĠĠĠĠĠĠ Ġdo Answer ( object Ġ: ĠAnswer < Any > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( Throwable :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġanswer ( invocation : ĠInvocation On Mock ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( invocation . arguments [ 0 ] Ġas ĠGet Users . Listener ). onError ( Exception (" Un parse able ĠJSON ĠMessage ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}). ` when `( mock Error Interactor !! ). get Async ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany ( Get Users . Listener :: class . java )) ĊĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġmock Context ?. let Ġ{ ĠUser List Presenter ( it , Ġmock Error Interactor ) Ġ} ĊĠĠĠĠĠĠĠ Ġpresenter !!. view Ġ= Ġmock View !! ĊĠĠĠĠĠĠĠ Ġreturn Ġpresenter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgiven AM ock ed User (): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmock ( User :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ