Skip to content

Commit

Permalink
Merge pull request #2137 from objectcomputing/bugfix-2124/filter-term…
Browse files Browse the repository at this point in the history
…inated-from-suggestions

Filter terminated team members from suggestion results
  • Loading branch information
mkimberlin authored Mar 22, 2024
2 parents 3258d32 + a24ee6e commit 03bd3cd
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import io.micronaut.context.annotation.Property;
import com.objectcomputing.checkins.exceptions.PermissionException;
import jakarta.inject.Singleton;

import java.time.LocalDate;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
Expand Down Expand Up @@ -47,11 +49,11 @@ public List<FeedbackSuggestionDTO> getSuggestionsByProfileId(UUID id) {
}

List<FeedbackSuggestionDTO> suggestions = new LinkedList<>();
if(suggestFor.getSupervisorid() != null && !suggestFor.getSupervisorid().equals(currentUser.getId())) {
if(suggestFor.getSupervisorid() != null && !suggestFor.getSupervisorid().equals(currentUser.getId()) && isMemberActive(suggestFor.getSupervisorid())) {
suggestions.add(new FeedbackSuggestionDTO("Supervisor of requestee", suggestFor.getSupervisorid()));
}

if(suggestFor.getPdlId() != null && !suggestFor.getPdlId().equals(currentUser.getId())) {
if(suggestFor.getPdlId() != null && !suggestFor.getPdlId().equals(currentUser.getId()) && isMemberActive(suggestFor.getPdlId())) {
suggestions.add(new FeedbackSuggestionDTO("PDL of requestee", suggestFor.getPdlId()));
}

Expand All @@ -60,6 +62,7 @@ public List<FeedbackSuggestionDTO> getSuggestionsByProfileId(UUID id) {
for(TeamMember currentMembership: teamMemberships){
Set<TeamMember> teamMembers = teamMemberServices.findByFields(currentMembership.getTeamId(), null, null);
Set<TeamMember> leads = teamMembers.stream().filter((member)-> member.isLead()).collect(Collectors.toSet());
leads = filterTerminated(leads);
for(TeamMember lead: leads) {
if(suggestions.size() < maxSuggestions && !lead.getMemberId().equals(id) && !lead.getMemberId().equals(currentUserId)) {
suggestions.add(new FeedbackSuggestionDTO("Team lead for requestee", lead.getMemberId()));
Expand All @@ -72,6 +75,7 @@ public List<FeedbackSuggestionDTO> getSuggestionsByProfileId(UUID id) {
for(TeamMember currentMembership: teamMemberships){
Set<TeamMember> teamMembers = teamMemberServices.findByFields(currentMembership.getTeamId(), null, null);
teamMembers = teamMembers.stream().filter((member)-> !member.isLead()).collect(Collectors.toSet());
teamMembers = filterTerminated(teamMembers);
for(TeamMember teamMember: teamMembers) {
if(suggestions.size() < maxSuggestions && !teamMember.getMemberId().equals(id) && !teamMember.getMemberId().equals(currentUserId)) {
suggestions.add(new FeedbackSuggestionDTO("Team member for requestee", teamMember.getMemberId()));
Expand All @@ -80,6 +84,20 @@ public List<FeedbackSuggestionDTO> getSuggestionsByProfileId(UUID id) {

if(suggestions.size() >= maxSuggestions) break;
}

return suggestions;
}

private Set<TeamMember> filterTerminated(Set<TeamMember> suggestions) {
suggestions = suggestions.stream().filter((TeamMember suggestion) -> {
return isMemberActive(suggestion.getMemberId());
}).collect(Collectors.toSet());
return suggestions;
}

private boolean isMemberActive(UUID memberId) {
MemberProfile suggested = memberProfileServices.getById(memberId);
LocalDate terminationDate = suggested.getTerminationDate();
return !(terminationDate != null && terminationDate.isBefore(LocalDate.now().atStartOfDay().toLocalDate()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -151,13 +151,44 @@ void testGetRecsIfTeamMember() {

assertNotNull(JSON.toString(response.getBody().get()));
assertEquals(HttpStatus.OK, response.getStatus());
assertEquals(response.getBody().get().size(), 3 );
assertEquals( 3, response.getBody().get().size() );
assertContentEqualsEntity(idealOne, response.getBody().get().get(0));
assertContentEqualsEntity(idealTwo, response.getBody().get().get(1));
assertContentEqualsEntity(idealThree, response.getBody().get().get(2));

}

@Test
void testDoesNotIncludeTerminatedTeamMembers() {
Team team = createDefaultTeam();
MemberProfile pdlProfile = createADefaultMemberProfile();
createAndAssignRole(RoleType.PDL, pdlProfile);
MemberProfile supervisor = createADefaultSupervisor();
createAndAssignRole(RoleType.ADMIN, supervisor);
MemberProfile requestee = createAProfileWithSupervisorAndPDL(supervisor, pdlProfile);
MemberProfile requesteeTeamLead = createAnUnrelatedUser();
MemberProfile teamMemberofRequestee = createASecondDefaultMemberProfile();
MemberProfile termedTeamMemberofRequestee = createAPastTerminatedMemberProfile();
createLeadTeamMember(team, requesteeTeamLead);
createDefaultTeamMember(team, requestee);
createDefaultTeamMember(team, teamMemberofRequestee);
createDefaultTeamMember(team, termedTeamMemberofRequestee);

final HttpRequest<?> request = HttpRequest.GET(String.format("/%s", requestee.getId()))
.basicAuth(teamMemberofRequestee.getWorkEmail(), RoleType.Constants.MEMBER_ROLE);
final HttpResponse<List<FeedbackSuggestionDTO>> response = client.toBlocking()
.exchange(request, Argument.listOf(FeedbackSuggestionDTO.class));


FeedbackSuggestionDTO idealOne = createFeedbackSuggestion(supervisorReason, supervisor.getId());
FeedbackSuggestionDTO idealTwo = createFeedbackSuggestion(pdlReason, pdlProfile.getId());
FeedbackSuggestionDTO idealThree = createFeedbackSuggestion(teamLeadReason, requesteeTeamLead.getId());

assertNotNull(JSON.toString(response.getBody().get()));
assertEquals(HttpStatus.OK, response.getStatus());
assertEquals( 3, response.getBody().get().size() );
assertContentEqualsEntity(idealOne, response.getBody().get().get(0));
assertContentEqualsEntity(idealTwo, response.getBody().get().get(1));
assertContentEqualsEntity(idealThree, response.getBody().get().get(2));
}
}

0 comments on commit 03bd3cd

Please sign in to comment.