// package Ġcom . r 3 . custom Ċ // Ċ // import Ġcom . r 3 . custom . DataType . INTEGER Ċ // import Ġcom . r 3 . custom . DataType . STRING Ċ // import Ġcom . r 3 . examples . testing . static Pointer Ċ // import Ġnet . cord a . core . contracts . Contract Ċ // import Ġnet . cord a . core . contracts . State Pointer . Companion . static Pointer Ċ // import Ġnet . cord a . core . contracts . Static Pointer Ċ // import Ġnet . cord a . core . transactions . Ledger Transaction Ċ // import Ġnet . cord a . testing . core .* Ċ // import Ġorg . junit . Test Ċ // import Ġorg . junit . jupiter . api . assert DoesNot Throw Ċ // import Ġorg . junit . jupiter . api . assert Throws Ċ // Ċ // class ĠSchema Tests Ġ{ Ċ // Ċ // Ċ // ĠĠĠ Ġprivate Ġval ĠA LIC E _ PAR TY Ġ= ĠTest Identity ( AL ICE _ NAME ). party Ċ // ĠĠĠ Ġprivate Ġval ĠB OB _ PAR TY Ġ= ĠTest Identity ( BO B _ NAME ). party Ċ // ĠĠĠ Ġprivate Ġval ĠCHAR LI E _ PAR TY Ġ= ĠTest Identity ( CHAR LI E _ NAME ). party Ċ // ĠĠĠ Ġprivate Ġval ĠDA VE _ PAR TY Ġ= ĠTest Identity ( DA VE _ NAME ). party Ċ // Ċ // ĠĠĠ Ġclass ĠDummy Contract Ġ: ĠContract Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġverify ( tx : ĠLed ger Transaction ) Ġ{} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġ` test Ġminimal Ġschema `() Ġ{ Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġschema Ġ= ĠSchema State ( name Ġ= Ġ" test - schema - one ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġ" v 1 ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" first Ġschema ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġattributes Ġ= Ġset Of ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttribute ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" first Attribute ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" first Ġattribute ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmandatory Ġ= Ġtrue , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataType Ġ= ĠINTEGER , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassociated Events Ġ= Ġset Of (" create ", Ġ" update "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregex Ġ= Ġ""" [ 0 - 9 ]{ 2 , 5 } """. to Regex () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttribute ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" second Attribute ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" second Ġattribute ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmandatory Ġ= Ġtrue , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataType Ġ= ĠSTRING , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassociated Events Ġ= Ġset Of (" create ", Ġ" update "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregex Ġ= Ġ""" [ a - z ]{ 5 , 9 } """. to Regex () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġparticipants Ġ= ĠlistOf ( AL ICE _ PAR TY )) Ċ // Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġkv Back ed Schema State Ġ= ĠSchema Back ed KV State ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġkv Pairs Ġ= Ġmap Of ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" first Attribute " Ġto Ġ" 1 2 3 ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" second Attribute " Ġto Ġ" hello " Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġparticipants Ġ= ĠlistOf ( AL ICE _ PAR TY ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġschema State Pointer Ġ= Ġstatic Pointer < Schema State >() ĠĠ Ġ// Ġpass Ġdummy Ġpointer Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġassert DoesNot Throw (" Schema Ġvalidation Ġfailed ") Ġ{ Ġkv Back ed Schema State . validate Schema () Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġkv 2 Ġ= ĠSchema Back ed KV < Dummy Contract >( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġkv Pairs Ġ= Ġmap Of ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" first Attribute " Ġto Ġ" hello s ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" second Attribute " Ġto Ġ" 2 " Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ= Ġschema Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // Ċ // ĠĠĠĠĠĠĠ ĠassertThrows < IllegalArgumentException > Ġ{ Ġkv 2 . validate Schema () Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġkv 3 Ġ= ĠSchema Back ed KV < Dummy Contract >( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġkv Pairs Ġ= Ġmap Of ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" first Attribute " Ġto Ġ" hello s ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" second Attribute " Ġto Ġ" 2 3 abc " Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ= Ġschema Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // Ċ // ĠĠĠĠĠĠĠ ĠassertThrows < IllegalArgumentException > Ġ{ Ġkv 3 . validate Schema () Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġ` test Ġpermissions `() Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġschema Ġ= ĠSchema State < Dummy Contract >( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" dummy Ġschema ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrecipients Ġ= Ġset Of ( AL ICE _ PAR TY , ĠB OB _ PAR TY , ĠDA VE _ PAR TY , ĠCHAR LI E _ PAR TY ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġsign ers Ġ= Ġset Of ( AL ICE _ PAR TY , ĠB OB _ PAR TY , ĠDA VE _ PAR TY , ĠCHAR LI E _ PAR TY ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġattributes Ġ= Ġset Of ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttribute ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" first Attribute ", ĠĠĠ Ġ// Ġfirst Attribute Ġis Ġalways Ġupdated Ġor Ġmodified Ġwith ĠCreate Ġor ĠUpdate Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataType Ġ= ĠSTRING , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmandatory Ġ= Ġtrue , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregex Ġ= Ġ""" [ a - z ]{ 6 , 9 } """. to Regex (), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassociated Events Ġ= Ġset Of ( get Events (" Create "), Ġget Events (" Update ")) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttribute ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" second Attribute ", ĠĠĠ Ġ// Ġsecond Attribute Ġis Ġalways Ġupdated Ġor Ġmodified Ġwith ĠCreate Ġor ĠUpdate Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataType Ġ= ĠINTEGER , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmandatory Ġ= Ġfalse , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregex Ġ= Ġ""" [ 0 - 9 ]{ 2 , 5 } """. to Regex (), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassociated Events Ġ= Ġset Of ( get Events (" Create AndUpdate "), Ġget Events (" Delete ")) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġkv 1 Ġ= ĠSchema Back ed KV < Dummy Contract >( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġkv Pairs Ġ= Ġmap Of ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" first Attribute " Ġto Ġ" hello s ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" second Attribute " Ġto Ġ" 2 5 " Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ= Ġschema Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // Ċ // ĠĠĠĠĠĠĠ ĠassertThrows < IllegalArgumentException > Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠDummy Contract . Commands . Operation One (). check Permissions ( kv 1 . schema , ĠDA VE _ PAR TY ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ ĠassertThrows < IllegalArgumentException > Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠDummy Contract . Commands . Operation One (). check Permissions ( kv 1 . schema , ĠCHAR LI E _ PAR TY ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ ĠassertThrows < IllegalArgumentException > Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠDummy Contract . Commands . Operation One (). check Permissions ( kv 1 . schema , ĠB OB _ PAR TY ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ ĠDummy Contract . Commands . Operation One (). check Permissions ( kv 1 . schema , ĠA LIC E _ PAR TY ) Ġ} Ċ // Ċ // Ċ // ĠĠĠĠĠĠĠ ĠassertThrows < IllegalArgumentException > Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠDummy Contract . Commands . Operation Two (). check Permissions ( kv 1 . schema , ĠDA VE _ PAR TY ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ ĠassertThrows < IllegalArgumentException > Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠDummy Contract . Commands . Operation Two (). check Permissions ( kv 1 . schema , ĠCHAR LI E _ PAR TY ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ ĠDummy Contract . Commands . Operation Two (). check Permissions ( kv 1 . schema , ĠA LIC E _ PAR TY ) Ġ} Ċ // ĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ ĠDummy Contract . Commands . Operation Two (). check Permissions ( kv 1 . schema , ĠB OB _ PAR TY ) Ġ} Ċ // Ċ // ĠĠĠ Ġ} Ċ //}