@ file : Suppress (" Illegal Identifier ") Ċ Ċ package Ġorg . oss ia ust ria . lib . domain . database Ċ Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . flow . take Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . hamcrest . Core Matchers . equalTo Ċ import Ġorg . hamcrest . Core Matchers . not Ċ import Ġorg . hamcrest . Core Matchers . null Value Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . jupiter . api . DisplayName Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . oss ia ust ria . lib . domain . database . entities . Group Entity Ċ import Ġorg . oss ia ust ria . lib . domain . database . entities . Group Entity With Members Ċ import Ġorg . oss ia ust ria . lib . domain . database . entities . Person Entity Ċ import Ġorg . oss ia ust ria . lib . domain . database . entities . to Group Ċ import Ġorg . oss ia ust ria . lib . domain . models . enums . Member Type Ċ import Ġorg . ro bo lectric . Ro bo lectric TestRunner Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠExample ĠTest Ġfor ĠD aos . ĠNeeds Ġinstrument ation Ġ( must Ġrun Ġon Ġdevice Ġor Ġemulator ) Ċ Ġ* Ċ Ġ*/ Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ internal Ġclass ĠGroup Dao Test Ġ: ĠDouble Entity Dao Test < Group Entity , ĠGroup Entity With Members , ĠGroup Dao >() Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġperson Dao : ĠPerson Dao ĊĊĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġdao Ġ= Ġdb . group Dao () ĊĠĠĠĠĠĠĠ Ġperson Dao Ġ= Ġdb . person Dao () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ DisplayName (" insert Ġshould Ġpersist Ġall Ġitems ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` insert Ġshould Ġpersist Ġthe Ġitem Ġand Ġset ĠgroupId `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġgroup Ġ= ĠGroup Entity ( id , Ġ" First name ĠLast name ") ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġdao . insert ( group ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠfindAll Ġ= Ġrun Blocking Ġ{ Ġdao . findAll (). take ( 1 ). first () Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThat ( findAll , Ġnot ( equalTo ( listOf < Group Entity With Members >() ))) ĊĠĠĠĠĠĠĠ ĠassertThat ( findAll . size , ĠequalTo ( 1 )) ĊĠĠĠĠĠĠĠ ĠassertThat ( findAll [ 0 ]. group . groupId , ĠequalTo ( group . groupId )) ĊĠĠĠĠĠĠĠ ĠassertThat ( findAll [ 0 ]. group , ĠequalTo ( group )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` insert All Ġshould Ġoverwrite Ġgroup Ġitems `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid 1 Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġid 2 Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġgroup 1 Ġ= ĠGroup Entity ( id 1 , Ġ" 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġgroup 2 Ġ= ĠGroup Entity ( id 2 , Ġ" 2 ") ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġdao . insert All ( listOf ( group 1 , Ġgroup 2 )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgroup 1 b Ġ= ĠGroup Entity ( id 1 , Ġ" 1 b ") ĊĠĠĠĠĠĠĠ Ġval Ġgroup 3 Ġ= ĠGroup Entity ( UUID . randomUUID (), Ġ" 3 ") ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġdao . insert All ( listOf ( group 1 b , Ġgroup 3 )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠfindAll Ġ= Ġrun Blocking Ġ{ Ġdao . findAll (). take ( 1 ). first () Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThat ( findAll , Ġnot ( equalTo ( listOf ()))) ĊĠĠĠĠĠĠĠ ĠassertThat ( findAll . size , ĠequalTo ( 3 )) ĊĊĠĠĠĠĠĠĠ Ġval Ġfind ById Ġ= Ġrun Blocking Ġ{ Ġdao . findById ( id 1 ). take ( 1 ). first () Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( findById . group , ĠequalTo ( group 1 b )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` insert Ġshould Ġoverwrite Ġitems `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid 1 Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġid 2 Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġgroup 1 Ġ= ĠGroup Entity ( id 1 , Ġ" 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġgroup 2 Ġ= ĠGroup Entity ( id 2 , Ġ" 2 ") ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġdao . insert All ( listOf ( group 1 , Ġgroup 2 )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgroup 1 b Ġ= ĠGroup Entity ( id 1 , Ġ" new Ġname ") ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġdao . insert ( group 1 b ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠfindAll Ġ= Ġrun Blocking Ġ{ Ġdao . findAll (). take ( 1 ). first () Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThat ( findAll , Ġnot ( equalTo ( listOf ()))) ĊĠĠĠĠĠĠĠ ĠassertThat ( findAll . size , ĠequalTo ( 2 )) ĊĊĠĠĠĠĠĠĠ Ġval Ġfind ById Ġ= Ġrun Blocking Ġ{ Ġdao . findById ( id 1 ). take ( 1 ). first () Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( findById . group , ĠequalTo ( group 1 b )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` findAll Ġshould Ġload Ġgroup `() Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Group And Members () ĊĊĠĠĠĠĠĠĠ Ġval ĠfindAll Ġ= Ġrun Blocking Ġ{ Ġdao . findAll (). take ( 1 ). first () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠfindAll [ 0 ] ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . group , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . group . groupId , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . group . name , Ġnot ( null Value ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` findAll Ġshould Ġload Ġmembers `() Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Group And Members () ĊĊĠĠĠĠĠĠĠ Ġval ĠfindAll Ġ= Ġrun Blocking Ġ{ Ġdao . findAll (). take ( 1 ). first () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠfindAll [ 0 ] ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members . size , ĠequalTo ( 3 )) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ], Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ]. email , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ]. groupId , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ]. person Id , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ]. member Type , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ]. name , Ġnot ( null Value ())) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` find Ġshould Ġload Ġmembers `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgroup Ġ= Ġcreate Group And Members () ĊĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= Ġrun Blocking Ġ{ Ġdao . findById ( group . groupId ). take ( 1 ). first () Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members . size , ĠequalTo ( 3 )) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ], Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ]. email , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ]. groupId , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ]. person Id , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ]. member Type , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ]. name , Ġnot ( null Value ())) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` mapping Ġshould Ġcontain Ġperson Ġfields `() Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Group And Members () ĊĊĠĠĠĠĠĠĠ Ġval ĠfindAll Ġ= Ġrun Blocking Ġ{ Ġdao . findAll (). take ( 1 ). first () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠfindAll [ 0 ]. to Group () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ], Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ]. email , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ]. member Type , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members [ 0 ]. name , Ġnot ( null Value ())) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` mapping Ġshould Ġmap Ġadmin Ġtype `() Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Group And Members () ĊĊĠĠĠĠĠĠĠ Ġval ĠfindAll Ġ= Ġrun Blocking Ġ{ Ġdao . findAll (). take ( 1 ). first () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠfindAll [ 0 ]. to Group () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . admins . size , ĠequalTo ( 1 )) ĊĊĠĠĠĠĠĠĠ Ġsubject . admins . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . member Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠequalTo ( Member Type . ADMIN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` mapping Ġshould Ġcount Ġall Ġmembers `() Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Group And Members () ĊĊĠĠĠĠĠĠĠ Ġval ĠfindAll Ġ= Ġrun Blocking Ġ{ Ġdao . findAll (). take ( 1 ). first () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠfindAll [ 0 ]. to Group () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members , Ġnot ( null Value ())) ĊĠĠĠĠĠĠĠ ĠassertThat ( subject . members . size , ĠequalTo ( 3 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` mapping Ġshould Ġmap Ġcenter Person Ġtype `() Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Group And Members () ĊĊĠĠĠĠĠĠĠ Ġval ĠfindAll Ġ= Ġrun Blocking Ġ{ Ġdao . findAll (). take ( 1 ). first () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠfindAll [ 0 ]. to Group () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( subject . center Person , Ġnot ( null Value ())) ĊĊĠĠĠĠĠĠĠ Ġsubject . center Person . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit !!. member Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠequalTo ( Member Type . AN ALOG UE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Group And Members (): ĠGroup Entity Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠgroupId Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġcenter Person Id Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġmember Id Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġadmin Id Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġgroup 1 Ġ= ĠGroup Entity ( groupId , Ġ" group ") ĊĠĠĠĠĠĠĠ Ġval Ġcenter Person Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerson Entity ( center Person Id , Ġ" center ", Ġ" email ", ĠgroupId , ĠMember Type . AN ALOG UE , Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġmember Ġ= ĠPerson Entity ( member Id , Ġ" member ", Ġ" email ", ĠgroupId , ĠMember Type . MEMBER , Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġadmin Ġ= ĠPerson Entity ( admin Id , Ġ" admin ", Ġ" email ", ĠgroupId , ĠMember Type . ADMIN , Ġ"") ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdao . insert ( group 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson Dao . insert ( center Person ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson Dao . insert ( member ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson Dao . insert ( admin ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġgroup 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Entity ( id : ĠUUID ): ĠGroup Entity Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGroup Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgroupId Ġ= ĠUUID . randomUUID (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" name " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġperm ute Entity ( entity : ĠGroup Entity ): ĠGroup Entity Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġentity . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" new Ġname ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind ById ( entity : ĠGroup Entity ): ĠGroup Entity With Members Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Blocking Ġ{ Ġdao . findById ( entity . groupId ). take ( 1 ). first () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck Equal ( wrapper : ĠGroup Entity With Members , Ġentity : ĠGroup Entity ) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( wrapper . group , ĠequalTo ( entity )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck Same Id ( wrapper : ĠGroup Entity With Members , Ġentity : ĠGroup Entity ) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( wrapper . group . groupId , ĠequalTo ( entity . groupId )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ById ( entity : ĠGroup Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġdao . delete ById ( entity . groupId ) Ġ} ĊĠĠĠ Ġ} Ċ }