package Ġau . com . di us . p act . provider Ċ Ċ import Ġau . com . di us . p act . core . matchers . Body Mismatch Ċ import Ġau . com . di us . p act . core . matchers . Body Type Mismatch Ċ import Ġau . com . di us . p act . core . matchers . Header Mismatch Ċ import Ġau . com . di us . p act . core . matchers . Matching Ċ import Ġau . com . di us . p act . core . matchers . Matching Config Ċ import Ġau . com . di us . p act . core . matchers . Metadata Mismatch Ċ import Ġau . com . di us . p act . core . matchers . Mismatch Ċ import Ġau . com . di us . p act . core . matchers . Response Matching Ċ import Ġau . com . di us . p act . core . matchers . Status Mismatch Ċ import Ġau . com . di us . p act . core . matchers . generate Diff Ċ import Ġau . com . di us . p act . core . model . ContentType Ċ import Ġau . com . di us . p act . core . model . Optional Body Ċ import Ġau . com . di us . p act . core . model . Response Ċ import Ġau . com . di us . p act . core . model . isNull OrEmpty Ċ import Ġau . com . di us . p act . core . model . messaging . Message Ċ import Ġau . com . di us . p act . core . support . Json Ċ import Ġau . com . di us . p act . core . support . jsonObject Ċ import Ġcom . github . m ichael bull . result . Err Ċ import Ġcom . github . m ichael bull . result . Ok Ċ import Ġcom . github . m ichael bull . result . Result Ċ import Ġcom . google . gson . Json Parser Ċ import Ġmu . K Logging Ċ Ċ data Ġclass ĠBody Comparison Result ( ĊĠ Ġval Ġmis matches : ĠMap < String , ĠList < Body Mismatch >> Ġ= Ġempty Map (), ĊĠ Ġval Ġdiff : ĠList < String > Ġ= Ġempty List () Ċ ) Ġ{ ĊĠ Ġfun ĠtoJson () Ġ= ĠjsonObject ( ĊĠĠĠ Ġ" mis matches " Ġto ĠJson . toJson ( mis matches . map Values Ġ{ Ġentry Ġ-> Ġentry . value . map Ġ{ Ġit . description () Ġ} Ġ}), ĊĠĠĠ Ġ" diff " Ġto Ġdiff . join ToString ("\ n ") ĊĠ Ġ) Ċ } Ċ Ċ data Ġclass ĠComparison Result ( ĊĠ Ġval Ġstatus Mismatch : ĠStatus Mismatch ? Ġ= Ġnull , ĊĠ Ġval Ġheader Mis matches : ĠMap < String , ĠList < Header Mismatch >> Ġ= Ġempty Map (), ĊĠ Ġval Ġbody Mis matches : ĠResult < Body Comparison Result , ĠBody Type Mismatch > Ġ= ĠOk ( Body Comparison Result ()), ĊĠ Ġval Ġmetadata Mis matches : ĠMap < String , ĠList < Metadata Mismatch >> Ġ= Ġempty Map () Ċ ) Ċ Ċ /** Ċ Ġ* ĠUtility Ġclass Ġto Ġcompare Ġresponses Ċ Ġ*/ Ċ class ĠResponse Comparison ( ĊĠ Ġval Ġexpected Headers : ĠMap < String , ĠList < String >>, ĊĠ Ġval Ġexpected Body : ĠOptional Body , ĊĠ Ġval Ġis Json Body : ĠBoolean , ĊĠ Ġval Ġactual Response ContentType : ĠContentType , ĊĠ Ġval Ġactual Body : ĠString ? Ċ ) Ġ{ ĊĊĠ Ġfun Ġstatus Result ( mis matches : ĠList < Mismatch >) Ġ= Ġmis matches . filter Is Instance < Status Mismatch >(). first OrNull () ĊĊĠ Ġfun Ġheader Result ( mis matches : ĠList < Mismatch >): ĠMap < String , ĠList < Header Mismatch >> Ġ{ ĊĠĠĠ Ġval Ġheader Mismatch ers Ġ= Ġmis matches . filter Is Instance < Header Mismatch >() ĊĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . header Key Ġ} ĊĠĠĠ Ġreturn Ġif Ġ( header Mismatch ers . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġempty Map () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġexpected Headers . entries . associate Ġ{ Ġ( header Key , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠ Ġheader Key Ġto Ġheader Mismatch ers [ header Key ]. or Empty () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġbody Result ( mis matches : ĠList < Mismatch >): ĠResult < Body Comparison Result , ĠBody Type Mismatch > Ġ{ ĊĠĠĠ Ġval Ġbody Type Mismatch Ġ= Ġmis matches . filter Is Instance < Body Type Mismatch >(). first OrNull () ĊĠĠĠ Ġreturn Ġif Ġ( body Type Mismatch Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ ĠErr ( body Type Mismatch ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġval Ġbody Mis matches Ġ= Ġmis matches ĊĠĠĠĠĠĠĠ Ġ. filter Is Instance < Body Mismatch >() ĊĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġbm Ġ-> Ġbm . path Ġ} ĊĊĠĠĠĠĠ Ġval ĠcontentType Ġ= Ġthis . actual Response ContentType ĊĠĠĠĠĠ Ġval Ġdiff Ġ= Ġgenerate Full Diff ( actual Body . or Empty (), ĠcontentType , Ġexpected Body . value AsString (), Ġis Json Body ) ĊĠĠĠĠĠ ĠOk ( Body Comparison Result ( body Mis matches , Ġdiff )) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ: ĠK Logging () Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Full Diff ( actual : ĠString , ĠcontentType : ĠContentType , Ġresponse : ĠString , Ġjson Body : ĠBoolean ): ĠList < String > Ġ{ ĊĠĠĠĠĠ Ġvar Ġactual Body String Ġ= Ġ"" ĊĠĠĠĠĠ Ġif Ġ( actual . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġactual Body String Ġ= Ġif Ġ( contentType . is Json ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠJson . gson Pretty . toJson ( Json Parser . parse String ( actual )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġactual ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġvar Ġexpected Body String Ġ= Ġ"" ĊĠĠĠĠĠ Ġif Ġ( response . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġexpected Body String Ġ= Ġif Ġ( json Body ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠJson . gson Pretty . toJson ( Json Parser . parse String ( response )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġresponse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn Ġgenerate Diff ( expected Body String , Ġactual Body String ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcompare Response ( ĊĠĠĠĠĠ Ġresponse : ĠResponse , ĊĠĠĠĠĠ Ġactual Response : ĠMap < String , ĠAny >, ĊĠĠĠĠĠ Ġactual Status : ĠInt , ĊĠĠĠĠĠ Ġactual Headers : ĠMap < String , ĠList < String >>, ĊĠĠĠĠĠ Ġactual Body : ĠString ? ĊĠĠĠ Ġ): ĠComparison Result Ġ{ ĊĠĠĠĠĠ Ġval Ġactual Response ContentType Ġ= ĠContentType . fromString ( actual Response [" contentType "] ?. toString ()) ĊĠĠĠĠĠ Ġval Ġcomparison Ġ= ĠResponse Comparison ( response . headers , Ġresponse . body , Ġresponse . json Body (), ĊĠĠĠĠĠĠĠ Ġactual Response ContentType , Ġactual Body ) ĊĠĠĠĠĠ Ġval Ġmis matches Ġ= ĠResponse Matching . response Mis matches ( response , ĠResponse ( actual Status , ĊĠĠĠĠĠĠĠ Ġactual Headers . to Mutable Map (), ĠOptional Body . body ( actual Body ?. toByteArray ( ĊĠĠĠĠĠĠĠ Ġactual Response ContentType . as Charset ())) ), Ġtrue ) ĊĠĠĠĠĠ Ġreturn ĠComparison Result ( comparison . status Result ( mis matches ), Ġcomparison . header Result ( mis matches ), ĊĠĠĠĠĠĠĠ Ġcomparison . body Result ( mis matches )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġcompare Message ( message : ĠMessage , Ġactual : ĠOptional Body , Ġmetadata : ĠMap < String , ĠAny >? Ġ= Ġnull ): ĠComparison Result Ġ{ ĊĠĠĠĠĠ Ġval Ġbody Mis matches Ġ= Ġcompare Message Body ( message , Ġactual ) ĊĊĠĠĠĠĠ Ġval Ġmetadata Mis matches Ġ= Ġwhen Ġ( metadata ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull Ġ-> Ġempty List () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠMatch ing . compare Message Metadata ( message . metaData , Ġmetadata , Ġmessage . matching Rules ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġmessage ContentType Ġ= Ġmessage . get ContentType (). or ( ContentType . TEXT _ PLAIN ) ĊĠĠĠĠĠ Ġval Ġresponse Comparison Ġ= ĠResponse Comparison ( ĊĠĠĠĠĠĠĠ Ġmap Of (" Content - Type " Ġto ĠlistOf ( message ContentType . toString ())), Ġmessage . contents , ĊĠĠĠĠĠĠĠ Ġmessage ContentType . is Json (), Ġmessage ContentType , Ġactual . value AsString ()) ĊĠĠĠĠĠ Ġreturn ĠComparison Result ( body Mis matches Ġ= Ġresponse Comparison . body Result ( body Mis matches ), ĊĠĠĠĠĠĠĠ Ġmetadata Mis matches Ġ= Ġmetadata Mis matches . groupBy Ġ{ Ġit . key Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġprivate Ġfun Ġcompare Message Body ( message : ĠMessage , Ġactual : ĠOptional Body ): ĠMutable List < Body Mismatch > Ġ{ ĊĠĠĠĠĠ Ġval Ġresult Ġ= ĠMatch ing Config . lookup Body Matcher ( message . get ContentType (). getBase Type ()) ĊĠĠĠĠĠ Ġvar Ġbody Mis matches Ġ= Ġmutable ListOf < Body Mismatch >() ĊĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbody Mis matches Ġ= Ġresult . match Body ( message . contents , Ġactual , Ġtrue , Ġmessage . matching Rules ) ĊĠĠĠĠĠĠĠĠĠ Ġ. to Mutable List () ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Body Ġ= Ġmessage . contents . value AsString () ĊĠĠĠĠĠĠĠ Ġif Ġ( expected Body . isNotEmpty () Ġ&& Ġactual . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġbody Mis matches . add ( Body Mismatch ( expected Body , Ġnull , Ġ" Expected Ġbody Ġ'$ expected Body ' Ġbut Ġwas Ġmissing ")) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( expected Body . isNotEmpty () Ġ&& Ġactual . value AsString () Ġ!= Ġexpected Body ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġbody Mis matches . add ( Body Mismatch ( expected Body , Ġactual . value AsString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Actual Ġbody Ġ'${ actual . value AsString () }' Ġis Ġnot Ġequal Ġto Ġthe Ġexpected Ġbody Ġ'$ expected Body ' ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġbody Mis matches ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ