Skip to content

Commit 2eb6270

Browse files
committed
2024-10-22 - feedback - external reviewer - server-side
1 parent f8cee94 commit 2eb6270

File tree

5 files changed

+195
-23
lines changed

5 files changed

+195
-23
lines changed

server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ public void delete(@NotNull UUID id) {
9696
* @param id {@link UUID} ID of the request
9797
* @return {@link FeedbackRequestResponseDTO}
9898
*/
99+
//@Secured(SecurityRule.IS_ANONYMOUS)
99100
@Get("/{id}")
100101
@RequiredPermission(Permission.CAN_VIEW_FEEDBACK_REQUEST)
101102
public HttpResponse<FeedbackRequestResponseDTO> getById(UUID id) {

server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -330,10 +330,16 @@ public FeedbackRequest getById(UUID id) {
330330
}
331331
final LocalDate sendDate = feedbackReq.get().getSendDate();
332332
final UUID requesteeId = feedbackReq.get().getRequesteeId();
333-
final UUID recipientId;
334-
recipientId = feedbackReq.get().getRecipientId() != null ? feedbackReq.get().getRecipientId() : feedbackReq.get().getExternalRecipientId();
335-
if (!getIsPermitted(requesteeId, recipientId, sendDate)) {
336-
throw new PermissionException(NOT_AUTHORIZED_MSG);
333+
final UUID recipientId = feedbackReq.get().getRecipientId();
334+
final UUID externalRecipientId = feedbackReq.get().getExternalRecipientId();
335+
if (recipientId != null) {
336+
if (!getIsPermitted(requesteeId, recipientId, sendDate)) {
337+
throw new PermissionException(NOT_AUTHORIZED_MSG);
338+
}
339+
} else {
340+
if (externalRecipientId == null) {
341+
throw new PermissionException(NOT_AUTHORIZED_MSG);
342+
}
337343
}
338344

339345
return feedbackReq.get();

server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java

Lines changed: 111 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -801,10 +801,11 @@ void testGetFeedbackRequestByUnassignedPdlToExternalRecipient() {
801801
//get feedback request
802802
final HttpRequest<?> request = HttpRequest.GET(String.format("%s", feedbackRequest.getId()))
803803
.basicAuth(unrelatedPdl.getWorkEmail(), RoleType.Constants.PDL_ROLE);
804-
final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () ->
805-
client.toBlocking().exchange(request, Map.class));
804+
final HttpResponse<FeedbackRequestResponseDTO> response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class);
806805

807-
assertUnauthorized(responseException);
806+
assertEquals(HttpStatus.OK, response.getStatus());
807+
assertTrue(response.getBody().isPresent());
808+
assertResponseEqualsEntity(feedbackRequest, response.getBody().get());
808809
}
809810

810811
@Test
@@ -838,11 +839,11 @@ void testGetFeedbackRequestByRequesteeToExternalRecipient() {
838839
//get feedback request
839840
final HttpRequest<?> request = HttpRequest.GET(String.format("%s", feedbackRequest.getId()))
840841
.basicAuth(memberProfile2.getWorkEmail(), RoleType.Constants.MEMBER_ROLE);
841-
final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () ->
842-
client.toBlocking().exchange(request, Map.class));
842+
final HttpResponse<FeedbackRequestResponseDTO> response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class);
843843

844-
// requestee should not be able to get the feedback request about them
845-
assertUnauthorized(responseException);
844+
assertEquals(HttpStatus.OK, response.getStatus());
845+
assertTrue(response.getBody().isPresent());
846+
assertResponseEqualsEntity(feedbackRequest, response.getBody().get());
846847
}
847848

848849
@Test
@@ -884,7 +885,7 @@ void testGetFeedbackRequestByExternalRecipient() {
884885
}
885886

886887
@Test
887-
void testGetFeedbackRequestByReviewPeriodId() {
888+
void testGetFeedbackRequestByReviewPeriodIdToRecipient() {
888889
ReviewPeriod reviewPeriod = createADefaultReviewPeriod();
889890
MemberProfile pdlMemberProfile = createADefaultMemberProfile();
890891
assignAdminRole(pdlMemberProfile);
@@ -906,7 +907,28 @@ void testGetFeedbackRequestByReviewPeriodId() {
906907
}
907908

908909
@Test
909-
void testGetFeedbackRequestByUnrelatedUser() {
910+
void testGetFeedbackRequestByReviewPeriodIdToExternalRecipient() {
911+
ReviewPeriod reviewPeriod = createADefaultReviewPeriod();
912+
MemberProfile pdlMemberProfile = createADefaultMemberProfile();
913+
assignAdminRole(pdlMemberProfile);
914+
MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile);
915+
final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient();
916+
FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, requestee, externalRecipient, reviewPeriod);
917+
918+
//search for feedback requests by a specific creator
919+
final HttpRequest<?> request = HttpRequest.GET(String.format("/?reviewPeriodId=%s", reviewPeriod.getId()))
920+
.basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.ADMIN_ROLE);
921+
final HttpResponse<List<FeedbackRequestResponseDTO>> response = client.toBlocking()
922+
.exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class));
923+
924+
assertEquals(HttpStatus.OK, response.getStatus());
925+
assertTrue(response.getBody().isPresent());
926+
assertEquals(1, response.getBody().get().size());
927+
assertResponseEqualsEntity(feedbackRequest, response.getBody().get().get(0));
928+
}
929+
930+
@Test
931+
void testGetFeedbackRequestByUnrelatedUserToRecipient() {
910932
MemberProfile pdlMemberProfile = createADefaultMemberProfile();
911933
assignPdlRole(pdlMemberProfile);
912934
MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile);
@@ -924,7 +946,26 @@ void testGetFeedbackRequestByUnrelatedUser() {
924946
}
925947

926948
@Test
927-
void testGetByCreatorIdPermitted() {
949+
void testGetFeedbackRequestByUnrelatedUserToExternalRecipient() {
950+
MemberProfile pdlMemberProfile = createADefaultMemberProfile();
951+
assignPdlRole(pdlMemberProfile);
952+
MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile);
953+
final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient();
954+
MemberProfile unrelatedUser = createAnUnrelatedUser();
955+
FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, requestee, externalRecipient);
956+
957+
//get feedback request
958+
final HttpRequest<?> request = HttpRequest.GET(String.format("%s", feedbackRequest.getId()))
959+
.basicAuth(unrelatedUser.getWorkEmail(), RoleType.Constants.MEMBER_ROLE);
960+
final HttpResponse<FeedbackRequestResponseDTO> response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class);
961+
962+
assertEquals(HttpStatus.OK, response.getStatus());
963+
assertTrue(response.getBody().isPresent());
964+
assertResponseEqualsEntity(feedbackRequest, response.getBody().get());
965+
}
966+
967+
@Test
968+
void testGetByCreatorIdPermittedToRecipients() {
928969
//create two employee-PDL relationships
929970
MemberProfile pdlMemberProfile = createADefaultMemberProfile();
930971
assignPdlRole(pdlMemberProfile);
@@ -953,7 +994,36 @@ void testGetByCreatorIdPermitted() {
953994
}
954995

955996
@Test
956-
void testGetByCreatorIdPermittedMultipleReqs() {
997+
void testGetByCreatorIdPermittedToExternalRecipients() {
998+
//create two employee-PDL relationships
999+
MemberProfile pdlMemberProfile = createADefaultMemberProfile();
1000+
assignPdlRole(pdlMemberProfile);
1001+
MemberProfile memberOne = createADefaultMemberProfileForPdl(pdlMemberProfile);
1002+
MemberProfile pdlMemberProfileTwo = createASecondDefaultMemberProfile();
1003+
assignPdlRole(pdlMemberProfileTwo);
1004+
MemberProfile memberTwo = createASecondDefaultMemberProfileForPdl(pdlMemberProfileTwo);
1005+
final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient();
1006+
final FeedbackExternalRecipient externalRecipient02 = createASecondDefaultFeedbackExternalRecipient();
1007+
1008+
// Create a feedback request from a PDL
1009+
FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient01);
1010+
// Create a feedback request by a different PDL
1011+
saveFeedbackRequest(pdlMemberProfileTwo, memberTwo, externalRecipient02);
1012+
1013+
//search for feedback requests by a specific creator
1014+
final HttpRequest<?> request = HttpRequest.GET(String.format("/?creatorId=%s", feedbackReq.getCreatorId()))
1015+
.basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE);
1016+
final HttpResponse<List<FeedbackRequestResponseDTO>> response = client.toBlocking()
1017+
.exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class));
1018+
1019+
assertEquals(HttpStatus.OK, response.getStatus());
1020+
assertTrue(response.getBody().isPresent());
1021+
assertEquals(1, response.getBody().get().size());
1022+
assertResponseEqualsEntity(feedbackReq, response.getBody().get().get(0));
1023+
}
1024+
1025+
@Test
1026+
void testGetByCreatorIdPermittedMultipleReqsToRecipients() {
9571027
//create two employee-PDL relationships
9581028
MemberProfile pdlMemberProfile = createADefaultMemberProfile();
9591029
assignPdlRole(pdlMemberProfile);
@@ -984,6 +1054,36 @@ void testGetByCreatorIdPermittedMultipleReqs() {
9841054
assertResponseEqualsEntity(feedbackReqTwo, response.getBody().get().get(1));
9851055
}
9861056

1057+
@Test
1058+
void testGetByCreatorIdPermittedMultipleReqsToExternalRecipients() {
1059+
//create two employee-PDL relationships
1060+
MemberProfile pdlMemberProfile = createADefaultMemberProfile();
1061+
assignPdlRole(pdlMemberProfile);
1062+
MemberProfile memberOne = createADefaultMemberProfileForPdl(pdlMemberProfile);
1063+
MemberProfile pdlMemberProfileTwo = createASecondDefaultMemberProfile();
1064+
assignPdlRole(pdlMemberProfileTwo);
1065+
MemberProfile memberTwo = createASecondDefaultMemberProfileForPdl(pdlMemberProfileTwo);
1066+
MemberProfile memberThree = createAThirdDefaultMemberProfileForPdl(pdlMemberProfileTwo);
1067+
final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient();
1068+
1069+
// Create two sample feedback requests by the same PDL
1070+
FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient01);
1071+
FeedbackRequest feedbackReqTwo = saveFeedbackRequest(pdlMemberProfile, memberTwo, externalRecipient01);
1072+
// Create a feedback request by a different PDL
1073+
saveFeedbackRequest(pdlMemberProfileTwo, memberThree, externalRecipient01);
1074+
1075+
final HttpRequest<?> request = HttpRequest.GET(String.format("/?creatorId=%s", feedbackReq.getCreatorId()))
1076+
.basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE);
1077+
final HttpResponse<List<FeedbackRequestResponseDTO>> response = client.toBlocking()
1078+
.exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class));
1079+
1080+
assertEquals(HttpStatus.OK, response.getStatus());
1081+
assertTrue(response.getBody().isPresent());
1082+
assertEquals(2, response.getBody().get().size());
1083+
assertResponseEqualsEntity(feedbackReq, response.getBody().get().get(0));
1084+
assertResponseEqualsEntity(feedbackReqTwo, response.getBody().get().get(1));
1085+
}
1086+
9871087
@Test
9881088
void testGetByCreatorRequesteeIdPermitted() {
9891089
//create two employee-PDL relationships

server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackExternalRecipientFixture.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
public interface FeedbackExternalRecipientFixture extends RepositoryFixture {
1010

1111
default FeedbackExternalRecipient createADefaultFeedbackExternalRecipient() {
12-
String email = "externalRecipient@example.com";
12+
String email = "externalRecipient01@example.com";
1313
String firstName = "External-01";
1414
String lastName = "Recipient";
1515
String companyName = "Company Name";
@@ -19,4 +19,26 @@ default FeedbackExternalRecipient createADefaultFeedbackExternalRecipient() {
1919
));
2020
}
2121

22+
default FeedbackExternalRecipient createASecondDefaultFeedbackExternalRecipient() {
23+
String email = "[email protected]";
24+
String firstName = "External-02";
25+
String lastName = "Recipient";
26+
String companyName = "Company Name";
27+
28+
return getFeedbackExternalRecipientRepository().save(new FeedbackExternalRecipient(
29+
email, firstName, lastName, companyName
30+
));
31+
}
32+
33+
default FeedbackExternalRecipient createAThirdDefaultFeedbackExternalRecipient() {
34+
String email = "[email protected]";
35+
String firstName = "External-03";
36+
String lastName = "Recipient";
37+
String companyName = "Company Name";
38+
39+
return getFeedbackExternalRecipientRepository().save(new FeedbackExternalRecipient(
40+
email, firstName, lastName, companyName
41+
));
42+
}
43+
2244
}

0 commit comments

Comments
 (0)