package Ġcom . example . github users app . base . repository Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġcom . example . github users app . Main Cor outines Rule Ċ import Ġcom . example . github users app . Mock TestUtil Ċ import Ġcom . example . github users app . di . auth . Auth Api Ċ import Ġcom . example . github users app . di . auth . remote . ApiResponse Ċ import Ġio . mock k . Mock K Annotations Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . impl . annotations . Mock K Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . hamcrest . Core Matchers Ċ import Ġorg . hamcrest . Matcher Assert Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ import Ġretrofit 2 . Response Ċ Ċ /** Ċ Ġ* Ġ@ author ĠAli Az az Al am Ġon Ġ 2 / 1 4 / 2 0 2 1 . Ċ Ġ*/ Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠGeneral Repository Test Ġ{ ĊĊĠĠĠ Ġ// ĠSubject Ġunder Ġtest ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrepository : ĠGeneral Repository ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth Api : ĠAuth Api ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġcor outines Rule Ġ= ĠMain Cor outines Rule () ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġinstant Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠMock K Annotations . init ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġget specific user () Ġreturns Ġsingle Ġuser `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġrepository Ġ= ĠGeneral Repository ( auth Api ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch User Ġ= ĠMock TestUtil . create Single User () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġauth Api . get Specific UserData ( any ()) Ġ}. returns ( ApiResponse . create ( response Ġ= ĠResponse . success ( search User ))) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInvoke ĊĠĠĠĠĠĠĠ Ġval Ġusers Flow Ġ= Ġrepository . get Specific User (" al im oh am adi 1 7 ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠMatcher Assert . assertThat ( users Flow , ĠCore Matchers . notNull Value ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ( users Flow Ġas ĠResult CallBack . Success ). data ĊĠĠĠĠĠĠĠ ĠMatcher Assert . assertThat ( result , ĠCore Matchers . notNull Value ()) ĊĠĠĠĠĠĠĠ ĠMatcher Assert . assertThat ( result . login , ĠCore Matchers .` is ` (" al im oh am adi 1 7 ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsearch User Ġreturns Ġlist Ġof Ġusers Ġ` () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Given ĊĠĠĠĠĠĠĠ Ġrepository Ġ= ĠGeneral Repository ( auth Api ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch User Ġ= ĠMock TestUtil . create Users () ĊĊĠĠĠĠĠĠĠ Ġ// When ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth Api . get Search Users Data ( any (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġ}. returns ( ApiResponse . create ( response Ġ= ĠResponse . success ( search User ))) ĊĊĠĠĠĠĠĠĠ Ġ// Invoke ĊĠĠĠĠĠĠĠ Ġval Ġusers Flow Ġ= Ġrepository . get Search Users ( 1 , Ġ" Ali ") ĊĊĠĠĠĠĠĠĠ Ġ// Then ĊĠĠĠĠĠĠĠ ĠMatcher Assert . assertThat ( users Flow , ĠCore Matchers . notNull Value ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ( users Flow Ġas ĠResult CallBack . Success ). data ĊĠĠĠĠĠĠĠ Ġval Ġusers Ġ= Ġresult . first () ĊĠĠĠĠĠĠĠ ĠMatcher Assert . assertThat ( users , ĠCore Matchers . notNull Value ()) ĊĠĠĠĠĠĠĠ ĠMatcher Assert . assertThat ( users . users Info , ĠCore Matchers . notNull Value ()) ĊĠĠĠĠĠĠĠ ĠMatcher Assert . assertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusers . users Info . size , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore Matchers .` is `( search User . users Info . size ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsearch User Repos Ġreturns Ġlist Ġof Ġusers Ġrepos `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Given ĊĠĠĠĠĠĠĠ Ġrepository Ġ= ĠGeneral Repository ( auth Api ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch User Ġ= ĠMock TestUtil . create Repos () ĊĊĠĠĠĠĠĠĠ Ġ// When ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth Api . get Specific User Repos Data ( any (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġ}. returns ( ApiResponse . create ( response Ġ= ĠResponse . success ( search User ))) ĊĊĠĠĠĠĠĠĠ Ġ// Invoke ĊĠĠĠĠĠĠĠ Ġval Ġusers Flow Ġ= Ġrepository . get Specific User Repos ( 1 , Ġ" Ali ") ĊĊĠĠĠĠĠĠĠ Ġ// Then ĊĠĠĠĠĠĠĠ ĠMatcher Assert . assertThat ( users Flow , ĠCore Matchers . notNull Value ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ( users Flow Ġas ĠResult CallBack . Success ). data ĊĠĠĠĠĠĠĠ Ġval Ġusers Ġ= Ġresult . first () ĊĠĠĠĠĠĠĠ ĠMatcher Assert . assertThat ( users , ĠCore Matchers . notNull Value ()) ĊĠĠĠĠĠĠĠ ĠMatcher Assert . assertThat ( users , ĠCore Matchers . notNull Value ()) ĊĠĠĠĠĠĠĠ ĠMatcher Assert . assertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusers . size , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore Matchers .` is `( search User . size ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĊĠĠĠ Ġ} Ċ }