package Ġcom . ade sso . move e . scene . movie detail Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġcom . ade sso . move e . domain . Fetch Movie Detail Flow UseCase Ċ import Ġcom . ade sso . move e . internal . popup . Popup Model Ċ import Ġcom . ade sso . move e . internal . util . Event Ċ import Ġcom . ade sso . move e . internal . util . Failure Ċ import Ġcom . ade sso . move e . scene . movie detail . model . Movie Detail Ui Model Ċ import Ġcom . ade sso . move e . scene . mov iel ist . model . Movie Genre Item Ui Model Ċ import Ġio . mock k . Mock K Annotations Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . impl . annotations . Mock K Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . coroutines . test . Test Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . test . reset Main Ċ import Ġkotlinx . coroutines . test . set Main Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ @ Experimental Cor outines Api Ċ class ĠMovie Detail ViewModel Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmock Movie Detail Success UI Model Ġ= ĠMovie Detail Ui Model ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 0 0 , ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" J oker ", ĊĠĠĠĠĠĠĠ Ġoverview Ġ= Ġ" J oker ĠOverview ", ĊĠĠĠĠĠĠĠ Ġposter Path Ġ= Ġ" https ...", ĊĠĠĠĠĠĠĠ Ġaverage Ġ= Ġ" J oker ĠAverage ", ĊĠĠĠĠĠĠĠ Ġruntime Ġ= Ġ" 1 2 2 Ġmin ", ĊĠĠĠĠĠĠĠ Ġrelease Date Ġ= Ġ" 1 0 . 0 7 . 1 9 9 0 ", ĊĠĠĠĠĠĠĠ Ġpop ularity Ġ= Ġ" 9 . 0 ", ĊĠĠĠĠĠĠĠ Ġgen res Ġ= ĠlistOf ( Movie Genre Item Ui Model ( id Ġ= Ġ 1 2 2 , Ġname Ġ= Ġ" D ram a ")) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġapi ErrorMessage Ġ= Ġ" Undefined ĠMovie ĠID " ĊĠĠĠ Ġprivate Ġval Ġmock Movie Detail Failure Model Ġ= ĊĠĠĠĠĠĠĠ ĠFailure . ApiError ( code Ġ= Ġ 2 0 1 , Ġmessage Ġ= Ġapi ErrorMessage ) ĊĠĠĠ Ġprivate Ġval Ġexcept ed Failure Popup Model Ġ= ĠPopup Model ( message Ġ= Ġapi ErrorMessage ) ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġinstant Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠMovie Detail ViewModel ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġlateinit Ġvar Ġuse Case : ĠFetch Movie Detail Flow UseCase ĊĊĠĠĠ Ġprivate Ġval Ġtest Dispatcher Ġ= ĠTest Coroutine Dispatcher () ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ ĠDispatch ers . set Main ( test Dispatcher ) ĊĠĠĠĠĠĠĠ ĠMock K Annotations . init ( this ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠMovie Detail ViewModel ( use Case ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ ĠDispatch ers . reset Main () ĊĠĠĠĠĠĠĠ Ġtest Dispatcher . cleanup Test Cor outines () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġfetch Ġmovie Ġdetail Ġcalled Ġshould Ġreturn Ġmovie Ġdetail Ġui Ġmodel Ġwith Ġkotlin Ġflow `() Ġ= ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie Id Ġ= Ġ 1 0 0 L ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġuse Case . execute ( any ()) Ġ} Ġco Answers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflow Ġ{ Ġemit ( mock Movie Detail Success UI Model ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . fetch Movie Detail ( movie Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( viewModel . movie Detail . value , Ġmock Movie Detail Success UI Model ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġfetch Ġmovie Ġdetail Ġcalled Ġwith Ġwrong Ġid Ġshould Ġthrow Ġfailure Ġwith Ġkotlin Ġflow `() Ġ= ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie Id Ġ= Ġ- 1 L ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġuse Case . execute ( any ()) Ġ} Ġco Answers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflow Ġ{ Ġthrow Ġmock Movie Detail Failure Model Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . fetch Movie Detail ( movie Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( viewModel . movie Detail . value , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . failure Popup . value ?. peek Content ()?. message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent ( except ed Failure Popup Model ). peek Content (). message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ