package Ġcom . red iss i . tr akt Ċ Ċ import Ġcom . red iss i . tr akt . entities . AccessToken Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . am sh ove . k lu ent . should Not BeNull Ċ import Ġorg . am sh ove . k lu ent . should Not BeNull OrEmpty Ċ import Ġorg . am sh ove . k lu ent . should Not Contain Ċ import Ġorg . am sh ove . k lu ent . should Start With Ċ import Ġorg . junit . Test Ċ import Ġretrofit 2 . Response Ċ import Ġjava . io . IOException Ċ import Ġjava . math . BigInteger Ċ import Ġjava . security . Secure Random Ċ import Ġkotlin . test . fail Ċ Ċ /** Ċ Ġ* ĠThis Ġtest Ġshould ĠNOT Ġbe Ġrun Ġwith Ġthe Ġregular Ġtest Ġsuite . ĠIt Ġrequires Ġa Ġvalid , Ġtemporary Ġ(! ) Ġauth Ġcode Ġto Ġbe Ġset . Ċ Ġ*/ Ċ class ĠAuth Test Ġ: ĠBase TestCase (), ĠTest Response Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġtr akt : ĠTr akt Ġ= ĠAuth Test . tr akt ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` get Ġauthorization `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsample State Ġ= ĠBigInteger ( 1 3 0 , ĠSecure Random ()). toString ( 3 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġauth Url Ġ= Ġtr akt . build Authorization Url ( sample State ) ĊĠĠĠĠĠĠĠ Ġauth Url . should Not BeNull OrEmpty () ĊĠĠĠĠĠĠĠ Ġauth Url . should Start With ( Tr akt . get Oauth 2 Authorization Url ( tr akt . staging )) ĊĠĠĠĠĠĠĠ Ġ// Ġtr akt Ġdoes Ġnot Ġsupport Ġscopes , Ġso Ġdon 't Ġsend Ġone Ġ( server Ġsets Ġdefault Ġscope ) ĊĠĠĠĠĠĠĠ Ġauth Url . should Not Contain (" scope ") ĊĠĠĠĠĠĠĠ Ġprintln (" Get Ġan Ġauth Ġcode Ġat Ġthe Ġfollowing ĠURI : Ġ$ auth Url ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġ` get Ġaccess Ġtoken `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( TEST _ CLIENT _ SECRET . isEmpty () Ġ|| ĠTEST _ AUTH _ CODE . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" Skipping Ġget Ġaccess Ġtoken Ġtest , Ġno Ġvalid Ġauth Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġtr akt . exchange Code For AccessToken ( TEST _ AUTH _ CODE ) ĊĠĠĠĠĠĠĠ Ġassert AccessToken Response ( response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġ` refresh Ġaccess Ġtoken `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( TEST _ CLIENT _ SECRET . isEmpty () Ġ|| ĠTEST _ REFRESH _ TOKEN . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" Skipping Ġrefresh Ġaccess Ġtoken Ġtest , Ġno Ġvalid Ġauth Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtr akt . refresh Token Ġ= ĠTEST _ REFRESH _ TOKEN ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġtr akt . refresh AccessToken ( tr akt . refresh Token ) ĊĠĠĠĠĠĠĠ Ġassert AccessToken Response ( response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert AccessToken Response ( response : ĠResponse < AccessToken >) Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Successful Response ( response , Ġtr akt ) ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠ Ġbody . should Not BeNull () ĊĠĠĠĠĠĠĠ Ġbody . accessToken . should Not BeNull OrEmpty () ĊĠĠĠĠĠĠĠ Ġbody . refresh Token . should Not BeNull OrEmpty () ĊĠĠĠĠĠĠĠ Ġprintln (" Retrie ved Ġaccess Ġtoken : Ġ" Ġ+ Ġbody . accessToken ) ĊĠĠĠĠĠĠĠ Ġprintln (" Retrie ved Ġrefresh Ġtoken : Ġ" Ġ+ Ġbody . refresh Token ) ĊĠĠĠĠĠĠĠ Ġprintln (" Retrie ved Ġscope : Ġ" Ġ+ Ġbody . scope ) ĊĠĠĠĠĠĠĠ Ġprintln (" Retrie ved Ġexpires Ġin : Ġ" Ġ+ Ġbody . expires In Ġ+ Ġ" Ġseconds ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTEST _ CLIENT _ SECRET Ġ= ĠSystem . getProperty (" TR AK T _ CLIENT _ SECRET ") Ġ?: Ġfail (" No ĠTR AK T _ CLIENT _ SECRET ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTEST _ AUTH _ CODE Ġ= ĠSystem . getProperty (" TR AK T _ AUTH _ CODE ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTEST _ REFRESH _ TOKEN Ġ= ĠSystem . getProperty (" TR AK T _ REFRESH _ TOKEN ") ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTEST _ RE DIRECT _ URI Ġ= Ġ" http :// localhost " ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtr akt : ĠTr akt Ġ= ĠTest Tr akt ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTEST _ CLIENT _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTEST _ CLIENT _ SECRET , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTEST _ RE DIRECT _ URI ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }