/* Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) ĠMicrosoft ĠCorporation . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠLicensed Ġunder Ġthe ĠMIT ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . microsoft . device . samples . dual screen experience . domain . order . testutil Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Transform ations Ċ import Ġcom . microsoft . device . samples . dual screen experience . data . order . Order DataSource Ċ import Ġcom . microsoft . device . samples . dual screen experience . data . order . model . Order Entity Ċ import Ġcom . microsoft . device . samples . dual screen experience . data . order . model . Order Item Entity Ċ import Ġcom . microsoft . device . samples . dual screen experience . data . order . model . Order With Items Ċ import Ġcom . microsoft . device . samples . dual screen experience . domain . order . model . Order Item Ċ Ċ class ĠMock Order DataSource Ġ: ĠOrder DataSource Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġorder Entity Map Ġ= Ġmutable Map Of < Long , ĠOrder Entity >() ĊĠĠĠ Ġprivate Ġvar Ġorder Item Entity Map Ġ= Ġmutable Map Of < Long , ĠOrder Item Entity >() ĊĠĠĠ Ġprivate Ġvar Ġorder With Items Entity Map Ġ= Ġmutable Map Of < Long , ĠOrder With Items >() ĊĊĠĠĠ Ġvar Ġautogenerated ItemId Ġ= Ġ 0 L ĊĠĠĠ Ġvar Ġautogenerated OrderId Ġ= Ġ 0 L ĊĊĠĠĠ Ġprivate Ġval Ġcurrent Order LiveData Ġ= ĠMutable LiveData < Order With Items ?> () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠgetAll (): ĠList < Order With Items > Ġ= Ġorder With Items Entity Map . values . toList () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget ById ( orderId : ĠLong ): ĠOrder With Items ? Ġ= Ġorder With Items Entity Map [ orderId ] ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġinsert ( order : ĠOrder Entity ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( order . orderId Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġautogenerated OrderId Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder . orderId Ġ= Ġautogenerated OrderId ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġorder Entity Map [ order . orderId !! ] Ġ= Ġorder ĊĠĠĠĠĠĠĠ Ġorder With Items Entity Map [ order . orderId !! ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOrder With Items ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorder Item Entity Map . values . filter Ġ{ Ġit . order Parent Id Ġ== Ġorder . orderId !! Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcurrent Order LiveData . value Ġ= Ġorder With Items Entity Map [ order . orderId ] ĊĠĠĠĠĠĠĠ Ġreturn Ġorder . orderId !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġupdate Item ( itemId : ĠLong , Ġnew Quantity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġorder Item Entity Map . values . first OrNull Ġ{ Ġit . itemId Ġ== ĠitemId Ġ} ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Ġ= Ġnew Quantity ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġorder With Items Entity Map . values . flatMap Ġ{ Ġit . items Ġ}. first OrNull Ġ{ Ġit . itemId Ġ== ĠitemId Ġ} ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Ġ= Ġnew Quantity ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Order LiveData . value Ġ= Ġorder With Items Entity Map [ order Parent Id ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġinsert Items ( var arg Ġitems : ĠOrder Item Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġautogenerated ItemId Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . itemId Ġ= Ġautogenerated ItemId ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . order Parent Id . let Ġ{ ĠorderId Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsame Item In Order Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorder With Items Entity Map [ orderId ]?. items ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull Ġ{ ĠOrder Item ( it ) Ġ== ĠOrder Item ( item ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( same Item In Order Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsame Item In Order . itemId ?. let Ġ{ Ġsame ItemId Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Item ( same ItemId , Ġsame Item In Order . quantity . inc ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorder Item Entity Map [ item . itemId Ġ?: Ġautogenerated ItemId ] Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorder With Items Entity Map [ orderId ]?. items ?. add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Order LiveData . value Ġ= Ġorder With Items Entity Map [ orderId ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete Item ( itemId : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġorder Item Entity Map . remove ( itemId ) ĊĠĠĠĠĠĠĠ Ġorder With Items Entity Map . values . flatMap Ġ{ Ġit . items Ġ}. first OrNull Ġ{ Ġit . itemId Ġ== ĠitemId Ġ} ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder With Items Entity Map . values . first OrNull Ġ{ Ġit . order . orderId Ġ== Ġorder Parent Id Ġ} ?. items ?. remove ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Order LiveData . value Ġ= Ġorder With Items Entity Map [ order Parent Id ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget OrderBy Submitted ( submitted : ĠBoolean ): ĠLive Data < Order With Items ?> Ġ= ĊĠĠĠĠĠĠĠ ĠTransform ations . map ( current Order LiveData ) Ġ{ Ġorder With Items Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder With Items ?. take If Ġ{ Ġit . order . is Submitted Ġ== Ġsubmitted Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ