package Ġcom . bl u ur r . qu ora . controller Ċ Ċ import Ġio . rest ass ured . Rest Ass ured . given Ċ import Ġio . rest ass ured . response . Valid atable Response Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . params . Parameterized Test Ċ import Ġorg . junit . jupiter . params . provider . Value Source Ċ import Ġorg . springframework . boot . test . context . SpringBootTest Ċ import Ġorg . springframework . boot . web . server . Local Server Port Ċ import Ġjava . util .* Ċ Ċ @ SpringBootTest ( web Environment Ġ= ĠSpring Boot Test . Web Environment . RANDOM _ PORT ) Ċ internal Ġclass ĠQuestion Controller IntegrationTest Ġ{ ĊĊĠĠĠ Ġ@ Local Server Port ĊĠĠĠ Ġvar Ġport : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠSearch For Question Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Value Source ( strings Ġ= Ġ[" Java ", Ġ" Kotlin "]) ĊĠĠĠĠĠĠĠ Ġ@ Parameterized Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Give Ġa Ġsearch Ġterm ĠWhen Ġsearching Ġfor Ġa Ġquestion ĠThen Ġreturn Ġquestion Ġsearch Ġresults `( term : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Result Ġ= Ġsearch For Questions With Term ( term ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġsearch Result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. statusCode ( 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. extract () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. json Path () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getList (".", ĠTest Question SearchResult :: class . java ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( results ). isNotEmpty ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( results ). all Satisf y Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . id ). isNotNull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . ask ). isNotBlank ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . location ). isNotBlank ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Give Ġa Ġblank Ġsearch Ġterm ĠWhen Ġsearching Ġfor Ġa Ġquestion ĠThen Ġreturn Ġbad Ġrequest `() Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Result Ġ= Ġsearch For Questions With Term ("") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġsearch Result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. statusCode ( 4 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. extract () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. json Path () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getString (" message ") ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( results ). isEqualTo (" find Question For Term . term : Ġmust Ġnot Ġbe Ġblank ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠFetch Answers Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġterm Ġ= Ġ" Java " ĊĊĠĠĠĠĠĠĠ Ġ@ Value Source ( ints Ġ= Ġ[ Ġ 1 , Ġ 3 , Ġ 5 ]) ĊĠĠĠĠĠĠĠ Ġ@ Parameterized Test ( name Ġ= Ġ"[ { index }] Ġanswer Ġlimit Ġ{ 0 }") ĊĠĠĠĠĠĠĠ Ġfun Ġ` Give Ġa Ġquestion ĠWhen Ġfetching Ġquestion Ġwith Ġrequested Ġanswer Ġcount ĠThen Ġreturn Ġfull Ġquestion `( answer Limit : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquestion Id Ġ= Ġsearch For Questions With Term ( term ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. statusCode ( 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. extract () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. json Path () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get UUID ("[ 0 ]. id ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquestion Ġ= Ġfetch Full Question ( question Id , Ġanswer Limit ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġquestion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. statusCode ( 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. extract () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. json Path () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getObject (".", ĠTest Question Result :: class . java ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( result . id ). isEqualTo ( question Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( result . ask ed ). isNotBlank ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( result . answers ). has Size ( answer Limit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch For Questions With Term ( term : ĠString , Ġlimit : ĠInt Ġ= Ġ 1 ): ĠValid atable Response Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġgiven () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. port ( port ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType (" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param (" term ", Ġterm ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param (" limit ", Ġlimit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` when `() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get (" questions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Full Question ( question Id : ĠUUID , Ġanswer Limit : ĠInt Ġ= Ġ 1 ): ĠValid atable Response Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġgiven () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. port ( port ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType (" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param (" answers Limit ", Ġanswer Limit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` when `() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get (" questions /{ question Id }", Ġquestion Id . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then () ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ Ċ data Ġclass ĠTest Question SearchResult ( val Ġid : ĠUUID , Ġval Ġask : ĠString , Ġval Ġlocation : ĠString ) Ċ Ċ data Ġclass ĠTest Question Result ( val Ġid : ĠUUID , Ġval Ġasked : ĠString , Ġval Ġanswers : ĠList < Any >) Ċ