package Ġcom . template . contracts Ċ Ċ import Ġcom . template . Job Contract Ċ import Ġcom . template . Job State Ċ import Ġcom . template . M ilestone Ċ import Ġcom . template . M ilestone Status Ċ import Ġnet . cord a . core . identity . C ord a X 5 0 0 Name Ċ import Ġnet . cord a . finance . DO LL ARS Ċ 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 Ċ Ċ class ĠAg ree Job Command Tests Ġ{ ĊĠĠĠ Ġprivate Ġval Ġledger Services Ġ= ĠMock Services ( listOf (" com . template ")) ĊĠĠĠ Ġprivate Ġval Ġdeveloper Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" John ĠDoe ", Ġ" City ", Ġ" GB ")) ĊĠĠĠ Ġprivate Ġval Ġcontract or Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" Rich ard ĠRo e ", Ġ" Town ", Ġ" GB ")) ĊĠĠĠ Ġprivate Ġval Ġmilestone Ġ= ĠM ilestone (" Fit Ġwindows .", Ġ 1 0 0 . DO LL ARS ) ĊĠĠĠ Ġprivate Ġval Ġparticipants Ġ= ĠlistOf ( developer . publicKey , Ġcontract or . publicKey ) ĊĠĠĠ Ġprivate Ġval Ġjob State Ġ= ĠJob State ( ĊĠĠĠĠĠĠĠ Ġm ilestones Ġ= ĠlistOf ( milestone ), ĊĠĠĠĠĠĠĠ Ġdeveloper Ġ= Ġdeveloper . party , ĊĠĠĠĠĠĠĠ Ġcontract or Ġ= Ġcontract or . party ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Ag ree Job Ġcommand Ġshould Ġcomplete Ġsuccessfully `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠJob Contract . Commands . Ag ree Job ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Job Contract . ID , Ġjob State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` No ĠJob State Ġinputs Ġshould Ġbe Ġconsumed `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠJob Contract . Commands . Ag ree Job ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Job Contract . ID , Ġjob State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Job Contract . ID , Ġjob State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With (" No ĠJob State Ġinputs Ġshould Ġbe Ġconsumed .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` One ĠJob State Ġoutput Ġshould Ġbe Ġproduced `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠJob Contract . Commands . Ag ree Job ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Job Contract . ID , Ġjob State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Job Contract . ID , Ġjob State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With (" One ĠJob State Ġoutput Ġshould Ġbe Ġproduced .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` The Ġdeveloper Ġshould Ġbe Ġdifferent Ġto Ġthe Ġcontract or `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠJob Contract . Commands . Ag ree Job ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Job Contract . ID , Ġjob State . copy ( developer Ġ= Ġcontract or . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With (" The Ġdeveloper Ġand Ġthe Ġcontract or Ġshould Ġbe Ġdifferent Ġparties .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` All Ġthe Ġm ilestones Ġshould Ġbe Ġun started `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA Ġsingle Ġstarted Ġmilestone . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠJob Contract . Commands . Ag ree Job ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Job Contract . ID , Ġjob State . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ilestones Ġ= ĠlistOf ( milestone . copy ( status Ġ= ĠM ilestone Status . STARTED )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With (" All Ġthe Ġm ilestones Ġshould Ġbe Ġun started .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAn Ġun started Ġmilestone Ġfirst , Ġfollowed Ġby Ġa Ġstarted Ġmilestone . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠJob Contract . Commands . Ag ree Job ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Job Contract . ID , Ġjob State . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ilestones Ġ= ĠlistOf ( milestone , Ġmilestone . copy ( status Ġ= ĠM ilestone Status . STARTED )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With (" All Ġthe Ġm ilestones Ġshould Ġbe Ġun started .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Both Ġthe Ġdeveloper Ġand Ġthe Ġcontract or Ġshould Ġbe Ġsign ers Ġof Ġthe Ġtransaction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( developer . publicKey ), ĠJob Contract . Commands . Ag ree Job ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Job Contract . ID , Ġjob State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With (" The Ġdeveloper Ġand Ġcontract or Ġshould Ġbe Ġrequired Ġsign ers .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( contract or . publicKey ), ĠJob Contract . Commands . Ag ree Job ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Job Contract . ID , Ġjob State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With (" The Ġdeveloper Ġand Ġcontract or Ġshould Ġbe Ġrequired Ġsign ers .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ