/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠExp edia , ĠInc Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . exp edi ag roup . graphql . spring . context Ċ Ċ import Ġcom . exp edi ag roup . graphql . execution . Empty GraphQL Context Ċ import Ġcom . exp edi ag roup . graphql . spring . GraphQL Configuration Properties Ċ import Ġcom . exp edi ag roup . graphql . spring . execution . Context Web Filter Ċ import Ġcom . exp edi ag roup . graphql . spring . execution . GRAPH QL _ CONTEXT _ KEY Ċ import Ġcom . exp edi ag roup . graphql . spring . execution . GraphQL Context Factory Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . springframework . web . server . Server Web Exchange Ċ import Ġorg . springframework . web . server . Web FilterChain Ċ import Ġreactor . core . publisher . Mono Ċ import Ġreactor . test . Step Verifier Ċ import Ġreactor . util . context . Context Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠContext Web Filter Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Suppress (" Forbidden Void ") ĊĠĠĠ Ġfun Ġ` verify Ġweb Ġfilter Ġpop ulates Ġcontext Ġin Ġthe Ġreactor Ġsubscriber Ġcontext `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġgenerated Context : ĠContext ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġexchange : ĠServer Web Exchange Ġ= Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġrequest Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuri . path Ġ} Ġreturns Ġ"/ graphql " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġresponse Ġ} Ġreturns Ġmock k () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchain : ĠWeb FilterChain Ġ= Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter ( any ()) Ġ} Ġreturns ĠMono . subscriber Context (). flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerated Context Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMono . empty < Void >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsimple Factory : ĠGraphQL Context Factory < *> Ġ= Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġgenerate Context ( any (), Ġany ()) Ġ} Ġreturns ĠEmpty GraphQL Context () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Filter Ġ= ĠContext Web Filter ( GraphQL Configuration Properties ( packages Ġ= ĠlistOf (" com . exp edi ag roup . graphql ")), Ġsimple Factory ) ĊĠĠĠĠĠĠĠ ĠStep Verifier . create ( context Filter . filter ( exchange , Ġchain )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify Complete () ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( generated Context ) ĊĠĠĠĠĠĠĠ Ġval Ġgraph QL Context Ġ= Ġgenerated Context ?. get OrDefault < Empty GraphQL Context >( GRAPH QL _ CONTEXT _ KEY , Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( graph QL Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify Ġweb Ġfilter Ġorder `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Filter Ġ= ĠContext Web Filter ( GraphQL Configuration Properties ( packages Ġ= ĠlistOf (" com . exp edi ag roup . graphql ")), Ġmock k < GraphQL Context Factory <* >> ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Ġ= Ġ 0 , Ġactual Ġ= Ġcontext Filter . order ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Suppress (" Forbidden Void ") ĊĠĠĠ Ġfun Ġ` verify Ġweb Ġfilter Ġdoes Ġnot Ġgenerate Ġcontext Ġon Ġnon Ġgraphql Ġroutes `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġreactor Context : ĠContext ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġexchange : ĠServer Web Exchange Ġ= Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġrequest Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuri . path Ġ} Ġreturns Ġ"/ wh atever " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġresponse Ġ} Ġreturns Ġmock k () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchain : ĠWeb FilterChain Ġ= Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter ( any ()) Ġ} Ġreturns ĠMono . subscriber Context (). flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreactor Context Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMono . empty < Void >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsimple Factory : ĠGraphQL Context Factory < *> Ġ= Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġgenerate Context ( any (), Ġany ()) Ġ} Ġreturns ĠEmpty GraphQL Context () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Filter Ġ= ĠContext Web Filter ( GraphQL Configuration Properties ( packages Ġ= ĠlistOf (" com . exp edi ag roup . graphql ")), Ġsimple Factory ) ĊĠĠĠĠĠĠĠ ĠStep Verifier . create ( context Filter . filter ( exchange , Ġchain )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify Complete () ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( reactor Context ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( reactor Context ?. isEmpty Ġ== Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify Ġcontext Ġweb Ġfilter Ġis Ġapplicable Ġon Ġdefault Ġgraphql Ġroutes `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Filter Ġ= ĠContext Web Filter ( GraphQL Configuration Properties ( packages Ġ= ĠlistOf (" com . exp edi ag roup . graphql ")), Ġmock k < GraphQL Context Factory <* >> ()) ĊĠĠĠĠĠĠĠ Ġfor Ġ( path Ġin ĠlistOf ("/ graphql ", Ġ"/ subscriptions ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( context Filter . is Applicable ( path )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify Ġcontext Ġweb Ġfilter Ġis Ġapplicable Ġon Ġroutes Ġwith Ġdifferent Ġcases Ġand Ġtrailing Ġsl ashes `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Filter Ġ= ĠContext Web Filter ( GraphQL Configuration Properties ( packages Ġ= ĠlistOf (" com . exp edi ag roup . graphql ")), Ġmock k < GraphQL Context Factory <* >> ()) ĊĠĠĠĠĠĠĠ Ġfor Ġ( path Ġin ĠlistOf ("/ Gr A ph Ql ", Ġ"/ graphql /", Ġ"/ s Ub sc Ri ptions ", Ġ"/ subscriptions / ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( context Filter . is Applicable ( path ), Ġ"$ path Ġwas Ġinvalid ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify Ġcontext Ġweb Ġfilter Ġis Ġapplicable Ġon Ġnon - default Ġgraphql Ġroutes `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgraph QL Route Ġ= Ġ" my GraphQL " ĊĠĠĠĠĠĠĠ Ġval Ġsubscription Route Ġ= Ġ" my Subscription " ĊĠĠĠĠĠĠĠ Ġval Ġprops Ġ= ĠGraphQL Configuration Properties ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġendpoint Ġ= Ġgraph QL Route , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackages Ġ= ĠlistOf (" com . exp edi ag roup . graphql "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriptions Ġ= ĠGraphQL Configuration Properties . Subscription Configuration Properties ( endpoint Ġ= Ġsubscription Route )) ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Filter Ġ= ĠContext Web Filter ( props , Ġmock k < GraphQL Context Factory <* >> ()) ĊĠĠĠĠĠĠĠ Ġfor Ġ( path Ġin ĠlistOf ("/ ${ graph QL Route . toLowerCase () }", Ġ"/ ${ subscription Route . toLowerCase ()} ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( context Filter . is Applicable ( path )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify Ġcontext Ġweb Ġfilter Ġis Ġnot Ġapplicable Ġon Ġnon Ġgraphql Ġroutes `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Filter Ġ= ĠContext Web Filter ( GraphQL Configuration Properties ( packages Ġ= ĠlistOf (" com . exp edi ag roup . graphql ")), Ġmock k < GraphQL Context Factory <* >> ()) ĊĠĠĠĠĠĠĠ ĠassertFalse ( context Filter . is Applicable ("/ wh atever ")) ĊĠĠĠ Ġ} Ċ } Ċ