Skip to content

Commit c3f1b47

Browse files
Copilotphrocker
andcommitted
Add comprehensive test for ATPL policy controller endpoints
Co-authored-by: phrocker <[email protected]>
1 parent ce6652a commit c3f1b47

File tree

1 file changed

+127
-0
lines changed

1 file changed

+127
-0
lines changed
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
package io.sentrius.sso.controllers.api;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import io.sentrius.sso.core.services.ATPLPolicyService;
5+
import io.sentrius.sso.core.trust.ATPLPolicy;
6+
import org.junit.jupiter.api.BeforeEach;
7+
import org.junit.jupiter.api.Test;
8+
import org.junit.jupiter.api.extension.ExtendWith;
9+
import org.mockito.Mock;
10+
import org.mockito.junit.jupiter.MockitoExtension;
11+
import org.springframework.http.HttpStatus;
12+
import org.springframework.http.ResponseEntity;
13+
14+
import java.util.Map;
15+
import java.util.HashMap;
16+
17+
import static org.junit.jupiter.api.Assertions.*;
18+
import static org.mockito.ArgumentMatchers.any;
19+
import static org.mockito.Mockito.*;
20+
21+
@ExtendWith(MockitoExtension.class)
22+
class ATPLPolicyControllerTest {
23+
24+
@Mock
25+
private ATPLPolicyService policyService;
26+
27+
private ATPLPolicyController controller;
28+
29+
@BeforeEach
30+
void setUp() {
31+
controller = new ATPLPolicyController(policyService);
32+
}
33+
34+
@Test
35+
void uploadValidPolicyReturnsSuccess() {
36+
String validPolicy = """
37+
{
38+
"version": "v0",
39+
"policy_id": "test-policy",
40+
"description": "Test policy"
41+
}
42+
""";
43+
44+
when(policyService.savePolicy(any(ATPLPolicy.class))).thenReturn(null);
45+
46+
ResponseEntity<?> result = controller.uploadPolicy(validPolicy);
47+
48+
assertEquals(HttpStatus.CREATED, result.getStatusCode());
49+
assertEquals("Policy uploaded successfully.", result.getBody());
50+
verify(policyService).savePolicy(any(ATPLPolicy.class));
51+
}
52+
53+
@Test
54+
void uploadInvalidPolicyReturnsBadRequest() {
55+
String invalidPolicy = """
56+
{
57+
"description": "Missing required fields"
58+
}
59+
""";
60+
61+
ResponseEntity<?> result = controller.uploadPolicy(invalidPolicy);
62+
63+
assertEquals(HttpStatus.BAD_REQUEST, result.getStatusCode());
64+
assertTrue(result.getBody().toString().contains("Missing required fields"));
65+
verify(policyService, never()).savePolicy(any(ATPLPolicy.class));
66+
}
67+
68+
@Test
69+
void validateValidPolicyReturnsSuccess() {
70+
ATPLPolicy validPolicy = ATPLPolicy.builder()
71+
.version("v0")
72+
.policyId("test-policy")
73+
.build();
74+
75+
ResponseEntity<?> result = controller.validatePolicy(validPolicy);
76+
77+
assertEquals(HttpStatus.OK, result.getStatusCode());
78+
79+
@SuppressWarnings("unchecked")
80+
Map<String, Object> responseBody = (Map<String, Object>) result.getBody();
81+
assertTrue((Boolean) responseBody.get("valid"));
82+
}
83+
84+
@Test
85+
void measureAgentComplianceReturnsResult() {
86+
ATPLPolicy mockPolicy = ATPLPolicy.builder()
87+
.version("v0")
88+
.policyId("test-policy")
89+
.build();
90+
91+
when(policyService.getPolicy("test-policy")).thenReturn(mockPolicy);
92+
93+
Map<String, Object> measurementRequest = new HashMap<>();
94+
measurementRequest.put("policy_id", "test-policy");
95+
measurementRequest.put("agent_activity", new HashMap<>());
96+
97+
ResponseEntity<?> result = controller.measureAgentCompliance(measurementRequest);
98+
99+
assertEquals(HttpStatus.OK, result.getStatusCode());
100+
101+
@SuppressWarnings("unchecked")
102+
Map<String, Object> responseBody = (Map<String, Object>) result.getBody();
103+
assertEquals("test-policy", responseBody.get("policy_id"));
104+
assertTrue(responseBody.containsKey("compliance_score"));
105+
verify(policyService).getPolicy("test-policy");
106+
}
107+
108+
@Test
109+
void measureAgentComplianceWithMissingPolicyReturnsNotFound() {
110+
when(policyService.getPolicy("nonexistent-policy")).thenReturn(null);
111+
112+
Map<String, Object> measurementRequest = new HashMap<>();
113+
measurementRequest.put("policy_id", "nonexistent-policy");
114+
measurementRequest.put("agent_activity", new HashMap<>());
115+
116+
ResponseEntity<?> result = controller.measureAgentCompliance(measurementRequest);
117+
118+
assertEquals(HttpStatus.NOT_FOUND, result.getStatusCode());
119+
assertEquals("Policy not found", result.getBody());
120+
}
121+
122+
@Test
123+
void controllerCanBeInstantiated() {
124+
ATPLPolicyController testController = new ATPLPolicyController(policyService);
125+
assertNotNull(testController);
126+
}
127+
}

0 commit comments

Comments
 (0)