package Ġcom . cord utch . contracts Ċ Ċ import Ġcom . cord utch . states . Auction State Ċ import Ġcom . cord utch . states . Auction able Asset Ċ import Ġcom . r 3 . cord a . lib . tokens . contracts . utilities . iss ued By Ċ import Ġcom . r 3 . cord a . lib . tokens . money . GBP Ċ import Ġnet . cord a . core . contracts . Unique Identifier Ċ Ċ import Ġnet . cord a . finance . PO UN DS Ċ import Ġnet . cord a . testing . node . Mock Services Ċ import Ġnet . cord a . testing . node . ledger Ċ import Ġorg . junit . Test Ċ Ċ class ĠCreate Auction Tests Ġ{ ĊĠĠĠ Ġprivate Ġval Ġledger Services Ġ= ĠMock Services () ĊĊĠĠĠ Ġprivate Ġval Ġasset Ġ= ĠA uction able Asset ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" A Ġbig Ġhouse ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner Ġ= ĠA LIC E . party , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġissuer Ġ= ĠM EG AC OR P . party , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocked Ġ= Ġtrue ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġvalid Auction Ġ= ĠA uction State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasset Id Ġ= Ġasset . linear Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner Ġ= ĠA LIC E . party , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb idd ers Ġ= ĠlistOf ( BO B . party , ĠCHAR LI E . party ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprice Ġ= Ġ 1 0 . GBP Ġissued By ĠM EG AC OR P . party , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecrement Ġ= Ġ 1 . GBP , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperiod Ġ= Ġ 1 0 0 0 L ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġvalid Auction Ver ifies () Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction Contract . ID , Ġvalid Auction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( AL ICE , ĠB OB , ĠCHAR LI E ). map Ġ{ Ġit . publicKey Ġ}, ĠA uction Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Auction able Asset Contract . ID , Ġasset . unlock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction able Asset Contract . ID , Ġasset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( asset . owner . own ing Key , ĠA uction able Asset Contract . Commands . Lock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmust Have No Inputs () Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Auction Contract . ID , Ġvalid Auction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction Contract . ID , Ġvalid Auction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( AL ICE , ĠB OB , ĠCHAR LI E ). map Ġ{ Ġit . publicKey Ġ}, ĠA uction Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Auction able Asset Contract . ID , Ġasset . unlock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction able Asset Contract . ID , Ġasset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( asset . owner . own ing Key , ĠA uction able Asset Contract . Commands . Lock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" No Ġauction Ġinputs Ġshould Ġbe Ġconsumed Ġwhen Ġcreating Ġan Ġauction " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmust Create One Output State () Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction Contract . ID , Ġvalid Auction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction Contract . ID , Ġvalid Auction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( AL ICE , ĠB OB , ĠCHAR LI E ). map Ġ{ Ġit . publicKey Ġ}, ĠA uction Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Auction able Asset Contract . ID , Ġasset . unlock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction able Asset Contract . ID , Ġasset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( asset . owner . own ing Key , ĠA uction able Asset Contract . Commands . Lock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" Must Ġhave Ġoutput Ġauction " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmust Not Have Owner As Bid der () Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction Contract . ID , Ġvalid Auction . copy ( b idd ers Ġ= ĠlistOf ( valid Auction . owner ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( AL ICE , ĠB OB , ĠCHAR LI E ). map Ġ{ Ġit . publicKey Ġ}, ĠA uction Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Auction able Asset Contract . ID , Ġasset . unlock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction able Asset Contract . ID , Ġasset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( asset . owner . own ing Key , ĠA uction able Asset Contract . Commands . Lock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" The Ġowner Ġmust Ġnot Ġbe Ġa Ġbid der " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmust Have At Least One Bid der () Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction Contract . ID , Ġvalid Auction . copy ( b idd ers Ġ= ĠlistOf ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( AL ICE , ĠB OB , ĠCHAR LI E ). map Ġ{ Ġit . publicKey Ġ}, ĠA uction Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Auction able Asset Contract . ID , Ġasset . unlock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction able Asset Contract . ID , Ġasset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( asset . owner . own ing Key , ĠA uction able Asset Contract . Commands . Lock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" There Ġmust Ġbe Ġat Ġleast Ġone Ġbid der " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmust Have Price GreaterThan Zero () Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction Contract . ID , Ġvalid Auction . copy ( price Ġ= Ġ 0 . GBP Ġissued By ĠM EG AC OR P . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( AL ICE , ĠB OB , ĠCHAR LI E ). map Ġ{ Ġit . publicKey Ġ}, ĠA uction Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Auction able Asset Contract . ID , Ġasset . unlock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction able Asset Contract . ID , Ġasset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( asset . owner . own ing Key , ĠA uction able Asset Contract . Commands . Lock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" The Ġstart Ġprice Ġshould Ġbe Ġgreater Ġthan Ġzero " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmust Have All Signatures () Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction Contract . ID , Ġvalid Auction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( AL ICE , ĠB OB ). map Ġ{ Ġit . publicKey Ġ}, ĠA uction Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Auction able Asset Contract . ID , Ġasset . unlock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction able Asset Contract . ID , Ġasset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( asset . owner . own ing Key , ĠA uction able Asset Contract . Commands . Lock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" All Ġparticipants Ġmust Ġsign " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmust Have Asset Lock Command () Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction Contract . ID , Ġvalid Auction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( AL ICE , ĠB OB , ĠCHAR LI E ). map Ġ{ Ġit . publicKey Ġ}, ĠA uction Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmust Reference Correct Asset () Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction Contract . ID , Ġvalid Auction . copy ( asset Id Ġ= ĠUnique Identifier ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( AL ICE , ĠB OB , ĠCHAR LI E ). map Ġ{ Ġit . publicKey Ġ}, ĠA uction Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Auction able Asset Contract . ID , Ġasset . unlock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Auction able Asset Contract . ID , Ġasset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( asset . owner . own ing Key , ĠA uction able Asset Contract . Commands . Lock ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" Auction Ġmust Ġcorrectly Ġreference Ġthis Ġasset " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }