/* Ċ Ġ* Ġ ĠCopyright Ġ 2 0 1 8 ĠK eval ĠP ate l . Ċ Ġ* Ċ Ġ* Ġ Ġ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 Ġcom . stand up . app . profile . repo Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġcom . ke val p ate l 2 1 0 6 . common . prefs . User Session Manager Ċ import Ġcom . ke val p ate l 2 1 0 6 . network . Network Api Ċ import Ġcom . ke val p ate l 2 1 0 6 . test utils . Mock Server Manager Ċ import Ġcom . ke val p ate l 2 1 0 6 . utils . Shared Prefs Provider Ċ import Ġio . reactivex . subscribers . Test Subscriber Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . BeforeClass Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ import Ġorg . mockito . Argument Matchers Ċ import Ġorg . mockito . Argument Matchers .* Ċ import Ġorg . mockito . Mockito Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠK eval p ate l 2 1 0 6 Ġon Ġ 0 5 - Dec - 1 7 . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ[ ke val p ate l 2 1 0 6 ]( https :// github . com / ke val p ate l 2 1 0 6 ) Ċ Ġ*/ Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠUser Profile Repo Impl Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmock Server Manager Ġ= ĠMock Server Manager () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm UserProfile Repo Impl : ĠUser Profile Repo Impl ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġshared Prefs : ĠSharedPreferences ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ BeforeClass ĊĠĠĠĠĠĠĠ Ġfun ĠsetUp Class () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠMockito . mock ( Context :: class . java ) ĊĠĠĠĠĠĠĠ Ġshared Prefs Ġ= ĠMockito . mock ( SharedPreferences :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval Ġshared Prefs Editor Ġ= ĠMockito . mock ( SharedPreferences . Editor :: class . java ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( context . get SharedPreferences ( Argument Matchers . any String (), ĠArgument Matchers . any Int ())). thenReturn ( shared Prefs ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( shared Prefs . edit ()). thenReturn ( shared Prefs Editor ) ĊĊĠĠĠĠĠĠĠ Ġmock Server Manager . start Mock WebServer () ĊĠĠĠĠĠĠĠ Ġm UserProfile Repo Impl Ġ= ĠUser Profile Repo Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Api (). get Ret rofit Client ( mock Server Manager . get BaseUrl ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Session Manager ( Shared Prefs Provider ( shared Prefs )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġtear Up () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock Server Manager . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun ĠtestGet UserProfile Success () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Mock Ġthe Ġshared Ġpref r ance ĊĠĠĠĠĠĠĠ ĠMockito .` when `( shared Prefs . getString ( any String (), Ġis Null ())). thenReturn (" 1 4 9 . 3 ") ĊĠĠĠĠĠĠĠ ĠMockito .` when `( shared Prefs . getString ( any String (), Ġany String ())). thenReturn (" 1 4 9 . 3 ") ĊĠĠĠĠĠĠĠ ĠMockito .` when `( shared Prefs . getLong ( any String (), Ġany Long ())). thenReturn ( 1 2 3 4 5 6 7 8 9 ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( shared Prefs . getBoolean ( any String (), Ġany Boolean ())). thenReturn ( true ) ĊĊĠĠĠĠĠĠĠ Ġmock Server Manager . enqueue Response ( File ( mock Server Manager . get Responses Path () Ġ+ Ġ"/ get _ profile _ success . json ")) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġtest Subscriber Ġ= ĠTest Subscriber < Get Profile Response >() ĊĠĠĠĠĠĠĠ Ġm UserProfile Repo Impl . getUser Profile ( 1 2 3 4 5 6 7 8 ). subscribe ( test Subscriber ) ĊĠĠĠĠĠĠĠ Ġtest Subscriber . await Terminal Event () ĊĊĠĠĠĠĠĠĠ Ġtest Subscriber . assert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Value Count ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Value At ( 0 ) Ġ{ Ġt Ġ-> Ġt . email Ġ== Ġ" 1 4 9 . 3 " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Value At ( 1 ) Ġ{ Ġt Ġ-> Ġt . email Ġ== Ġ" test @ example . com " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun ĠtestGet UserProfile User Not Login () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Mock Ġthe Ġshared Ġpreference ĊĠĠĠĠĠĠĠ ĠMockito .` when `( shared Prefs . getString ( any String (), Ġis Null ())). thenReturn ( null ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( shared Prefs . getString ( any String (), Ġany String ())). thenReturn ( null ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( shared Prefs . getLong ( any String (), Ġany Long ())). thenReturn ( 1 2 3 4 5 6 7 8 9 ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( shared Prefs . getBoolean ( any String (), Ġany Boolean ())). thenReturn ( true ) ĊĊĠĠĠĠĠĠĠ Ġmock Server Manager . enqueue Response ( File ( mock Server Manager . get Responses Path () Ġ+ Ġ"/ get _ profile _ success . json ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Subscriber Ġ= ĠTest Subscriber < Get Profile Response >() ĊĠĠĠĠĠĠĠ Ġm UserProfile Repo Impl . getUser Profile ( 1 2 3 4 5 6 7 8 ). subscribe ( test Subscriber ) ĊĠĠĠĠĠĠĠ Ġtest Subscriber . await Terminal Event () ĊĊĠĠĠĠĠĠĠ Ġtest Subscriber . assert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Value Count ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Value At ( 0 ) Ġ{ Ġt Ġ-> Ġt . email Ġ== Ġ" test @ example . com " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun ĠtestGet UserProfile User No Cached Result () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Mock Ġthe Ġshared Ġpref r ance ĊĠĠĠĠĠĠĠ ĠMockito .` when `( shared Prefs . getString ( any String (), Ġis Null ())). thenReturn ( null ) ĊĊĠĠĠĠĠĠĠ Ġmock Server Manager . enqueue Response ( File ( mock Server Manager . get Responses Path () Ġ+ Ġ"/ get _ profile _ success . json ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Subscriber Ġ= ĠTest Subscriber < Get Profile Response >() ĊĠĠĠĠĠĠĠ Ġm UserProfile Repo Impl . getUser Profile ( 1 2 3 4 5 6 7 8 ). subscribe ( test Subscriber ) ĊĠĠĠĠĠĠĠ Ġtest Subscriber . await Terminal Event () ĊĊĠĠĠĠĠĠĠ Ġtest Subscriber . assert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Value Count ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Value At ( 0 ) Ġ{ Ġt Ġ-> Ġt . email Ġ== Ġ" test @ example . com " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġtest Save UserProfile () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Mock Ġthe Ġshared Ġpref r ance ĊĠĠĠĠĠĠĠ ĠMockito .` when `( shared Prefs . getString ( any String (), Ġis Null ())). thenReturn (" 1 4 9 . 3 ") ĊĠĠĠĠĠĠĠ ĠMockito .` when `( shared Prefs . getString ( any String (), Ġany String ())). thenReturn (" 1 4 9 . 3 ") ĊĠĠĠĠĠĠĠ ĠMockito .` when `( shared Prefs . getLong ( any String (), Ġany Long ())). thenReturn ( 1 2 3 4 5 6 7 8 9 ) ĊĊĠĠĠĠĠĠĠ Ġmock Server Manager . enqueue Response ( File ( mock Server Manager . get Responses Path () Ġ+ Ġ"/ save _ profile _ success . json ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Subscriber Ġ= ĠTest Subscriber < Save Profile Response >() ĊĠĠĠĠĠĠĠ Ġm UserProfile Repo Impl . save UserProfile ( name Ġ= Ġ" Test ĠUser ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Male Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Ġ= Ġ" http :// google . com ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġ 1 2 3 . 4 5 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweight Ġ= Ġ 6 7 . 5 F ). subscribe ( test Subscriber ) ĊĠĠĠĠĠĠĠ Ġtest Subscriber . await Terminal Event () ĊĊĠĠĠĠĠĠĠ Ġtest Subscriber . assert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Value Count ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Value At ( 0 ) Ġ{ Ġt Ġ-> Ġt . email Ġ== Ġ" test @ example . com " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Complete () ĊĠĠĠ Ġ} Ċ } Ċ