package Ġcom . j ah s . context . order . modules . order . accept ance Ċ Ċ import Ġcom . kot ato . assert Similar . Matcher Similar . assert Similar Ċ import Ġcom . j ah s . context . order . modules . order . adapter . update . Detail Line Rest Request Ċ import Ġcom . j ah s . context . order . modules . order . domain . Amount Ċ import Ġcom . j ah s . context . order . modules . order . domain . OrderId Ċ import Ġcom . j ah s . context . order . modules . order . domain . Detail Line Ċ import Ġcom . j ah s . context . order . modules . order . domain . view . Order View Repository Ċ import Ġcom . j ah s . context . order . modules . order . stub . Add Det al Line Rest Request Stub Ċ import Ġcom . j ah s . context . order . modules . order . stub . OrderId Stub Ċ import Ġcom . j ah s . context . order . modules . order . stub . Create Order Rest Request Stub Ċ import Ġcom . j ah s . context . order . modules . order . stub . Subtract Det al Line Rest Request Stub Ċ import Ġcom . j ah s . context . order . modules . detail _ line . domain . ItemId Ċ import Ġcom . j ah s . shared . Context Starter Test Ċ import Ġcom . j ah s . shared . Read Model Transaction Wrapper Ċ import Ġcom . j ah s . shared . money . Money Ċ import Ġio . rest ass ured . Rest Ass ured Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠSubtract Detail Line Controller Test Ġ: ĠContext Starter Test () Ġ{ ĊĊĠĠĠ Ġ@ Inject Ġprivate Ġlateinit Ġvar Ġread Model Transaction : ĠRead Model Transaction Wrapper ĊĠĠĠ Ġ@ Inject Ġprivate Ġlateinit Ġvar Ġrepository : ĠOrder View Repository ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġsubtract Ġitem Ġto Ġorder `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠorderId Ġ= ĠCreate Order Rest Request Stub . random (). also Ġ{ Ġorder Flow . create Order ( it ) Ġ}. id !! ĊĠĠĠĠĠĠĠ Ġval Ġadd Item Ġ= ĠAdd Det al Line Rest Request Stub . random () ĊĠĠĠĠĠĠĠ Ġval Ġsub Item Ġ= ĠSubtract Det al Line Rest Request Stub . random ( itemId Ġ= Ġadd Item . productId !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprice Ġ= Ġadd Item . price !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Ġ= Ġadd Item . currency !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Ġ= Ġ( addItem . quantity !! Ġ- Ġ 1 ) Ġ* Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġpatch ( addItem , ĠOrder Id ( orderId )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. statusCode ( HttpStatus . NO _ CONTENT . value ()) ĊĠĠĠĠĠĠĠ Ġpatch ( sub Item , ĠOrder Id ( orderId )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. statusCode ( HttpStatus . NO _ CONTENT . value ()) ĊĠĠĠĠĠĠĠ Ġread Model Transaction Ġ{ ĠOrder Id . fromString ( orderId . toString ()). let ( repository :: search ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġit !!. detail Lines . size Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Similar ( it !!. detail Lines . entries . first (). to Pair (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDetail Line ( ItemId . fromString ( addItem . productId !!. toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMoney . of ( addItem . price !! , Ġadd Item . currency !! )) Ġto ĠAmount ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġsubtract Ġitem Ġto Ġorder Ġwith Ġsame Ġquantity Ġas Ġactual Ġhas `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠorderId Ġ= ĠCreate Order Rest Request Stub . random (). also Ġ{ Ġorder Flow . create Order ( it ) Ġ}. id !! ĊĠĠĠĠĠĠĠ Ġval Ġadd Item Ġ= ĠAdd Det al Line Rest Request Stub . random () ĊĠĠĠĠĠĠĠ Ġval Ġsub Item Ġ= ĠSubtract Det al Line Rest Request Stub . random ( itemId Ġ= Ġadd Item . productId !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprice Ġ= Ġadd Item . price !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Ġ= Ġadd Item . currency !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Ġ= Ġ( addItem . quantity !! ) Ġ* Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġpatch ( addItem , ĠOrder Id ( orderId )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. statusCode ( HttpStatus . NO _ CONTENT . value ()) ĊĠĠĠĠĠĠĠ Ġpatch ( sub Item , ĠOrder Id ( orderId )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. statusCode ( HttpStatus . NO _ CONTENT . value ()) ĊĠĠĠĠĠĠĠ Ġread Model Transaction . invoke Ġ{ ĠOrder Id . fromString ( orderId . toString ()). let ( repository :: search ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġit !!. detail Lines . isEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġsubtract Ġitem Ġto Ġorder Ġwith Ġmore Ġquantity Ġthan Ġactual Ġhas `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠorderId Ġ= ĠCreate Order Rest Request Stub . random (). also Ġ{ Ġorder Flow . create Order ( it ) Ġ}. id !! ĊĠĠĠĠĠĠĠ Ġval Ġadd Item Ġ= ĠAdd Det al Line Rest Request Stub . random () ĊĠĠĠĠĠĠĠ Ġval Ġsub Item Ġ= ĠSubtract Det al Line Rest Request Stub . random ( itemId Ġ= Ġadd Item . productId !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprice Ġ= Ġadd Item . price !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Ġ= Ġadd Item . currency !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Ġ= Ġ( addItem . quantity !! ) Ġ* Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġpatch ( addItem , ĠOrder Id ( orderId )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. statusCode ( HttpStatus . NO _ CONTENT . value ()) ĊĠĠĠĠĠĠĠ Ġpatch ( sub Item , ĠOrder Id ( orderId )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. statusCode ( HttpStatus . NO _ CONTENT . value ()) ĊĠĠĠĠĠĠĠ Ġread Model Transaction . invoke Ġ{ ĠOrder Id . fromString ( orderId . toString ()). let ( repository :: search ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġit !!. detail Lines . isEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġthrow Ġexception Ġwhen Ġtrying Ġto Ġsubtract Ġa Ġline Ġbecause Ġorder Ġdoes Ġnot Ġexists `() Ġ{ ĊĠĠĠĠĠĠĠ Ġpatch ( Subtract Det al Line Rest Request Stub . random (), ĠOrder Id Stub . random ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. statusCode ( HttpStatus . INTERNAL _ SERVER _ ERROR . value ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġthrow Ġexception Ġwhen Ġtrying Ġto Ġsubtract Ġa Ġline Ġbecause Ġno Ġitem Ġin Ġorder `() Ġ{ ĊĠĠĠĠĠĠĠ ĠCreate Order Rest Request Stub . random () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġorder Flow . create Order ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpatch ( Subtract Det al Line Rest Request Stub . random (), ĠOrder Id ( it . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. statusCode ( HttpStatus . INTERNAL _ SERVER _ ERROR . value ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpatch ( rest Request : ĠDetail Line Rest Request , ĠorderId : ĠOrder Id ) Ġ= ĠRest Ass ured . given () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. body ( object Mapper . writeValue AsString ( rest Request )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` when `() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. patch ("/ order / order /${ orderId . asString () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then () Ċ Ċ } Ċ