package Ġcom . ange lor ob son . product . domain . use case . impl Ċ Ċ import Ġcom . ange lor ob son . product . data . Product Repository Ċ import Ġcom . ange lor ob son . product . data . model . Product Data Ċ import Ġcom . ange lor ob son . product . domain . mapper . Object DataTo Domain Mapper Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . eq Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Test Ċ Ċ class ĠGet Product ById Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrepository : ĠProduct Repository Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġuse Case Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠGet Product ById ( repository , ĠObject DataTo Domain Mapper ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` When Ġget Product ById Ġshould Ġreturn Ġa Ġproduct `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 L ĊĠĠĠĠĠĠĠ Ġval Ġproduct Data Ġ= ĠProduct Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" product ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ", ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisActive Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwhenever ( repository . findById ( eq ( id ))). thenReturn ( product Data ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġuse Case . invoke ( id ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġresult . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( id , Ġit . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }