package Ġcom . oz an top uz . six t coding challenge . data . datasource Ċ Ċ import Ġcom . google . common . truth . Truth Ċ import Ġcom . oz an top uz . six t coding challenge . data . entity . Car Factory Ċ import Ġcom . oz an top uz . six t coding challenge . rule . Cor outines Test Rule Ċ import Ġcom . oz an top uz . six t coding challenge . data . entity . Car Ċ import Ġcom . oz an top uz . six t coding challenge . data . service . Car Service Ċ import Ġio . mock k .* Ċ import Ġio . mock k . impl . annotations . Mock K Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ @ Experimental Cor outines Api Ċ class ĠC ars Remote DataSource Impl Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġcor outines Test Rule Ġ= ĠCor outines Test Rule () ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġlateinit Ġvar Ġcar Service : ĠCar Service ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcars Remote DataSource : ĠC ars Remote DataSource ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠMock K Annotations . init ( this ) ĊĠĠĠĠĠĠĠ Ġcars Remote DataSource Ġ= ĠC ars Remote DataSource Impl ( car Service ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġun mock k All () ĊĠĠĠĠĠĠĠ Ġclear All Mocks () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ fetch C ars _ returns _ the _ expected _ data () Ġ{ ĊĠĠĠĠĠĠĠ Ġcor outines Test Rule . test Dispatcher . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcar Service . getC ars () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. co Answers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray ListOf ( Car Factory . get Car ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠArrayList < Car > Ġ= Ġcars Remote DataSource . fetch C ars () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( result ). isNotNull () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( result ). isEqualTo ( array ListOf ( Car Factory . get Car ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġcar Service . getC ars () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm Verified ( car Service ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ fetch C ars Contract _ returns _ error () Ġ{ ĊĠĠĠĠĠĠĠ Ġcor outines Test Rule . test Dispatcher . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcar Service . getC ars () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. co Answers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠArrayList < Car > Ġ= Ġcars Remote DataSource . fetch C ars () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( result ). isNotNull () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( result ). isEqualTo ( array ListOf < Car >()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġcar Service . getC ars () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm Verified ( car Service ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }