package Ġcom . tap pt itude . kotlin mv v mand roid . use case Ċ Ċ import Ġcom . n ha ar man . mockito _ kotlin . wh enever Ċ import Ġcom . tap pt itude . kotlin mv v mand roid . data . network . Ip Api Ċ import Ġcom . tap pt itude . kotlin mv v mand roid . data . network . models . IpAddress Ċ import Ġcom . tap pt itude . kotlin mv v mand roid . data . persistence . ip . Ip Network Repository Ċ import Ġcom . tap pt itude . kotlin mv v mand roid . data . persistence . ip . Ip Repository Ċ import Ġcom . tap pt itude . kotlin mv v mand roid . feature . home . domain . Get IpAddress UseCase Ċ import Ġcom . tap pt itude . kotlin mv v mand roid . prefer ance . User Session Manager Ċ import Ġcom . tap pt itude . kotlin mv v mand roid . providers . Scheduler Provider Ċ import Ġcom . tap pt itude . kotlin mv v mand roid . util . Test Scheduler Provider Ċ import Ġio . reactivex . Single Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . junit . Mockito JUnit Ċ Ċ class ĠGet IpAddress UseCase Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġmock ito Rule Ġ= ĠMockito JUnit . rule () ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġip Api : ĠIp Api ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġuser Session Manager : ĠUser Session Manager ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnetwork Repository : ĠIp Repository ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtest Ip : ĠIp Address ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġget Ip UseCase : ĠGet IpAddress UseCase ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġscheduler Provider : ĠScheduler Provider ĊĊĠĠĠ Ġprivate Ġval Ġtest Ip Value Ġ= Ġ" my _ test _ ip _ here " ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Ip Ġ= ĠIp Address ( test Ip Value ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( ip Api . get IpAddress ()). thenReturn ( Single . just ( test Ip )) ĊĊĠĠĠĠĠĠĠ Ġscheduler Provider Ġ= ĠTest Scheduler Provider () ĊĊĠĠĠĠĠĠĠ Ġnetwork Repository Ġ= ĠIp Network Repository ( ip Api , Ġscheduler Provider ) ĊĊĠĠĠĠĠĠĠ Ġget Ip UseCase Ġ= ĠGet IpAddress UseCase ( network Repository , Ġscheduler Provider , Ġuser Session Manager ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Repository () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Observable Ġ= Ġnetwork Repository . load IpAddress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĊĠĠĠĠĠĠĠ Ġtest Observable . assert Value ( test Ip ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Success () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( ip Api . get IpAddress ()). thenReturn ( Single . just ( test Ip )) ĊĠĠĠĠĠĠĠ Ġval Ġtest Observable Ġ= Ġget Ip UseCase . execute (). test (). await () ĊĊĠĠĠĠĠĠĠ Ġtest Observable . assert Value Count ( 2 ) ĊĠĠĠĠĠĠĠ Ġtest Observable . assert Value At ( 1 ) Ġ{ Ġresult Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Data Ġis ĠGet IpAddress UseCase . Result Data . Success Ġ&& Ġresult Data . data Ġ== Ġtest Ip . ip ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( ip Api . get IpAddress ()). thenReturn ( Single . just ( test Ip )) ĊĠĠĠĠĠĠĠ Ġval Ġtest Observable Ġ= Ġget Ip UseCase . execute (). test (). await () ĊĊĠĠĠĠĠĠĠ Ġtest Observable . assert Value Count ( 2 ) ĊĠĠĠĠĠĠĠ Ġtest Observable . assert Value At ( 0 , ĠGet IpAddress UseCase . Result Data . Loading ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Fail () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġruntime Exception Ġ= ĠRuntimeException (" my _ exception ") ĊĠĠĠĠĠĠĠ Ġwhenever ( ip Api . get IpAddress ()). thenReturn ( Single . error ( runtime Exception )) ĊĠĠĠĠĠĠĠ Ġval Ġtest Observable Ġ= Ġget Ip UseCase . execute (). test (). await () ĊĊĠĠĠĠĠĠĠ Ġtest Observable . assert Value Count ( 2 ) ĊĠĠĠĠĠĠĠ Ġtest Observable . assert Value At ( 1 ) Ġ{ Ġresult Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Data Ġis ĠGet IpAddress UseCase . Result Data . Failure Ġ&& Ġresult Data . throwable Ġ== Ġruntime Exception ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }