import Ġde . d hb w . ka . domain . aggreg ates . R ental Instrument Ċ import Ġde . d hb w . ka . domain . repository . Instrument Repository Ċ import Ġde . d hb w . ka . domain . repository . R ental Instrument Repository Ċ import Ġde . d hb w . ka . domain . value objects . Instrument Identification Ċ import Ġde . d hb w . ka . instrument s . Check If Instrument Exists Ċ import Ġde . d hb w . ka . rent al instrument s . Check If R ental Instrument Exists Ċ import Ġde . d hb w . ka . rent al instrument s . Create R ental Instrument Ċ import Ġio . kot est . assertions . throw ables . should Throw Ċ import Ġio . kot est . core . spec . style . Fun Spec Ċ import Ġio . kot est . matchers . should Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . kot est . matchers . string . start With Ċ import Ġio . mock k . clear Mocks Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . verify Ċ Ċ class ĠUse Case Tests Ġ: ĠFun Spec ({ ĊĠĠĠ Ġval Ġrent al Instrument Repository Ġ= Ġmock k < R ental Instrument Repository >( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġval Ġinstrument Repository Ġ= Ġmock k < Instrument Repository >( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġval Ġuse Case Ġ= ĠCreate R ental Instrument ( rent al Instrument Repository , Ġinstrument Repository ) ĊĠĠĠ Ġval Ġrent al Instrument Ġ= ĠR ental Instrument ( ĊĠĠĠĠĠĠĠ ĠInstrument Identification (" Y am aha ", Ġ" Y HR - 5 6 7 D ", Ġ" F rench ĠH orn "), ĊĠĠĠĠĠĠĠĠ 3 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġafter Test Ġ{ ĊĠĠĠĠĠĠĠ Ġclear Mocks ( rent al Instrument Repository ) ĊĠĠĠĠĠĠĠ Ġclear Mocks ( instrument Repository ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtest (" Should Ġthrow Ġmissing ĠInstrument Ġin ĠDatabase ĠException ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġshould Throw < Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Case . execute ( rent al Instrument ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġexception . message Ġshould Ġstart With (" Instrument Ġmust Ġbe Ġpresent Ġin Ġthe ĠInstrument Ġdatabase ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtest (" Should Ġthrow Ġmissing ĠR ental ĠInstrument ĠQuantity ĠException ") Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠCheck If Instrument Exists ( instrument Repository ). execute ( rent al Instrument . instrument Identification ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠCheck If R ental Instrument Exists ( rent al Instrument Repository ). execute ( rent al Instrument . instrument Identification ) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġrent al Instrument With Wrong Quantity Ġ= ĠR ental Instrument ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument Identification (" Y am aha ", Ġ" Y HR - 5 6 7 D ", Ġ" F rench ĠH orn "), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġshould Throw < Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Case . execute ( rent al Instrument With Wrong Quantity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġexception . message Ġshould Ġstart With (" You Ġneed Ġto Ġhave Ġat Ġleast Ġ 1 Ġrent al Ġinstrument Ġin Ġyour ĠR ental ĠInstrument Ġstorage !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtest (" Should Ġthrow ĠR ental Instrument Ġcan 't Ġbe Ġcreated Ġtwice ĠException ") Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠCheck If Instrument Exists ( instrument Repository ). execute ( rent al Instrument . instrument Identification ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠCheck If R ental Instrument Exists ( rent al Instrument Repository ). execute ( rent al Instrument . instrument Identification ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġshould Throw < Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Case . execute ( rent al Instrument ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġexception . message Ġshould Ġstart With (" The Ġsame ĠR ental ĠInstrument Ġcan 't Ġbe Ġcreated Ġtwice ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtest (" Should Ġcreate ĠR ental ĠInstrument ") Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠCheck If Instrument Exists ( instrument Repository ). execute ( rent al Instrument . instrument Identification ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠCheck If R ental Instrument Exists ( rent al Instrument Repository ). execute ( rent al Instrument . instrument Identification ) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġrent al Instrument Repository . create R ental Instrument ( rent al Instrument ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġuse Case . execute ( rent al Instrument ) ĠshouldBe Ġtrue ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġrent al Instrument Repository . create R ental Instrument ( rent al Instrument ) Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ