/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 0 ĠN HS X . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġuk . n hs . n hs x . sonar . android . app . reference code Ċ Ċ import Ġandroidx . work . List enable Worker . Result Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . verify Ċ import Ġio . mock k . verify All Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . Test Ċ import Ġuk . n hs . n hs x . sonar . android . app . http . Promise Ċ Ċ @ Experimental Cor outines Api Ċ class ĠReference Code Work Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġapi Ġ= Ġmock k < Reference Code Api >() ĊĠĠĠ Ġprivate Ġval Ġprovider Ġ= Ġmock k < Reference Code Provider >() ĊĠĠĠ Ġprivate Ġval Ġwork Ġ= ĠReference Code Work ( api , Ġprovider ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` do Work Ġ- Ġon Ġsuccess `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeferred Ġ= ĠPromise . Deferred < Reference Code >() ĊĠĠĠĠĠĠĠ Ġval Ġref Code Ġ= ĠReference Code (" REF Ġ# 1 0 0 1 ") ĊĠĠĠĠĠĠĠ Ġdeferred . resolve ( ref Code ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġprovider . get () Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġapi . generate () Ġ} Ġreturns Ġdeferred . promise ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġprovider . set ( any ()) Ġ} Ġreturns ĠUnit ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġwork . do Work () ĊĊĠĠĠĠĠĠĠ Ġverify All Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovider . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . generate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovider . set ( ref Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result ). isEqualTo ( Result . success ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` do Work Ġ- Ġwhen Ġalready Ġfetched `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġref Code Ġ= ĠReference Code (" REF Ġ# 1 0 0 1 ") ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġprovider . get () Ġ} Ġreturns Ġref Code ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġwork . do Work () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result ). isEqualTo ( Result . success ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` do Work Ġ- Ġon Ġfailure `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeferred Ġ= ĠPromise . Deferred < Reference Code >() ĊĠĠĠĠĠĠĠ Ġdeferred . fail ( Exception (" O ops ")) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġprovider . get () Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġapi . generate () Ġ} Ġreturns Ġdeferred . promise ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġwork . do Work () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġprovider . set ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result ). isEqualTo ( Result . failure ()) ĊĠĠĠ Ġ} Ċ } Ċ