package Ġorg . tree Ware . my Sql . operator Ċ Ċ import Ġcom . w ix . mysql . Embedded Mysql Ċ import Ġcom . w ix . mysql . config . Mysql d Config Ċ import Ġcom . w ix . mysql . distribution . Version Ċ import Ġorg . junit . jupiter . api . After All Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . Test Instance Ċ import Ġorg . tree Ware . meta Model . new MySql Address Book Meta Model Ċ import Ġorg . tree Ware . model . decoder . state Machine . Multi Aux De coding StateMachine Factory Ċ import Ġorg . tree Ware . model . get Main Model FromJson File Ċ import Ġorg . tree Ware . model . get Main Model FromJson String Ċ import Ġorg . tree Ware . model . operator . Entity Delegate Registry Ċ import Ġorg . tree Ware . model . operator . Operator Entity Delegate Registry Ċ import Ġorg . tree Ware . model . operator . Set Entity Delegate Ċ import Ġorg . tree Ware . model . operator . Set Operator Id Ċ import Ġorg . tree Ware . model . operator . set . aux . SET _ AUX _ NAME Ċ import Ġorg . tree Ware . model . operator . set . aux . Set Aux StateMachine Ċ import Ġorg . tree Ware . model . readFile Ċ import Ġorg . tree Ware . my Sql . operator . delegate . register MySql Operator Entity Deleg ates Ċ import Ġorg . tree Ware . my Sql . test . clear Database Ċ import Ġorg . tree Ware . my Sql . test . get Available Server Port Ċ import Ġorg . tree Ware . my Sql . test . get Database Rows Ċ import Ġorg . tree Ware . my Sql . test . getTable Rows Ċ import Ġjava . sql . Connection Ċ import Ġjava . sql . Driver Manager Ċ import Ġjava . time . Clock Ċ import Ġjava . time . Instant Ċ import Ġjava . time . Zone Offset Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertNot Equals Ċ Ċ private Ġconst Ġval ĠTEST _ DATABASE Ġ= Ġ" test \$ address _ book " Ċ Ċ private Ġval Ġmeta Model Ġ= Ġnew MySql Address Book Meta Model (" test ", Ġnull , Ġnull ). meta Model ĊĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Meta - model Ġhas Ġvalidation Ġerrors ") Ċ private Ġval Ġaux De coding Factory Ġ= ĠMulti Aux De coding StateMachine Factory ( SET _ AUX _ NAME Ġto Ġ{ ĠSet Aux StateMachine ( it ) Ġ}) ĊĊ Ċ private Ġconst Ġval ĠCREATE _ TIME Ġ= Ġ" 2 0 2 2 - 0 3 - 0 3 T 0 0 : 3 0 : 3 1 . 3 3 0 Z " Ċ private Ġval Ġcreate Clock Ġ= ĠClock . fixed ( Instant . parse ( CREATE _ TIME ), ĠZone Offset . UTC ) Ċ Ċ private Ġconst Ġval ĠUPDATE _ TIME Ġ= Ġ" 2 0 2 2 - 0 4 - 0 4 T 0 0 : 4 0 : 4 1 . 4 4 0 Z " Ċ private Ġval Ġupdate Clock Ġ= ĠClock . fixed ( Instant . parse ( UPDATE _ TIME ), ĠZone Offset . UTC ) Ċ Ċ @ Test Instance ( Test Instance . Lifecycle . PER _ CLASS ) Ċ class ĠSet Ke yle ss Entity Tests Ġ{ ĊĠĠĠ Ġprivate Ġval Ġoperator Entity Delegate Registry Ġ= ĠOperator Entity Delegate Registry () ĊĠĠĠ Ġprivate Ġval Ġset Entity Deleg ates : ĠEntity Delegate Registry < Set Entity Delegate >? ĊĊĠĠĠ Ġprivate Ġval Ġport Ġ= Ġget Available Server Port () ĊĠĠĠ Ġprivate Ġval Ġmysql d : ĠEmbedded Mysql ĊĠĠĠ Ġprivate Ġval Ġconnection : ĠConnection ĊĠĠĠ Ġprivate Ġval Ġempty Database Rows : ĠString ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġregister MySql Operator Entity Deleg ates ( operator Entity Delegate Registry ) ĊĠĠĠĠĠĠĠ Ġset Entity Deleg ates Ġ= Ġoperator Entity Delegate Registry . get ( Set Operator Id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠM ysql d Config . a Mysql d Config ( Version . v 8 _ 0 _ 1 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Port ( port ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Server Variable (" mysql x ", Ġ 0 ) Ġ// Ġdisable Ġthe ĠX Ġplugin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġmysql d Ġ= ĠEmbedded Mysql . an Embedded Mysql ( config ). start () ĊĠĠĠĠĠĠĠ Ġconnection Ġ= ĠDriver Manager . getConnection (" jdbc : mysql :// localhost :$ port /", Ġ" root ", Ġ"") ĊĠĠĠĠĠĠĠ Ġconnection . auto Commit Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġcreate Db Entity Deleg ates Ġ= Ġoperator Entity Delegate Registry . get ( Generate Create Database Commands Operator Id ) ĊĠĠĠĠĠĠĠ Ġcreate Database ( meta Model , Ġcreate Db Entity Deleg ates , Ġconnection ) ĊĠĠĠĠĠĠĠ Ġempty Database Rows Ġ= Ġget Database Rows ( connection , ĠTEST _ DATABASE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Each () ĊĠĠĠ Ġfun ĠafterEach () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear Database ( connection , ĠTEST _ DATABASE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After All ĊĠĠĠ Ġfun Ġafter All () Ġ{ ĊĠĠĠĠĠĠĠ Ġmysql d . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Ke yle ss Table Rows (): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġget Table Rows ( connection , ĠTEST _ DATABASE , Ġ" key less \$ key less ", Ġ" key less \$ key less _ child ", Ġ" key less \$ keyed _ child ") ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` set () Ġmust Ġsucceed Ġwhen Ġcreating Ġnew Ġkey less Ġentities `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Ġ= Ġget Main Model FromJson File ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta Model , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" model / my _ sql _ create _ key less _ entities . json ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Aux De coding StateMachine Factory Ġ= Ġaux De coding Factory ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcreate Errors Ġ= Ġset ( create , Ġset Entity Deleg ates , Ġconnection , Ġclock Ġ= Ġcreate Clock ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("", Ġcreate Errors . join ToString ("\ n ")) ĊĠĠĠĠĠĠĠ Ġval Ġafter Create Rows Expected Ġ= ĠreadFile (" operator / my _ sql _ create _ key less _ entities _ results . txt ") ĊĠĠĠĠĠĠĠ Ġval Ġafter Create Rows Ġ= Ġget Ke yle ss Table Rows () ĊĠĠĠĠĠĠĠ ĠassertEquals ( after Create Rows Expected , Ġafter Create Rows ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` set () Ġmust Ġfail Ġwhen Ġre creating Ġexisting Ġkey less Ġentities `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Ġ= Ġget Main Model FromJson File ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta Model , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" model / my _ sql _ create _ key less _ entities . json ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Aux De coding StateMachine Factory Ġ= Ġaux De coding Factory ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcreate Errors Ġ= Ġset ( create , Ġset Entity Deleg ates , Ġconnection , Ġclock Ġ= Ġcreate Clock ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("", Ġcreate Errors . join ToString ("\ n ")) ĊĠĠĠĠĠĠĠ Ġval Ġafter Create Rows Ġ= Ġget Database Rows ( connection , ĠTEST _ DATABASE ) ĊĠĠĠĠĠĠĠ Ġassert Not Equals ( empty Database Rows , Ġafter Create Rows ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrecreate Errors Expected Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book : Ġunable Ġto Ġcreate : Ġduplicate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / person [ cc 4 7 7 2 0 1 - 4 8 ec - 4 3 6 7 - 8 3 a 4 - 7 fdb d 9 2 f 8 a 6 f ]: Ġunable Ġto Ġcreate : Ġduplicate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / person [ cc 4 7 7 2 0 1 - 4 8 ec - 4 3 6 7 - 8 3 a 4 - 7 fdb d 9 2 f 8 a 6 f ]/ key less : Ġunable Ġto Ġcreate : Ġduplicate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / person [ cc 4 7 7 2 0 1 - 4 8 ec - 4 3 6 7 - 8 3 a 4 - 7 fdb d 9 2 f 8 a 6 f ]/ key less / key less _ child : Ġunable Ġto Ġcreate : Ġduplicate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / person [ cc 4 7 7 2 0 1 - 4 8 ec - 4 3 6 7 - 8 3 a 4 - 7 fdb d 9 2 f 8 a 6 f ]/ key less / keyed _ child [ Cl ark Ġkey ed Ġchild ]: Ġunable Ġto Ġcreate : Ġduplicate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / city _ info [ F rem ont , California , USA ]: Ġunable Ġto Ġcreate : Ġduplicate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / city _ info [ F rem ont , California , USA ]/ key less : Ġunable Ġto Ġcreate : Ġduplicate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / city _ info [ F rem ont , California , USA ]/ key less / key less _ child : Ġunable Ġto Ġcreate : Ġduplicate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / city _ info [ F rem ont , California , USA ]/ key less / keyed _ child [ F rem ont Ġkey ed Ġchild ]: Ġunable Ġto Ġcreate : Ġduplicate ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġrecreate Errors Ġ= Ġset ( create , Ġset Entity Deleg ates , Ġconnection , Ġclock Ġ= Ġcreate Clock ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( re create Errors Expected . join ToString ("\ n "), Ġrecreate Errors . join ToString ("\ n ")) ĊĠĠĠĠĠĠĠ Ġval Ġafter Re create Rows Ġ= Ġget Database Rows ( connection , ĠTEST _ DATABASE ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( after Create Rows , Ġafter Re create Rows ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` set () Ġmust Ġsucceed Ġwhen Ġupdating Ġexisting Ġkey less Ġentities `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Ġ= Ġget Main Model FromJson File ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta Model , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" model / my _ sql _ create _ key less _ entities . json ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Aux De coding StateMachine Factory Ġ= Ġaux De coding Factory ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcreate Errors Ġ= Ġset ( create , Ġset Entity Deleg ates , Ġconnection , Ġclock Ġ= Ġcreate Clock ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("", Ġcreate Errors . join ToString ("\ n ")) ĊĠĠĠĠĠĠĠ Ġval Ġafter Create Rows Expected Ġ= ĠreadFile (" operator / my _ sql _ create _ key less _ entities _ results . txt ") ĊĠĠĠĠĠĠĠ Ġval Ġafter Create Rows Ġ= Ġget Ke yle ss Table Rows () ĊĠĠĠĠĠĠĠ ĠassertEquals ( after Create Rows Expected , Ġafter Create Rows ) ĊĊĠĠĠĠĠĠĠ Ġval Ġupdate Ġ= Ġget Main Model FromJson File ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta Model , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" model / my _ sql _ update _ key less _ entities . json ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Aux De coding StateMachine Factory Ġ= Ġaux De coding Factory ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġupdate Errors Ġ= Ġset ( update , Ġset Entity Deleg ates , Ġconnection , Ġclock Ġ= Ġupdate Clock ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("", Ġupdate Errors . join ToString ("\ n ")) ĊĠĠĠĠĠĠĠ Ġval Ġafter Update Rows Expected Ġ= ĠreadFile (" operator / my _ sql _ update _ key less _ entities _ results . txt ") ĊĠĠĠĠĠĠĠ Ġval Ġafter Update Rows Ġ= Ġget Ke yle ss Table Rows () ĊĠĠĠĠĠĠĠ ĠassertEquals ( after Update Rows Expected , Ġafter Update Rows ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` set () Ġmust Ġfail Ġwhen Ġupdating Ġnon - existing Ġkey less Ġentities `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupdate Ġ= Ġget Main Model FromJson File ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta Model , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" model / my _ sql _ update _ key less _ entities . json ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Aux De coding StateMachine Factory Ġ= Ġaux De coding Factory ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Update Errors Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book : Ġunable Ġto Ġupdate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / person [ cc 4 7 7 2 0 1 - 4 8 ec - 4 3 6 7 - 8 3 a 4 - 7 fdb d 9 2 f 8 a 6 f ]: Ġunable Ġto Ġupdate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / person [ cc 4 7 7 2 0 1 - 4 8 ec - 4 3 6 7 - 8 3 a 4 - 7 fdb d 9 2 f 8 a 6 f ]/ key less : Ġunable Ġto Ġupdate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / person [ cc 4 7 7 2 0 1 - 4 8 ec - 4 3 6 7 - 8 3 a 4 - 7 fdb d 9 2 f 8 a 6 f ]/ key less / key less _ child : Ġunable Ġto Ġupdate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / person [ cc 4 7 7 2 0 1 - 4 8 ec - 4 3 6 7 - 8 3 a 4 - 7 fdb d 9 2 f 8 a 6 f ]/ key less / keyed _ child [ Cl ark Ġkey ed Ġchild ]: Ġunable Ġto Ġupdate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / city _ info [ F rem ont , California , USA ]: Ġunable Ġto Ġupdate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / city _ info [ F rem ont , California , USA ]/ key less : Ġunable Ġto Ġupdate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / city _ info [ F rem ont , California , USA ]/ key less / key less _ child : Ġunable Ġto Ġupdate ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / city _ info [ F rem ont , California , USA ]/ key less / keyed _ child [ F rem ont Ġkey ed Ġchild ]: Ġunable Ġto Ġupdate ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġupdate Errors Ġ= Ġset ( update , Ġset Entity Deleg ates , Ġconnection , Ġclock Ġ= Ġupdate Clock ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Update Errors . join ToString ("\ n "), Ġupdate Errors . join ToString ("\ n ")) ĊĠĠĠĠĠĠĠ Ġval Ġafter Update Rows Ġ= Ġget Database Rows ( connection , ĠTEST _ DATABASE ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( empty Database Rows , Ġafter Update Rows ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` set () Ġmust Ġsucceed Ġwhen Ġdeleting Ġexisting Ġkey less Ġentities `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Ġ= Ġget Main Model FromJson File ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta Model , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" model / my _ sql _ create _ key less _ entities . json ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Aux De coding StateMachine Factory Ġ= Ġaux De coding Factory ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcreate Errors Ġ= Ġset ( create , Ġset Entity Deleg ates , Ġconnection , Ġclock Ġ= Ġcreate Clock ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("", Ġcreate Errors . join ToString ("\ n ")) ĊĠĠĠĠĠĠĠ Ġval Ġafter Create Rows Ġ= Ġget Database Rows ( connection , ĠTEST _ DATABASE ) ĊĠĠĠĠĠĠĠ Ġassert Not Equals ( empty Database Rows , Ġafter Create Rows ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdelete Ġ= Ġget Main Model FromJson File ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta Model , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" model / my _ sql _ delete _ key less _ entities _ bottom s _ up . json ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Aux De coding StateMachine Factory Ġ= Ġaux De coding Factory ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdelete Errors Ġ= Ġset ( delete , Ġset Entity Deleg ates , Ġconnection , Ġclock Ġ= Ġupdate Clock ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("", Ġdelete Errors . join ToString ("\ n ")) ĊĠĠĠĠĠĠĠ Ġval Ġafter Update Rows Ġ= Ġget Database Rows ( connection , ĠTEST _ DATABASE ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( empty Database Rows , Ġafter Update Rows ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` set () Ġmust Ġsucceed Ġwhen Ġdeleting Ġnon - existing Ġkey less Ġentities `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdelete Ġ= Ġget Main Model FromJson File ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta Model , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" model / my _ sql _ delete _ key less _ entities _ bottom s _ up . json ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Aux De coding StateMachine Factory Ġ= Ġaux De coding Factory ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdelete Errors Ġ= Ġset ( delete , Ġset Entity Deleg ates , Ġconnection , Ġclock Ġ= Ġupdate Clock ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("", Ġdelete Errors . join ToString ("\ n ")) ĊĠĠĠĠĠĠĠ Ġval Ġafter Update Rows Ġ= Ġget Database Rows ( connection , ĠTEST _ DATABASE ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( empty Database Rows , Ġafter Update Rows ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` set () Ġmust Ġfail Ġwhen Ġcreating Ġa Ġkey less Ġentity Ġwithout Ġa Ġparent `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Ġ= Ġget Main Model FromJson File ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta Model , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" model / my _ sql _ create _ key less _ entities _ no _ parent . json ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Aux De coding StateMachine Factory Ġ= Ġaux De coding Factory ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcreate Errors Expected Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / person [ cc 4 7 7 2 0 1 - 4 8 ec - 4 3 6 7 - 8 3 a 4 - 7 fdb d 9 2 f 8 a 6 f ]/ key less : Ġunable Ġto Ġcreate : Ġno Ġparent Ġor Ġtarget Ġentity ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / person [ cc 4 7 7 2 0 1 - 4 8 ec - 4 3 6 7 - 8 3 a 4 - 7 fdb d 9 2 f 8 a 6 f ]/ key less / key less _ child : Ġunable Ġto Ġcreate : Ġno Ġparent Ġor Ġtarget Ġentity ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / person [ cc 4 7 7 2 0 1 - 4 8 ec - 4 3 6 7 - 8 3 a 4 - 7 fdb d 9 2 f 8 a 6 f ]/ key less / keyed _ child [ Cl ark Ġkey ed Ġchild ]: Ġunable Ġto Ġcreate : Ġno Ġparent Ġor Ġtarget Ġentity ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / city _ info [ F rem ont , California , USA ]/ key less : Ġunable Ġto Ġcreate : Ġno Ġparent Ġor Ġtarget Ġentity ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / city _ info [ F rem ont , California , USA ]/ key less / key less _ child : Ġunable Ġto Ġcreate : Ġno Ġparent Ġor Ġtarget Ġentity ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / city _ info [ F rem ont , California , USA ]/ key less / keyed _ child [ F rem ont Ġkey ed Ġchild ]: Ġunable Ġto Ġcreate : Ġno Ġparent Ġor Ġtarget Ġentity ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcreate Errors Ġ= Ġset ( create , Ġset Entity Deleg ates , Ġconnection , Ġclock Ġ= Ġcreate Clock ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( create Errors Expected . join ToString ("\ n "), Ġcreate Errors . join ToString ("\ n ")) ĊĠĠĠĠĠĠĠ Ġval Ġafter Create Rows Ġ= Ġget Database Rows ( connection , ĠTEST _ DATABASE ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( empty Database Rows , Ġafter Create Rows ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` set () Ġmust Ġfail Ġwhen Ġdeleting Ġa Ġkey less Ġentity Ġthat Ġhas Ġchildren Ġin Ġthe Ġdatabase `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Ġ= Ġget Main Model FromJson File ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta Model , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" model / my _ sql _ create _ key less _ entities . json ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Aux De coding StateMachine Factory Ġ= Ġaux De coding Factory ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcreate Errors Ġ= Ġset ( create , Ġset Entity Deleg ates , Ġconnection , Ġclock Ġ= Ġcreate Clock ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("", Ġcreate Errors . join ToString ("\ n ")) ĊĠĠĠĠĠĠĠ Ġval Ġafter Create Rows Ġ= Ġget Database Rows ( connection , ĠTEST _ DATABASE ) ĊĠĠĠĠĠĠĠ Ġassert Not Equals ( empty Database Rows , Ġafter Create Rows ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdelete Json Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ" address _ book ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ" person ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ" id ": Ġ" cc 4 7 7 2 0 1 - 4 8 ec - 4 3 6 7 - 8 3 a 4 - 7 fdb d 9 2 f 8 a 6 f ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ" key less ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ" set _ ": Ġ" delete " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ" city _ info ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ" name ": Ġ" F rem ont ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ" state ": Ġ" California ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ" country ": Ġ" USA ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ" key less ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ" set _ ": Ġ" delete " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġval Ġdelete Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Main Model FromJson String ( meta Model , Ġdelete Json , Ġmulti Aux De coding StateMachine Factory Ġ= Ġaux De coding Factory ) ĊĠĠĠĠĠĠĠ Ġval Ġdelete Errors Expected Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / city _ info [ F rem ont , California , USA ]/ key less : Ġunable Ġto Ġdelete : Ġhas Ġchildren Ġor Ġsource Ġentity ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ address _ book / person [ cc 4 7 7 2 0 1 - 4 8 ec - 4 3 6 7 - 8 3 a 4 - 7 fdb d 9 2 f 8 a 6 f ]/ key less : Ġunable Ġto Ġdelete : Ġhas Ġchildren Ġor Ġsource Ġentity ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdelete Errors Ġ= Ġset ( delete , Ġset Entity Deleg ates , Ġconnection , Ġclock Ġ= Ġupdate Clock ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( delete Errors Expected . join ToString ("\ n "), Ġdelete Errors . join ToString ("\ n ")) ĊĠĠĠĠĠĠĠ Ġval Ġafter Delete Rows Ġ= Ġget Database Rows ( connection , ĠTEST _ DATABASE ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( after Create Rows , Ġafter Delete Rows ) ĊĠĠĠ Ġ} Ċ }