package Ġcom . open co inf ol ium . web api . controller Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . Kotlin Module Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġcom . open co inf ol ium . web api . entity . Coin Data Ċ import Ġcom . open co inf ol ium . web api . logging utils . Logging Aware Ċ import Ġcom . open co inf ol ium . web api . repository . Coin Data Repo Ċ import Ġcom . open co inf ol ium . web api . test utils . Db Loader Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . test . context . SpringBootTest Ċ import Ġorg . springframework . boot . test . web . client . Test Rest Template Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . test . context . junit . jupiter . Spring Extension Ċ Ċ private Ġ Ġdata Ġclass ĠCoin Data Res ( ĊĠĠĠĠĠĠĠ Ġvar Ġid : ĠInt , ĊĠĠĠĠĠĠĠ Ġvar Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġvar Ġsymbol : ĠString , ĊĠĠĠĠĠĠĠ Ġvar Ġslug : ĠString , ĊĠĠĠĠĠĠĠ Ġvar Ġcir cul ating Supply : ĠLong , ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Supply : ĠLong , ĊĠĠĠĠĠĠĠ Ġvar Ġmax Supply : ĠLong , ĊĠĠĠĠĠĠĠ Ġvar Ġurl : ĠString ? Ċ ) Ċ Ċ private Ġfun Ġconvert FromJson ( json Data : ĠString ): ĠList < Coin Data Res > Ġ= ĠObjectMapper () ĊĠĠĠĠĠĠĠ Ġ. register Module ( Kotlin Module ()) ĊĠĠĠĠĠĠĠ Ġ. readValue ( json Data ) Ċ Ċ /** Ċ Ġ* ĠController Ġintegration Ġtest Ġfor Ġ{@ link ĠCoin Data Controller }. Ċ Ġ* Ċ Ġ* Ġ@ author Ġch rist ian @ labor an ow its ch . de Ċ Ġ* Ċ Ġ*/ Ċ @ Extend With ( Spring Extension :: class ) Ċ @ SpringBootTest ( web Environment Ġ= ĠSpring Boot Test . Web Environment . RANDOM _ PORT ) Ċ class ĠCoin Data Controller Tests Ġ@ Autowired Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġval Ġcoin Data Controller : ĠCoin Data Controller , ĊĠĠĠĠĠĠĠ Ġval Ġdb Loader : ĠDb Loader , ĊĠĠĠĠĠĠĠ Ġval Ġcoin Data Repo : ĠCoin Data Repo , ĊĠĠĠĠĠĠĠ Ġval Ġtest Rest Template : ĠTest Rest Template ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠLogging Aware Ġ{ ĊĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġcontext Load s () Ġ{ ĊĠĠĠĠĠĠĠ Ġdb Loader . prepare Database () ĊĠĠĠĠĠĠĠ Ġpopulate Db () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġthat Ġwe Ġsuccessfully Ġcan Ġget Ġthe Ġbasic Ġdata Ġ` () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġtest Rest Template ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get For Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ api / v 1 / basic data / coins ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). also Ġ{ ĠassertThat ( it . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` as ` (" has Ġhttp Ġstatus Ġok ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( HttpStatus . OK ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġconvert FromJson ( it . body . toString ()) } ĊĊĠĠĠĠĠĠĠ Ġwith ( res ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` as ` (" we Ġhave Ġonly Ġone Ġelement ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( this [ 0 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` as ` (" id Ġis Ġ 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` as ` (" name Ġis ĠHello ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo (" Hello ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( slug ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` as ` (" slug Ġis Ġslug ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo (" slug ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( symbol ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` as ` (" symbol Ġis ĠBTC ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo (" BTC ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` as ` (" url Ġis Ġnull ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNull () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġthat Ġthe Ġcontext Ġhas Ġbeen Ġw ired `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( coin Data Controller ). ` as ` (" is Ġw ired "). isNotNull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpopulate Db () Ġ= Ġcoin Data Repo . save ( Coin Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslug Ġ= Ġ" slug ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsymbol Ġ= Ġ" BTC ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Hello ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Supply Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Supply Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcir cul ating Supply Ġ= Ġ 3 ĊĠĠĠ Ġ)) Ċ }