package Ġgov . cdc . prime . router . azure Ċ Ċ import Ġassert k . assertThat Ċ import Ġassert k . assertions . isEqualTo Ċ import Ġassert k . assertions . isNotNull Ċ import Ġassert k . assertions . isNull Ċ import Ġassert k . assertions . isTrue Ċ import Ġcom . microsoft . azure . functions . ExecutionContext Ċ import Ġgov . cdc . prime . router . File Settings Ċ import Ġgov . cdc . prime . router . Metadata Ċ import Ġgov . cdc . prime . router . azure . db . enums . Task Action Ċ import Ġgov . cdc . prime . router . azure . db . tables . po jos . Report File Ċ import Ġgov . cdc . prime . router . azure . db . tables . po jos . Task Ċ import Ġgov . cdc . prime . router . transport . Retry Token Ċ import Ġgov . cdc . prime . router . transport . S ftp Transport Ċ import Ġio . mock k . clear All Mocks Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Class Ċ import Ġio . mock k . mock k Constructor Ċ import Ġio . mock k . verify Ċ import Ġorg . jooq . Configuration Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġjava . time . Offset DateTime Ċ import Ġjava . util . UUID Ċ import Ġjava . util . logging . Level Ċ import Ġjava . util . logging . Logger Ċ import Ġkotlin . test . Test Ċ Ċ class ĠSend Function Tests Ġ{ ĊĠĠĠ Ġval Ġcontext Ġ= Ġmock k Class ( ExecutionContext :: class ) ĊĠĠĠ Ġval Ġmetadata Ġ= ĠMetadata . getInstance () ĊĠĠĠ Ġval Ġsettings Ġ= ĠFile Settings ( File Settings . default Settings Directory ) ĊĠĠĠ Ġval Ġlogger Ġ= Ġmock k Class ( Logger :: class ) ĊĠĠĠ Ġval Ġworkflow Engine Ġ= Ġmock k Class ( Workflow Engine :: class ) ĊĠĠĠ Ġval Ġs ftp Transport Ġ= Ġmock k Class ( S ftp Transport :: class ) ĊĠĠĠ Ġval Ġreport Id Ġ= ĠUUID . randomUUID () ĊĠĠĠ Ġval Ġtask Ġ= ĠTask ( ĊĠĠĠĠĠĠĠ Ġreport Id , ĊĠĠĠĠĠĠĠ ĠTask Action . send , ĊĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠ Ġ" ignore . CSV ", ĊĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġreport File Ġ= ĠReport File ( ĊĠĠĠĠĠĠĠ Ġreport Id , ĊĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠ ĠTask Action . send , ĊĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠ Ġ" ignore ", ĊĠĠĠĠĠĠĠ Ġ" CSV ", ĊĠĠĠĠĠĠĠ Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġ 0 , Ġnull , Ġnull , Ġnull ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġsetup Logger () Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontext . logger Ġ}. returns ( logger ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġlogger . log ( any (), Ġany (), Ġany < Throwable >()) Ġ}. returns ( Unit ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġlogger . warning ( any < String >()) Ġ}. returns ( Unit ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġlogger . info ( any < String >()) Ġ}. returns ( Unit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsetup Workflow () Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkflow Engine . metadata Ġ}. returns ( metadata ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkflow Engine . settings Ġ}. returns ( settings ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkflow Engine . read Body ( any ()) Ġ}. returns (" body ". toByteArray ()) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkflow Engine . sf tp Transport Ġ}. returns ( sf tp Transport ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmake Header (): ĠWorkflow Engine . Header Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠWorkflow Engine . Header ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask , Ġreport File , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . find Organization (" ignore "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . find Receiver (" ignore . CSV "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata . find Schema (" covid - 1 9 "), Ġ" hello ". toByteArray () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear All Mocks () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test Ġwith Ġmessage `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSetup ĊĠĠĠĠĠĠĠ Ġvar Ġnext Event : ĠReport Event ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsetup Logger () ĊĠĠĠĠĠĠĠ Ġsetup Workflow () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkflow Engine . handle Report Event ( any (), Ġcontext , Ġany ()) Ġ}. answers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Ġ= Ġthird Arg () Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( header : ĠWorkflow Engine . Header , Ġretry Token : ĠRetry Token ?, Ġtxn : ĠConfiguration ?) Ġ-> ĠReport Event ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġmake Header () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Event Ġ= Ġblock ( header , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġs ftp Transport . send ( any (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany ()) Ġ}. returns ( null ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkflow Engine . record Action ( any ()) Ġ}. returns ( Unit ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInvoke ĊĠĠĠĠĠĠĠ Ġval Ġevent Ġ= ĠReport Event ( Event . Event Action . SEND , Ġreport Id ) ĊĠĠĠĠĠĠĠ ĠSend Function ( workflow Engine ). run ( event . to Queue Message (), Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify ĊĠĠĠĠĠĠĠ ĠassertThat ( next Event ). isNotNull () ĊĠĠĠĠĠĠĠ ĠassertThat ( next Event !!. event Action ). isEqualTo ( Event . Event Action . NONE ) ĊĠĠĠĠĠĠĠ ĠassertThat ( next Event !!. retry Token ). isNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test Ġwith Ġs ftp Ġerror `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSetup ĊĠĠĠĠĠĠĠ Ġvar Ġnext Event : ĠReport Event ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsetup Logger () ĊĠĠĠĠĠĠĠ Ġmock k Constructor ( Action History :: class ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġany Construct ed < Action History >(). set ActionType ( Task Action . send _ warning ) Ġ} Ġreturns ĠUnit ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkflow Engine . handle Report Event ( any (), Ġcontext , Ġany ()) Ġ}. answers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Ġ= Ġthird Arg () Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( header : ĠWorkflow Engine . Header , Ġretry Token : ĠRetry Token ?, Ġtxn : ĠConfiguration ?) Ġ-> ĠReport Event ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġmake Header () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Event Ġ= Ġblock ( header , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsetup Workflow () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġs ftp Transport . send ( any (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany ()) Ġ}. returns ( Retry Token . all Items ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkflow Engine . record Action ( any ()) Ġ}. returns ( Unit ) ĊĠĠĠĠĠĠĠ Ġ// ĠInvoke ĊĠĠĠĠĠĠĠ Ġval Ġevent Ġ= ĠReport Event ( Event . Event Action . SEND , Ġreport Id ) ĊĠĠĠĠĠĠĠ ĠSend Function ( workflow Engine ). run ( event . to Queue Message (), Ġcontext ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠVerify ĊĠĠĠĠĠĠĠ ĠassertThat ( next Event ). isNotNull () ĊĠĠĠĠĠĠĠ ĠassertThat ( next Event !!. event Action ). isEqualTo ( Event . Event Action . SEND ) ĊĠĠĠĠĠĠĠ ĠassertThat ( next Event !!. retry Token ). isNotNull () ĊĠĠĠĠĠĠĠ ĠassertThat ( next Event !!. retry Token ?. retry Count ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġany Construct ed < Action History >(). set ActionType ( Task Action . send _ warning ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test Ġwith Ġthird Ġs ftp Ġerror `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSetup ĊĠĠĠĠĠĠĠ Ġvar Ġnext Event : ĠReport Event ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsetup Logger () ĊĠĠĠĠĠĠĠ Ġmock k Constructor ( Action History :: class ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġany Construct ed < Action History >(). set ActionType ( Task Action . send _ warning ) Ġ} Ġreturns ĠUnit ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkflow Engine . handle Report Event ( any (), Ġcontext , Ġany ()) Ġ}. answers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Ġ= Ġthird Arg () Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( header : ĠWorkflow Engine . Header , Ġretry Token : ĠRetry Token ?, Ġtxn : ĠConfiguration ?) Ġ-> ĠReport Event ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġmake Header () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Event Ġ= Ġblock ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader , ĠRetry Token ( 2 , ĠRetry Token . all Items ), Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsetup Workflow () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġs ftp Transport . send ( any (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany ()) Ġ}. returns ( Retry Token . all Items ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkflow Engine . record Action ( any ()) Ġ}. returns ( Unit ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInvoke ĊĠĠĠĠĠĠĠ Ġval Ġevent Ġ= ĠReport Event ( Event . Event Action . SEND , Ġreport Id ) ĊĠĠĠĠĠĠĠ ĠSend Function ( workflow Engine ). run ( event . to Queue Message (), Ġcontext ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠVerify ĊĠĠĠĠĠĠĠ ĠassertThat ( next Event ). isNotNull () ĊĠĠĠĠĠĠĠ ĠassertThat ( next Event !!. event Action ). isEqualTo ( Event . Event Action . SEND ) ĊĠĠĠĠĠĠĠ ĠassertThat ( next Event !!. retry Token ). isNotNull () ĊĠĠĠĠĠĠĠ ĠassertThat ( next Event !!. retry Token ?. retry Count ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( next Event !!. at !!. is After ( Offset DateTime . now (). plus Minutes ( 2 ))). isTrue () ĊĠĠĠĠĠĠĠ Ġnext Event !!. retry Token ?. toJSON ()?. let Ġ{ ĠassertThat ( it . contains ("\" retry Count \": 3 ")). isTrue () Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġany Construct ed < Action History >(). set ActionType ( Task Action . send _ warning ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test Ġwith Ġ 1 0 0 th Ġs ftp Ġerror `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSetup ĊĠĠĠĠĠĠĠ Ġvar Ġnext Event : ĠReport Event ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsetup Logger () ĊĠĠĠĠĠĠĠ Ġmock k Constructor ( Action History :: class ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġany Construct ed < Action History >(). set ActionType ( Task Action . send _ error ) Ġ} Ġreturns ĠUnit ĊĠĠĠĠĠĠĠ Ġval Ġreport Id Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkflow Engine . handle Report Event ( any (), Ġcontext , Ġany ()) Ġ}. answers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Ġ= Ġthird Arg () Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( header : ĠWorkflow Engine . Header , Ġretry Token : ĠRetry Token ?, Ġtxn : ĠConfiguration ?) Ġ-> ĠReport Event ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġmake Header () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShould Ġbe Ġhigh Ġenough Ġretry Ġcount Ġthat Ġthe Ġnext Ġaction Ġshould Ġhave Ġan Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Event Ġ= Ġblock ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader , ĠRetry Token ( 1 0 0 , ĠRetry Token . all Items ), Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsetup Workflow () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġs ftp Transport . send ( any (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany ()) Ġ}. returns ( Retry Token . all Items ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkflow Engine . record Action ( any ()) Ġ}. returns ( Unit ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInvoke ĊĠĠĠĠĠĠĠ Ġval Ġevent Ġ= ĠReport Event ( Event . Event Action . SEND , Ġreport Id ) ĊĠĠĠĠĠĠĠ ĠSend Function ( workflow Engine ). run ( event . to Queue Message (), Ġcontext ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠVerify ĊĠĠĠĠĠĠĠ ĠassertThat ( next Event ). isNotNull () ĊĠĠĠĠĠĠĠ ĠassertThat ( next Event !!. event Action ). isEqualTo ( Event . Event Action . SEND _ ERROR ) ĊĠĠĠĠĠĠĠ ĠassertThat ( next Event !!. retry Token ). isNull () ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġany Construct ed < Action History >(). set ActionType ( Task Action . send _ error ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test Ġwith Ġa Ġbad Ġmessage `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSetup ĊĠĠĠĠĠĠĠ Ġsetup Logger () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkflow Engine . record Action ( any ()) Ġ}. returns ( Unit ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInvoke ĊĠĠĠĠĠĠĠ ĠSend Function ( workflow Engine ). run ("", Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify ĊĠĠĠĠĠĠĠ Ġverify ( at Least Ġ= Ġ 1 ) Ġ{ Ġlogger . log ( Level . SEVERE , Ġany (), Ġany < Throwable >()) Ġ} ĊĠĠĠ Ġ} Ċ }