package Ġcom . example . test . flow Ċ Ċ import Ġcom . example . flow . Create Game Flow Ċ import Ġcom . example . state . GameState Ċ import Ġnet . cord a . core . utilities . get OrThrow Ċ import Ġnet . cord a . testing . core . single Identity Ċ import Ġnet . cord a . testing . node . Mock Network Ċ import Ġnet . cord a . testing . node . Mock Network Parameters Ċ import Ġnet . cord a . testing . node . Started Mock Node Ċ import Ġnet . cord a . testing . node . Test C ord app Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠCreate Game Flow Tests Ġ{ Ċ // ĠĠĠ Ġcompanion Ġobject Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġval ĠINVALID _ CAR DS Ġ= ĠlistOf ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCard (" X ", Ġ" 9 9 ")) Ċ // ĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġval ĠTEST _ CAR DS Ġ= ĠlistOf ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCard (" H ", Ġ" 5 "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCard (" S ", Ġ" A "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCard (" D ", Ġ" 2 "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCard (" S ", Ġ" 9 ")) Ċ // ĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġval ĠTEST _ GAME _ ID Ġ= Ġ 1 Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnetwork : ĠMock Network ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdeal er : ĠStarted Mock Node ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġplayer A : ĠStarted Mock Node ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġplayer B : ĠStarted Mock Node ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġnetwork Ġ= ĠMock Network ( Mock Network Parameters ( cord apps ForAll Nodes Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest C ord app . find C ord app (" com . example . contract "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest C ord app . find C ord app (" com . example . flow ") ĊĠĠĠĠĠĠĠ Ġ))) ĊĠĠĠĠĠĠĠ Ġdeal er Ġ= Ġnetwork . create Party Node () ĊĠĠĠĠĠĠĠ Ġplayer A Ġ= Ġnetwork . create Party Node () ĊĠĠĠĠĠĠĠ Ġplayer B Ġ= Ġnetwork . create Party Node () ĊĠĠĠĠĠĠĠ ĠlistOf ( de aler , Ġplayer A , Ġplayer B ). forEach Ġ{ Ġit . register Initi ated Flow ( Create Game Flow . Player :: class . java ) Ġ} ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġnetwork . stop Nodes () ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġ` flow Ġreject s Ġinvalid ĠIO Us `() Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġflow Ġ= ĠDe al Flow . Dealer (- 1 , Ġb . info . single Identity ()) Ċ // ĠĠĠĠĠĠĠ Ġval Ġfuture Ġ= Ġa . start Flow ( flow ) Ċ // ĠĠĠĠĠĠĠ Ġnetwork . run Network () Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠThe ĠIO U Contract Ġspecifies Ġthat ĠIO Us Ġcannot Ġhave Ġnegative Ġvalues . Ċ // ĠĠĠĠĠĠĠ Ġassert Fails With < Transaction Verification Exception > Ġ{ Ġfuture . get OrThrow () Ġ} Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Signed Transaction Ġreturned Ġby Ġthe Ġflow Ġis Ġsigned Ġby Ġthe Ġinit iator `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġflow Ġ= ĠCreate Game Flow . Dealer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( player A . info . single Identity (), Ġplayer B . info . single Identity ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġfuture Ġ= Ġdeal er . start Flow ( flow ) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĊĠĠĠĠĠĠĠ Ġval Ġsigned Tx Ġ= Ġfuture . get OrThrow () ĊĠĠĠĠĠĠĠ Ġsigned Tx . verify Required Signatures () ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġsigned Tx . core Transaction . outputs [ 0 ]. data Ġas ĠGameState ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġstate . community Cards . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġstate . cards Re ve aled By Player . size ) ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġ` Signed Transaction Ġreturned Ġby Ġthe Ġflow Ġis Ġsigned Ġby Ġthe Ġaccept or `() Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġflow Ġ= ĠDe al Flow . Dealer ( 1 , Ġb . info . single Identity ()) Ċ // ĠĠĠĠĠĠĠ Ġval Ġfuture Ġ= Ġa . start Flow ( flow ) Ċ // ĠĠĠĠĠĠĠ Ġnetwork . run Network () Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġsigned Tx Ġ= Ġfuture . get OrThrow () Ċ // ĠĠĠĠĠĠĠ Ġsigned Tx . verify Signatures Except ( a . info . single Identity (). own ing Key ) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġ` flow Ġrecords Ġa Ġtransaction Ġin Ġboth Ġparties ' Ġtransaction Ġstorage s `() Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġflow Ġ= ĠExample Flow . Dealer ( 1 , Ġb . info . single Identity ()) Ċ // ĠĠĠĠĠĠĠ Ġval Ġfuture Ġ= Ġa . start Flow ( flow ) Ċ // ĠĠĠĠĠĠĠ Ġnetwork . run Network () Ċ // ĠĠĠĠĠĠĠ Ġval Ġsigned Tx Ġ= Ġfuture . get OrThrow () Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠWe Ġcheck Ġthe Ġrecorded Ġtransaction Ġin Ġboth Ġtransaction Ġstorage s . Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ( node Ġin ĠlistOf ( a , Ġb )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( signed Tx , Ġnode . services . validated Transactions . getTransaction ( signed Tx . id )) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġ` re corded Ġtransaction Ġhas Ġno Ġinputs Ġand Ġa Ġsingle Ġoutput , Ġthe Ġinput ĠIO U `() Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġi ou Value Ġ= Ġ 1 Ċ // ĠĠĠĠĠĠĠ Ġval Ġflow Ġ= ĠExample Flow . Dealer ( iou Value , Ġb . info . single Identity ()) Ċ // ĠĠĠĠĠĠĠ Ġval Ġfuture Ġ= Ġa . start Flow ( flow ) Ċ // ĠĠĠĠĠĠĠ Ġnetwork . run Network () Ċ // ĠĠĠĠĠĠĠ Ġval Ġsigned Tx Ġ= Ġfuture . get OrThrow () Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠWe Ġcheck Ġthe Ġrecorded Ġtransaction Ġin Ġboth Ġvault s . Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ( node Ġin ĠlistOf ( a , Ġb )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecorded Tx Ġ= Ġnode . services . validated Transactions . getTransaction ( signed Tx . id ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx Outputs Ġ= Ġrecorded Tx !!. tx . outputs Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( tx Outputs . size Ġ== Ġ 1 ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecorded State Ġ= Ġtx Outputs [ 0 ]. data Ġas ĠIO U State Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( re corded State . value , Ġi ou Value ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( re corded State . l ender , Ġa . info . single Identity ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( re corded State . borrow er , Ġb . info . single Identity ()) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġ` flow Ġrecords Ġthe Ġcorrect ĠIO U Ġin Ġboth Ġparties ' Ġvault s `() Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġi ou Value Ġ= Ġ 1 Ċ // ĠĠĠĠĠĠĠ Ġval Ġflow Ġ= ĠExample Flow . Dealer ( 1 , Ġb . info . single Identity ()) Ċ // ĠĠĠĠĠĠĠ Ġval Ġfuture Ġ= Ġa . start Flow ( flow ) Ċ // ĠĠĠĠĠĠĠ Ġnetwork . run Network () Ċ // ĠĠĠĠĠĠĠ Ġfuture . get OrThrow () Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠWe Ġcheck Ġthe Ġrecorded ĠIO U Ġin Ġboth Ġvault s . Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ( node Ġin ĠlistOf ( a , Ġb )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġnode . transaction Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi ous Ġ= Ġnode . services . vault Service . query By < IO U State >(). states Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġi ous . size ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecorded State Ġ= Ġi ous . single (). state . data Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( re corded State . value , Ġi ou Value ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( re corded State . l ender , Ġa . info . single Identity ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( re corded State . borrow er , Ġb . info . single Identity ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ }