package Ġde . w el cz . co ch uck nor ris Ċ Ċ import Ġcom . nin jas quad . spring mock k . Mock k Bean Ċ import Ġio . kot est . core . spec . style . Fun Spec Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . verify Ċ import Ġorg . springframework . boot . test . context . SpringBootTest Ċ import Ġorg . springframework . test . context . Context Configuration Ċ import Ġorg . springframework . web . reactive . function . client . Web Client Ċ import Ġorg . springframework . web . reactive . function . client . body To Mono Ċ import Ġreactor . kotlin . core . publisher . to Mono Ċ import Ġkotlin . time . seconds Ċ Ċ @ SpringBootTest Ċ @ Context Configuration ( classes Ġ= Ġ[ Fetch Jo ke :: class , ĠFetch Config :: class ]) Ċ class ĠFetch Jo ke Test ( ĊĠĠĠ Ġprivate Ġval Ġsut : ĠFetch Jo ke , ĊĠĠĠ Ġprivate Ġval Ġconfig : ĠFetch Config , ĊĠĠĠ Ġ@ Mock k Bean ĊĠĠĠ Ġprivate Ġval Ġbuilder : ĠWeb Client . Builder , Ċ ) Ġ: ĠFun Spec ({ ĊĠ Ġval Ġweb Client Ġ= Ġmock k < Web Client >() ĊĠ Ġval Ġresponse Ġ= Ġmock k < Web Client . Response Spec >() ĊĠ Ġval Ġspec Ġ= Ġmock k < Web Client . Request Headers Uri Spec <* >>() ĊĊĠ Ġbefore Any Ġ{ ĊĠĠĠ Ġevery Ġ{ Ġbuilder . baseUrl ( any ()) Ġ} Ġreturns Ġbuilder ĊĠĠĠ Ġevery Ġ{ Ġbuilder . build () Ġ} Ġreturns Ġweb Client ĊĠĠĠ Ġevery Ġ{ Ġweb Client . get () Ġ} Ġreturns Ġspec ĊĠĠĠ Ġevery Ġ{ Ġspec . uri ( any < String >()) Ġ} Ġreturns Ġspec ĊĠĠĠ Ġevery Ġ{ Ġspec . retrieve () Ġ} Ġreturns Ġresponse ĊĠ Ġ} ĊĊĠ Ġtest (" config Ġpoints Ġto Ġexpected Ġhost ") Ġ{ ĊĠĠĠ Ġconfig . host . shouldBe (" https :// api . ch uck nor ris . io /") ĊĠ Ġ} ĊĊĠ Ġtest (" response Ġis Ġretrieved Ġfrom Ġweb Ġclient "). config ( timeout Ġ= Ġ 5 . seconds ) Ġ{ ĊĠĠĠ Ġ// ĠNOTE : Ġcan 't Ġmanage Ġto Ġmock Ġawait Body Ġdirectly . ĠThe Ġtest Ġwill Ġjust Ġfreeze Ġif ĠI Ġtry ĠðŁĺ Ń ĊĠĠĠ Ġevery Ġ{ Ġresponse . body To Mono < Fetch Jo ke . Response Value >() Ġ} Ġreturns ĊĠĠĠĠĠĠĠ ĠFetch Jo ke . Response Value (" my Ġawesome Ġjo ke "). to Mono () ĊĊĠĠĠ Ġval Ġresult Ġ= Ġsut . random () ĊĊĠĠĠ Ġresult . shouldBe (" my Ġawesome Ġjo ke ") ĊĠĠĠ Ġverify Ġ{ Ġbuilder . baseUrl ( config . host ) Ġ} ĊĠĠĠ Ġverify Ġ{ Ġspec . uri ("/ j okes / random ? category = dev ") Ġ} ĊĠ Ġ} Ċ })