/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠNet flix , Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// 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 . netflix . graphql . d gs . metrics . micro meter Ċ Ċ import Ġcom . netflix . graphql . d gs .* Ċ import Ġcom . netflix . graphql . d gs . exceptions . Default Data Fetcher ExceptionHandler Ċ import Ġcom . netflix . graphql . d gs . exceptions . D gs BadRequest Exception Ċ import Ġcom . netflix . graphql . d gs . metrics . micro meter . tag ging . D gs Context ual Tag Customizer Ċ import Ġcom . netflix . graphql . d gs . metrics . micro meter . tag ging . D gs Execution Tag Customizer Ċ import Ġcom . netflix . graphql . d gs . metrics . micro meter . tag ging . D gs Field Fetch Tag Customizer Ċ import Ġcom . netflix . graphql . d gs . metrics . micro meter . utils . Query Signature Repository Ċ import Ġcom . netflix . graphql . types . errors . Error Detail Ċ import Ġcom . netflix . graphql . types . errors . Typed Graph Q LError Ċ import Ġgraphql . Graph Q LError Ċ import Ġgraphql . execution . Data Fetcher ExceptionHandler Ċ import Ġgraphql . execution . Data Fetcher ExceptionHandler Parameters Ċ import Ġgraphql . execution . Data Fetcher ExceptionHandler Result Ċ import Ġgraphql . schema . Data Fetching Environment Ċ import Ġgraphql . schema . idl . Schema Parser Ċ import Ġgraphql . schema . idl . Type Definition Registry Ċ import Ġio . micro meter . core . instrument . Meter Ċ import Ġio . micro meter . core . instrument . Meter Registry Ċ import Ġio . micro meter . core . instrument . Tag Ċ import Ġio . micro meter . core . instrument . Tags Ċ import Ġio . micro meter . core . instrument . simple . Simple Meter Registry Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . dataloader . Batch Loader Ċ import Ġorg . dataloader . Mapped Batch Loader Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . parallel . Execution Ċ import Ġorg . junit . jupiter . api . parallel . Execution Mode Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . beans . factory . annotation . Qualifier Ċ import Ġorg . springframework . boot . autoconfigure . Enable Auto Configuration Ċ import Ġorg . springframework . boot . autoconfigure . SpringBoot Application Ċ import Ġorg . springframework . boot . test . autoconfigure . web . servlet . Auto Configure MockMvc Ċ import Ġorg . springframework . boot . test . context . SpringBootTest Ċ import Ġorg . springframework . boot . test . context . Test Configuration Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . context . annotation . Component Scan Ċ import Ġorg . springframework . context . annotation . Filter Type Ċ import Ġorg . springframework . scheduling . concurrent . ThreadPool Task Executor Ċ import Ġorg . springframework . test . web . servlet . MockMvc Ċ import Ġorg . springframework . test . web . servlet . request . MockMvc Request Builders Ċ import Ġorg . springframework . test . web . servlet . result . MockMvc Result Matchers . content Ċ import Ġorg . springframework . test . web . servlet . result . MockMvc Result Matchers . status Ċ import Ġorg . springframework . util . Collection Utils Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ import Ġjava . util . concurrent . Completion Stage Ċ import Ġjava . util . concurrent . Executor Ċ Ċ @ SpringBootTest Ċ @ Enable Auto Configuration Ċ @ Auto Configure MockMvc Ċ @ Execution ( Execution Mode . SAME _ THREAD ) Ċ class ĠMicro meter Servlet S moke Test Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Micro meter Servlet S moke Test :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠMOCK ED _ QUERY _ SIGNATURE Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Signature Repository . Query Signature (" some - signature ", Ġ" some - hash ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġmeter Registry : ĠMeter Registry ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġm vc : ĠMock Mvc ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġreset Meter Registry () Ġ{ ĊĠĠĠĠĠĠĠ Ġmeter Registry . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġthe Ġtype Ġof ĠMeter Registry Ġwe Ġrequire Ġfor Ġthe Ġtest `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( meter Registry ). isNotNull ĊĠĠĠĠĠĠĠ ĠassertThat ( meter Registry ). is Exactly InstanceOf ( Simple Meter Registry :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Metrics Ġfor Ġa Ġsuccessful Ġrequest , Ġimplicit Ġoperation Ġname `() Ġ{ ĊĠĠĠĠĠĠĠ Ġm vc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġthe Ġquery Ġbelow Ġuses Ġan Ġali ased Ġfield , Ġalias ing Ġ` ping ` Ġto Ġ` op _ name `. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġwill Ġalso Ġassert Ġthat Ġthe Ġtag Ġreflected Ġby Ġthe Ġmetric Ġis Ġnot Ġaffected Ġby Ġthe Ġalias . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ("/ graphql ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content (""" { Ġ" query ": Ġ" query Ġmy _ op _ 1 { ping }" Ġ} """) ĊĠĠĠĠĠĠĠ Ġ). andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( content (). json (""" {" data ":{" ping ":" p ong "}} """, Ġfalse )) ĊĊĠĠĠĠĠĠĠ Ġval Ġmeters Ġ= Ġfetch Met ers () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters ). contains Only Keys (" g ql . query ", Ġ" g ql . resolver ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . query "]). isNotNull . has Size ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . query "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" execution - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" success ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" my _ op _ 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . resolver "]). isNotNull . has Size ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . resolver "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" field - fetch - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . field ", Ġ" Query . ping ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" success ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" my _ op _ 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Metrics Ġfor Ġa Ġsuccessful Ġrequest Ġwith Ġexplicit Ġoperation Ġname `() Ġ{ ĊĠĠĠĠĠĠĠ Ġm vc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġthe Ġquery Ġbelow Ġuses Ġan Ġali ased Ġfield , Ġalias ing Ġ` ping ` Ġto Ġ` op _ name `. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġwill Ġalso Ġassert Ġthat Ġthe Ġtag Ġreflected Ġby Ġthe Ġmetric Ġis Ġnot Ġaffected Ġby Ġthe Ġalias . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ("/ graphql ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ" query ": Ġ" query Ġmy _ op _ 1 { ping }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ" operation Name ": Ġ" my _ op _ 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( content (). json (""" {" data ":{" ping ":" p ong "}} """, Ġfalse )) ĊĊĠĠĠĠĠĠĠ Ġval Ġmeters Ġ= Ġfetch Met ers () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters ). contains Only Keys (" g ql . query ", Ġ" g ql . resolver ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . query "]). isNotNull . has Size ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . query "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" execution - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" success ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" my _ op _ 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . resolver "]). isNotNull . has Size ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . resolver "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" field - fetch - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . field ", Ġ" Query . ping ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" success ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" my _ op _ 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Metrics Ġfor Ġa Ġsuccessful Ġrequest Ġwith Ġdata Ġload ers `() Ġ{ ĊĠĠĠĠĠĠĠ Ġm vc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ("/ graphql ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" {" query ": ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ"{ transform ( input : Ġ[ \" A Ġm adam Ġin Ġa Ġrace car .\ ", Ġ\" A Ġman , Ġa Ġplan , Ġa Ġcan al Ġ- ĠPan ama \" Ġ]) { Ġindex Ġvalue Ġupper Case d Ġreversed Ġ} Ġ}" Ġ} """. trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent (). json ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ" data ":{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġ" transform ":[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" index ": 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" value ":" A Ġm adam Ġin Ġa Ġrace car .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" upper Case d ":" A ĠM AD AM ĠIN ĠA ĠR ACE CAR .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" reversed ": ". race car Ġa Ġni Ġm adam ĠA " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" index ": 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" value ":" A Ġman , Ġa Ġplan , Ġa Ġcan al Ġ- ĠPan ama ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" upper Case d ":" A ĠMAN , ĠA ĠPL AN , ĠA ĠCAN AL Ġ- ĠP ANA MA ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" reversed ":" am ana P Ġ- Ġlan ac Ġa Ġ, n alp Ġa Ġ, nam ĠA " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmeters Ġ= Ġfetch Met ers () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters ). contains Only Keys (" g ql . data Loader ", Ġ" g ql . query ", Ġ" g ql . resolver ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . data Loader "]). isNotNull . has Size ( 2 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . data Loader "] ?. map Ġ{ Ġit . id . tags Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" g ql . loader Batch Size ", Ġ" 2 "). and (" g ql . loader Name ", Ġ" re verser "). toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" g ql . loader Batch Size ", Ġ" 2 "). and (" g ql . loader Name ", Ġ" upper Case Loader "). toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . query "]). isNotNull . has Size ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . query "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" execution - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" success ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 1 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . resolver "]). isNotNull . has Size ( 3 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . resolver "] ?. map Ġ{ Ġit . id . tags Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" field - fetch - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . field ", Ġ" String Transformation . reversed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" success ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 1 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" field - fetch - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . field ", Ġ" String Transformation . upper Case d ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" success ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 1 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" field - fetch - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . field ", Ġ" Query . transform ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 1 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" success "). toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġmetrics Ġfor Ġa Ġsyntax Ġerror `() Ġ{ ĊĠĠĠĠĠĠĠ Ġm vc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ("/ graphql ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content (""" { Ġ" query ": Ġ" fail " Ġ} """) ĊĠĠĠĠĠĠĠ Ġ). andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent (). json ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ" errors ":[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġ{" message ":" Invalid ĠSyntax Ġ: Ġoff ending Ġtoken Ġ' fail ' Ġat Ġline Ġ 1 Ġcolumn Ġ 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠ Ġ" locations ":[{" line ": 1 ," column ": 1 }], " extensions ":{" classification ":" Invalid Syntax "}} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } """. trim Margin (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġmeters Ġ= Ġfetch Met ers (" g ql .") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters ). contains Only Keys (" g ql . error ", Ġ" g ql . query ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . error "]). isNotNull . has Size ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . error "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" execution - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" none ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", Ġ" none ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . error Detail ", Ġ" none ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . errorCode ", Ġ" Invalid Syntax ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . path ", Ġ" [] ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" failure ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . query "]). isNotNull . has Size ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . query "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" execution - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" none ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", Ġ" none ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġmetrics Ġfor Ġinternal Ġerror `() Ġ{ ĊĠĠĠĠĠĠĠ Ġm vc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ("/ graphql ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content (""" { Ġ" query ": Ġ"{ trigger Internal Failure }" Ġ} """) ĊĠĠĠĠĠĠĠ Ġ). andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent (). json ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ" errors ":[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġ{" message ":" java . lang . IllegalStateException : ĠException Ġtriggered ."," locations ":[ ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠ Ġ" path ":[" trigger Internal Failure "]," extensions ":{" error Type ":" INTERNAL "}} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ" data ":{" trigger Internal Failure ": null } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } """. trim Margin (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmeters Ġ= Ġfetch Met ers (" g ql .") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters ). contains Only Keys (" g ql . error ", Ġ" g ql . query ", Ġ" g ql . resolver ") ĊĊĠĠĠĠĠĠĠ Ġlog Met ers ( meters [" g ql . error "]) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . error "]). isNotNull . has Size GreaterThan OrEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . error "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" execution - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . errorCode ", Ġ" INTERNAL ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . error Detail ", Ġ" none ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . path ", Ġ"[ trigger Internal Failure ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġlog Met ers ( meters [" g ql . query "]) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . query "]). isNotNull . has Size GreaterThan OrEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . query "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" execution - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġlog Met ers ( meters [" g ql . resolver "]) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . resolver "]). isNotNull . has Size GreaterThan OrEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . resolver "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" field - fetch - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . field ", Ġ" Query . trigger Internal Failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġmetrics Ġfor Ġa ĠD GS Ġbad - request Ġerror `() Ġ{ ĊĠĠĠĠĠĠĠ Ġm vc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ("/ graphql ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content (""" { Ġ" query ": Ġ"{ trigger BadRequest Failure }" Ġ} """) ĊĠĠĠĠĠĠĠ Ġ). andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent (). json ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ" errors ":[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ{" message ":" com . netflix . graphql . d gs . exceptions . D gs BadRequest Exception : ĠException Ġtriggered .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ" locations ":[ ]," path ":[" trigger BadRequest Failure "], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ" extensions ":{" error Type ":" BAD _ REQUEST "}} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ" data ":{" trigger BadRequest Failure ": null } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } """. trim Margin (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmeters Ġ= Ġfetch Met ers (" g ql .") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters ). contains Only Keys (" g ql . error ", Ġ" g ql . query ", Ġ" g ql . resolver ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . error "]). isNotNull . has Size GreaterThan OrEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . error "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" execution - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . errorCode ", Ġ" BAD _ REQUEST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . error Detail ", Ġ" none ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . path ", Ġ"[ trigger BadRequest Failure ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . query "]). isNotNull . has Size GreaterThan OrEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . query "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" execution - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . resolver "]). isNotNull . has Size GreaterThan OrEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . resolver "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" field - fetch - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . field ", Ġ" Query . trigger BadRequest Failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġmetrics Ġfor Ġcustom Ġerror `() Ġ{ ĊĠĠĠĠĠĠĠ Ġm vc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ("/ graphql ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content (""" { Ġ" query ": Ġ"{ trigger Custom Failure }" Ġ} """) ĊĠĠĠĠĠĠĠ Ġ). andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent (). json ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ" errors ":[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġ{ ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠ Ġ" message ":" Exception Ġtriggered ."," locations ":[ ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠ Ġ" path ":[" trigger Custom Failure "], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠ Ġ" extensions ":{" error Type ":" UN AVAILABLE "," error Detail ":" EN H ANCE _ YOUR _ CAL M "} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ" data ":{" trigger Custom Failure ": null } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } """. trim Margin (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmeters Ġ= Ġfetch Met ers () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters ). contains Only Keys (" g ql . error ", Ġ" g ql . query ", Ġ" g ql . resolver ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . error "]). isNotNull . has Size GreaterThan OrEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . error "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" execution - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . errorCode ", Ġ" UN AVAILABLE ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . error Detail ", Ġ" EN H ANCE _ YOUR _ CAL M ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . path ", Ġ"[ trigger Custom Failure ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . query "]). isNotNull . has Size GreaterThan OrEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . query "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" execution - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . resolver "]). isNotNull . has Size GreaterThan OrEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . resolver "] ?. first ()?. id ?. tags ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" field - fetch - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . field ", Ġ" Query . trigger Custom Failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Assert Ġmetrics Ġfor Ġrequest Ġwith Ġmultiple Ġerrors `() Ġ{ ĊĠĠĠĠĠĠĠ Ġm vc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ("/ graphql ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content (""" { Ġ" query ": Ġ"{ Ġtrigger Internal Failure Ġtrigger BadRequest Failure Ġtrigger Custom Failure Ġ}" Ġ} """) ĊĠĠĠĠĠĠĠ Ġ). andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent (). json ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ" errors ":[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ{" message ":" java . lang . IllegalStateException : ĠException Ġtriggered ."," locations ":[ ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġ" path ":[" trigger Internal Failure "]," extensions ":{" error Type ":" INTERNAL "}}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ{" message ":" com . netflix . graphql . d gs . exceptions . D gs BadRequest Exception : ĠException Ġtriggered ."," locations ":[ ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġ" path ":[" trigger BadRequest Failure "]," extensions ":{" error Type ":" BAD _ REQUEST "}}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ{" message ":" Exception Ġtriggered ."," locations ":[ ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġ" path ":[" trigger Custom Failure "], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġ" extensions ":{" error Type ":" UN AVAILABLE "," error Detail ":" EN H ANCE _ YOUR _ CAL M "}} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ" data ":{" trigger Internal Failure ": null ," trigger BadRequest Failure ": null ," trigger Custom Failure ": null } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmeters Ġ= Ġfetch Met ers () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters ). contains Only Keys (" g ql . error ", Ġ" g ql . query ", Ġ" g ql . resolver ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . query "]). has Size GreaterThan OrEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . error "]). has Size GreaterThan OrEqualTo ( 3 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( meters [" g ql . resolver "]). has Size GreaterThan OrEqualTo ( 3 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġerrors Ġ= Ġmeters . getValue (" g ql . error "). map Ġ{ Ġit . id . tags Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( errors ). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" execution - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . errorCode ", Ġ" BAD _ REQUEST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . error Detail ", Ġ" none ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . path ", Ġ"[ trigger BadRequest Failure ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" execution - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . errorCode ", Ġ" INTERNAL ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . error Detail ", Ġ" none ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . path ", Ġ"[ trigger Internal Failure ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTags . of (" execution - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" context ual - tag ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . errorCode ", Ġ" UN AVAILABLE ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . error Detail ", Ġ" EN H ANCE _ YOUR _ CAL M ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . path ", Ġ"[ trigger Custom Failure ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" outcome ", Ġ" failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation ", Ġ" QUERY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . operation . name ", Ġ" anonymous ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . complexity ", Ġ" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" g ql . query . sig . hash ", ĠMOCK ED _ QUERY _ SIGNATURE . hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList (), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Met ers ( prefix : ĠString Ġ= Ġ" g ql .") : ĠMap < String , ĠList < Meter >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmeter Registry . meters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . id . name . startsWith ( prefix ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . id . name Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlog Met ers ( meters : ĠCollection < Meter > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Collection Utils . isEmpty ( meters )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" No Ġmeters Ġfound .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmeter Data Ġ= Ġmeters ?. map Ġ{ Ġit . id Ġ} ?. map Ġ{ Ġid : ĠMeter . Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Name : Ġ${ id . name } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Tags : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ${ id . tags . join ToString (", \ n \ t ", Ġ"\ t ") Ġ{ Ġtag : ĠTag ? Ġ-> Ġ"[ ${ tag ?. key } Ġ: Ġ${ tag ?. value }] " Ġ}} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġ} ?. join ToString (", \ n ", Ġ" {\ n ", Ġ"\ n }") ĊĠĠĠĠĠĠĠ Ġlogger . info (" Met ers :\ n {}", Ġmeter Data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Configuration ( proxy Bean Methods Ġ= Ġfalse ) ĊĠĠĠ Ġopen Ġclass ĠLocal Test Configuration Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġtest Meter Registry (): ĠMeter Registry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSimple Meter Registry () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġquery Signature Repository (): ĠQuery Signature Repository Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠQuery Signature Repository Ġ{ Ġ_, Ġ_ Ġ-> ĠOptional . of ( MOCK ED _ QUERY _ SIGNATURE ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġcontext ual Tag Provider (): ĠD gs Context ual Tag Customizer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠD gs Context ual Tag Customizer Ġ{ ĠTags . of (" context ual - tag ", Ġ" foo ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġexecution Tag Customizer (): ĠD gs Execution Tag Customizer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠD gs Execution Tag Customizer Ġ{ Ġ_, Ġ_, Ġ_ Ġ-> ĠTags . of (" execution - tag ", Ġ" foo ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġfield Fetch Tag Customizer (): ĠD gs Field Fetch Tag Customizer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠD gs Field Fetch Tag Customizer Ġ{ Ġ_, Ġ_ Ġ-> ĠTags . of (" field - fetch - tag ", Ġ" foo ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ SpringBoot Application ( proxy Bean Methods Ġ= Ġfalse , Ġscan Base Packages Ġ= Ġ[]) ĊĠĠĠ Ġ@ Component Scan ( ĊĠĠĠĠĠĠĠ Ġuse Default Filters Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġinclude Filters Ġ= Ġ[ Component Scan . Filter ( type Ġ= ĠFilter Type . ASSIGN ABLE _ TYPE , Ġclasses Ġ= Ġ[]) ] ĊĠĠĠ Ġ) ĊĠĠĠ Ġ@ SuppressWarnings (" unused ") ĊĠĠĠ Ġopen Ġclass ĠLocal App Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ D gs Component ĊĠĠĠĠĠĠĠ Ġclass ĠExample Implementation Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ D gs Type Definition Registry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtype Definition Registry (): ĠType Definition Registry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschema Parser Ġ= ĠSchema Parser () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgql Schema Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| type ĠQuery { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġping : String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġtransform ( input :[ String ]): Ġ[ String Transformation ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġtrigger Internal Failure : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġtrigger BadRequest Failure : String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġtrigger Custom Failure : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| type ĠString Transformation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġindex : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġvalue : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġupper Case d : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreversed : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġschema Parser . parse ( g ql Schema ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ D gs Data ( parent Type Ġ= Ġ" Query ", Ġfield Ġ= Ġ" ping ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġping (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" p ong " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ D gs Data ( parent Type Ġ= Ġ" Query ", Ġfield Ġ= Ġ" transform ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtransform (@ Input Argument Ġinput : ĠList < String >): ĠList < Map < String , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinput . map Indexed Ġ{ Ġi , Ġv Ġ-> Ġmap Of (" index " Ġto Ġ"$ i ", Ġ" value " Ġto Ġv ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ D gs Data ( parent Type Ġ= Ġ" Query ", Ġfield Ġ= Ġ" trigger Internal Failure ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtrigger Internal Failure (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Exception Ġtriggered .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ D gs Data ( parent Type Ġ= Ġ" Query ", Ġfield Ġ= Ġ" trigger BadRequest Failure ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtrigger BadRequest Failure (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠD gs BadRequest Exception (" Exception Ġtriggered .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ D gs Data ( parent Type Ġ= Ġ" Query ", Ġfield Ġ= Ġ" trigger Custom Failure ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtrigger Custom Failure (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCustom Exception (" Exception Ġtriggered .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ D gs Data ( parent Type Ġ= Ġ" String Transformation ", Ġfield Ġ= Ġ" upper Case d ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġupper Case d ( dfe : ĠData Fetching Environment ): ĠCompletableFuture < String >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Loader Ġ= Ġd fe . getData Loader < String , ĠString >(" upper Case Loader ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġd fe . getSource < Map < String , ĠString >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata Loader . load ( input . get OrDefault (" value ", Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ D gs Data ( parent Type Ġ= Ġ" String Transformation ", Ġfield Ġ= Ġ" reversed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġreversed ( dfe : ĠData Fetching Environment ): ĠCompletableFuture < String >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Loader Ġ= Ġd fe . getData Loader < String , ĠString >(" re verser ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġd fe . getSource < Map < String , ĠString >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata Loader . load ( input . get OrDefault (" value ", Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ D gs DataLoader ( name Ġ= Ġ" upper Case Loader ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbatch Loader Ġ= ĠBatch Loader Ġ{ Ġkeys : ĠList < String ?> ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCompletableFuture . supply Async Ġ{ Ġkeys ?. map Ġ{ Ġit ?. toUpperCase () Ġ} ?. toList () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ D gs DataLoader ( name Ġ= Ġ" re verser ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠReverse String DataLoader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Qualifier (" data Loader Task Executor ") Ġprivate Ġval Ġdata Loader Task Executor : ĠExecutor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ: ĠM apped Batch Loader < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload ( keys : ĠSet < String >): ĠCompletion Stage < Map < String , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture . supply Async ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġkeys . map Ġ{ Ġit Ġto Ġit . reversed () Ġ}. toMap () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Loader Task Executor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġcustom Data Fetching ExceptionHandler (): ĠData Fetcher ExceptionHandler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCustom Data Fetching ExceptionHandler () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġre verser DataLoader ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Qualifier (" data Loader Task Executor ") Ġexecutor : ĠExecutor ĊĠĠĠĠĠĠĠ Ġ): ĠExample Implementation . Reverse String DataLoader Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠExample Implementation . Reverse String DataLoader ( executor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġdata Loader Task Executor (): ĠExecutor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexecutor Ġ= ĠThreadPool Task Executor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . core PoolSize Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . max PoolSize Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . thread Name Prefix Ġ= Ġ"${ Micro meter Servlet S moke Test :: class . java . simple Name }- test -" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . set Queue Capacity ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . initialize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġexecutor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠCustom Data Fetching ExceptionHandler Ġ: ĠData Fetcher ExceptionHandler Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdefault Handler : ĠDefault Data Fetcher ExceptionHandler Ġ= ĠDefault Data Fetcher ExceptionHandler () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Exception ( handler Parameters : ĠData Fetcher ExceptionHandler Parameters ): ĠData Fetcher ExceptionHandler Result Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( handler Parameters . exception Ġis ĠCustom Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġhandler Parameters . exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgraphql Error : ĠGraph Q LError Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Graph Q LError ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error Detail ( Error Detail . Common . EN H ANCE _ YOUR _ CAL M ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. message ( exception . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. path ( handler Parameters . path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Fetcher ExceptionHandler Result . new Result () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error ( graphql Error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Handler . on Exception ( handler Parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠCustom Exception ( message : ĠString ?) Ġ: Ġjava . lang . IllegalStateException ( message ) Ċ } Ċ