package Ġ` in `. spec matic . mock Ċ Ċ import Ġ` in `. spec matic . conversions . Open Api Specification Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . assertj . core . api . Assertions . assertThat Thrown By Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġ` in `. spec matic . core .* Ċ import Ġ` in `. spec matic . core . Result . Success Ċ import Ġ` in `. spec matic . core . pattern . Contract Exception Ċ import Ġ` in `. spec matic . core . pattern . parsed Value Ċ import Ġ` in `. spec matic . core . utilities . json StringTo Value Map Ċ import Ġ` in `. spec matic . core . value . StringValue Ċ import Ġ` in `. spec matic . should Match Ċ import Ġjava . util . function . Consumer Ċ Ċ internal Ġclass ĠScenario Stub Kt Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` conversion Ġof Ġjson Ġstring Ġto Ġmock Ġshould Ġload Ġform Ġfields `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock String Ġ= Ġ""" Ċ { ĊĠĠĠ Ġ" http - request ": Ġ{ ĊĠĠĠĠĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠĠĠĠĠ Ġ" form - fields ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Data ": Ġ" 1 0 " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, ĊĠĠĠĠĊĠĠĠ Ġ" mock - http - response ": Ġ{ ĊĠĠĠĠĠĠĠ Ġ" status ": Ġ 2 0 0 ĊĠĠĠ Ġ} Ċ } Ċ """. trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Data Ġ= Ġjson StringTo Value Map ( mock String ) ĊĠĠĠĠĠĠĠ Ġval Ġmock Scenario Ġ= Ġmock From JSON ( mock Data ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( mock Scenario . request . form Fields . getValue (" Data ")). isEqualTo (" 1 0 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` nullable Ġnumber Ġin Ġstring Ġshould Ġload Ġfrom Ġa Ġmock `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" body ": Ġ{ ĊĠĠĠĠĠ Ġ" number ": Ġ 1 0 , ĊĠĠĠĠĠ Ġ" description ": Ġ"( number Ġin Ġstring ? )" ĊĠĠĠ Ġ} ĊĠ Ġ}, ĊĊĠ Ġ" mock - http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= Ġmock . request . to Pattern () ĊĊĠĠĠĠĠĠĠ Ġparsed Value (""" {" number ": Ġ 1 0 , Ġ" description ": Ġ" 1 0 "} """) Ġshould Match Ġpattern . body ĊĠĠĠĠĠĠĠ Ġparsed Value (""" {" number ": Ġ 1 0 , Ġ" description ": Ġnull } """) Ġshould Match Ġpattern . body ĊĊĠĠĠĠĠĠĠ ĠassertThat ( pattern . body . matches ( parsed Value (""" {" number ": Ġ 1 0 , Ġ" description ": Ġ" test "} "" "), ĠResolver ())). isInstanceOf ( Result . Failure :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdeserialize Ġmultipart Ġcontent Ġform Ġdata Ġmock `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" multipart - form data ": Ġ[ ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" employee id ", ĊĠĠĠĠĠĠĠ Ġ" content ": Ġ" 1 0 " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ] ĊĠ Ġ}, ĊĊĠ Ġ" mock - http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ ĠassertThat ( mock . request . multi Part FormData ). has Size ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( mock . request . multi Part FormData . first ()). isInstanceOf ( Multi Part Content Value :: class . java ) ĊĠĠĠĠĠĠĠ ĠassertThat ( mock . request . multi Part FormData . first (). name ). isEqualTo (" employee id ") ĊĊĠĠĠĠĠĠĠ Ġval Ġpart Ġ= Ġmock . request . multi Part FormData . first () Ġas ĠMulti Part Content Value ĊĠĠĠĠĠĠĠ ĠassertThat ( part . content . toString Literal ()). isEqualTo (" 1 0 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdeserialize Ġmultipart Ġfile Ġform Ġdata Ġmock `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" multipart - form data ": Ġ[ ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" employees ", ĊĠĠĠĠĠĠĠ Ġ" filename ": Ġ"@ employees . csv ", ĊĠĠĠĠĠĠĠ Ġ" contentType ": Ġ" text / csv ", ĊĠĠĠĠĠĠĠ Ġ" content Encoding ": Ġ" gzip " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ] ĊĠ Ġ}, ĊĊĠ Ġ" mock - http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ ĠassertThat ( mock . request . multi Part FormData ). has Size ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( mock . request . multi Part FormData . first ()). isInstanceOf ( Multi Part File Value :: class . java ) ĊĠĠĠĠĠĠĠ ĠassertThat ( mock . request . multi Part FormData . first (). name ). isEqualTo (" employees ") ĊĊĠĠĠĠĠĠĠ Ġval Ġpart Ġ= Ġmock . request . multi Part FormData . first () Ġas ĠMulti Part File Value ĊĠĠĠĠĠĠĠ ĠassertThat ( part . filename ). isEqualTo (" employees . csv ") ĊĠĠĠĠĠĠĠ ĠassertThat ( part . contentType ). isEqualTo (" text / csv ") ĊĠĠĠĠĠĠĠ ĠassertThat ( part . content Encoding ). isEqualTo (" gzip ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġgenerate Ġrequest Ġpattern Ġcontaining Ġmultipart Ġcontent Ġfrom Ġmock Ġdata `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" multipart - form data ": Ġ[ ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" employee id ", ĊĠĠĠĠĠĠĠ Ġ" content ": Ġ" 1 0 " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ] ĊĠ Ġ}, ĊĊĠ Ġ" mock - http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= Ġmock . request . to Pattern () ĊĠĠĠĠĠĠĠ ĠassertThat ( pattern . multi Part FormData Pattern ). has Size ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( pattern . multi Part FormData Pattern . single (). matches ( Multi Part Content Value (" employee id ", ĠString Value (" 1 0 ")), ĠResolver ())). isInstanceOf ( Success :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġload Ġa Ġkafka Ġmessage Ġfrom Ġstub Ġinfo `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" Ċ { ĊĠ Ġ" kafka - message ": Ġ{ ĊĠĠĠ Ġ" topic ": Ġ" the Ġweather ", ĊĠĠĠ Ġ" key ": Ġ" status ", ĊĠĠĠ Ġ" value ": Ġ" cloud y " ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ ĠassertThat ( mock . kafka Message ). isNotNull ĊĠĠĠĠĠĠĠ ĠassertThat ( mock . kafka Message ?. topic ). isEqualTo (" the Ġweather ") ĊĠĠĠĠĠĠĠ ĠassertThat ( mock . kafka Message ?. key ). isEqualTo ( StringValue (" status ")) ĊĠĠĠĠĠĠĠ ĠassertThat ( mock . kafka Message ?. value ). isEqualTo ( StringValue (" cloud y ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġgenerate Ġrequest Ġpattern Ġcontaining Ġmultipart Ġfile Ġfrom Ġmock Ġdata `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" multipart - form data ": Ġ[ ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" employees ", ĊĠĠĠĠĠĠĠ Ġ" filename ": Ġ"@ employees . csv ", ĊĠĠĠĠĠĠĠ Ġ" contentType ": Ġ" text / csv ", ĊĠĠĠĠĠĠĠ Ġ" content Encoding ": Ġ" gzip " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ] ĊĠ Ġ}, ĊĊĠ Ġ" mock - http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= Ġmock . request . to Pattern () ĊĠĠĠĠĠĠĠ ĠassertThat ( pattern . multi Part FormData Pattern ). has Size ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( pattern . multi Part FormData Pattern . single (). matches ( Multi Part File Value (" employees ", Ġ" employees . csv ", Ġ" text / csv ", Ġ" gzip "), ĠResolver ())). isInstanceOf ( Success :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` request - response Ġwith Ġjson Ġbody Ġin Ġrequest Ġto Ġg her kin Ġstring `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠHttpRequest ( method Ġ= Ġ" POST ", Ġpath Ġ= Ġ"/ customer ", Ġheaders Ġ= Ġempty Map (), Ġbody Ġ= Ġparsed Value (""" {" name ": Ġ" John ĠDoe ", Ġ" address ": Ġ{" street ": Ġ" High ĠStreet ", Ġ" city ": Ġ" Man che ster "}} "" "), ĠqueryParams Ġ= Ġempty Map (), Ġform Fields Ġ= Ġempty Map (), Ġmulti Part FormData Ġ= Ġempty List ()) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠHttpResponse ( status Ġ= Ġ 2 0 0 , Ġbody Ġ= Ġparsed Value (""" {" id ": Ġ 1 0 } "" ")) ĊĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( request , Ġresponse , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠGiven Ġtype ĠAddress ĊĠĠĠĠĠ Ġ| Ġstreet Ġ| Ġ( string ) Ġ| ĊĠĠĠĠĠ Ġ| Ġcity Ġ| Ġ( string ) Ġ| ĊĠĠĠ ĠAnd Ġtype ĠRequest Body ĊĠĠĠĠĠ Ġ| Ġname Ġ| Ġ( string ) Ġ| ĊĠĠĠĠĠ Ġ| Ġaddress Ġ| Ġ( Address ) Ġ| ĊĠĠĠ ĠAnd Ġtype ĠResponse Body ĊĠĠĠĠĠ Ġ| Ġid Ġ| Ġ( number ) Ġ| ĊĠĠĠ ĠWhen ĠPOST Ġ/ customer ĊĠĠĠ ĠAnd Ġrequest - body Ġ( RequestBody ) ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - body Ġ( ResponseBody ) ĊĠĠĊĠĠĠ ĠExamples : ĊĠĠĠ Ġ| Ġname Ġ| Ġstreet Ġ| Ġcity Ġ| ĊĠĠĠ Ġ| ĠJohn ĠDoe Ġ| ĠHigh ĠStreet Ġ| ĠMan che ster Ġ| """) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` request - response Ġwith Ġheaders Ġto Ġg her kin Ġstring `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠHttpRequest ( method Ġ= Ġ" POST ", Ġpath ="/ customer ", Ġheaders Ġ= Ġmap Of (" X - Header 1 " Ġto Ġ" value Ġ 1 ", Ġ" X - Header 2 " Ġto Ġ" value Ġ 2 "), Ġbody Ġ= Ġparsed Value (""" {" name ": Ġ" John ĠDoe ", Ġ" address ": Ġ{" street ": Ġ" High ĠStreet ", Ġ" city ": Ġ" Man che ster "}} "" "), ĠqueryParams Ġ= Ġempty Map (), Ġform Fields Ġ= Ġempty Map (), Ġmulti Part FormData Ġ= Ġempty List ()) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠHttpResponse ( status Ġ= Ġ 2 0 0 , Ġheaders Ġ= Ġmap Of (" X - Required " Ġto Ġ" this Ġis Ġa Ġmust ", Ġ" X - Extra " Ġto Ġ" something Ġmore "), Ġbody Ġ= Ġparsed Value (""" {" id ": Ġ 1 0 } "" ")) ĊĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( request , Ġresponse , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠGiven Ġtype ĠAddress ĊĠĠĠĠĠ Ġ| Ġstreet Ġ| Ġ( string ) Ġ| ĊĠĠĠĠĠ Ġ| Ġcity Ġ| Ġ( string ) Ġ| ĊĠĠĠ ĠAnd Ġtype ĠRequest Body ĊĠĠĠĠĠ Ġ| Ġname Ġ| Ġ( string ) Ġ| ĊĠĠĠĠĠ Ġ| Ġaddress Ġ| Ġ( Address ) Ġ| ĊĠĠĠ ĠAnd Ġtype ĠResponse Body ĊĠĠĠĠĠ Ġ| Ġid Ġ| Ġ( number ) Ġ| ĊĠĠĠ ĠWhen ĠPOST Ġ/ customer ĊĠĠĠ ĠAnd Ġrequest - header ĠX - Header 1 Ġ( string ) ĊĠĠĠ ĠAnd Ġrequest - header ĠX - Header 2 Ġ( string ) ĊĠĠĠ ĠAnd Ġrequest - body Ġ( RequestBody ) ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - header ĠX - Required Ġ( string ) ĊĠĠĠ ĠAnd Ġresponse - header ĠX - Extra Ġ( string ) ĊĠĠĠ ĠAnd Ġresponse - body Ġ( ResponseBody ) ĊĠĠĊĠĠĠ ĠExamples : ĊĠĠĠ Ġ| ĠX - Header 1 Ġ| ĠX - Header 2 Ġ| Ġname Ġ| Ġstreet Ġ| Ġcity Ġ| ĊĠĠĠ Ġ| Ġvalue Ġ 1 Ġ| Ġvalue Ġ 2 Ġ| ĠJohn ĠDoe Ġ| ĠHigh ĠStreet Ġ| ĠMan che ster Ġ| """) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` request - response Ġwith Ġform Ġfields Ġto Ġg her kin Ġstring `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠHttpRequest ( method Ġ= Ġ" POST ", Ġpath Ġ= Ġ"/ customer ", Ġheaders Ġ= Ġempty Map (), Ġform Fields Ġ= Ġmap Of (" X - FormData 1 " Ġto Ġ" some Ġvalue "), Ġmulti Part FormData Ġ= Ġempty List ()) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠHttpResponse ( status Ġ= Ġ 2 0 0 , Ġbody Ġ= Ġparsed Value (""" {" id ": Ġ 1 0 } "" ")) ĊĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( request , Ġresponse , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠGiven Ġtype ĠResponse Body ĊĠĠĠĠĠ Ġ| Ġid Ġ| Ġ( number ) Ġ| ĊĠĠĠ ĠWhen ĠPOST Ġ/ customer ĊĠĠĠ ĠAnd Ġform - field ĠX - FormData 1 Ġ( string ) ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - body Ġ( ResponseBody ) ĊĠĠĊĠĠĠ ĠExamples : ĊĠĠĠ Ġ| ĠX - FormData 1 Ġ| ĊĠĠĠ Ġ| Ġsome Ġvalue Ġ| """) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` request - response Ġwith Ġmultipart Ġform Ġdata Ġcontent Ġto Ġg her kin Ġstring `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠHttpRequest ( method Ġ= Ġ" POST ", Ġpath Ġ= Ġ"/ customer ", Ġheaders Ġ= Ġempty Map (), Ġform Fields Ġ= Ġempty Map (), Ġmulti Part FormData Ġ= ĠlistOf ( Multi Part Content Value (" name ", ĠString Value (" John ĠDoe ")) )) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠHttpResponse ( status Ġ= Ġ 2 0 0 , Ġbody Ġ= Ġparsed Value (""" {" id ": Ġ 1 0 } "" ")) ĊĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( request , Ġresponse , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠGiven Ġtype ĠResponse Body ĊĠĠĠĠĠ Ġ| Ġid Ġ| Ġ( number ) Ġ| ĊĠĠĠ ĠWhen ĠPOST Ġ/ customer ĊĠĠĠ ĠAnd Ġrequest - part Ġname Ġ( string ) ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - body Ġ( ResponseBody ) ĊĠĠĊĠĠĠ ĠExamples : ĊĠĠĠ Ġ| Ġname Ġ| ĊĠĠĠ Ġ| ĠJohn ĠDoe Ġ| """) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` request - response Ġwith Ġmultipart Ġform Ġdata Ġfile Ġto Ġg her kin Ġstring `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠHttpRequest ( method Ġ= Ġ" POST ", Ġpath Ġ= Ġ"/ customer ", Ġheaders Ġ= Ġempty Map (), Ġform Fields Ġ= Ġempty Map (), Ġmulti Part FormData Ġ= ĠlistOf ( Multi Part File Value (" customer _ csv ", Ġ" customer . csv ", Ġ" text / csv ", Ġ" identity "))) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠHttpResponse ( status Ġ= Ġ 2 0 0 , Ġbody Ġ= Ġparsed Value (""" {" id ": Ġ 1 0 } "" ")) ĊĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( request , Ġresponse , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠGiven Ġtype ĠResponse Body ĊĠĠĠĠĠ Ġ| Ġid Ġ| Ġ( number ) Ġ| ĊĠĠĠ ĠWhen ĠPOST Ġ/ customer ĊĠĠĠ ĠAnd Ġrequest - part Ġcustomer _ csv Ġ@( string ) Ġtext / csv Ġidentity ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - body Ġ( ResponseBody ) ĊĠĠĊĠĠĠ ĠExamples : ĊĠĠĠ Ġ| Ġcustomer _ csv _ filename Ġ| ĊĠĠĠ Ġ| Ġcustomer . csv Ġ| """) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġmock Ġjson Ġto Ġg her kin `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http - request ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" multipart - form data ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" employees ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" filename ": Ġ"@ employees . csv ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" contentType ": Ġ" text / csv ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" content Encoding ": Ġ" gzip " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http - response ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( mock . request , Ġmock . response , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠWhen ĠPOST Ġ/ square ĊĠĠĠ ĠAnd Ġrequest - part Ġemployees Ġ@( string ) Ġtext / csv Ġgzip ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - body Ġ( number ) ĊĠĠĊĠĠĠ ĠExamples : ĊĠĠĠ Ġ| Ġemployees _ filename Ġ| ĊĠĠĠ Ġ| Ġemployees . csv Ġ| """ ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġarray Ġin Ġrequest Ġbody Ġto Ġg her kin `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" body ": Ġ[ Ġ" one ", Ġ" two ", Ġ" three " Ġ] ĊĠ Ġ}, ĊĊĠ Ġ" http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( mock . request , Ġmock . response , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠWhen ĠPOST Ġ/ square ĊĠĠĠ ĠAnd Ġrequest - body Ġ( string *) ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - body Ġ( number ) """) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġarray Ġof Ġid entic ally Ġstructured Ġjson Ġobjects Ġin Ġrequest Ġbody Ġto Ġg her kin `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" body ": Ġ[ ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" John ĠDoe " ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" John ĠDoe " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ] ĊĠ Ġ}, ĊĊĠ Ġ" http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( mock . request , Ġmock . response , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠGiven Ġtype ĠRequest Body ĊĠĠĠĠĠ Ġ| Ġname Ġ| Ġ( string ) Ġ| ĊĠĠĠ ĠWhen ĠPOST Ġ/ square ĊĠĠĠ ĠAnd Ġrequest - body Ġ( RequestBody *) ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - body Ġ( number ) ĊĠĠĊĠĠĠ ĠExamples : ĊĠĠĠ Ġ| Ġname Ġ| ĊĠĠĠ Ġ| ĠJohn ĠDoe Ġ| """) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġarray Ġof Ġjson Ġobjects Ġin Ġthe Ġrequest Ġbody Ġwhere Ġthe Ġfirst Ġcontains Ġa Ġkey Ġnot Ġin Ġthe Ġother Ġto Ġg her kin `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" body ": Ġ[ ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" John ĠDoe ", ĊĠĠĠĠĠĠĠ Ġ" address ": Ġ" High ĠStreet " ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" John ĠDoe " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ] ĊĠ Ġ}, ĊĊĠ Ġ" http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( mock . request , Ġmock . response , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠGiven Ġtype ĠRequest Body ĊĠĠĠĠĠ Ġ| Ġname Ġ| Ġ( string ) Ġ| ĊĠĠĠĠĠ Ġ| Ġaddress ? Ġ| Ġ( string ) Ġ| ĊĠĠĠ ĠWhen ĠPOST Ġ/ square ĊĠĠĠ ĠAnd Ġrequest - body Ġ( RequestBody *) ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - body Ġ( number ) ĊĠĠĊĠĠĠ ĠExamples : ĊĠĠĠ Ġ| Ġname Ġ| Ġaddress Ġ| ĊĠĠĠ Ġ| ĠJohn ĠDoe Ġ| ĠHigh ĠStreet Ġ| """) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġarray Ġof Ġjson Ġobjects Ġin Ġthe Ġrequest Ġbody Ġwhere Ġthe Ġsecond Ġcontains Ġa Ġkey Ġnot Ġin Ġthe Ġother Ġto Ġg her kin `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" body ": Ġ[ ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" John ĠDoe " ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" John ĠDoe ", ĊĠĠĠĠĠĠĠ Ġ" address ": Ġ" High ĠStreet " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ] ĊĠ Ġ}, ĊĊĠ Ġ" http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( mock . request , Ġmock . response , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠGiven Ġtype ĠRequest Body ĊĠĠĠĠĠ Ġ| Ġname Ġ| Ġ( string ) Ġ| ĊĠĠĠĠĠ Ġ| Ġaddress ? Ġ| Ġ( string ) Ġ| ĊĠĠĠ ĠWhen ĠPOST Ġ/ square ĊĠĠĠ ĠAnd Ġrequest - body Ġ( RequestBody *) ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - body Ġ( number ) ĊĠĠĊĠĠĠ ĠExamples : ĊĠĠĠ Ġ| Ġname Ġ| ĊĠĠĠ Ġ| ĠJohn ĠDoe Ġ| """) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġarray Ġof Ġ 2 Ġjson Ġobjects Ġin Ġthe Ġrequest Ġbody Ġwhere Ġa Ġvalue Ġin Ġthe Ġsecond Ġis Ġnull Ġto Ġg her kin `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" body ": Ġ[ ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" John ĠDoe ", ĊĠĠĠĠĠĠĠ Ġ" address ": Ġ" High ĠStreet " ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ] ĊĠ Ġ}, ĊĊĠ Ġ" http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( mock . request , Ġmock . response , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠGiven Ġtype ĠRequest Body ĊĠĠĠĠĠ Ġ| Ġname Ġ| Ġ( string ?) Ġ| ĊĠĠĠĠĠ Ġ| Ġaddress ? Ġ| Ġ( string ) Ġ| ĊĠĠĠ ĠWhen ĠPOST Ġ/ square ĊĠĠĠ ĠAnd Ġrequest - body Ġ( RequestBody *) ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - body Ġ( number ) ĊĠĠĊĠĠĠ ĠExamples : ĊĠĠĠ Ġ| Ġname Ġ| Ġaddress Ġ| ĊĠĠĠ Ġ| ĠJohn ĠDoe Ġ| ĠHigh ĠStreet Ġ| """) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġarray Ġof Ġ 3 Ġjson Ġobjects Ġin Ġthe Ġrequest Ġbody Ġwhere Ġa Ġvalue Ġin Ġthe Ġfirst Ġis Ġnull Ġto Ġg her kin `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" body ": Ġ[ ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġnull ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" John ĠDoe ", ĊĠĠĠĠĠĠĠ Ġ" address ": Ġnull ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" John ĠDoe ", ĊĠĠĠĠĠĠĠ Ġ" address ": Ġ" High ĠStreet " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ] ĊĠ Ġ}, ĊĊĠ Ġ" http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( mock . request , Ġmock . response , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠGiven Ġtype ĠRequest Body ĊĠĠĠĠĠ Ġ| Ġname Ġ| Ġ( string ?) Ġ| ĊĠĠĠĠĠ Ġ| Ġaddress ? Ġ| Ġ( string ?) Ġ| ĊĠĠĠ ĠWhen ĠPOST Ġ/ square ĊĠĠĠ ĠAnd Ġrequest - body Ġ( RequestBody *) ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - body Ġ( number ) ĊĠĠĊĠĠĠ ĠExamples : ĊĠĠĠ Ġ| Ġname Ġ| ĊĠĠĠ Ġ| Ġ( null ) Ġ| """) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġarray Ġof Ġ 3 Ġjson Ġobjects Ġin Ġthe Ġrequest Ġbody Ġwhere Ġa Ġvalue Ġin Ġthe Ġfirst Ġand Ġsecond Ġis Ġnull Ġto Ġg her kin `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" body ": Ġ[ ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġnull ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġnull , ĊĠĠĠĠĠĠĠ Ġ" address ": Ġnull ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" John ĠDoe ", ĊĠĠĠĠĠĠĠ Ġ" address ": Ġ" High ĠStreet " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ] ĊĠ Ġ}, ĊĊĠ Ġ" http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( mock . request , Ġmock . response , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠGiven Ġtype ĠRequest Body ĊĠĠĠĠĠ Ġ| Ġname Ġ| Ġ( string ?) Ġ| ĊĠĠĠĠĠ Ġ| Ġaddress ? Ġ| Ġ( string ?) Ġ| ĊĠĠĠ ĠWhen ĠPOST Ġ/ square ĊĠĠĠ ĠAnd Ġrequest - body Ġ( RequestBody *) ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - body Ġ( number ) ĊĠĠĊĠĠĠ ĠExamples : ĊĠĠĠ Ġ| Ġname Ġ| ĊĠĠĠ Ġ| Ġ( null ) Ġ| """) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġarray Ġof Ġ 3 Ġjson Ġobjects Ġin Ġthe Ġrequest Ġbody Ġwhere Ġa Ġvalue Ġin Ġthe Ġfirst Ġand Ġthird Ġis Ġnull Ġto Ġg her kin `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" body ": Ġ[ ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġnull ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" John ĠDoe " ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ] ĊĠ Ġ}, ĊĊĠ Ġ" http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( mock . request , Ġmock . response , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠGiven Ġtype ĠRequest Body ĊĠĠĠĠĠ Ġ| Ġname Ġ| Ġ( string ?) Ġ| ĊĠĠĠ ĠWhen ĠPOST Ġ/ square ĊĠĠĠ ĠAnd Ġrequest - body Ġ( RequestBody *) ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - body Ġ( number ) ĊĠĠĊĠĠĠ ĠExamples : ĊĠĠĠ Ġ| Ġname Ġ| ĊĠĠĠ Ġ| Ġ( null ) Ġ| """) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġarray Ġof Ġjson Ġobjects Ġin Ġthe Ġrequest Ġbody Ġwhere Ġthe Ġkeys Ġare Ġidentical Ġbut Ġa Ġvalue Ġin Ġthe Ġsecond Ġis Ġto Ġg her kin `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" body ": Ġ[ ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" John ĠDoe " ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġnull , ĊĠĠĠĠĠĠĠ Ġ" address ": Ġ" High ĠStreet " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ] ĊĠ Ġ}, ĊĊĠ Ġ" http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map (( mock Text ))) ĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( mock . request , Ġmock . response , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠGiven Ġtype ĠRequest Body ĊĠĠĠĠĠ Ġ| Ġname Ġ| Ġ( string ?) Ġ| ĊĠĠĠĠĠ Ġ| Ġaddress ? Ġ| Ġ( string ) Ġ| ĊĠĠĠ ĠWhen ĠPOST Ġ/ square ĊĠĠĠ ĠAnd Ġrequest - body Ġ( RequestBody *) ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - body Ġ( number ) ĊĠĠĊĠĠĠ ĠExamples : ĊĠĠĠ Ġ| Ġname Ġ| ĊĠĠĠ Ġ| ĠJohn ĠDoe Ġ| """) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` empty Ġarray Ġin Ġrequest Ġbody `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstub Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" body ": Ġ[] ĊĠ Ġ}, ĊĊĠ Ġ" http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġ 1 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġmock Ġ= Ġmock From JSON ( json StringTo Value Map ( stub Text )) ĊĠĠĠĠĠĠĠ Ġvalidate Stub And Q on tract ( mock . request , Ġmock . response , Ġ""" Feature : ĠNew ĠFeature ĊĠ ĠScenario : ĠNew Ġscenario ĊĠĠĠ ĠWhen ĠPOST Ġ/ square ĊĠĠĠ ĠAnd Ġrequest - body Ġ[] ĊĠĠĠ ĠThen Ġstatus Ġ 2 0 0 ĊĠĠĠ ĠAnd Ġresponse - body Ġ( number ) """) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` null Ġin Ġrequest Ġbody Ġthrows Ġan Ġexception `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstub Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square ", ĊĠĠĠ Ġ" body ": Ġnull ĊĠ Ġ}, ĊĊĠ Ġ" http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ ĠassertThat Thrown By Ġ{ Ġmock From JSON ( json StringTo Value Map ( stub Text )) Ġ}. isInstanceOf ( Contract Exception :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` null Ġin Ġresponse Ġbody Ġthrows Ġan Ġexception `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstub Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square " ĊĠ Ġ}, ĊĊĠ Ġ" http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 , ĊĠĠĠ Ġ" body ": Ġnull ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ ĠassertThat Thrown By Ġ{ Ġmock From JSON ( json StringTo Value Map ( stub Text )) Ġ}. isInstanceOf ( Contract Exception :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` load Ġdelay Ġfrom Ġstub Ġinfo `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstub Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square " ĊĠ Ġ}, ĊĊĠ Ġ" http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 ĊĠ Ġ}, ĊĠĠĊĠ Ġ"$ DELAY _ IN _ SECONDS ": Ġ 1 0 Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġscenario Stub Ġ= Ġmock From JSON ( json StringTo Value Map ( stub Text )) ĊĠĠĠĠĠĠĠ ĠassertThat ( scenario Stub . delay InSeconds ). isEqualTo ( 1 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` stub Ġwith Ġno Ġdelay Ġshould Ġresult Ġin Ġempty Ġdelay Ġvalue Ġin Ġloaded Ġstub `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstub Text Ġ= Ġ""" Ċ { ĊĠ Ġ" http - request ": Ġ{ ĊĠĠĠ Ġ" method ": Ġ" POST ", ĊĠĠĠ Ġ" path ": Ġ"/ square " ĊĠ Ġ}, ĊĊĠ Ġ" http - response ": Ġ{ ĊĠĠĠ Ġ" status ": Ġ 2 0 0 ĊĠ Ġ} Ċ } ĊĠĠĠĠĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġscenario Stub Ġ= Ġmock From JSON ( json StringTo Value Map ( stub Text )) ĊĠĠĠĠĠĠĠ ĠassertThat ( scenario Stub . delay InSeconds ). isNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` show Ġonly Ġthe Ġerror Ġfor Ġthe Ġscenario Ġwith Ġmatching Ġstatus Ġwhen Ġthere Ġis Ġa Ġrequest Ġmismatch Ġfor Ġan ĠOpenAPI Ġcontract Ġhaving Ġmultiple Ġerror Ġstatuses `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġopen API Ġ= Ġ""" Ċ openapi : Ġ 3 . 0 . 0 Ċ info : ĊĠ Ġtitle : ĠSample ĠAPI ĊĠ Ġdescription : ĠOptional Ġmultiline Ġor Ġsingle - line Ġdescription Ġin Ġ[ Common Mark ]( http :// common mark . org / help /) Ġor ĠHTML . ĊĠ Ġversion : Ġ 0 . 1 . 9 Ċ servers : ĊĠ Ġ- Ġurl : Ġhttp :// api . example . com / v 1 ĊĠĠĠ Ġdescription : ĠOptional Ġserver Ġdescription , Ġe . g . ĠMain Ġ( production ) Ġserver ĊĠ Ġ- Ġurl : Ġhttp :// staging - api . example . com ĊĠĠĠ Ġdescription : ĠOptional Ġserver Ġdescription , Ġe . g . ĠInternal Ġstaging Ġserver Ġfor Ġtesting Ċ paths : ĊĠ Ġ/ hello /{ id }: ĊĠĠĠ Ġget : ĊĠĠĠĠĠ Ġsummary : Ġhello Ġworld ĊĠĠĠĠĠ Ġdescription : ĠOptional Ġextended Ġdescription Ġin ĠCommon Mark Ġor ĠHTML . ĊĠĠĠĠĠ Ġparameters : ĊĠĠĠĠĠĠĠ Ġ- Ġin : Ġpath ĊĠĠĠĠĠĠĠĠĠ Ġname : Ġid ĊĠĠĠĠĠĠĠĠĠ Ġschema : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : Ġinteger ĊĠĠĠĠĠĠĠĠĠ Ġrequired : Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġdescription : ĠNumeric ĠID ĊĠĠĠĠĠĠĠ Ġ- Ġin : Ġheader ĊĠĠĠĠĠĠĠĠĠ Ġname : ĠX - Value ĊĠĠĠĠĠĠĠĠĠ Ġschema : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : Ġnumber ĊĠĠĠĠĠĠĠĠĠ Ġrequired : Ġtrue ĊĠĠĠĠĠ Ġresponses : ĊĠĠĠĠĠĠĠ Ġ' 2 0 0 ': ĊĠĠĠĠĠĠĠĠĠ Ġdescription : ĠS ays Ġhello ĊĠĠĠĠĠĠĠĠĠ Ġcontent : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication / json : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype : Ġstring ĊĠĠĠĠĠĠĠ Ġ' 4 0 4 ': ĊĠĠĠĠĠĠĠĠĠ Ġdescription : ĠNot ĠFound ĊĠĠĠĠĠĠĠĠĠ Ġcontent : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication / json : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype : Ġstring ĊĠĠĠ Ġ""" . trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġfeature Ġ= ĠOpen Api Specification . from YAML ( open API , Ġ""). to Feature () ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠHttpRequest ( method Ġ= Ġ" GET ", Ġpath Ġ= Ġ"/ hello / 1 0 ", Ġheaders Ġ= Ġmap Of (" X - Value " Ġto Ġ" data ")) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠHttpResponse . OK (" success ") ĊĊĠĠĠĠĠĠĠ ĠassertThat Thrown By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeature . matching Stub ( request , Ġresponse , ĠContract And Stub Mismatch Messages ) ĊĠĠĠĠĠĠĠ Ġ}. satisf ies ( Consumer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat (( it Ġas ĠNo Matching Scenario ). report ( request ). trim ()). isEqualTo (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIn Ġscenario Ġ" hello Ġworld . ĠResponse : ĠS ays Ġhello " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAPI : ĠGET Ġ/ hello /( id : number ) Ġ-> Ġ 2 0 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ>> ĠREQUEST . HEADERS . X - Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ Contract And Stub Mismatch Messages . mismatch Message (" number ", Ġ""" " data " Ġ""" . trim ()) } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġvalidate Stub And Q on tract ( request : ĠHttpRequest , Ġresponse : ĠHttpResponse , Ġexpected G her kin : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcleaned Up Response Ġ= Ġdrop Content And C ORS Response Headers ( response ) ĊĠĠĠĠĠĠĠ Ġval Ġg her kin Ġ= Ġto G her kin Feature ( Named Stub (" New Ġscenario ", ĠScenario Stub ( request , Ġcleaned Up Response ))). also Ġ{ Ġprintln ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( expected G her kin Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( g her kin . trim ()). isEqualTo ( expected G her kin . trim ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( g her kin ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbehaviour Ġ= Ġparse G her kin StringTo Feature ( g her kin ) ĊĠĠĠĠĠĠĠ Ġbehaviour . matching Stub ( request , Ġcleaned Up Response ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( e . localized Message ) ĊĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠ Ġ} Ċ } Ċ