package Ġcom . g ats in ski . re ms . contracts Ċ Ċ import Ġcom . g ats in ski . re ms . Real E state Ċ import Ġcom . g ats in ski . re ms . Real E state Contract Ċ import Ġnet . cord a . core . identity . C ord a X 5 0 0 Name Ċ 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 ĠR ent Command Tests Ġ{ ĊĠĠĠ Ġprivate Ġval Ġledger Services Ġ= ĠMock Services ( listOf (" com . g ats in ski . re ms ")) ĊĠĠĠ Ġprivate Ġval Ġowner Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" John ĠDoe ", Ġ" City ", Ġ" BG ")) ĊĠĠĠ Ġprivate Ġval Ġtenant Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" Rich ard ĠRo e ", Ġ" Town ", Ġ" BG ")) ĊĠĠĠ Ġprivate Ġval Ġthird Party Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" J ane ĠRo e ", Ġ" Town ", Ġ" BG ")) ĊĠĠĠ Ġprivate Ġval Ġparticipants Ġ= ĠlistOf ( owner . publicKey , Ġtenant . publicKey ) ĊĊĠĠĠ Ġprivate Ġval Ġreal E state Without Tenant Ġ= ĠReal E state ( ĊĠĠĠĠĠĠĠ Ġowner Ġ= Ġowner . party , ĊĠĠĠĠĠĠĠ Ġaddress Ġ= Ġ" City , ĠTest ĠRes idential ĠQu arter , ĠBuilding Ġ 7 5 , ĠEn tr ance ĠA , ĠâĦ ĸ 1 0 " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġreal E state With Tenant Ġ= Ġreal E state Without Tenant . copy ( tenant Ġ= Ġtenant . party ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Rent Ġcommand Ġshould Ġcomplete Ġsuccessfully `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠReal E state Contract . Commands . Rent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Real E state Contract . PROGRAM _ ID , Ġreal E state Without Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Real E state Contract . PROGRAM _ ID , Ġreal E state With Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` A Ġsingle Ġinput Ġstate Ġshould Ġbe Ġconsumed Ġwhen Ġrent ing Ġa Ġreal Ġest ate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠReal E state Contract . Commands . Rent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Real E state Contract . PROGRAM _ ID , Ġreal E state With Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With (" A Ġsingle Ġinput Ġstate Ġshould Ġbe Ġconsumed Ġwhen Ġrent ing Ġa Ġreal Ġest ate ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠReal E state Contract . Commands . Rent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Real E state Contract . PROGRAM _ ID , Ġreal E state Without Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Real E state Contract . PROGRAM _ ID , Ġreal E state Without Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Real E state Contract . PROGRAM _ ID , Ġreal E state With Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With (" A Ġsingle Ġinput Ġstate Ġshould Ġbe Ġconsumed Ġwhen Ġrent ing Ġa Ġreal Ġest ate ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` A Ġsingle Ġoutput Ġstate Ġshould Ġbe Ġproduced Ġwhen Ġrent ing Ġa Ġreal Ġest ate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠReal E state Contract . Commands . Rent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Real E state Contract . PROGRAM _ ID , Ġreal E state Without Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" A Ġsingle Ġoutput Ġstate Ġshould Ġbe Ġproduced Ġwhen Ġrent ing Ġa Ġreal Ġest ate " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠReal E state Contract . Commands . Rent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Real E state Contract . PROGRAM _ ID , Ġreal E state Without Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Real E state Contract . PROGRAM _ ID , Ġreal E state With Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Real E state Contract . PROGRAM _ ID , Ġreal E state With Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" A Ġsingle Ġoutput Ġstate Ġshould Ġbe Ġproduced Ġwhen Ġrent ing Ġa Ġreal Ġest ate " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` There Ġshould Ġbe Ġno Ġprevious Ġtenant Ġwhen Ġrent ing Ġa Ġreal Ġest ate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠReal E state Contract . Commands . Rent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Real E state Contract . PROGRAM _ ID , Ġreal E state Without Tenant . copy ( tenant Ġ= Ġthird Party . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Real E state Contract . PROGRAM _ ID , Ġreal E state With Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With (" There Ġshould Ġbe Ġno Ġprevious Ġtenant Ġwhen Ġrent ing Ġa Ġreal Ġest ate ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` The Ġtenant Ġshould Ġchange Ġwhen Ġrent ing Ġa Ġreal Ġest ate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠReal E state Contract . Commands . Rent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Real E state Contract . PROGRAM _ ID , Ġreal E state Without Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Real E state Contract . PROGRAM _ ID , Ġreal E state Without Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With (" The Ġtenant Ġshould Ġchange Ġwhen Ġrent ing Ġa Ġreal Ġest ate ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Only Ġthe Ġtenant Ġshould Ġchange Ġwhen Ġrent ing Ġa Ġreal Ġest ate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠReal E state Contract . Commands . Rent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Real E state Contract . PROGRAM _ ID , Ġreal E state Without Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Real E state Contract . PROGRAM _ ID , Ġreal E state With Tenant . copy ( owner Ġ= Ġthird Party . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With (" Only Ġthe Ġtenant Ġshould Ġchange Ġwhen Ġrent ing Ġa Ġreal Ġest ate ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠReal E state Contract . Commands . Rent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Real E state Contract . PROGRAM _ ID , Ġreal E state Without Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Real E state Contract . PROGRAM _ ID , Ġreal E state With Tenant . copy ( address Ġ= Ġ" New ĠCity , ĠFake ĠAddress ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With (" Only Ġthe Ġtenant Ġshould Ġchange Ġwhen Ġrent ing Ġa Ġreal Ġest ate ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` The Ġowner Ġand Ġthe Ġtenant Ġshould Ġbe Ġdifferent Ġwhen Ġrent ing Ġa Ġreal Ġest ate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( participants , ĠReal E state Contract . Commands . Rent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Real E state Contract . PROGRAM _ ID , Ġreal E state Without Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Real E state Contract . PROGRAM _ ID , Ġreal E state Without Tenant . copy ( tenant Ġ= Ġowner . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġowner Ġand Ġthe Ġtenant Ġshould Ġbe Ġdifferent Ġwhen Ġrent ing Ġa Ġreal Ġest ate " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Both Ġowner Ġand Ġtenant Ġshould Ġsign Ġthe Ġtransaction Ġwhen Ġrent ing Ġa Ġreal Ġest ate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( owner . publicKey ), ĠReal E state Contract . Commands . Rent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Real E state Contract . PROGRAM _ ID , Ġreal E state Without Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Real E state Contract . PROGRAM _ ID , Ġreal E state With Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Both Ġowner Ġand Ġtenant Ġshould Ġsign Ġthe Ġtransaction Ġwhen Ġrent ing Ġa Ġreal Ġest ate " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( tenant . publicKey ), ĠReal E state Contract . Commands . Rent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Real E state Contract . PROGRAM _ ID , Ġreal E state Without Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Real E state Contract . PROGRAM _ ID , Ġreal E state With Tenant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails With ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Both Ġowner Ġand Ġtenant Ġshould Ġsign Ġthe Ġtransaction Ġwhen Ġrent ing Ġa Ġreal Ġest ate " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ