MembershipAuditJob.java

1
package edu.ucsb.cs156.frontiers.jobs;
2
3
import edu.ucsb.cs156.frontiers.entities.Course;
4
import edu.ucsb.cs156.frontiers.entities.CourseStaff;
5
import edu.ucsb.cs156.frontiers.entities.RosterStudent;
6
import edu.ucsb.cs156.frontiers.enums.OrgStatus;
7
import edu.ucsb.cs156.frontiers.models.OrgMember;
8
import edu.ucsb.cs156.frontiers.repositories.CourseRepository;
9
import edu.ucsb.cs156.frontiers.repositories.CourseStaffRepository;
10
import edu.ucsb.cs156.frontiers.repositories.RosterStudentRepository;
11
import edu.ucsb.cs156.frontiers.services.OrganizationMemberService;
12
import edu.ucsb.cs156.frontiers.services.jobs.JobContext;
13
import edu.ucsb.cs156.frontiers.services.jobs.JobContextConsumer;
14
import java.util.List;
15
import java.util.Optional;
16
import java.util.stream.StreamSupport;
17
import lombok.Builder;
18
19
@Builder
20
public class MembershipAuditJob implements JobContextConsumer {
21
  CourseRepository courseRepository;
22
  OrganizationMemberService organizationMemberService;
23
  RosterStudentRepository rosterStudentRepository;
24
  CourseStaffRepository courseStaffRepository;
25
26
  @Override
27
  public void accept(JobContext ctx) throws Exception {
28
    ctx.log("Auditing membership for each course with an attached GitHub Organization...");
29
    Iterable<Course> courses = courseRepository.findAll();
30
    for (Course course : courses) {
31 2 1. accept : negated conditional → KILLED
2. accept : negated conditional → KILLED
      if (course.getOrgName() != null && course.getInstallationId() != null) {
32
        Iterable<OrgMember> members = organizationMemberService.getOrganizationMembers(course);
33
        Iterable<OrgMember> admins = organizationMemberService.getOrganizationAdmins(course);
34
        Iterable<OrgMember> invitees = organizationMemberService.getOrganizationInvitees(course);
35
        List<RosterStudent> rosterStudents = course.getRosterStudents();
36
        List<CourseStaff> courseStaff = course.getCourseStaff();
37 2 1. accept : changed conditional boundary → KILLED
2. accept : negated conditional → KILLED
        for (int i = 0; i < rosterStudents.size(); i++) {
38
          Integer studentGithubId = rosterStudents.get(i).getGithubId();
39
          String studentGithubLogin = rosterStudents.get(i).getGithubLogin();
40 2 1. accept : negated conditional → KILLED
2. accept : negated conditional → KILLED
          if (studentGithubId != null && studentGithubLogin != null) {
41
            Optional<OrgMember> member =
42
                StreamSupport.stream(members.spliterator(), false)
43 2 1. lambda$accept$0 : replaced boolean return with false for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$0 → KILLED
2. lambda$accept$0 : replaced boolean return with true for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$0 → KILLED
                    .filter(s -> studentGithubId.equals(s.getGithubId()))
44
                    .findFirst();
45
            Optional<OrgMember> admin =
46
                StreamSupport.stream(admins.spliterator(), false)
47 2 1. lambda$accept$1 : replaced boolean return with false for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$1 → KILLED
2. lambda$accept$1 : replaced boolean return with true for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$1 → KILLED
                    .filter(s -> studentGithubId.equals(s.getGithubId()))
48
                    .findFirst();
49
            Optional<OrgMember> invitee =
50
                StreamSupport.stream(invitees.spliterator(), false)
51 2 1. lambda$accept$2 : replaced boolean return with true for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$2 → KILLED
2. lambda$accept$2 : replaced boolean return with false for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$2 → KILLED
                    .filter(s -> studentGithubId.equals(s.getGithubId()))
52
                    .findFirst();
53
54
            OrgStatus updatedStatus = OrgStatus.JOINCOURSE;
55
56 1 1. accept : negated conditional → KILLED
            if (admin.isPresent()) {
57
              updatedStatus = OrgStatus.OWNER;
58 1 1. accept : negated conditional → KILLED
            } else if (member.isPresent()) {
59
              updatedStatus = OrgStatus.MEMBER;
60 1 1. accept : negated conditional → KILLED
            } else if (invitee.isPresent()) {
61
              updatedStatus = OrgStatus.INVITED;
62
            }
63 1 1. accept : removed call to edu/ucsb/cs156/frontiers/entities/RosterStudent::setOrgStatus → KILLED
            rosterStudents.get(i).setOrgStatus(updatedStatus);
64
          }
65
        }
66
        rosterStudentRepository.saveAll(rosterStudents);
67
68 2 1. accept : negated conditional → KILLED
2. accept : changed conditional boundary → KILLED
        for (int i = 0; i < courseStaff.size(); i++) {
69
          Integer staffGithubId = courseStaff.get(i).getGithubId();
70
          String staffGithubLogin = courseStaff.get(i).getGithubLogin();
71 2 1. accept : negated conditional → KILLED
2. accept : negated conditional → KILLED
          if (staffGithubId != null && staffGithubLogin != null) {
72
            Optional<OrgMember> member =
73
                StreamSupport.stream(members.spliterator(), false)
74 2 1. lambda$accept$3 : replaced boolean return with true for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$3 → KILLED
2. lambda$accept$3 : replaced boolean return with false for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$3 → KILLED
                    .filter(s -> staffGithubId.equals(s.getGithubId()))
75
                    .findFirst();
76
            Optional<OrgMember> admin =
77
                StreamSupport.stream(admins.spliterator(), false)
78 2 1. lambda$accept$4 : replaced boolean return with false for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$4 → KILLED
2. lambda$accept$4 : replaced boolean return with true for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$4 → KILLED
                    .filter(s -> staffGithubId.equals(s.getGithubId()))
79
                    .findFirst();
80
            Optional<OrgMember> invitee =
81
                StreamSupport.stream(invitees.spliterator(), false)
82 2 1. lambda$accept$5 : replaced boolean return with true for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$5 → KILLED
2. lambda$accept$5 : replaced boolean return with false for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$5 → KILLED
                    .filter(s -> staffGithubId.equals(s.getGithubId()))
83
                    .findFirst();
84
85
            OrgStatus updatedStatus = OrgStatus.JOINCOURSE;
86
87 1 1. accept : negated conditional → KILLED
            if (admin.isPresent()) {
88
              updatedStatus = OrgStatus.OWNER;
89 1 1. accept : negated conditional → KILLED
            } else if (member.isPresent()) {
90
              updatedStatus = OrgStatus.MEMBER;
91 1 1. accept : negated conditional → KILLED
            } else if (invitee.isPresent()) {
92
              updatedStatus = OrgStatus.INVITED;
93
            }
94 1 1. accept : removed call to edu/ucsb/cs156/frontiers/entities/CourseStaff::setOrgStatus → KILLED
            courseStaff.get(i).setOrgStatus(updatedStatus);
95
          }
96
        }
97
        courseStaffRepository.saveAll(courseStaff);
98
      }
99
    }
100
    ctx.log("Done");
101
  }
102
}

Mutations

31

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
negated conditional → KILLED

2.2
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
negated conditional → KILLED

37

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
changed conditional boundary → KILLED

2.2
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
negated conditional → KILLED

40

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
negated conditional → KILLED

2.2
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
negated conditional → KILLED

43

1.1
Location : lambda$accept$0
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:match_admin_students_and_staff_correctly()]
replaced boolean return with false for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$0 → KILLED

2.2
Location : lambda$accept$0
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
replaced boolean return with true for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$0 → KILLED

47

1.1
Location : lambda$accept$1
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:match_admin_students_and_staff_correctly()]
replaced boolean return with false for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$1 → KILLED

2.2
Location : lambda$accept$1
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:match_admin_students_and_staff_correctly()]
replaced boolean return with true for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$1 → KILLED

51

1.1
Location : lambda$accept$2
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:match_invited_students_and_staff_correctly()]
replaced boolean return with true for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$2 → KILLED

2.2
Location : lambda$accept$2
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:match_invited_students_and_staff_correctly()]
replaced boolean return with false for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$2 → KILLED

56

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
negated conditional → KILLED

58

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
negated conditional → KILLED

60

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
negated conditional → KILLED

63

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
removed call to edu/ucsb/cs156/frontiers/entities/RosterStudent::setOrgStatus → KILLED

68

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
negated conditional → KILLED

2.2
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
changed conditional boundary → KILLED

71

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
negated conditional → KILLED

2.2
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
negated conditional → KILLED

74

1.1
Location : lambda$accept$3
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
replaced boolean return with true for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$3 → KILLED

2.2
Location : lambda$accept$3
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:match_admin_students_and_staff_correctly()]
replaced boolean return with false for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$3 → KILLED

78

1.1
Location : lambda$accept$4
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:match_admin_students_and_staff_correctly()]
replaced boolean return with false for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$4 → KILLED

2.2
Location : lambda$accept$4
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:match_admin_students_and_staff_correctly()]
replaced boolean return with true for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$4 → KILLED

82

1.1
Location : lambda$accept$5
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:match_invited_students_and_staff_correctly()]
replaced boolean return with true for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$5 → KILLED

2.2
Location : lambda$accept$5
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:match_invited_students_and_staff_correctly()]
replaced boolean return with false for edu/ucsb/cs156/frontiers/jobs/MembershipAuditJob::lambda$accept$5 → KILLED

87

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
negated conditional → KILLED

89

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
negated conditional → KILLED

91

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
negated conditional → KILLED

94

1.1
Location : accept
Killed by : edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.frontiers.jobs.MembershipAuditJobTests]/[method:no_match_on_any_member()]
removed call to edu/ucsb/cs156/frontiers/entities/CourseStaff::setOrgStatus → KILLED

Active mutators

Tests examined


Report generated by PIT 1.17.0