package Ġcom . tt ul ka . e commerce . billing . payment . jdbc Ċ Ċ import Ġcom . tt ul ka . e commerce . billing . payment . Payment Ċ import Ġcom . tt ul ka . e commerce . billing . payment . Payment .* Ċ import Ġcom . tt ul ka . e commerce . billing . payment . Payment Collected Ċ import Ġcom . tt ul ka . e commerce . billing . payment . Reference Id Ċ import Ġcom . tt ul ka . e commerce . common . events . Domain Event Ċ import Ġcom . tt ul ka . e commerce . common . events . Event Publisher Ċ import Ġcom . tt ul ka . e commerce . common . primitives . Money Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert All Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . test . autoconfigure . jdbc . Jdbc Test Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . context . annotation . Configuration Ċ import Ġorg . springframework . jdbc . core . Jdbc Template Ċ import Ġorg . springframework . test . context . Context Configuration Ċ Ċ @ Jdbc Test Ċ @ Context Configuration ( classes Ġ= Ġ[ Payment Test . Test Config :: class ]) Ċ internal Ġclass ĠPayment Test ( ĊĠĠĠĠĠĠĠ Ġ@ Autowired Ġval Ġjdbc Template : ĠJdbc Template , ĊĠĠĠĠĠĠĠ Ġ@ Autowired Ġval Ġevent Publisher : ĠFake Event Publisher ) Ġ{ ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġclear Event Publisher () Ġ{ ĊĠĠĠĠĠĠĠ Ġevent Publisher . sent . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpayment _ values () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayment : ĠPayment Ġ= ĠPayment Jdbc ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReference Id ( 1 2 3 ), ĠMoney ( 1 2 3 . 5 f ), Ġjdbc Template , Ġevent Publisher ) ĊĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat ( payment . id ()). isNotNull () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat ( payment . reference Id ()). isEqualTo ( Reference Id ( 1 2 3 )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat ( payment . total ()). isEqualTo ( Money ( 1 2 3 . 5 f )) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpayment _ is _ requested () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayment : ĠPayment Ġ= ĠPayment Jdbc ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReference Id ( 1 2 3 ), ĠMoney ( 1 2 3 . 5 f ), Ġjdbc Template , Ġevent Publisher ) ĊĠĠĠĠĠĠĠ Ġpayment . request () ĊĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat ( payment . is Requested ). isTrue () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat ( payment . is Collected ). isFalse () Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpayment _ is _ collected () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayment : ĠPayment Ġ= ĠPayment Jdbc ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReference Id ( 1 2 3 ), ĠMoney ( 1 2 3 . 5 f ), Ġjdbc Template , Ġevent Publisher ) ĊĠĠĠĠĠĠĠ Ġpayment . request () ĊĠĠĠĠĠĠĠ Ġpayment . collect () ĊĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat ( payment . is Requested ). isTrue () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat ( payment . is Collected ). isTrue () Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcollected _ payment _ raises _ an _ event () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayment : ĠPayment Ġ= ĠPayment Jdbc ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReference Id (" TEST 1 2 3 "), ĠMoney ( 1 2 3 . 5 f ), Ġjdbc Template , Ġevent Publisher ) ĊĠĠĠĠĠĠĠ Ġpayment . request () ĊĠĠĠĠĠĠĠ Ġpayment . collect () ĊĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat ( event Publisher . sent ). has Size ( 1 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat ( event Publisher . sent . first ()). isInstanceOf ( Payment Collected :: class . java ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat (( event Publisher . sent . first () Ġas ĠPayment Collected ). reference Id ). isEqualTo (" TEST 1 2 3 ") Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcannot _ request _ already _ requested _ payment () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayment : ĠPayment Ġ= ĠPayment Jdbc ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReference Id ( 1 2 3 ), ĠMoney ( 1 2 3 . 5 f ), Ġjdbc Template , Ġevent Publisher ) ĊĠĠĠĠĠĠĠ Ġpayment . request () ĊĊĠĠĠĠĠĠĠ ĠassertThrows < Payment Already Requested Exception > Ġ{ Ġpayment . request () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcannot _ request _ already _ collected _ payment () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayment : ĠPayment Ġ= ĠPayment Jdbc ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReference Id ( 1 2 3 ), ĠMoney ( 1 2 3 . 5 f ), Ġjdbc Template , Ġevent Publisher ) ĊĠĠĠĠĠĠĠ Ġpayment . request () ĊĠĠĠĠĠĠĠ Ġpayment . collect () ĊĊĠĠĠĠĠĠĠ ĠassertThrows < Payment Already Requested Exception > Ġ{ Ġpayment . request () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcannot _ collect _ un requested _ payment () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayment : ĠPayment Ġ= ĠPayment Jdbc ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReference Id ( 1 2 3 ), ĠMoney ( 1 2 3 . 5 f ), Ġjdbc Template , Ġevent Publisher ) ĊĊĠĠĠĠĠĠĠ ĠassertThrows < Payment Not Requested Y et Exception > Ġ{ Ġpayment . collect () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcannot _ collect _ already _ collected _ payment () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayment : ĠPayment Ġ= ĠPayment Jdbc ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReference Id ( 1 2 3 ), ĠMoney ( 1 2 3 . 5 f ), Ġjdbc Template , Ġevent Publisher ) ĊĠĠĠĠĠĠĠ Ġpayment . request () ĊĠĠĠĠĠĠĠ Ġpayment . collect () ĊĊĠĠĠĠĠĠĠ ĠassertThrows < Payment Already Collected Exception > Ġ{ Ġpayment . collect () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Configuration ĊĠĠĠ Ġclass ĠTest Config Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġfun Ġevent Publisher () Ġ= ĠFake Event Publisher () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFake Event Publisher Ġ: ĠEvent Publisher Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsent : ĠMutable List < Domain Event > Ġ= Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġraise ( event : ĠDomain Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsent . add ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ