package Ġcom . n jk im . reactive crypto . bit z Ċ Ċ import Ġcom . n jk im . reactive crypto . core . common . model . Exchange Vendor Ċ import Ġcom . n jk im . reactive crypto . core . common . model . currency . Currency Pair Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . assertj . core . api . Assertions Ċ import Ġorg . junit . Test Ċ import Ġreactor . test . Step Verifier Ċ import Ġjava . math . BigDecimal Ċ Ċ class ĠBit z Websocket Client Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠKotlin Logging . logger Ġ{} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` tick Ġdata Ġsubscribe `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġtarget Currency Pair Ġ= ĠCurrency Pair . parse (" BTC ", Ġ" US DT ") ĊĠĠĠĠĠĠĠ Ġval Ġtick Data Flux Ġ= ĠBit z Websocket Client () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Trade Websocket ( listOf ( target Currency Pair )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ Ġlog . debug Ġ{ Ġit Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ ĠStep Verifier . create ( tick Data Flux . limit Request ( 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. expect Next Count ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Next Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it ). isNotNull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . currency Pair ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( target Currency Pair ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . exchange Vendor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( Exchange Vendor . BIT Z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . price ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is GreaterThan ( BigDecimal . ZERO ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . quantity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is GreaterThan ( BigDecimal . ZERO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Next Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it ). isNotNull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . currency Pair ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( target Currency Pair ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . exchange Vendor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( Exchange Vendor . BIT Z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . price ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is GreaterThan ( BigDecimal . ZERO ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . quantity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is GreaterThan ( BigDecimal . ZERO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` order Book Ġsubscribe `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġtarget Currency Pair Ġ= ĠCurrency Pair . parse (" BTC ", Ġ" US DT ") ĊĠĠĠĠĠĠĠ Ġval Ġorder Book Flux Ġ= ĠBit z Websocket Client () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Depth Snapshot ( listOf ( target Currency Pair )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ Ġlog . debug Ġ{ Ġit Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ ĠStep Verifier . create ( order Book Flux . limit Request ( 5 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. expect Next Count ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Next Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it ). isNotNull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . currency Pair ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( target Currency Pair ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . exchange Vendor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( Exchange Vendor . BIT Z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . ask s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotEmpty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . bids ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotEmpty ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . ask s [ 0 ]. quantity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is GreaterThan ( BigDecimal . ZERO ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . bids [ 0 ]. quantity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is GreaterThan ( BigDecimal . ZERO ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . ask s [ 0 ]. price ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Fail Message (" ask Ġprice Ġmust Ġbe Ġbigger Ġthan Ġbid Ġprice ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is GreaterThan OrEqualTo ( it . bids [ 0 ]. price ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . ask s [ 0 ]. price ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Fail Message (" ask s Ġmust Ġbe Ġsorted Ġby Ġprice Ġasc ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is LessThan ( it . ask s [ 1 ]. price ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . bids [ 0 ]. price ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Fail Message (" bids Ġmust Ġbe Ġsorted Ġby Ġprice Ġdesc ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is GreaterThan ( it . bids [ 1 ]. price ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Next Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it ). isNotNull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . currency Pair ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( target Currency Pair ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . exchange Vendor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( Exchange Vendor . BIT Z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . ask s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotEmpty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . bids ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotEmpty ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . ask s [ 0 ]. quantity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is GreaterThan ( BigDecimal . ZERO ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . bids [ 0 ]. quantity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is GreaterThan ( BigDecimal . ZERO ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . ask s [ 0 ]. price ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Fail Message (" ask Ġprice Ġmust Ġbe Ġbigger Ġthan Ġbid Ġprice ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is GreaterThan OrEqualTo ( it . bids [ 0 ]. price ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . ask s [ 0 ]. price ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Fail Message (" ask s Ġmust Ġbe Ġsorted Ġby Ġprice Ġasc ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is LessThan ( it . ask s [ 1 ]. price ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat ( it . bids [ 0 ]. price ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Fail Message (" bids Ġmust Ġbe Ġsorted Ġby Ġprice Ġdesc ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is GreaterThan ( it . bids [ 1 ]. price ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify Complete () ĊĠĠĠ Ġ} Ċ }