package Ġme . v icky ch ij w ani . spect re . testing Ċ Ċ import Ġio . reactivex . Observable Ċ import Ġme . v icky ch ij w ani . spect re . model . entity . AuthToken Ċ import Ġme . v icky ch ij w ani . spect re . network . Ghost ApiService Ċ import Ġme . v icky ch ij w ani . spect re . network . entity .* Ċ import Ġorg . hamcrest . Matchers Ċ import Ġorg . junit . Assert Ċ import Ġretrofit 2 .* Ċ Ċ val ĠTEST _ USER Ġ= Ġ" user @ example . com " Ċ val ĠTEST _ PWD Ġ= Ġ" random test pwd " Ċ Ċ // Ġextension Ġfunctions Ġfor Ġthe ĠG host ApiService Ċ fun ĠG host ApiService . delete Default Posts () Ġ{ ĊĠĠĠ Ġthis . do With AuthToken Ġ{ Ġtoken Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġposts Ġ= Ġexecute ( this . get Posts ( token . auth Header , Ġ"", Ġ 1 0 0 )). body () !! ĊĠĠĠĠĠĠĠ Ġ// ĠA Ġdefault ĠG host Ġinstall Ġhas Ġthese Ġmany Ġposts Ġinitially . ĠIf Ġthere Ġare Ġmore Ġthan Ġthis , ĊĠĠĠĠĠĠĠ Ġ// Ġabort . ĠThis Ġis Ġto Ġavoid Ġmess ing Ġup Ġa Ġproduction Ġblog Ġ( like Ġmy Ġown ) Ġby Ġmistake . ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ POST _ COUNT Ġ= Ġ 7 ĊĠĠĠĠĠĠĠ Ġif Ġ( posts . posts . isNotEmpty () Ġ&& Ġposts . posts . size Ġ!= ĠDEFAULT _ POST _ COUNT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Abort ing ! ĠExpected Ġ$ DEFAULT _ POST _ COUNT Ġposts , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" found Ġ${ posts . posts . size }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( post Ġin Ġposts . posts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute ( this . delete Post ( token . auth Header , Ġpost . id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠG host ApiService . do With AuthToken ( callback : Ġ( AuthToken ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġclient Secret Ġ= Ġclient Secret ĠĠĠĠ Ġ// Ġfetch Ġthe Ġclient Ġsecret Ġonly Ġonce ĊĠĠĠ ĠAssert . assertThat ( client Secret , ĠMatch ers . notNull Value ()) ĊĠĠĠ Ġval Ġcredentials Ġ= ĠAuth Req Body . from Password ( client Secret , ĠTEST _ USER , ĠTEST _ PWD ) ĊĠĠĠ Ġval Ġtoken Ġ= Ġexecute ( this . get AuthToken ( credentials )) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġcallback ( token ) ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġre voke Ġrefresh Ġtoken ĠBE FORE Ġaccess Ġtoken , Ġbecause Ġthe Ġaccess Ġtoken Ġis Ġneeded Ġfor Ġrev ocation ! ĊĠĠĠĠĠĠĠ Ġval Ġre voke Req s Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRe voke Req Body . from RefreshToken ( token . refresh Token , Ġclient Secret ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRe voke Req Body . from AccessToken ( token . accessToken , Ġclient Secret )) ĊĠĠĠĠĠĠĠ Ġfor Ġ( req Body Ġin Ġre voke Req s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute ( this . revoke AuthToken ( token . auth Header , Ġreq Body )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠG host ApiService . client Secret : ĠString ĊĠĠĠ Ġget () Ġ= Ġexecute ( this . configuration ). client Secret Ċ Ċ fun Ġ< T > Ġexecute ( call : ĠCall < T >): ĠResponse < T > Ġ{ ĊĠĠĠ Ġreturn Ġcall . execute () Ċ } Ċ Ċ fun Ġ< T > Ġexecute ( observable : ĠObservable < T >): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġobservable . blocking First () Ċ } Ċ