package Ġau . com . di us . p act . core . matchers Ċ Ċ import Ġau . com . di us . p act . core . model . Optional Body Ċ import Ġau . com . di us . p act . core . model . matching rules . Matching Rules Ċ import Ġjava . util . Enumeration Ċ import Ġjavax . mail . Body Part Ċ import Ġjavax . mail . Header Ċ import Ġjavax . mail . internet . Mime Multipart Ċ import Ġjavax . mail . util . ByteArray DataSource Ċ Ċ class ĠMultip art Message Body Matcher Ġ: ĠBody Matcher Ġ{ ĊĊĠ Ġoverride Ġfun Ġmatch Body ( ĊĠĠĠ Ġexpected : ĠOptional Body , ĊĠĠĠ Ġactual : ĠOptional Body , ĊĠĠĠ Ġallow Unexpected Keys : ĠBoolean , ĊĠĠĠ Ġmatching Rules : ĠMatch ing Rules ĊĠ Ġ): ĠList < Body Mismatch > Ġ{ ĊĠĠĠ Ġval Ġexpected Body Ġ= Ġexpected ĊĠĠĠ Ġval Ġactual Body Ġ= Ġactual ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠ Ġexpected Body . is Missing () Ġ-> Ġempty List () ĊĠĠĠĠĠ Ġexpected Body . isPresent () Ġ&& Ġactual Body . isNot Present () Ġ-> ĠlistOf ( Body Mismatch ( expected Body . or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġ" Expected Ġa Ġmultipart Ġbody Ġbut Ġwas Ġmissing ")) ĊĠĠĠĠĠ Ġexpected Body . isEmpty () Ġ&& Ġactual Body . isEmpty () Ġ-> Ġempty List () ĊĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Multipart Ġ= Ġparse Multipart ( expected Body . value AsString (), Ġexpected . contentType . contentType ) ĊĠĠĠĠĠĠĠ Ġval Ġactual Multipart Ġ= Ġparse Multipart ( actual Body . value AsString (), Ġactual . contentType . contentType ) ĊĠĠĠĠĠĠĠ Ġcompare Headers ( expected Multipart , Ġactual Multipart ) Ġ+ Ġcompare Contents ( expected Multipart , Ġactual Multipart ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcompare Contents ( expected Multipart : ĠBody Part , Ġactual Multipart : ĠBody Part ): ĠList < Body Mismatch > Ġ{ ĊĠĠĠ Ġval Ġexpected Contents Ġ= Ġexpected Multipart . content . toString (). trim () ĊĠĠĠ Ġval Ġactual Contents Ġ= Ġactual Multipart . content . toString (). trim () ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠ Ġexpected Contents . isEmpty () Ġ&& Ġactual Contents . isEmpty () Ġ-> Ġempty List () ĊĠĠĠĠĠ Ġexpected Contents . isNotEmpty () Ġ&& Ġactual Contents . isNotEmpty () Ġ-> Ġempty List () ĊĠĠĠĠĠ Ġexpected Contents . isEmpty () Ġ&& Ġactual Contents . isNotEmpty () Ġ-> ĠlistOf ( Body Mismatch ( expected Contents , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Contents , ĊĠĠĠĠĠĠĠ Ġ" Expected Ġno Ġcontents , Ġbut Ġreceived Ġ${ actual Contents . toByteArray (). size } Ġbytes Ġof Ġcontent ")) ĊĠĠĠĠĠ Ġelse Ġ-> ĠlistOf ( Body Mismatch ( expected Contents , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Contents , Ġ" Expected Ġcontent Ġwith Ġthe Ġmultipart , Ġbut Ġreceived Ġno Ġbytes Ġof Ġcontent ")) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcompare Headers ( expected Multipart : ĠBody Part , Ġactual Multipart : ĠBody Part ): ĠList < Body Mismatch > Ġ{ ĊĠĠĠ Ġval Ġmis matches Ġ= Ġmutable ListOf < Body Mismatch >() ĊĠĠĠ Ġ( expected Multipart . all Headers Ġas ĠEnumeration < Header >). as Sequence (). forEach Ġ{ ĊĠĠĠĠĠ Ġval Ġheader Ġ= Ġactual Multipart . getHeader ( it . name ) ĊĠĠĠĠĠ Ġif Ġ( header Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactual Value Ġ= Ġheader . join ToString ( separator Ġ= Ġ", Ġ") ĊĠĠĠĠĠĠĠ Ġif Ġ( actual Value Ġ!= Ġit . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġmis matches . add ( Body Mismatch ( it . toString (), Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Expected Ġa Ġmultipart Ġheader Ġ'${ it . name }' Ġwith Ġvalue Ġ'${ it . value }', Ġbut Ġwas Ġ'$ actual Value ' ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġmis matches . add ( Body Mismatch ( it . toString (), Ġnull , ĊĠĠĠĠĠĠĠĠĠ Ġ" Expected Ġa Ġmultipart Ġheader Ġ'${ it . name }', Ġbut Ġwas Ġmissing ")) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġmis matches ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġparse Multipart ( body : ĠString , ĠcontentType : ĠString ): ĠBody Part Ġ{ ĊĠĠĠ Ġval Ġmultipart Ġ= ĠMime Multipart ( ByteArray DataSource ( body , ĠcontentType )) ĊĠĠĠ Ġreturn Ġmultipart . getBody Part ( 0 ) ĊĠ Ġ} Ċ } Ċ