package Ġuk . n hs . n hs x . crash reports Ċ Ċ import Ġcom . amazonaws . HttpMethod Ċ import Ġcom . amazonaws . HttpMethod . POST Ċ import Ġcom . amazonaws . services . lambda . runtime . events . API Gateway Proxy Response Event Ċ import Ġorg . apache . commons . lang 3 . Random StringUtils Ċ import Ġorg . http 4 k . core . Status . Companion . BAD _ REQUEST Ċ import Ġorg . http 4 k . core . Status . Companion . METHOD _ NOT _ ALLOWED Ċ import Ġorg . http 4 k . core . Status . Companion . NOT _ FOUND Ċ import Ġorg . http 4 k . core . Status . Companion . OK Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġstri kt . api . expect Ċ import Ġstri kt . api . expect That Ċ import Ġstri kt . assertions . filter Is Instance Ċ import Ġstri kt . assertions . isEqualTo Ċ import Ġstri kt . assertions . isNull Ċ import Ġstri kt . assertions . with First Ċ import Ġuk . n hs . n hs x . core . Test Environments Ċ import Ġuk . n hs . n hs x . core . events . Incoming HttpRequest Ċ import Ġuk . n hs . n hs x . core . events . Mobile Crash Reports Submission Ċ import Ġuk . n hs . n hs x . core . events . Recording Events Ċ import Ġuk . n hs . n hs x . core . events . Request Rejected Ċ import Ġuk . n hs . n hs x . core . events . Un process able Json Ċ import Ġuk . n hs . n hs x . test helper . Context Builder . Companion . a Context Ċ import Ġuk . n hs . n hs x . test helper . Proxy RequestBuilder . request Ċ import Ġuk . n hs . n hs x . test helper . assertions . Aws Runtime Assertions . Proxy Response . body Ċ import Ġuk . n hs . n hs x . test helper . assertions . Aws Runtime Assertions . Proxy Response . status Ċ import Ġuk . n hs . n hs x . test helper . assertions . contains Exactly Ċ import Ġuk . n hs . n hs x . test helper . assertions . is Same As Ċ import Ġuk . n hs . n hs x . test helper . with Bearer Token Ċ import Ġuk . n hs . n hs x . test helper . with Custom O ai Ċ import Ġuk . n hs . n hs x . test helper . with Json Ċ import Ġuk . n hs . n hs x . test helper . with Method Ċ import Ġuk . n hs . n hs x . test helper . with RequestId Ċ Ċ class ĠCrash Reports Handler Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġevents Ġ= ĠRecord ing Events () ĊĊĠĠĠ Ġprivate Ġval Ġhandler Ġ= ĠCrash Reports Handler ( ĊĠĠĠĠĠĠĠ ĠTest Environments . TEST . apply ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" MA INTEN ANCE _ MODE " Ġto Ġ" false ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" custom _ o ai " Ġto Ġ" O AI " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġevents ĊĠĠĠ Ġ) Ġ{ Ġtrue Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` 2 0 0 Ġmatching Ġexception Ġtype `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Event Ġ= Ġresponse For ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exception ": Ġ" android . app . Remote ServiceException ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" thread Name ": Ġ" MainThread ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stack Trace ": Ġ" android . app . Remote ServiceException : ĠHere Ġis Ġthe Ġel usive Ġexception Ġmessage Ġthat Ġwe Ġreally Ġneed Ġto Ġcapture " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġexpect That ( response Event ). status . is Same As ( OK ) ĊĠĠĠĠĠĠĠ Ġexpect That ( events ). contains Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMobile Crash Reports Submission :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCrash Report Stored :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIncoming HttpRequest :: class ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` 2 0 0 Ġsanit ising Ġfields `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Event Ġ= Ġresponse For ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exception ": Ġ" android . app . Remote ServiceException ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" thread Name ": Ġ" some ĠĠĠĠ Ġhttp :// www . abc . com ĠĠĠĠ Ġmessage ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stack Trace ": Ġ" another Ġmessage Ġhttps :// www . example . com " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġexpect That ( response Event ). status . is Same As ( OK ) ĊĊĠĠĠĠĠĠĠ Ġexpect That ( events ). contains Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMobile Crash Reports Submission :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCrash Report Stored :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIncoming HttpRequest :: class ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġexpect That ( events ). filter Is Instance < Crash Report Stored >(). with First Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( Crash Report Stored :: crash Report ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCrash Report Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġ" android . app . Remote ServiceException ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Name Ġ= Ġ" some ĠĠĠĠ Ġwww . abc . com ĠĠĠĠ Ġmessage ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack Trace Ġ= Ġ" another Ġmessage Ġwww . example . com " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` 2 0 0 Ġprevent ing Ġab use Ġwhen Ġexception Ġtype Ġis Ġnot Ġrecogn ised `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Event Ġ= Ġresponse For ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exception ": Ġ" unknown ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" thread Name ": Ġ" MainThread ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stack Trace ": Ġ" some " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġexpect That ( response Event ). status . is Same As ( OK ) ĊĊĠĠĠĠĠĠĠ Ġexpect That ( events ). contains Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMobile Crash Reports Submission :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCrash Report Not Re cogn ised :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIncoming HttpRequest :: class ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` bad Ġrequest Ġwhen Ġjson Ġis Ġdoes Ġnot Ġdeserialize Ġinto Ġcorresponding Ġtype `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Event Ġ= Ġresponse For ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" bob " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġassert Status Is 4 0 0 ( response Event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` bad Ġrequest Ġwhen Ġempty Ġbody `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Event Ġ= Ġresponse For ("") ĊĠĠĠĠĠĠĠ Ġassert Status Is 4 0 0 ( response Event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` bad Ġrequest Ġwhen Ġmalformed Ġjson `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Event Ġ= Ġresponse For ("{ ") ĊĠĠĠĠĠĠĠ Ġassert Status Is 4 0 0 ( response Event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` bad Ġrequest Ġwhen Ġempty Ġjson Ġobject `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Event Ġ= Ġresponse For ("{} ") ĊĠĠĠĠĠĠĠ Ġassert Status Is 4 0 0 ( response Event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` bad Ġrequest Ġwhen Ġjson Ġis Ġtoo Ġlong `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= ĠRandom StringUtils . random Alphabet ic ( 1 5 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Event Ġ= Ġresponse For ( payload ) ĊĊĠĠĠĠĠĠĠ Ġexpect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthat ( response Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus . is Same As ( BAD _ REQUEST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . isNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthat ( events ). contains Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMobile Crash Reports Submission :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Rejected :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIncoming HttpRequest :: class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` not Ġfound Ġwhen Ġpath Ġis Ġwrong `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Event Ġ= Ġrequest () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Method ( POST ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Custom O ai (" O AI ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with RequestId () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Bearer Token (" anything ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Path (" invalid ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Json ("") ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Event Ġ= Ġhandler . handle Request ( request Event , Ġa Context ()) ĊĊĠĠĠĠĠĠĠ Ġexpect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthat ( response Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus . is Same As ( NOT _ FOUND ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . isNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthat ( events ). contains Exactly ( Incoming HttpRequest :: class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` not Ġallowed Ġwhen Ġmethod Ġis Ġwrong `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Event Ġ= Ġrequest () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Method ( HttpMethod . GET ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Custom O ai (" O AI ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with RequestId () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Bearer Token (" something ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Path ("/ submission / crash - reports ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Json ("") ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Event Ġ= Ġhandler . handle Request ( request Event , Ġa Context ()) ĊĊĠĠĠĠĠĠĠ Ġexpect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthat ( response Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus . is Same As ( METHOD _ NOT _ ALLOWED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . isNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthat ( events ). contains Exactly ( Incoming HttpRequest :: class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Status Is 4 0 0 ( response Event : ĠAPI Gateway Proxy Response Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexpect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthat ( response Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus . is Same As ( BAD _ REQUEST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . isNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthat ( events ). contains Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMobile Crash Reports Submission :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUn process able Json :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIncoming HttpRequest :: class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresponse For ( request Payload : ĠString ): ĠAPI Gateway Proxy Response Event Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Event Ġ= Ġrequest () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Method ( POST ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Custom O ai (" O AI ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with RequestId () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Bearer Token (" anything ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Path ("/ submission / crash - reports ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Body ( request Payload ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġhandler . handle Request ( request Event , Ġa Context ()) ĊĠĠĠ Ġ} Ċ } Ċ