package Ġneg otiation . flows . contracts Ċ Ċ import Ġneg otiation . contracts . Proposal And Trade Contract Ċ import Ġneg otiation . states . Proposal State Ċ import Ġnet . cord a . core . identity . C ord a X 5 0 0 Name Ċ import Ġnet . cord a . testing . contracts . Dummy Contract Ċ import Ġnet . cord a . testing . contracts . Dummy State Ċ import Ġnet . cord a . testing . core . Dummy Command Data Ċ import Ġnet . cord a . testing . core . Test Identity Ċ import Ġnet . cord a . testing . node . Mock Services Ċ import Ġnet . cord a . testing . node . ledger Ċ import Ġorg . junit . Test Ċ import Ġjava . time . Instant Ċ Ċ class ĠProposal Contract Tests Ġ{ ĊĠĠĠ Ġprivate Ġval Ġledger Services Ġ= ĠMock Services ( listOf (" neg otiation . contracts ", Ġ" net . cord a . testing . contracts ")) ĊĠĠĠ Ġprivate Ġval Ġalice Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" alice ", Ġ" New ĠYork ", Ġ" US ")) ĊĠĠĠ Ġprivate Ġval Ġbob Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" bob ", Ġ" To ky o ", Ġ" JP ")) ĊĠĠĠ Ġprivate Ġval Ġchar lie Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" char lie ", Ġ" L ondon ", Ġ" GB ")) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` proposal Ġtransactions Ġhave Ġexactly Ġone Ġoutput Ġof Ġtype ĠProposal State `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( alice . publicKey , Ġbob . publicKey ), ĠProposal And Trade Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal And Trade Contract . ID , ĠDummy State ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal And Trade Contract . ID , ĠProposal State ( 1 , Ġalice . party , Ġbob . party , Ġalice . party , Ġbob . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal And Trade Contract . ID , ĠProposal State ( 1 , Ġalice . party , Ġbob . party , Ġalice . party , Ġbob . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal And Trade Contract . ID , ĠProposal State ( 1 , Ġalice . party , Ġbob . party , Ġalice . party , Ġbob . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` proposal Ġtransactions Ġhave Ġexactly Ġone Ġcommand Ġof Ġtype ĠPro pose `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal And Trade Contract . ID , ĠProposal State ( 1 , Ġalice . party , Ġbob . party , Ġalice . party , Ġbob . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( alice . publicKey , Ġbob . publicKey ), ĠDummy Command Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( alice . publicKey , Ġbob . publicKey ), ĠProposal And Trade Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` proposal Ġtransactions Ġhave Ġtwo Ġrequired Ġsign ers Ġ- Ġthe Ġpro poser Ġand Ġthe Ġpro po see `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal And Trade Contract . ID , ĠProposal State ( 1 , Ġalice . party , Ġbob . party , Ġalice . party , Ġbob . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( alice . publicKey , Ġchar lie . publicKey ), ĠProposal And Trade Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( char lie . publicKey , Ġbob . publicKey ), ĠProposal And Trade Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( alice . publicKey , Ġbob . publicKey ), ĠProposal And Trade Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` in Ġproposal Ġtransactions , Ġthe Ġpro poser Ġand Ġpro po see Ġare Ġthe Ġbuy er Ġand Ġsell er `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( alice . publicKey , Ġbob . publicKey ), ĠProposal And Trade Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOrder Ġreversed Ġ- Ġbuy er Ġ= Ġpro po see , Ġsell er Ġ= Ġpro poser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal And Trade Contract . ID , ĠProposal State ( 1 , Ġalice . party , Ġbob . party , Ġbob . party , Ġalice . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal And Trade Contract . ID , ĠProposal State ( 1 , Ġchar lie . party , Ġbob . party , Ġalice . party , Ġbob . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal And Trade Contract . ID , ĠProposal State ( 1 , Ġalice . party , Ġchar lie . party , Ġalice . party , Ġbob . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal And Trade Contract . ID , ĠProposal State ( 1 , Ġalice . party , Ġbob . party , Ġalice . party , Ġbob . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` proposal Ġtransactions Ġhave Ġno Ġinputs Ġand Ġno Ġtimestamp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal And Trade Contract . ID , ĠProposal State ( 1 , Ġalice . party , Ġbob . party , Ġalice . party , Ġbob . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( alice . publicKey , Ġbob . publicKey ), ĠProposal And Trade Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Dummy Contract . PROGRAM _ ID , ĠDummy State ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Window ( Instant . now ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }