/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 ĠDaniel ĠA har on Ċ Ġ*/ Ċ Ċ package Ġus . ah aron . s md f . core . backend Ċ Ċ import Ġcloud . local stack . Local stack Extension Ċ import Ġcom . amazonaws . services . dynamodb v 2 . data modeling . D ynamoDB Mapper Ċ import Ġcom . amazonaws . services . dynamodb v 2 . data modeling . D ynamoDB Query Expression Ċ import Ġcom . amazonaws . services . dynamodb v 2 . data modeling . D ynamoDB Scan Expression Ċ import Ġcom . amazonaws . services . dynamodb v 2 . model . AttributeValue Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ import Ġorg . junit . jupiter . api . extension . Extensions Ċ import Ġorg . k oin . test . inject Ċ import Ġorg . k oin . test . K oin Test Ċ Ċ import Ġus . ah aron . s md f . core . common . SQ ST est Event Ċ import Ġus . ah aron . s md f . core . db . Check Result Record Ċ import Ġus . ah aron . s md f . core . db . Check Result Status Ċ import Ġus . ah aron . s md f . core . extensions . D ynamoDB Table Extension Ċ import Ġus . ah aron . s md f . core . extensions . Load Modules Extension Ċ Ċ import Ġjava . time . Z onedDateTime Ċ import Ġkotlin . test . assertEquals ĊĊ Ċ @ Extensions ( ĊĠĠĠ ĠExtend With ( Local stack Extension :: class ), ĊĠĠĠ ĠExtend With ( Load Modules Extension :: class ), ĊĠĠĠ ĠExtend With ( D ynamoDB Table Extension :: class )) Ċ class ĠCheck Result Receiver Test Ġ: ĠK oin Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdb : ĠD ynamoDB Mapper Ġby Ġinject () ĊĠĠĠ Ġprivate Ġval Ġsingle Test Event Ġ= ĠS Q ST est Event ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" scheduled At " Ġto Ġ" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 7 : 4 4 Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" executed At " Ġto Ġ" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 8 : 0 0 Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" completed At " Ġto Ġ" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 9 : 0 0 Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" group " Ġto Ġ" test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġ" simple _ check ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" source " Ġto Ġ" test - client - 1 . example . com ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status " Ġto ĠCheck Result Status . OK . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" output " Ġto Ġ" OK : ĠThis Ġcheck Ġis ĠA - OK " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ)) ĊĠĠĠ Ġprivate Ġval Ġmultiple Test Events Ġ= ĠS Q ST est Event ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" scheduled At " Ġto Ġ" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 7 : 4 4 Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" executed At " Ġto Ġ" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 8 : 0 0 Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" completed At " Ġto Ġ" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 9 : 0 0 Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" group " Ġto Ġ" test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġ" ok _ check ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" source " Ġto Ġ" test - client - 1 . example . com ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status " Ġto ĠCheck Result Status . OK . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" output " Ġto Ġ" OK : ĠThis Ġcheck Ġis ĠA - OK ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" scheduled At " Ġto Ġ" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 7 : 4 4 Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" executed At " Ġto Ġ" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 8 : 0 0 Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" completed At " Ġto Ġ" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 9 : 0 0 Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" group " Ġto Ġ" test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġ" warning _ check ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" source " Ġto Ġ" test - client - 1 . example . com ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status " Ġto ĠCheck Result Status . WARNING . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" output " Ġto Ġ" WARNING : ĠWe 're Ġheading Ġfor Ġa Ġbad Ġtime ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" scheduled At " Ġto Ġ" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 7 : 4 4 Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" executed At " Ġto Ġ" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 8 : 0 0 Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" completed At " Ġto Ġ" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 9 : 0 0 Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" group " Ġto Ġ" test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġ" critical _ check ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" source " Ġto Ġ" test - client - 1 . example . com ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status " Ġto ĠCheck Result Status . CRITICAL . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" output " Ġto Ġ" CRITICAL : ĠThis Ġcheck Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" scheduled At " Ġto Ġ" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 7 : 4 4 Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" executed At " Ġto Ġ" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 8 : 0 0 Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" completed At " Ġto Ġ" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 9 : 0 0 Z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" group " Ġto Ġ" test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġ" unknown _ check ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" source " Ġto Ġ" test - client - 1 . example . com ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status " Ġto ĠCheck Result Status . UNKNOWN . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" output " Ġto Ġ" UNKNOWN : ĠThis Ġcheck Ġdid Ġnot Ġrun ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ)) ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Receive Ġa Ġsingle Ġcheck Ġresult `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRun Ġthe ĠLambda Ġhandler . ĊĠĠĠĠĠĠĠ ĠCheck Result Receiver (). run ( single Test Event ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠQuery Ġthe Ġdatabase Ġto Ġverify Ġthat Ġthe Ġexpected Ġdata Ġis Ġsaved . ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠD ynamoDB Query Expression < Check Result Record >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Key Condition Expression ("# pk Ġ= Ġ: result Id Ġand Ġ# sk Ġ= Ġ: completed At ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Expression Attribute Values ( map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": result Id " Ġto ĠAttribute Value ( Check Result Record . generate Result Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" test ", Ġ" simple _ check ", Ġ" test - client - 1 . example . com ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": completed At " Ġto ĠAttribute Value (" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 9 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Expression Attribute Names ( map Of ("# pk " Ġto Ġ" pk ", Ġ"# sk " Ġto Ġ" sk ")) ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġdb . query ( Check Result Record :: class . java , Ġquery ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġresults . size ) ĊĠĠĠĠĠĠĠ Ġwith ( results . first ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" test ", Ġthis . group ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" simple _ check ", Ġthis . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" test - client - 1 . example . com ", Ġthis . source ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Z onedDateTime . parse (" 2 0 1 8 - 0 8 - 2 3 T 1 1 : 3 9 : 0 0 Z "), Ġthis . completed At ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Check Result Status . OK , Ġthis . status ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK : ĠThis Ġcheck Ġis ĠA - OK ", Ġthis . output ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Receive Ġmultiple Ġcheck Ġresults `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRun Ġthe ĠLambda Ġhandler . ĊĠĠĠĠĠĠĠ ĠCheck Result Receiver (). run ( multiple Test Events ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠScan Ġthe Ġdatabase Ġto Ġverify Ġthat Ġthe Ġevents Ġwere Ġsaved . ĊĠĠĠĠĠĠĠ Ġval Ġscan Ġ= ĠD ynamoDB Scan Expression () ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġdb . scan ( Check Result Record :: class . java , Ġscan ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 , Ġresults . size ) ĊĠĠĠ Ġ} Ċ } Ċ