/* ĠCopyright Ġ( c ) Ġ 2 0 1 9 , ĠSales force . com , ĠInc . Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* ĠSPDX - License - Identifier : ĠBSD - 3 - Clause . Ċ Ġ* ĠFor Ġfull Ġlicense Ġtext , Ġsee ĠLICENSE Ġfile Ġin Ġthe Ġrepo Ġroot Ġor Ġhttps :// opensource . org / licenses / BSD - 3 - Clause . Ċ Ġ*/ Ċ package Ġcom . sales force . zero . quick quartz Ċ Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġcom . sales force . zero . quick quartz . Quick Qu artz F ired Triggers . trigger Group Ċ import Ġorg . jetbrains . ex posed . sql . Sql Expression Builder . eq Ċ import Ġorg . jetbrains . ex posed . sql . and Ċ import Ġorg . jetbrains . ex posed . sql . select Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . quartz . Scheduler Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . test . context . SpringBootTest Ċ import Ġjava . net . Inet Address Ċ import Ġjava . time . LocalDate Ċ import Ġjava . util . Date Ċ import Ġjava . util . UUID Ċ import Ġjavax . sql . DataSource Ċ import Ġkotlin . test . fail Ċ Ċ @ SpringBootTest Ċ class ĠEnd ToEnd Tests Ġ{ ĊĊĠĠĠ Ġ@ Autowired Ġlateinit Ġvar Ġscheduler : ĠScheduler ĊĠĠĠ Ġ@ Autowired Ġlateinit Ġvar Ġquick Qu artz : ĠQuick Qu artz ĊĠĠĠ Ġ@ Autowired Ġlateinit Ġvar Ġdb : ĠDataSource ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġuse Scheduler () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( scheduler . scheduler Name ). isEqualTo (" Quick Qu artz Scheduler ") ĊĠĠĠĠĠĠĠ ĠassertThat ( scheduler . scheduler InstanceId ). startsWith ( Inet Address . getLocal Host (). host Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` store Ġjobs Ġand Ġtriggers `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= ĠUUID . randomUUID (). toString () ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscheduler . schedule Jobs ( gen Qu artz Jobs ( prefix ), Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen Ġmake Ġsure Ġthe Ġrows Ġended Ġup Ġwhere Ġwe Ġsent Ġ' em ĊĠĠĠĠĠĠĠ Ġverify Jobs And Triggers ( prefix ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` schedule Ġsingle Ġjob `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠ Ġval Ġjob To Triggers Ġ= Ġgen Qu artz Jobs ( prefix , Ġpayload Ġ= Ġmap Of (" k 1 " Ġto Ġ" v 1 ")) ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= Ġjob To Triggers . keys . elementAt ( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġtrigger Ġ= Ġjob To Triggers [ job ]?. elementAt ( 0 ) Ġ?: Ġfail () ĊĊĠĠĠĠĠĠĠ Ġscheduler . schedule Job ( job , Ġtrigger ) ĊĊĠĠĠĠĠĠĠ Ġverify Jobs And Triggers ( prefix , Ġexpected Count Ġ= Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġtest Ġfor Ġ`[ org . quartz . core . Qu artz Scheduler . add Job ( org . quartz . Job Detail , Ġboolean , Ġboolean )] ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` schedule Ġjob Ġwith Ġno Ġtrigger `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠ Ġval Ġjob To Triggers Ġ= Ġgen Qu artz Jobs ( prefix ) ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= Ġjob To Triggers . keys . elementAt ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġscheduler . add Job ( job , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠQuick Qu artz Job Details . select Ġ{ ĠQuick Qu artz Job Details . job Name Ġlike Ġ"$ prefix %" Ġ}. map Ġ{ Ġit . to Job () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( list . size ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġthis Ġdoes Ġa Ġjoin Ġso Ġboth Ġjob Ġand Ġdetail Ġrows Ġmust Ġbe Ġpresent Ġfor Ġthis Ġto Ġpass ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġverify Jobs And Triggers ( prefix : ĠString , Ġexpected Count : ĠInt Ġ= ĠTEST _ DEFAULT _ NUM _ ENT ITIES ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjobs And Triggers Ġ= Ġ( Quick Qu artz Job Details Ġinner Join ĠQuick Qu artz Triggers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select Ġ{ Ġ( Quick Qu artz Job Details . sched Name Ġeq ( TEST _ SCHEDUL ER _ NAME )) Ġand Ġ( Quick Qu artz Job Details . job Name Ġlike Ġ"$ prefix % ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. orderBy ( Quick Qu artz Job Details . job Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Job () Ġto Ġit . to Trigger () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( jobs And Triggers . size ). isEqualTo ( expected Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġall Ġtriggers Ġhave Ġa Ġle git Ġnext Fire Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjobs And Triggers . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrigger Ġ= Ġit . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( trigger . next Fire Time ). is GreaterThan ( LocalDate . now (). to Epoch Day ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` acquire Ġnext Ġtriggers Ġfrom Ġqu artz db `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠ Ġval Ġqu artz Jobs Ġ= Ġgen Qu artz Jobs ( prefix ) ĊĠĠĠĠĠĠĠ Ġval Ġqu artz Db Ġ= ĠQuick Qu artz Db ( db , Ġprefix ) ĊĠĠĠĠĠĠĠ Ġscheduler . schedule Jobs ( quartz Jobs , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġverify Jobs And Triggers ( prefix ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġnext Triggers Ġ= Ġqu artz Db . acquire Next Triggers ( Date (). time , Ġdebug Ġ= Ġtrue , Ġtenant Filter Ġ= ĠQuick Qu artz Triggers . trigger Group Ġeq Ġprefix ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertThat ( next Triggers ). isNotEmpty () ĊĠĠĠĠĠĠĠ ĠassertThat ( next Triggers . filter Ġ{ Ġit . trigger Name . startsWith ( prefix ) Ġ}). has Size ( TEST _ DEFAULT _ NUM _ ENT ITIES ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġshould Ġhave Ġinserted Ġinto Ġthe Ġfired Ġtriggers Ġtable ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfired Ġ= ĠQuick Qu artz F ired Triggers . select Ġ{ Ġtrigger Group Ġeq Ġ"$ prefix " Ġ}. map Ġ{ Ġit . to F ired Trigger () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( f ired . size ). isEqualTo ( TEST _ DEFAULT _ NUM _ ENT ITIES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfired . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . instance Name ). isEqualTo ( prefix ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . state ). isEqualTo ( Trigger State . AC Q UIRED . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġoh Ġand Ġalso Ġcheck Ġthat Ġconverting Ġit Ġto Ġa Ġqu artz Ġtrigger Ġpre serves Ġthe Ġnext Fire Time ĊĠĠĠĠĠĠĠ ĠassertThat ( next Triggers . first (). to Oper able Trigger (). next Fire Time ). isEqualTo ( Date ( next Triggers . first (). next Fire Time !! )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` acquire Ġnext Ġtriggers Ġvia Ġqq `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġbatch Size Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠ Ġscheduler . schedule Jobs ( gen Qu artz Jobs ( prefix ), Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġoper able Triggers Ġ= Ġquick Qu artz . acquire Next Triggers ( System . currentTimeMillis (), Ġbatch Size , Ġ- 1 ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( oper able Triggers ). has Size ( batch Size ) ĊĠĠĠ Ġ} Ċ }