/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġe Al va . com Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . e al va . w elite . test . db Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . core . net . to Uri Ċ import Ġcom . e al va . w elite . db . Database Ċ import Ġcom . e al va . w elite . db . ForeignKey Info Ċ import Ġcom . e al va . w elite . db . ForeignKey Violation Ċ import Ġcom . e al va . w elite . db . table . ForeignKey Action Ċ import Ġcom . e al va . w elite . test . shared . Album Table Ċ import Ġcom . e al va . w elite . test . shared . Artist Album Table Ċ import Ġcom . e al va . w elite . test . shared . Artist Table Ċ import Ġcom . e al va . w elite . test . shared . MEDIA _ TABLE S Ċ import Ġcom . e al va . w elite . test . shared . Media File Table Ċ import Ġcom . e al va . w elite . test . shared . expect Media Tables Exist Ċ import Ġcom . e al va . w elite . test . shared . with Test Database Ċ import Ġcom . n ha ar man . expect . expect Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġjava . io . File Ċ Ċ public Ġobject ĠCommon ForeignKey Schema Tests Ġ{ ĊĠ Ġpublic Ġsuspend Ġfun Ġtest ForeignKey List ( app Ctx : ĠContext , Ġtest Dispatcher : ĠCor outine Dispatcher ) Ġ{ ĊĠĠĠ Ġwith Test Database ( app Ctx , ĠMED IA _ TABLE S , Ġtest Dispatcher , Ġenable ForeignKey Constraints Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠ Ġcreate Table sWith FK Vi olations () ĊĊĠĠĠĠĠ Ġquery Ġ{ ĊĠĠĠĠĠĠĠ ĠArtist Album Table . foreign Key List . let Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġexpect ( list ). toHave Size ( 2 ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect ( list [ 0 ]). toBe ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠForeign Key Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseq Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Ġ= Ġ" Album ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġ= Ġ" Album Id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Ġ= Ġ"_ id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate Ġ= ĠForeign Key Action . NO _ ACTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Ġ= ĠForeign Key Action . NO _ ACTION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect ( list [ 1 ]). toBe ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠForeign Key Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseq Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Ġ= Ġ" Artist ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġ= Ġ" Artist Id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Ġ= Ġ"_ id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate Ġ= ĠForeign Key Action . NO _ ACTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Ġ= ĠForeign Key Action . NO _ ACTION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġsuspend Ġfun ĠDatabase . createTable sWith FK Vi olations () Ġ{ ĊĠĠĠ Ġexpect Media Tables Exist () ĊĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠ ĠMedia File Table . insert Ġ{ ĊĠĠĠĠĠĠĠ Ġit [ media Title ] Ġ= Ġ" A ĠTitle " ĊĠĠĠĠĠĠĠ Ġit [ media Uri ] Ġ= ĠFile ("/ dir / Music / File . mp g "). to Uri (). toString () ĊĠĠĠĠĠĠĠ Ġit [ artist Id ] Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġit [ album Id ] Ġ= Ġ 1 0 0 ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ ĠArtist Album Table . insert Ġ{ ĊĠĠĠĠĠĠĠ Ġit [ artist Id ] Ġ= Ġ 5 0 0 0 ĊĠĠĠĠĠĠĠ Ġit [ album Id ] Ġ= Ġ 5 0 0 0 ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġartist Ġ= Ġ" Led ĠZe ppelin " ĊĠĠĠĠĠ ĠArtist Table . insert Ġ{ Ġit [ artist Name ] Ġ= Ġartist Ġ} ĊĠĠĠĠĠ ĠAlbum Table . insert Ġ{ ĊĠĠĠĠĠĠĠ Ġit [ album Name ] Ġ= Ġ" K iller ĠQue en " ĊĠĠĠĠĠĠĠ Ġit [ artist Name ] Ġ= Ġartist ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġset Successful () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġpublic Ġsuspend Ġfun Ġtest ForeignKey Integr ity ( app Ctx : ĠContext , Ġtest Dispatcher : ĠCor outine Dispatcher ) Ġ{ ĊĠĠĠ Ġwith Test Database ( app Ctx , ĠMED IA _ TABLE S , Ġtest Dispatcher , Ġenable ForeignKey Constraints Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠ Ġcreate Table sWith FK Vi olations () ĊĊĠĠĠĠĠ Ġquery Ġ{ ĊĠĠĠĠĠĠĠ ĠArtist Album Table . foreign Key Check (). let Ġ{ Ġviolations Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġexpect ( vi olations ). toHave Size ( 2 ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect ( vi olations [ 0 ]). toBe ( ForeignKey Violation (" Artist Album ", Ġ 1 , Ġ" Album ", Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠ Ġexpect ( vi olations [ 1 ]). toBe ( ForeignKey Violation (" Artist Album ", Ġ 1 , Ġ" Artist ", Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠMedia File Table . foreign Key Check (). let Ġ{ Ġviolations Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġexpect ( vi olations ). toHave Size ( 2 ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect ( vi olations [ 0 ]). toBe ( ForeignKey Violation (" Media File ", Ġ 1 , Ġ" Album ", Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠ Ġexpect ( vi olations [ 1 ]). toBe ( ForeignKey Violation (" Media File ", Ġ 1 , Ġ" Artist ", Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ