75 lines
2.7 KiB
Java
75 lines
2.7 KiB
Java
package com.baiyue.audit.controller;
|
|
|
|
import com.baiyue.audit.service.AuditIngestService;
|
|
import jakarta.annotation.Resource;
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.springframework.boot.test.mock.mockito.MockBean;
|
|
import org.springframework.http.MediaType;
|
|
import org.springframework.test.context.TestPropertySource;
|
|
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
|
|
import org.springframework.test.web.servlet.MockMvc;
|
|
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
|
|
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
import static org.mockito.Mockito.never;
|
|
import static org.mockito.Mockito.verify;
|
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
|
|
|
@SpringJUnitConfig(AuditIngestController.class)
|
|
@TestPropertySource(properties = "baiyue.security.internal-service-token=0123456789abcdef0123456789abcdef")
|
|
class AuditIngestControllerTest {
|
|
private static final String TOKEN = "0123456789abcdef0123456789abcdef";
|
|
|
|
@MockBean
|
|
private AuditIngestService service;
|
|
|
|
@Resource
|
|
private AuditIngestController controller;
|
|
|
|
private MockMvc mockMvc;
|
|
|
|
@BeforeEach
|
|
void setUp() {
|
|
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
|
|
}
|
|
|
|
@Test
|
|
void rejectsInvalidInternalToken() throws Exception {
|
|
mockMvc.perform(post("/internal/audit/events")
|
|
.header("X-Internal-Service-Token", "wrong-token")
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content(validRequest()))
|
|
.andExpect(status().isForbidden())
|
|
.andExpect(jsonPath("$.code").value("A0403"));
|
|
|
|
verify(service, never()).ingest(any());
|
|
}
|
|
|
|
@Test
|
|
void acceptsEventWithInternalToken() throws Exception {
|
|
mockMvc.perform(post("/internal/audit/events")
|
|
.header("X-Internal-Service-Token", TOKEN)
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content(validRequest()))
|
|
.andExpect(status().isAccepted())
|
|
.andExpect(jsonPath("$.code").value("200"));
|
|
|
|
verify(service).ingest(any());
|
|
}
|
|
|
|
private String validRequest() {
|
|
return """
|
|
{
|
|
"eventType":"ROLE_UPDATE",
|
|
"resourceType":"ROLE",
|
|
"durationMs":0,
|
|
"success":true,
|
|
"occurredAt":"2026-08-05T00:00:00Z"
|
|
}
|
|
""";
|
|
}
|
|
}
|