/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠEric sson ĠAB Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġeu . sof ie _ iot . s ma ug . mobile Ċ Ċ // import Ġandroid . content . Context Ċ // import Ġandroid . util . Log Ċ // import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ // import Ġandroidx . room . Room Ċ // import Ġandroidx . test . core . app . Application Provider Ċ // import Ġandroidx . test . espress o . matcher . View Matchers . assertThat Ċ // import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ // import Ġandroidx . test . platform . app . Instrumentation Registry Ċ // import Ġeu . sof ie _ iot . s ma ug . mobile . model .* Ċ // import Ġorg . hamcrest . Core Matchers .* Ċ // import Ġorg . junit . After Ċ // import Ġorg . junit . Before Ċ // import Ġorg . junit . Rule Ċ // import Ġorg . junit . Test Ċ // import Ġorg . junit . runner . RunWith Ċ // import Ġjava . time . Instant Ċ // import Ġjava . util .* Ċ Ċ // Ċ //@ RunWith ( Android JUnit 4 :: class ) Ċ // class ĠSimple Models Test Ġ{ Ċ // Ċ // ĠĠĠ Ġ@ get : Rule Ċ // ĠĠĠ Ġval Ġinstant Task Executor Rule : ĠInstant Task Executor Rule Ġ= ĠInstant Task Executor Rule () Ċ // Ċ // ĠĠĠ Ġprivate Ġlateinit Ġvar Ġdao : ĠModel Dao Ċ // ĠĠĠ Ġprivate Ġlateinit Ġvar Ġdb : ĠDatabase Ċ // Ċ // ĠĠĠ Ġ@ Before Ċ // ĠĠĠ Ġfun Ġcreate Db () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠApplication Provider . getApplicationContext < Context >() Ċ // ĠĠĠĠĠĠĠ Ġdb Ġ= ĠRoom . in Memory Database Builder ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument ation Registry . get Instrumentation (). context , ĠDatabase :: class . java Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġ. allow MainThread Queries () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () Ċ // ĠĠĠĠĠĠĠ Ġdao Ġ= Ġdb . models Ċ // Ċ // ĠĠĠĠĠĠĠ ĠLog . i (" Simple Models Test ", Ġ" Before : Ġdb =$ db Ġdao =$ dao ") Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ After Ċ // ĠĠĠ Ġfun Ġclose Db () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġdb . close () Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġsuspend Ġfun Ġinsert Market place ( Ċ // ĠĠĠĠĠĠĠ Ġid : ĠLong Ġ= Ġ 0 , Ċ // ĠĠĠĠĠĠĠ Ġledger : ĠLed ger Identifier Ġ= ĠLed ger Identifier . ET HERE UM _ PRIVATE , Ċ // ĠĠĠĠĠĠĠ Ġaddr : ĠString Ġ= Ġ" 1 2 3 4 5 6 7 8 9 0 " Ċ // ĠĠĠ Ġ): ĠMarketplace Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġmp Ġ= ĠMarketplace ( id , ĠSmart Contract ( ledger , Ġaddr )) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġmp . copy ( id Ġ= Ġdao . insert Market places ( mp )[ 0 ]) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġvar Ġlock er Id : ĠLong Ġ= Ġ 1 0 0 0 Ċ // ĠĠĠ Ġfun Ġnext Locker Id (): ĠString Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġlock er Id Ġ+= Ġ 1 Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġ" locker -$ locker Id " Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġsuspend Ġfun Ġinsert Locker ( Ċ // ĠĠĠĠĠĠĠ Ġid : ĠLong Ġ= Ġ 0 , Ċ // ĠĠĠĠĠĠĠ Ġlock er Id : ĠString Ġ= Ġnext Locker Id (), Ċ // ĠĠĠĠĠĠĠ Ġmarket place Id : ĠLong Ġ= Ġ 1 , Ċ // ĠĠĠĠĠĠĠ Ġname : ĠString Ġ= Ġ" B eef ĠL ocker Ġv 1 " Ċ // ĠĠĠ Ġ): ĠL ocker Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġl Ġ= ĠL ocker ( id Ġ= Ġid , Ġunique Id Ġ= Ġlock er Id , Ġmarket place Id Ġ= Ġmarket place Id , Ġname Ġ= Ġname ) Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġl . copy ( id Ġ= Ġdao . insert Locker ( l )) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġval ĠstartDate : ĠInstant Ġ= ĠDate (). to Instant () Ċ // ĠĠĠ Ġvar Ġtick : ĠLong Ġ= Ġ 0 Ċ // Ċ //// ĠĠĠ Ġsuspend Ġfun Ġinsert Activity ( Ċ //// ĠĠĠĠĠĠĠ Ġid : ĠLong Ġ= Ġ 0 , Ċ //// ĠĠĠĠĠĠĠ Ġlock er Id : ĠLong , Ċ //// ĠĠĠĠĠĠĠ Ġtype : ĠActivity Type , Ċ //// ĠĠĠĠĠĠĠ Ġtime : ĠInstant ? Ġ= Ġnull Ċ //// ĠĠĠ Ġ): ĠActivity Record Ġ{ Ċ //// ĠĠĠĠĠĠĠ Ġ// Ġwant Ġto Ġensure Ġmon otonic Ġtimestamps Ġif Ġmultiple Ġadded Ġse quent ially Ċ //// ĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= Ġif Ġ( time Ġ!= Ġnull ) Ġtime Ġelse Ġ{ Ċ //// ĠĠĠĠĠĠĠĠĠĠĠ Ġtick Ġ+= Ġ 1 Ċ //// ĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate . plus Seconds ( tick ) Ċ //// ĠĠĠĠĠĠĠ Ġ} Ċ //// ĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠActivity Record ( id Ġ= Ġid , Ġlock er Id Ġ= Ġlock er Id , Ġtype Ġ= Ġtype , Ġtime Ġ= Ġtimestamp ) Ċ //// ĠĠĠĠĠĠĠ Ġreturn Ġa . copy ( id Ġ= Ġdao . insert Activities ( a )[ 0 ]) Ċ //// ĠĠĠ Ġ} Ċ //// Ċ //// ĠĠĠ Ġ@ Test Ċ //// ĠĠĠ Ġsuspend Ġfun Ġtest Market place () Ġ{ Ċ //// ĠĠĠĠĠĠĠ Ġval Ġmp : ĠMarketplace Ġ= Ġinsert Market place () Ċ //// Ċ //// ĠĠĠĠĠĠĠ Ġval Ġall Ġ= Ġdao . load All Market places () Ċ //// Ċ //// ĠĠĠĠĠĠĠ ĠassertThat ( all . size , ĠequalTo ( 1 )) Ċ //// ĠĠĠĠĠĠĠ ĠassertThat ( all . get ( 0 ), ĠequalTo ( mp )) Ċ //// Ċ //// ĠĠĠĠĠĠĠ Ġval Ġmp 2 Ġ= Ġdao . load Market place ( Ledger Identifier . ET HERE UM _ DEFAULT , Ġmp . contract . address ) Ċ //// ĠĠĠĠĠĠĠ ĠassertThat ( mp 2 , Ġ` is `( null Value ())) Ċ //// Ċ //// ĠĠĠĠĠĠĠ Ġval Ġmp 3 Ġ= Ġdao . load Market place ( Ledger Identifier . ET HERE UM _ PRIVATE , Ġmp . contract . address ) Ċ //// ĠĠĠĠĠĠĠ ĠassertThat ( mp 3 , ĠequalTo ( mp )) Ċ //// ĠĠĠ Ġ} Ċ //// Ċ //// ĠĠĠ Ġ@ Test Ċ //// ĠĠĠ Ġsuspend Ġfun Ġtest Locker () Ġ{ Ċ //// ĠĠĠĠĠĠĠ Ġval Ġmp Ġ= Ġinsert Market place ( id Ġ= Ġ 1 ) Ċ //// ĠĠĠĠĠĠĠ Ġval Ġl 1 Ġ= Ġinsert Locker ( id Ġ= Ġ 1 , Ġmarket place Id Ġ= Ġmp . id ) Ċ //// ĠĠĠĠĠĠĠ Ġval Ġl 2 Ġ= Ġinsert Locker ( id Ġ= Ġ 1 0 , Ġmarket place Id Ġ= Ġmp . id ) Ċ //// Ċ //// ĠĠĠĠĠĠĠ Ġval Ġall Ġ= ĠLive Data TestUtil . getValue ( dao . load All Lock ers ()) !!. sorted By Ġ{ Ġit . id Ġ} Ċ //// ĠĠĠĠĠĠĠ ĠassertThat ( all . size , ĠequalTo ( 2 )) Ċ //// ĠĠĠĠĠĠĠ ĠassertThat ( all . get ( 0 ), ĠequalTo ( l 1 )) Ċ //// ĠĠĠĠĠĠĠ ĠassertThat ( all . get ( 1 ), ĠequalTo ( l 2 )) Ċ //// Ċ //// ĠĠĠĠĠĠĠ Ġval Ġll 1 Ġ= Ġdao . load Locker ( mp . id , Ġl 1 . unique Id ) Ċ //// ĠĠĠĠĠĠĠ ĠassertThat ( ll 1 , ĠequalTo ( l 1 )) Ċ //// Ċ //// ĠĠĠĠĠĠĠ Ġval Ġll 2 Ġ= Ġdao . load Locker ( mp . id , Ġl 2 . unique Id ) Ċ //// ĠĠĠĠĠĠĠ ĠassertThat ( ll 2 , ĠequalTo ( l 2 )) Ċ //// Ċ //// ĠĠĠĠĠĠĠ ĠassertThat ( dao . load Locker ( 2 , Ġl 1 . unique Id ), Ġ` is `( null Value ())) Ċ //// ĠĠĠĠĠĠĠ ĠassertThat ( dao . load Locker ( 2 , Ġl 2 . unique Id ), Ġ` is `( null Value ())) Ċ //// ĠĠĠ Ġ} Ċ //// Ċ //// ĠĠĠ Ġ@ Test Ċ //// ĠĠĠ Ġsuspend Ġfun Ġtest Locker Activity () Ġ{ Ċ //// ĠĠĠĠĠĠĠ Ġval Ġmp Ġ= Ġinsert Market place () Ċ //// ĠĠĠĠĠĠĠ Ġval Ġl 1 Ġ= Ġinsert Locker ( marketplace Id Ġ= Ġmp . id ) Ċ //// ĠĠĠĠĠĠĠ Ġval Ġa 1 Ġ= Ġinsert Activity ( locker Id Ġ= Ġl 1 . id , Ġtype Ġ= ĠActivity Type . PENDING ) Ċ //// ĠĠĠĠĠĠĠ Ġval Ġa 2 Ġ= Ġinsert Activity ( locker Id Ġ= Ġl 1 . id , Ġtype Ġ= ĠActivity Type . RENT ) Ċ //// ĠĠĠĠĠĠĠ Ġval Ġa 3 Ġ= Ġinsert Activity ( locker Id Ġ= Ġl 1 . id , Ġtype Ġ= ĠActivity Type . OPEN ED ) Ċ //// Ċ //// ĠĠĠĠĠĠĠ Ġval Ġl 2 Ġ= Ġinsert Locker ( marketplace Id Ġ= Ġmp . id ) Ċ //// ĠĠĠĠĠĠĠ Ġval Ġa 4 Ġ= Ġinsert Activity ( locker Id Ġ= Ġl 2 . id , Ġtype Ġ= ĠActivity Type . PENDING ) Ċ //// Ċ //// ĠĠĠĠĠĠĠ Ġval Ġall Ġ= ĠLive Data TestUtil . getValue ( dao . load Locker Activity ( l 1 . id )) !! Ċ //// ĠĠĠĠĠĠĠ ĠassertThat ( all . size , ĠequalTo ( 3 )) Ċ //// ĠĠĠĠĠĠĠ ĠassertThat ( all , ĠequalTo ( listOf ( a 3 , Ġa 2 , Ġa 1 ))) Ċ //// Ċ //// ĠĠĠĠĠĠĠ Ġval Ġpending Ġ= ĠLive Data TestUtil . getValue ( dao . load Pending Activity ()) !! Ċ //// ĠĠĠĠĠĠĠ ĠassertThat ( pending , ĠequalTo ( listOf ( a 4 , Ġa 1 ))) Ċ //// ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Test ( expected Ġ= Ġandroid . database . sqlite . SQLite Constraint Exception :: class ) Ċ // ĠĠĠ Ġsuspend Ġfun Ġtest Market place Uni queness () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġmp Ġ= Ġinsert Market place ( ledger Ġ= ĠLed ger Identifier . ET HERE UM _ PRIVATE , Ġaddr Ġ= Ġ" abc ") Ċ // ĠĠĠĠĠĠĠ Ġinsert Market place ( ledger Ġ= ĠLed ger Identifier . ET HERE UM _ PRIVATE , Ġaddr Ġ= Ġ" abc ") Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Test ( expected Ġ= Ġandroid . database . sqlite . SQLite Constraint Exception :: class ) Ċ // ĠĠĠ Ġsuspend Ġfun Ġtest Locker Uni queness () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġmp Ġ= Ġinsert Market place () Ċ // ĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġinsert Locker ( marketplace Id Ġ= Ġmp . id , Ġlock er Id Ġ= Ġ" locker 1 ") Ċ // ĠĠĠĠĠĠĠ Ġinsert Locker ( marketplace Id Ġ= Ġmp . id , Ġlock er Id Ġ= Ġ" locker 1 ") Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Test ( expected Ġ= Ġandroid . database . sqlite . SQLite Constraint Exception :: class ) Ċ // ĠĠĠ Ġsuspend Ġfun Ġtest Locker Market place Relation () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġinsert Locker ( marketplace Id Ġ= Ġ 1 ) Ċ // ĠĠĠ Ġ} Ċ // Ċ //// ĠĠĠ Ġ@ Test ( expected Ġ= Ġandroid . database . sqlite . SQLite Constraint Exception :: class ) Ċ //// ĠĠĠ Ġsuspend Ġfun Ġtest Activity Locker Relation () Ġ{ Ċ //// ĠĠĠĠĠĠĠ Ġinsert Activity ( locker Id Ġ= Ġ 1 , Ġtype Ġ= ĠActivity Type . PENDING ) Ċ //// ĠĠĠ Ġ} Ċ //} Ċ