package Ġio . github . d now ak . order . t aking . place . order . implementation Ċ Ċ import Ġarrow . core . cur ried Ċ import Ġio . github . d now ak . order . t aking . common . Billing Amount Ċ import Ġio . github . d now ak . order . t aking . place . order . Bill able Order Pl aced Ċ import Ġio . github . d now ak . order . t aking . place . order . Order Ack nowled gment Sent Ċ import Ġio . github . d now ak . order . t aking . place . order . Place Order Event Ċ import Ġio . kot est . core . spec . style . Describe Spec Ċ import Ġio . kot est . matchers . collections . should Contain Exactly In Any Order Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . mock k . clear All Mocks Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . verify Ċ import Ġjava . math . BigDecimal Ċ Ċ internal Ġclass ĠTest Notification Ġ: ĠDescribe Spec ({ ĊĠĠĠ Ġbefore Test Ġ{ Ġclear All Mocks () Ġ} ĊĠĠĠ Ġdescribe (" ack nowledge Order ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Order Ack nowledge ment Letter : ĠCreate Order Ack nowledge ment Letter Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġsend Ack nowledge ment : ĠSend Order Ack nowled gment Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġacknowledge Order : ĠAck nowledge Order Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ:: ack nowledge Order . cur ried ()( create Order Ack nowledge ment Letter )( send Ack nowledge ment ) ĊĊĠĠĠĠĠĠĠ Ġval Ġletter Ġ= ĠHtml String (" ack Ġletter ") ĊĠĠĠĠĠĠĠ Ġval Ġfixture Ġ= ĠOrder Fixture ĊĠĠĠĠĠĠĠ Ġval Ġorder Ġ= Ġfixture . pr iced Order ĊĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġorder . customer Info . email Address ĊĠĠĠĠĠĠĠ Ġbefore Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcreate Order Ack nowledge ment Letter ( any ()) Ġ} Ġreturns Ġletter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext (" ack nowledge ment Ġsent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult : ĠOrder Ack nowled gment Sent ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsend Ack nowledge ment ( any ()) Ġ} Ġreturns ĠSend Result . Sent ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġacknowledge Order ( fixture . pr iced Order ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" creates Ġletter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcreate Order Ack nowledge ment Letter ( order ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" s ends Ġacknowledge ment ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġsend Ack nowledge ment ( Order Ack nowledge ment ( email , Ġletter )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" returns Ġacknowledge ment ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe ĠOrder Ack nowled gment Sent ( order . orderId , Ġemail ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext (" ack nowledge ment Ġnot Ġsent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult : ĠOrder Ack nowled gment Sent ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsend Ack nowledge ment ( any ()) Ġ} Ġreturns ĠSend Result . Not Sent ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġacknowledge Order ( fixture . pr iced Order ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" creates Ġletter ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcreate Order Ack nowledge ment Letter ( order ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" s ends Ġacknowledge ment ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġsend Ack nowledge ment ( Order Ack nowledge ment ( email , Ġletter )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" returns Ġnull ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġdescribe (" create Events ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfixture Ġ= ĠOrder Fixture ĊĠĠĠĠĠĠĠ Ġval Ġorder Ġ= Ġfixture . pr iced Order ĊĠĠĠĠĠĠĠ Ġval Ġorder With Zero Billing Amount Ġ= Ġorder . copy ( amount To Bill Ġ= ĠBilling Amount . Companion . create ( BigDecimal . ZERO )) ĊĠĠĠĠĠĠĠ Ġval Ġorder Ack nowled gment Sent Ġ= ĠOrder Ack nowled gment Sent ( order . orderId , Ġorder . customer Info . email Address ) ĊĠĠĠĠĠĠĠ Ġval Ġsent Event Ġ= ĠPlace Order Event . Ack nowled gment Sent ( order Ack nowled gment Sent ) ĊĠĠĠĠĠĠĠ Ġval Ġplaced Event Zero Amount Ġ= ĠPlace Order Event . Order Pl aced ( order With Zero Billing Amount ) ĊĠĠĠĠĠĠĠ Ġval Ġplaced Event Some Amount Ġ= ĠPlace Order Event . Order Pl aced ( order ) ĊĠĠĠĠĠĠĠ Ġval Ġbilling Event Ġ= ĠPlace Order Event . Bill able Order Pl aced ( Bill able Order Pl aced ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder . orderId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder . billing Address , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder . amount To Bill ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcontext (" order Ġwith Ġzero Ġbilling Ġamount , Ġacknowledge ment Ġnot Ġsent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" creates Ġevents : Ġplaced ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Events ( order With Zero Billing Amount , Ġnull ) Ġshould Contain Exactly In Any Order ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaced Event Zero Amount ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext (" order Ġwith Ġzero Ġbilling Ġamount , Ġacknowledge ment Ġsent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" creates Ġevents : Ġplaced , Ġsent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Events ( order With Zero Billing Amount , Ġorder Ack nowled gment Sent ) Ġshould Contain Exactly In Any Order ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaced Event Zero Amount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsent Event ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext (" order Ġwith Ġbilling Ġamount Ġgreater Ġthan Ġzero , Ġacknowledge ment Ġnot Ġsent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" creates Ġevents : Ġplaced , Ġbilling ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Events ( order , Ġnull ) Ġshould Contain Exactly In Any Order ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaced Event Some Amount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbilling Event ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext (" order Ġwith Ġbilling Ġamount Ġgreater Ġthan Ġzero , Ġacknowledge ment Ġsent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" creates Ġevents : Ġsent , Ġplaced , Ġbilling ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Events ( order , Ġorder Ack nowled gment Sent ) Ġshould Contain Exactly In Any Order ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsent Event , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaced Event Some Amount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbilling Event ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }) Ċ