package Ġorg . k ent unc . bit tr ader . common . domain . model . c andle Ċ Ċ import Ġorg . junit . jupiter . api . Assertions . assert All Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assert Throws Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . k ent unc . bit tr ader . common . domain . model . market . Product Code Ċ import Ġorg . k ent unc . bit tr ader . common . domain . model . quote . Price Ċ import Ġorg . k ent unc . bit tr ader . common . domain . model . quote . Volume Ċ import Ġorg . k ent unc . bit tr ader . common . domain . model . time . Duration Ċ import Ġorg . k ent unc . bit tr ader . common . domain . model . time . Truncated DateTime Ċ import Ġorg . k ent unc . bit tr ader . common . test . model . Test C andle Ċ import Ġorg . k ent unc . bit tr ader . common . test . model . Test Ticker Ċ import Ġjava . time . LocalDateTime Ċ Ċ internal Ġclass ĠC andle Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinstantiate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġticker Ġ= ĠTest Ticker . create () ĊĠĠĠĠĠĠĠ Ġval Ġc andle Ġ= ĠC andle . of ( ticker , ĠDuration . DAYS ) ĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( ticker . id . product Code , Ġc andle . id . product Code ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( ticker . volume , Ġc andle . volume ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` invalid Ġargument Ġ- Ġhigh Ġless Ġthan Ġlow `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= ĠDuration . DAYS ĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC andle . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠC andle Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProduct Code . BTC _ J PY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr uncated DateTime . Companion . of ( LocalDateTime . now (), Ġduration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġ= ĠPrice . of ( 1 0 0 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Ġ= ĠPrice . of ( 1 0 0 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhigh Ġ= ĠPrice . of ( 1 0 0 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlow Ġ= ĠPrice . of ( 1 0 0 . 0 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvolume Ġ= ĠVolume . of ( 1 0 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Extend With () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup : ĊĠĠĠĠĠĠĠ Ġval Ġlocal DateTime Ġ= ĠLocalDateTime . of ( 2 0 2 0 , Ġ 1 , Ġ 1 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġc andle Ġ= ĠTest C andle . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdateTime Ġ= Ġlocal DateTime , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġ= Ġ 1 0 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Ġ= Ġ 2 0 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhigh Ġ= Ġ 3 0 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlow Ġ= Ġ 5 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvolume Ġ= Ġ 1 0 0 . 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġticker Ġ= ĠTest Ticker . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdateTime Ġ= Ġlocal DateTime , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbest Bid Ġ= Ġ 4 0 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbest Ask Ġ= Ġ 4 0 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvolume Ġ= Ġ 1 5 0 . 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġexercise ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġc andle . extend With ( ticker ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( Product Code . BTC _ J PY , Ġactual . id . product Code ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( Duration . DAYS , Ġactual . id . duration ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( Price . of ( 1 0 0 . 0 ), Ġactual . open ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( Price . of ( 4 0 0 . 0 ), Ġactual . close ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( Price . of ( 4 0 0 . 0 ), Ġactual . high ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( Price . of ( 5 0 . 0 ), Ġactual . low ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( Volume . of ( 2 5 0 . 0 ), Ġactual . volume ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġextend With () Ġwith Ġinvalid Ġproduct Ġcode `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocal DateTime Ġ= ĠLocalDateTime . of ( 2 0 2 0 , Ġ 1 , Ġ 1 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġc andle Ġ= ĠTest C andle . create ( product Code Ġ= ĠProduct Code . BTC _ J PY , ĠdateTime Ġ= Ġlocal DateTime ) ĊĠĠĠĠĠĠĠ Ġval Ġticker Ġ= ĠTest Ticker . create ( product Code Ġ= ĠProduct Code . ETH _ J PY , ĠdateTime Ġ= Ġlocal DateTime ) ĊĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc andle . extend With ( ticker ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġextend With () Ġwith Ġinvalid Ġdatetime `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocal DateTime Ġ= ĠLocalDateTime . of ( 2 0 2 0 , Ġ 1 , Ġ 1 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġc andle Ġ= ĠTest C andle . create ( dateTime Ġ= Ġlocal DateTime ) ĊĠĠĠĠĠĠĠ Ġval Ġticker Ġ= ĠTest Ticker . create ( dateTime Ġ= Ġlocal DateTime . plus Days ( 1 )) ĊĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc andle . extend With ( ticker ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ