From e716dbf8caeb905ad2e2bcc230214efeeb6595b9 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Wed, 22 Apr 2026 22:13:53 +0200 Subject: [PATCH] test(config): verify audit action in staged/live config IT Replace the misleading putConfig_staged_auditActionIsStagedAppConfig test (which only checked pushResult.total == 0, a duplicate of _savesButDoesNotPush) with two real audit-log assertions: one verifying "stage_app_config" is written for apply=staged and a new companion test verifying "update_app_config" for the live path. Uses jdbcTemplate to query audit_log directly (Option B). Co-Authored-By: Claude Sonnet 4.6 --- .../ApplicationConfigControllerIT.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 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 c5c2d6a1..e518c94f 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 @@ -6,8 +6,6 @@ import com.cameleer.server.app.TestSecurityHelper; import com.cameleer.server.app.storage.PostgresApplicationConfigRepository; import com.cameleer.server.core.agent.AgentRegistryService; import com.cameleer.server.core.agent.CommandType; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -37,7 +35,6 @@ class ApplicationConfigControllerIT extends AbstractPostgresIT { AgentRegistryService registryService; @Autowired private TestRestTemplate restTemplate; - @Autowired private ObjectMapper objectMapper; @Autowired private TestSecurityHelper securityHelper; @Autowired private PostgresApplicationConfigRepository configRepository; @@ -164,14 +161,30 @@ class ApplicationConfigControllerIT extends AbstractPostgresIT { } @Test - void putConfig_staged_auditActionIsStagedAppConfig() throws Exception { + void putConfig_staged_auditActionIsStagedAppConfig() { registerLiveAgent("audit-agent-" + UUID.randomUUID().toString().substring(0, 8)); ResponseEntity response = putConfig("staged"); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); - JsonNode body = objectMapper.readTree(response.getBody()); - // The response carries the saved config; no pushed agents - assertThat(body.path("pushResult").path("total").asInt()).isEqualTo(0); + + String action = jdbcTemplate.queryForObject( + "SELECT action FROM audit_log WHERE target = ? ORDER BY timestamp DESC LIMIT 1", + String.class, appSlug); + assertThat(action).isEqualTo("stage_app_config"); + } + + @Test + void putConfig_live_auditActionIsUpdateAppConfig() { + registerLiveAgent("audit-agent-live-" + UUID.randomUUID().toString().substring(0, 8)); + + ResponseEntity response = putConfig(null); + + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + + String action = jdbcTemplate.queryForObject( + "SELECT action FROM audit_log WHERE target = ? ORDER BY timestamp DESC LIMIT 1", + String.class, appSlug); + assertThat(action).isEqualTo("update_app_config"); } }