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 Course getCourse() {
28
    return null;
29
  }
30
31
  @Override
32
  public void accept(JobContext ctx) throws Exception {
33
    ctx.log("Auditing membership for each course with an attached GitHub Organization...");
34
    Iterable<Course> courses = courseRepository.findAll();
35
    for (Course course : courses) {
36 2 1. accept : negated conditional → KILLED
2. accept : negated conditional → KILLED
      if (course.getOrgName() != null && course.getInstallationId() != null) {
37
        Iterable<OrgMember> members = organizationMemberService.getOrganizationMembers(course);
38
        Iterable<OrgMember> admins = organizationMemberService.getOrganizationAdmins(course);
39
        Iterable<OrgMember> invitees = organizationMemberService.getOrganizationInvitees(course);
40
        List<RosterStudent> rosterStudents = course.getRosterStudents();
41
        List<CourseStaff> courseStaff = course.getCourseStaff();
42 2 1. accept : changed conditional boundary → KILLED
2. accept : negated conditional → KILLED
        for (int i = 0; i < rosterStudents.size(); i++) {
43
          Integer studentGithubId = rosterStudents.get(i).getGithubId();
44
          String studentGithubLogin = rosterStudents.get(i).getGithubLogin();
45 2 1. accept : negated conditional → KILLED
2. accept : negated conditional → KILLED
          if (studentGithubId != null && studentGithubLogin != null) {
46
            Optional<OrgMember> member =
47
                StreamSupport.stream(members.spliterator(), false)
48 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()))
49
                    .findFirst();
50
            Optional<OrgMember> admin =
51
                StreamSupport.stream(admins.spliterator(), false)
52 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()))
53
                    .findFirst();
54
            Optional<OrgMember> invitee =
55
                StreamSupport.stream(invitees.spliterator(), false)
56 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()))
57
                    .findFirst();
58
59
            OrgStatus updatedStatus = OrgStatus.JOINCOURSE;
60
61 1 1. accept : negated conditional → KILLED
            if (admin.isPresent()) {
62
              updatedStatus = OrgStatus.OWNER;
63 1 1. accept : negated conditional → KILLED
            } else if (member.isPresent()) {
64
              updatedStatus = OrgStatus.MEMBER;
65 1 1. accept : negated conditional → KILLED
            } else if (invitee.isPresent()) {
66
              updatedStatus = OrgStatus.INVITED;
67
            }
68 1 1. accept : removed call to edu/ucsb/cs156/frontiers/entities/RosterStudent::setOrgStatus → KILLED
            rosterStudents.get(i).setOrgStatus(updatedStatus);
69
          }
70
        }
71
        rosterStudentRepository.saveAll(rosterStudents);
72
73 2 1. accept : negated conditional → KILLED
2. accept : changed conditional boundary → KILLED
        for (int i = 0; i < courseStaff.size(); i++) {
74
          Integer staffGithubId = courseStaff.get(i).getGithubId();
75
          String staffGithubLogin = courseStaff.get(i).getGithubLogin();
76 2 1. accept : negated conditional → KILLED
2. accept : negated conditional → KILLED
          if (staffGithubId != null && staffGithubLogin != null) {
77
            Optional<OrgMember> member =
78
                StreamSupport.stream(members.spliterator(), false)
79 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()))
80
                    .findFirst();
81
            Optional<OrgMember> admin =
82
                StreamSupport.stream(admins.spliterator(), false)
83 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()))
84
                    .findFirst();
85
            Optional<OrgMember> invitee =
86
                StreamSupport.stream(invitees.spliterator(), false)
87 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()))
88
                    .findFirst();
89
90
            OrgStatus updatedStatus = OrgStatus.JOINCOURSE;
91
92 1 1. accept : negated conditional → KILLED
            if (admin.isPresent()) {
93
              updatedStatus = OrgStatus.OWNER;
94 1 1. accept : negated conditional → KILLED
            } else if (member.isPresent()) {
95
              updatedStatus = OrgStatus.MEMBER;
96 1 1. accept : negated conditional → KILLED
            } else if (invitee.isPresent()) {
97
              updatedStatus = OrgStatus.INVITED;
98
            }
99 1 1. accept : removed call to edu/ucsb/cs156/frontiers/entities/CourseStaff::setOrgStatus → KILLED
            courseStaff.get(i).setOrgStatus(updatedStatus);
100
          }
101
        }
102
        courseStaffRepository.saveAll(courseStaff);
103
      }
104
    }
105
    ctx.log("Done");
106
  }
107
}

Mutations

36

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

42

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

45

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

48

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

52

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

56

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

61

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()]
negated conditional → KILLED

65

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

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()]
removed call to edu/ucsb/cs156/frontiers/entities/RosterStudent::setOrgStatus → KILLED

73

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

76

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

79

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

83

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

87

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

92

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()]
negated conditional → KILLED

96

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

99

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