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