From 76352c0d6f2abc0b7700f4577cbc9438b55389d3 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Wed, 22 Apr 2026 22:18:44 +0200 Subject: [PATCH] test(config): tighten audit assertions + @DirtiesContext on ApplicationConfigControllerIT - Add @DirtiesContext(AFTER_CLASS) so the SpyBean-forked context is torn down after the 6 tests finish, preventing permanent cache pollution - Replace single-row queryForObject with queryForList + hasSize(1) in both audit tests so spurious extra rows will fail explicitly - Assert auditCount == 0 in the 400 test to lock in the no-audit-on-bad-input invariant Co-Authored-By: Claude Sonnet 4.6 --- .../ApplicationConfigControllerIT.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ApplicationConfigControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ApplicationConfigControllerIT.java index e518c94f..2cd134eb 100644 --- a/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ApplicationConfigControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ApplicationConfigControllerIT.java @@ -16,7 +16,10 @@ import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.ClassMode; +import java.util.List; import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; @@ -25,6 +28,7 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; +@DirtiesContext(classMode = ClassMode.AFTER_CLASS) class ApplicationConfigControllerIT extends AbstractPostgresIT { /** @@ -158,6 +162,10 @@ class ApplicationConfigControllerIT extends AbstractPostgresIT { void putConfig_unknownApplyValue_returns400() { ResponseEntity response = putConfig("BOGUS"); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.BAD_REQUEST); + + int auditCount = jdbcTemplate.queryForObject( + "SELECT COUNT(*) FROM audit_log WHERE target = ?", Integer.class, appSlug); + assertThat(auditCount).isZero(); } @Test @@ -168,10 +176,11 @@ class ApplicationConfigControllerIT extends AbstractPostgresIT { assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); - String action = jdbcTemplate.queryForObject( - "SELECT action FROM audit_log WHERE target = ? ORDER BY timestamp DESC LIMIT 1", + List actions = jdbcTemplate.queryForList( + "SELECT action FROM audit_log WHERE target = ? ORDER BY timestamp DESC", String.class, appSlug); - assertThat(action).isEqualTo("stage_app_config"); + assertThat(actions).hasSize(1); + assertThat(actions.get(0)).isEqualTo("stage_app_config"); } @Test @@ -182,9 +191,10 @@ class ApplicationConfigControllerIT extends AbstractPostgresIT { assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); - String action = jdbcTemplate.queryForObject( - "SELECT action FROM audit_log WHERE target = ? ORDER BY timestamp DESC LIMIT 1", + List actions = jdbcTemplate.queryForList( + "SELECT action FROM audit_log WHERE target = ? ORDER BY timestamp DESC", String.class, appSlug); - assertThat(action).isEqualTo("update_app_config"); + assertThat(actions).hasSize(1); + assertThat(actions.get(0)).isEqualTo("update_app_config"); } }