package Ġcom . kar h oo . sdk . api Ċ Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġcom . github . tom ake hur st . wire mock . junit . Wire Mock Rule Ċ import Ġcom . kar h oo . sdk . api . model . Authentication Method Ċ import Ġcom . kar h oo . sdk . api . model . Credentials Ċ import Ġcom . kar h oo . sdk . api . model . UserInfo Ċ import Ġcom . kar h oo . sdk . api . network . response . Resource Ċ import Ġcom . kar h oo . sdk . api . test runner . SDK Test Config Ċ import Ġcom . kar h oo . sdk . api . test runner . Test SDK Config Ċ import Ġcom . kar h oo . sdk . api . util . Server Robot . Companion . TOKEN Ċ import Ġcom . kar h oo . sdk . api . util . Server Robot . Companion . USER _ INFO Ċ import Ġcom . kar h oo . sdk . api . util . server Robot Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġjava . net . Http URLConnection . HTTP _ OK Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠAuth Login IntegrationTest Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġwire Mock Rule Ġ= ĠWire Mock Rule ( SDK Test Config . wire Mock Options ) ĊĊĠĠĠ Ġprivate Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠKar h oo SDK Configuration Provider . set Config ( configuration Ġ= ĠTest SDK Config ( context Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument ation Registry . get Instrumentation (). context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthentication Method Ġ= ĠAuthentication Method . Token Exchange (" clientId ", Ġ" scope "))) ĊĠĠĠĠĠĠĠ Ġserver Robot Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth Token Response ( code Ġ= ĠHTTP _ OK , Ġresponse Ġ= ĠTOKEN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= ĠPair (" accept ", Ġ" application / json ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth User Response ( code Ġ= ĠHTTP _ OK , Ġresponse Ġ= ĠUSER _ INFO ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ ĠKar h oo SDK Configuration Provider . set Config ( configuration Ġ= ĠTest SDK Config ( context Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument ation Registry . get Instrumentation (). context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthentication Method Ġ= ĠAuthentication Method . Kar h oo User ())) ĊĠĠĠĠĠĠĠ Ġwire Mock Rule . reset All () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGiven : ĠĠ ĠThe Ġuser Ġlogs Ġin ĊĠĠĠĠ Ġ* ĠWhen : ĠĠĠ ĠA Ġsuccessful Ġresponse Ġhas Ġbeen Ġreturned ĊĠĠĠĠ Ġ* ĠThen : ĠĠĠ ĠThe Ġresponse Ġpayload Ġshould Ġbe Ġvalid ĊĠĠĠĠ Ġ**/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlogin With Token Success () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠUserInfo ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ ĠKar h oo Api . auth Service . login (" 1 2 3 "). execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġit . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). isNotNull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGiven : ĠĠ ĠThe Ġuser Ġlogs Ġin ĊĠĠĠĠ Ġ* ĠWhen : ĠĠĠ ĠA Ġsuccessful Ġresponse Ġhas Ġbeen Ġreturned ĊĠĠĠĠ Ġ* ĠThen : ĠĠĠ ĠThe Ġresponse Ġpayload Ġshould Ġbe Ġvalid ĊĠĠĠĠ Ġ**/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlogin Success () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠUserInfo ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ ĠKar h oo Api . auth Service . login ( Credentials ( accessToken Ġ= Ġ" 1 2 3 4 5 6 ", Ġrefresh Token Ġ= Ġ" z xy ", Ġexpires In Ġ= Ġ 1 L )). execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġit . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). isNotNull ĊĠĠĠ Ġ} Ċ } Ċ