package Ġcom . github . kit tin un f . fuel . reactor Ċ Ċ import Ġcom . fasterxml . jackson . databind . exc . Invalid FormatException Ċ import Ġcom . fasterxml . jackson . module . kotlin . Missing Kotlin Parameter Exception Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġcom . github . kit tin un f . fuel . Fuel Ċ import Ġcom . github . kit tin un f . fuel . core . Fuel Error Ċ import Ġcom . github . kit tin un f . fuel . core . Response Ċ import Ġcom . github . kit tin un f . fuel . core . Response Deserial izable Ċ import Ġcom . github . kit tin un f . fuel . test . Mock Http TestCase Ċ import Ġcom . github . kit tin un f . result . Result Ċ import Ġorg . hamcrest . Core Matchers . equalTo Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertTrue Ċ import Ġorg . junit . Test Ċ import Ġreactor . core . publisher . Mono Ċ import Ġreactor . core . publisher . onError Resume Ċ import Ġreactor . test . test Ċ import Ġjava . util . UUID Ċ Ċ class ĠRe actor Test Ġ: ĠMock Http TestCase () Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmono Bytes () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock . chain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġmock . request (). with Path ("/ bytes "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġmock . response (). with Body ( ByteArray ( 1 0 )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠF uel . get ( mock . path (" bytes ")). mono Bytes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Next Ġ{ ĠassertEquals ( 1 0 , Ġit . size ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmono String () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock . chain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġmock . request (). with Path ("/ ip "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġmock . response (). with Body (" 1 2 7 . 0 . 0 . 1 ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠF uel . get ( mock . path (" ip ")). mono String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Next Ġ{ ĠassertEquals (" 1 2 7 . 0 . 0 . 1 ", Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmono Object () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock . chain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġmock . request (). with Path ("/ ip "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġmock . response () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Body ( jackson ObjectMapper (). writeValue AsString ( Ip (" 1 2 7 . 0 . 0 . 1 "))) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠF uel . get ( mock . path (" ip ")). mono Object ( Ip Deserializer Success ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Ip :: origin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Next Ġ{ ĠassertEquals (" 1 2 7 . 0 . 0 . 1 ", Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmono Object With Invalid Format () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock . chain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġmock . request (). with Path ("/ ip "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġmock . response () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Body ( jackson ObjectMapper (). writeValue AsString ( Ip (" 1 2 7 . 0 . 0 . 1 "))) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠF uel . get ( mock . path (" ip ")). mono Object ( Ip Long Deserializer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Ip Long :: origin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. expect Error Matches Ġ{ Ġ( it Ġas ĠF uel Error ). exception Ġis ĠInvalid FormatException Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmono Object With Missing Property () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock . chain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġmock . request (). with Path ("/ ip "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġmock . response () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Body ( jackson ObjectMapper (). writeValue AsString ( Ip (" 1 2 7 . 0 . 0 . 1 "))) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= ĠF uel . get ( mock . path (" ip ")). mono Object ( IpAddress Deserializer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( IpAddress :: address ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume ( Fuel Error :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( it . exception Ġis ĠMissing Kotlin Parameter Exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMono . just ( it . message . or Empty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. block () !! ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( errorMessage . contains (" value Ġfailed Ġfor ĠJSON Ġproperty Ġaddress Ġdue Ġto Ġmissing ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmono Response () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock . chain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġmock . request (). with Path ("/ status "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġmock . response (). with StatusCode ( 4 0 4 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠF uel . get ( mock . path (" status ")). mono Response () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Response :: statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Next Ġ{ ĠassertEquals ( it , Ġ 4 0 4 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmono Result Bytes () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock . chain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġmock . request (). with Path ("/ bytes "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġmock . response (). with Body ( ByteArray ( 2 0 )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠF uel . get ( mock . path (" bytes ")). mono Result Bytes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Result < ByteArray , ĠF uel Error >:: get ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Next Ġ{ ĠassertEquals ( 2 0 , Ġit . size ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmono Result String () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrandom Uuid Ġ= ĠUUID . randomUUID (). toString () ĊĊĠĠĠĠĠĠĠ Ġmock . chain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġmock . request (). with Path ("/ uuid "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġmock . response (). with Body ( random Uuid ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠF uel . get ( mock . path (" uuid ")). mono Result String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Result < String , ĠF uel Error >:: get ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Next Ġ{ ĠassertEquals ( random Uuid , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmono Result Object () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock . chain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġmock . request (). with Path ("/ ip "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġmock . response () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Body ( jackson ObjectMapper (). writeValue AsString ( Ip (" 1 9 2 . 1 6 8 . 0 . 1 "))) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠF uel . get ( mock . path (" ip ")). mono Result Object ( Ip Deserializer Success ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Result < Ip , ĠF uel Error >:: get ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Ip :: origin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Next Ġ{ ĠassertEquals (" 1 9 2 . 1 6 8 . 0 . 1 ", Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmono Result Object With Invalid Format () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock . chain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġmock . request (). with Path ("/ ip "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġmock . response () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Body ( jackson ObjectMapper (). writeValue AsString ( Ip (" 1 9 2 . 1 6 8 . 0 . 1 "))) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠF uel . get ( mock . path (" ip ")). mono Result Object ( Ip Long Deserializer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Result < Ip Long , ĠF uel Error >:: component 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Next Ġ{ ĠassertTrue ( it ?. exception Ġis ĠInvalid FormatException ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmono Result Object With Missing Property () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock . chain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġmock . request (). with Path ("/ ip "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġmock . response () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Body ( jackson ObjectMapper (). writeValue AsString ( Ip (" 1 9 2 . 1 6 8 . 0 . 1 "))) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠF uel . get ( mock . path (" ip ")). mono Result Object ( IpAddress Deserializer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Result < IpAddress , ĠF uel Error >:: component 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Next Ġ{ ĠassertTrue ( it ?. exception Ġis ĠMissing Kotlin Parameter Exception ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmono Cancellation () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock . chain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġmock . request (). with Path ("/ bytes "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġmock . response (). with Body ( ByteArray ( 1 0 )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrunning Ġ= ĠF uel . get ( mock . path (" bytes ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. mono Bytes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Processor () ĊĊĠĠĠĠĠĠĠ Ġrunning . cancel () ĊĠĠĠĠĠĠĠ ĠassertThat ( running . is Cancelled , ĠequalTo ( true )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠIp Long ( val Ġorigin : ĠLong ) ĊĊĠĠĠ Ġprivate Ġobject ĠIp Long Deserializer Ġ: ĠResponse Deserial izable < Ip Long > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( content : ĠString ) Ġ= Ġj ack son ObjectMapper (). readValue < Ip Long >( content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠIp Address ( val Ġaddress : ĠString ) ĊĊĠĠĠ Ġprivate Ġobject ĠIp Address Deserializer Ġ: ĠResponse Deserial izable < IpAddress > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( content : ĠString ) Ġ= Ġj ack son ObjectMapper (). readValue < IpAddress >( content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠIp ( val Ġorigin : ĠString ) ĊĊĠĠĠ Ġprivate Ġobject ĠIp Deserializer Success Ġ: ĠResponse Deserial izable < Ip > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( content : ĠString ) Ġ= Ġj ack son ObjectMapper (). readValue < Ip >( content ) ĊĠĠĠ Ġ} Ċ } Ċ