Skip to content

Commit 9150722

Browse files
implement unit tests for remaining features
1 parent 2bf2b3a commit 9150722

File tree

12 files changed

+674
-232
lines changed

12 files changed

+674
-232
lines changed

src/main/java/cv/igrp/platform/access_management/authorization/application/commands/handler/SingleCheckAuthorizationHandler.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import cv.igrp.platform.access_management.authorization.application.dto.PermissionCheckResponseDTO;
77
import org.springframework.stereotype.Service;
88

9+
import java.util.Arrays;
910
import java.util.concurrent.ExecutionException;
1011

1112
@Service
@@ -33,6 +34,8 @@ public PermissionCheckResponseDTO checkAuthorization(String username, String act
3334
responseDto.setResolutionTimeMs(permissionCheckResponse.getResolutionTimeMs());
3435
return responseDto;
3536
} catch (InterruptedException | ExecutionException e) {
37+
System.err.println(e.getMessage());
38+
System.err.println(Arrays.toString(e.getStackTrace()));
3639
throw new RuntimeException(e);
3740
}
3841
}
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,97 @@
11
package cv.igrp.platform.access_management.authorization.application.commands;
22

3-
import static org.mockito.Mockito.*;
4-
import static org.junit.jupiter.api.Assertions.*;
5-
3+
import cv.igrp.platform.access_management.authorization.application.commands.handler.SingleCheckAuthorizationHandler;
4+
import cv.igrp.platform.access_management.authorization.application.dto.PermissionCheckRequestDTO;
5+
import cv.igrp.platform.access_management.authorization.application.dto.PermissionCheckResponseDTO;
6+
import cv.igrp.platform.access_management.shared.security.AuthenticationHelper;
67
import org.junit.jupiter.api.BeforeEach;
78
import org.junit.jupiter.api.Test;
89
import org.junit.jupiter.api.extension.ExtendWith;
910
import org.mockito.InjectMocks;
11+
import org.mockito.Mock;
1012
import org.mockito.junit.jupiter.MockitoExtension;
1113
import org.springframework.http.ResponseEntity;
12-
import cv.igrp.platform.access_management.authorization.application.commands.*;
13-
import cv.igrp.platform.access_management.authorization.application.commands.*;
1414

15+
import java.util.List;
16+
17+
import static org.junit.jupiter.api.Assertions.*;
18+
import static org.mockito.Mockito.*;
19+
20+
/**
21+
* Unit tests for {@link BatchCheckAuthorizationCommandHandler}.
22+
*/
1523
@ExtendWith(MockitoExtension.class)
16-
public class BatchCheckAuthorizationCommandHandlerTest {
24+
class BatchCheckAuthorizationCommandHandlerTest {
25+
26+
@Mock
27+
private AuthenticationHelper authenticationHelper;
28+
29+
@Mock
30+
private SingleCheckAuthorizationHandler singleCheckAuthorizationHandler;
1731

1832
@InjectMocks
19-
private BatchCheckAuthorizationCommandHandler batchCheckAuthorizationCommandHandler;
33+
private BatchCheckAuthorizationCommandHandler handler;
34+
35+
private BatchCheckAuthorizationCommand command;
36+
private PermissionCheckResponseDTO response1;
37+
private PermissionCheckResponseDTO response2;
2038

2139
@BeforeEach
2240
void setUp() {
23-
// TODO: initialize mock dependencies if needed
41+
// Prepare mock request DTOs
42+
PermissionCheckRequestDTO dto1 = new PermissionCheckRequestDTO();
43+
dto1.setAction("read");
44+
dto1.setResource("document");
45+
46+
PermissionCheckRequestDTO dto2 = new PermissionCheckRequestDTO();
47+
dto2.setAction("write");
48+
dto2.setResource("report");
49+
50+
command = new BatchCheckAuthorizationCommand();
51+
command.setPermissioncheckrequest(List.of(dto1, dto2));
52+
53+
// Prepare mock responses
54+
response1 = new PermissionCheckResponseDTO();
55+
response1.setAllowed(true);
56+
response1.setReason("Allowed by admin role");
57+
58+
response2 = new PermissionCheckResponseDTO();
59+
response2.setAllowed(false);
60+
response2.setReason("Insufficient permissions");
61+
}
62+
63+
@Test
64+
void testHandle_ShouldReturnListOfResponses() {
65+
when(authenticationHelper.getPreferredUsername()).thenReturn("john");
66+
when(singleCheckAuthorizationHandler.checkAuthorization("john", "read", "document")).thenReturn(response1);
67+
when(singleCheckAuthorizationHandler.checkAuthorization("john", "write", "report")).thenReturn(response2);
68+
69+
ResponseEntity<List<PermissionCheckResponseDTO>> result = handler.handle(command);
70+
71+
assertNotNull(result);
72+
assertNotNull(result.getBody());
73+
assertEquals(2, result.getBody().size());
74+
assertEquals(response1, result.getBody().get(0));
75+
assertEquals(response2, result.getBody().get(1));
76+
77+
verify(authenticationHelper).getPreferredUsername();
78+
verify(singleCheckAuthorizationHandler, times(2)).checkAuthorization(anyString(), anyString(), anyString());
2479
}
2580

2681
@Test
27-
void testHandle() {
28-
// TODO: Implement unit test for handle method
29-
// Example:
30-
// Given
31-
// BatchCheckAuthorizationCommand command = new BatchCheckAuthorizationCommand(...);
32-
//
33-
// When
34-
// ResponseEntity<List<PermissionCheckResponseDTO>> response = batchCheckAuthorizationCommandHandler.handle(command);
35-
//
36-
// Then
37-
// assertNotNull(response);
38-
// assertEquals(..., response.getBody());
82+
void testHandle_WithEmptyRequests_ShouldReturnEmptyList() {
83+
BatchCheckAuthorizationCommand emptyCommand = new BatchCheckAuthorizationCommand();
84+
emptyCommand.setPermissioncheckrequest(List.of());
85+
86+
when(authenticationHelper.getPreferredUsername()).thenReturn("john");
87+
88+
ResponseEntity<List<PermissionCheckResponseDTO>> result = handler.handle(emptyCommand);
89+
90+
assertNotNull(result);
91+
assertNotNull(result.getBody());
92+
assertTrue(result.getBody().isEmpty());
93+
94+
verify(authenticationHelper).getPreferredUsername();
95+
verifyNoInteractions(singleCheckAuthorizationHandler);
3996
}
4097
}
Lines changed: 61 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,80 @@
11
package cv.igrp.platform.access_management.authorization.application.commands;
22

3-
import static org.mockito.Mockito.*;
4-
import static org.junit.jupiter.api.Assertions.*;
5-
3+
import cv.igrp.platform.access_management.authorization.application.commands.handler.SingleCheckAuthorizationHandler;
4+
import cv.igrp.platform.access_management.authorization.application.dto.PermissionCheckRequestDTO;
5+
import cv.igrp.platform.access_management.authorization.application.dto.PermissionCheckResponseDTO;
6+
import cv.igrp.platform.access_management.shared.security.AuthenticationHelper;
67
import org.junit.jupiter.api.BeforeEach;
78
import org.junit.jupiter.api.Test;
89
import org.junit.jupiter.api.extension.ExtendWith;
910
import org.mockito.InjectMocks;
11+
import org.mockito.Mock;
1012
import org.mockito.junit.jupiter.MockitoExtension;
13+
import org.springframework.http.HttpStatus;
1114
import org.springframework.http.ResponseEntity;
12-
import cv.igrp.platform.access_management.authorization.application.commands.*;
13-
import cv.igrp.platform.access_management.authorization.application.commands.*;
1415

16+
import java.util.List;
17+
18+
import static org.mockito.Mockito.*;
19+
import static org.junit.jupiter.api.Assertions.*;
20+
21+
/**
22+
* Tests {@link CheckAuthorizationCommandHandler}.
23+
*/
1524
@ExtendWith(MockitoExtension.class)
16-
public class CheckAuthorizationCommandHandlerTest {
25+
class CheckAuthorizationCommandHandlerTest {
26+
27+
@Mock
28+
private AuthenticationHelper authenticationHelper;
29+
30+
@Mock
31+
private SingleCheckAuthorizationHandler singleCheckAuthorizationHandler;
1732

1833
@InjectMocks
19-
private CheckAuthorizationCommandHandler checkAuthorizationCommandHandler;
34+
private CheckAuthorizationCommandHandler handler;
35+
36+
private CheckAuthorizationCommand command;
2037

2138
@BeforeEach
2239
void setUp() {
23-
// TODO: initialize mock dependencies if needed
40+
var request = new PermissionCheckRequestDTO();
41+
request.setAction("read");
42+
request.setResource("document");
43+
command = new CheckAuthorizationCommand(request);
2444
}
2545

2646
@Test
27-
void testHandle() {
28-
// TODO: Implement unit test for handle method
29-
// Example:
30-
// Given
31-
// CheckAuthorizationCommand command = new CheckAuthorizationCommand(...);
32-
//
33-
// When
34-
// ResponseEntity<String> response = checkAuthorizationCommandHandler.handle(command);
35-
//
36-
// Then
37-
// assertNotNull(response);
38-
// assertEquals(..., response.getBody());
47+
void testHandle_ShouldReturnOkResponseWithExpectedBody() {
48+
String username = "john.doe";
49+
PermissionCheckResponseDTO expectedResponse = new PermissionCheckResponseDTO();
50+
expectedResponse.setAllowed(true);
51+
expectedResponse.setViaRoles(List.of("ADMIN"));
52+
53+
when(authenticationHelper.getPreferredUsername()).thenReturn(username);
54+
when(singleCheckAuthorizationHandler.checkAuthorization(username, "read", "document"))
55+
.thenReturn(expectedResponse);
56+
57+
ResponseEntity<PermissionCheckResponseDTO> response = handler.handle(command);
58+
59+
assertNotNull(response);
60+
assertEquals(HttpStatus.OK, response.getStatusCode());
61+
assertEquals(expectedResponse, response.getBody());
62+
63+
verify(authenticationHelper).getPreferredUsername();
64+
verify(singleCheckAuthorizationHandler).checkAuthorization(username, "read", "document");
65+
}
66+
67+
@Test
68+
void testHandle_WhenHandlerReturnsNull_ShouldStillReturnOkResponse() {
69+
String username = "jane.doe";
70+
when(authenticationHelper.getPreferredUsername()).thenReturn(username);
71+
when(singleCheckAuthorizationHandler.checkAuthorization(username, "read", "document"))
72+
.thenReturn(null);
73+
74+
ResponseEntity<PermissionCheckResponseDTO> response = handler.handle(command);
75+
76+
assertNotNull(response);
77+
assertEquals(HttpStatus.OK, response.getStatusCode());
78+
assertNull(response.getBody());
3979
}
40-
}
80+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package cv.igrp.platform.access_management.authorization.application.commands.handler;
2+
3+
import cv.igrp.framework.auth.core.authorization.model.PermissionCheckRequest;
4+
import cv.igrp.framework.auth.core.authorization.model.PermissionCheckResponse;
5+
import cv.igrp.framework.auth.core.authorization.service.AuthorizationCore;
6+
import cv.igrp.platform.access_management.authorization.application.dto.PermissionCheckResponseDTO;
7+
import org.junit.jupiter.api.BeforeEach;
8+
import org.junit.jupiter.api.Test;
9+
import org.junit.jupiter.api.extension.ExtendWith;
10+
import org.mockito.InjectMocks;
11+
import org.mockito.Mock;
12+
import org.mockito.junit.jupiter.MockitoExtension;
13+
14+
import java.util.List;
15+
import java.util.concurrent.CompletableFuture;
16+
import java.util.concurrent.ExecutionException;
17+
18+
import static org.mockito.Mockito.*;
19+
import static org.junit.jupiter.api.Assertions.*;
20+
21+
/**
22+
* Unit tests for {@link SingleCheckAuthorizationHandler}.
23+
*/
24+
@ExtendWith(MockitoExtension.class)
25+
class SingleCheckAuthorizationHandlerTest {
26+
27+
@Mock
28+
private AuthorizationCore authorizationCore;
29+
30+
@InjectMocks
31+
private SingleCheckAuthorizationHandler handler;
32+
33+
private PermissionCheckResponse permissionCheckResponse;
34+
35+
@BeforeEach
36+
void setUp() {
37+
permissionCheckResponse = new PermissionCheckResponse();
38+
permissionCheckResponse.setAllowed(true);
39+
permissionCheckResponse.setViaRoles(List.of("ADMIN"));
40+
permissionCheckResponse.setReason("Access granted");
41+
permissionCheckResponse.setCacheHit(true);
42+
permissionCheckResponse.setResolutionTimeMs(12);
43+
}
44+
45+
@Test
46+
void testCheckAuthorization_ShouldReturnValidResponse() {
47+
when(authorizationCore.check(any(PermissionCheckRequest.class)))
48+
.thenReturn(CompletableFuture.completedFuture(permissionCheckResponse));
49+
50+
PermissionCheckResponseDTO dto = handler.checkAuthorization("john", "read", "document");
51+
52+
assertNotNull(dto);
53+
assertTrue(dto.isAllowed());
54+
assertEquals(List.of("ADMIN"), dto.getViaRoles());
55+
assertEquals("Access granted", dto.getReason());
56+
assertTrue(dto.isCacheHit());
57+
assertEquals(12, dto.getResolutionTimeMs());
58+
}
59+
60+
@Test
61+
void testCheckAuthorization_WhenFutureThrowsException_ShouldWrapAndThrowRuntimeException() {
62+
// Mock the async call to throw an ExecutionException when .get() is called
63+
CompletableFuture<PermissionCheckResponse> failedFuture = new CompletableFuture<>();
64+
failedFuture.completeExceptionally(new RuntimeException("Backend failure"));
65+
when(authorizationCore.check(any(PermissionCheckRequest.class))).thenReturn(failedFuture);
66+
67+
RuntimeException ex = assertThrows(RuntimeException.class, () ->
68+
handler.checkAuthorization("john", "read", "document")
69+
);
70+
71+
assertInstanceOf(ExecutionException.class, ex.getCause());
72+
assertInstanceOf(RuntimeException.class, ex.getCause().getCause());
73+
assertEquals("Backend failure", ex.getCause().getCause().getMessage());
74+
}
75+
}

0 commit comments

Comments
 (0)