package Ġuk . gov . just ice . digital . h mp ps . h mp ps audit api . jpa Ċ Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . assertj . core . api . Assertions . within Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . test . autoconfigure . orm . jpa . Data Jpa Test Ċ import Ġorg . springframework . data . domain . Page Request Ċ import Ġorg . springframework . data . domain . Page able Ċ import Ġuk . gov . just ice . digital . h mp ps . h mp ps audit api . listeners . H MP P SA udit Listener . Audit Event Ċ import Ġjava . time . Instant Ċ import Ġjava . time . temporal . Ch rono Unit Ċ Ċ @ Data Jpa Test Ċ class ĠAudit Repository Test Ġ{ ĊĊĠ Ġ@ Autowired ĊĠ Ġlateinit Ġvar Ġaudit Repository : ĠAudit Repository ĊĊĠ Ġ@ After Each ĊĠ Ġfun Ġ` remove Ġtest Ġaudit Ġevents `() Ġ{ ĊĠĠĠ Ġaudit Repository . delete All () ĊĠ Ġ} ĊĊĠ Ġ@ Suppress (" ClassName ") ĊĠ Ġ@ Nested ĊĠ Ġinner Ġclass Ġsave Audit Events Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġ` can Ġwrite Ġto Ġrepository Ġwith Ġbasic Ġattributes `() Ġ{ ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" An ĠEvent Ġwith Ġbasic Ġattributes " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ ĠassertThat ( audit Repository . count ()). isEqualTo ( 1 ) ĊĠĠĠĠĠ Ġval Ġaudit Event Ġ= Ġaudit Repository . findAll (). first () ĊĊĠĠĠĠĠ ĠassertThat ( audit Event . id ). isNotNull ĊĠĠĠĠĠ ĠassertThat ( audit Event . what ). isEqualTo (" An ĠEvent Ġwith Ġbasic Ġattributes ") ĊĠĠĠĠĠ ĠassertThat ( audit Event .` when `). isNotNull ĊĠĠĠĠĠ ĠassertThat ( audit Event . operation Id ). isNull () ĊĠĠĠĠĠ ĠassertThat ( audit Event . who ). isNull () ĊĠĠĠĠĠ ĠassertThat ( audit Event . service ). isNull () ĊĠĠĠĠĠ ĠassertThat ( audit Event . details ). isNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġ` can Ġwrite Ġto Ġrepository Ġwith Ġall Ġattributes `() Ġ{ ĊĠĠĠĠĠ Ġval Ġdetails Ġ= Ġ""" ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" off ender Id ": Ġ" 9 9 " ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġval Ġnow Ġ= ĠInstant . now () ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" An ĠEvent Ġwith Ġall Ġattributes ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= Ġnow , ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 1 2 3 4 5 6 7 8 9 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" John ĠSmith ", ĊĠĠĠĠĠĠĠĠĠ Ġservice Ġ= Ġ" current - service ", ĊĠĠĠĠĠĠĠĠĠ Ġdetails Ġ= Ġdetails ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ ĠassertThat ( audit Repository . count ()). isEqualTo ( 1 ) ĊĠĠĠĠĠ Ġval Ġaudit Event Ġ= Ġaudit Repository . findAll (). first () ĊĠĠĠĠĠ ĠassertThat ( audit Event . id ). isNotNull ĊĠĠĠĠĠ ĠassertThat ( audit Event . what ). isEqualTo (" An ĠEvent Ġwith Ġall Ġattributes ") ĊĠĠĠĠĠ ĠassertThat ( audit Event .` when `). is Close To ( now , Ġwithin ( 1 , ĠCh rono Unit . MIC ROS )) ĊĠĠĠĠĠ ĠassertThat ( audit Event . operation Id ). isEqualTo (" 1 2 3 4 5 6 7 8 9 ") ĊĠĠĠĠĠ ĠassertThat ( audit Event . who ). isEqualTo (" John ĠSmith ") ĊĠĠĠĠĠ ĠassertThat ( audit Event . service ). isEqualTo (" current - service ") ĊĠĠĠĠĠ ĠassertThat ( audit Event . details ). isEqualTo ( details ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Suppress (" ClassName ") ĊĠ Ġ@ Nested ĊĠ Ġinner Ġclass Ġpage d Audit Events Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġ` find Ġpage d Ġaudit Ġevents `() Ġ{ ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" An ĠEvent ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 1 2 3 4 5 6 7 8 9 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" John ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" Another ĠEvent ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 3 4 5 6 7 8 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" F red ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" Another ĠEvent ĠBy ĠJohn ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 2 3 4 5 6 7 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" John ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ ĠassertThat ( audit Repository . count ()). isEqualTo ( 3 ) ĊĠĠĠĠĠ Ġval Ġfirst Page Ġ= Ġaudit Repository . find Page ( Page Request . of ( 0 , Ġ 2 ), Ġnull , Ġnull ) ĊĠĠĠĠĠ ĠassertThat ( first Page . numberOf Elements ). isEqualTo ( 2 ) ĊĊĠĠĠĠĠ Ġval Ġsecond Page Ġ= Ġaudit Repository . find Page ( Page Request . of ( 1 , Ġ 2 ), Ġnull , Ġnull ) ĊĠĠĠĠĠ ĠassertThat ( second Page . numberOf Elements ). isEqualTo ( 1 ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Suppress (" ClassName ") ĊĠ Ġ@ Nested ĊĠ Ġinner Ġclass Ġfiltered Audit Events Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġ` filter Ġaudit Ġevents Ġby Ġwho `() Ġ{ ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" An ĠEvent ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 1 2 3 4 5 6 7 8 9 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" John ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" Another ĠEvent ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 3 4 5 6 7 8 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" F red ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" Another ĠEvent ĠBy ĠJohn ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 2 3 4 5 6 7 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" John ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ ĠassertThat ( audit Repository . count ()). isEqualTo ( 3 ) ĊĠĠĠĠĠ Ġval Ġaudit Events Ġ= Ġaudit Repository . find Page ( Page able . un page d (), Ġ" John ĠSmith ", Ġnull ) ĊĠĠĠĠĠ ĠassertThat ( audit Events . total Elements ). isEqualTo ( 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġ` filter Ġaudit Ġevents Ġby Ġwho Ġwhen Ġno Ġmatch `() Ġ{ ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" An ĠEvent ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 1 2 3 4 5 6 7 8 9 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" John ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" Another ĠEvent ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 3 4 5 6 7 8 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" F red ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" Another ĠEvent ĠBy ĠJohn ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 2 3 4 5 6 7 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" John ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ ĠassertThat ( audit Repository . count ()). isEqualTo ( 3 ) ĊĠĠĠĠĠ Ġval Ġaudit Events Ġ= Ġaudit Repository . find Page ( Page able . un page d (), Ġ" No Ġmatch ", Ġnull ) ĊĠĠĠĠĠ ĠassertThat ( audit Events . total Elements ). isEqualTo ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġ` filter Ġaudit Ġevents Ġby Ġwhat `() Ġ{ ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" An ĠEvent ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 1 2 3 4 5 6 7 8 9 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" John ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" Another ĠEvent ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 3 4 5 6 7 8 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" F red ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" Another ĠEvent ĠBy ĠJohn ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 2 3 4 5 6 7 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" John ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ ĠassertThat ( audit Repository . count ()). isEqualTo ( 3 ) ĊĠĠĠĠĠ Ġval Ġaudit Events Ġ= Ġaudit Repository . find Page ( Page able . un page d (), Ġwhat Ġ= Ġ" Another ĠEvent ", Ġwho Ġ= Ġnull ) ĊĠĠĠĠĠ ĠassertThat ( audit Events . total Elements ). isEqualTo ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġ` filter Ġaudit Ġevents Ġby Ġwhat Ġwhen Ġno Ġmatch `() Ġ{ ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" An ĠEvent ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 1 2 3 4 5 6 7 8 9 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" John ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" Another ĠEvent ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 3 4 5 6 7 8 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" F red ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" Another ĠEvent ĠBy ĠJohn ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 2 3 4 5 6 7 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" John ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ ĠassertThat ( audit Repository . count ()). isEqualTo ( 3 ) ĊĠĠĠĠĠ Ġval Ġaudit Events Ġ= Ġaudit Repository . find Page ( Page able . un page d (), Ġnull , Ġ" No Ġmatch ") ĊĠĠĠĠĠ ĠassertThat ( audit Events . total Elements ). isEqualTo ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġ` filter Ġaudit Ġevents Ġby Ġwhat Ġand Ġwho `() Ġ{ ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" An ĠEvent ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 1 2 3 4 5 6 7 8 9 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" John ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" Another ĠEvent ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 3 4 5 6 7 8 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" F red ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġaudit Repository . save ( ĊĠĠĠĠĠĠĠ ĠAudit Event ( ĊĠĠĠĠĠĠĠĠĠ Ġwhat Ġ= Ġ" Another ĠEvent ĠBy ĠJohn ", ĊĠĠĠĠĠĠĠĠĠ Ġ` when ` Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠ Ġoperation Id Ġ= Ġ" 2 3 4 5 6 7 ", ĊĠĠĠĠĠĠĠĠĠ Ġwho Ġ= Ġ" John ĠSmith ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ ĠassertThat ( audit Repository . count ()). isEqualTo ( 3 ) ĊĠĠĠĠĠ Ġval Ġaudit Events Ġ= Ġaudit Repository . find Page ( Page able . un page d (), Ġ" John ĠSmith ", Ġ" Another ĠEvent ĠBy ĠJohn ") ĊĠĠĠĠĠ ĠassertThat ( audit Events . total Elements ). isEqualTo ( 1 ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ