AnnouncementsController.java

1
package edu.ucsb.cs156.happiercows.controllers;
2
3
import com.fasterxml.jackson.databind.ObjectMapper;
4
import io.swagger.v3.oas.annotations.tags.Tag;
5
import lombok.extern.slf4j.Slf4j;
6
import io.swagger.v3.oas.annotations.Operation;
7
import io.swagger.v3.oas.annotations.Parameter;
8
import org.springframework.beans.factory.annotation.Autowired;
9
import org.springframework.http.ResponseEntity;
10
import org.springframework.security.access.prepost.PreAuthorize;
11
import org.springframework.security.core.context.SecurityContextHolder;
12
import org.springframework.web.bind.annotation.*;
13
import org.springframework.data.domain.Page;
14
import org.springframework.data.domain.PageRequest;
15
import org.springframework.data.domain.Sort;
16
17
import edu.ucsb.cs156.happiercows.entities.Announcement;
18
import edu.ucsb.cs156.happiercows.repositories.AnnouncementRepository;
19
20
import edu.ucsb.cs156.happiercows.entities.User;
21
import edu.ucsb.cs156.happiercows.entities.UserCommons;
22
import edu.ucsb.cs156.happiercows.repositories.UserCommonsRepository;
23
24
import org.springframework.security.core.Authentication;
25
26
import java.util.Date;
27
import java.util.Optional;
28
29
@Tag(name = "Announcements")
30
@RequestMapping("/api/announcements")
31
@RestController
32
@Slf4j
33
public class AnnouncementsController extends ApiController {
34
35
    @Autowired
36
    private AnnouncementRepository announcementRepository;
37
38
    @Autowired
39
    private UserCommonsRepository userCommonsRepository;
40
41
    @Autowired
42
    ObjectMapper mapper;
43
44
    @Operation(summary = "Create an announcement", description = "Create an announcement associated with a specific commons")
45
    @PreAuthorize("hasAnyRole('ROLE_USER', 'ROLE_ADMIN')")
46
    @PostMapping("/post")
47
    public ResponseEntity<Object> createAnnouncement(
48
        @Parameter(description = "The id of the common") @RequestParam Long commonsId,
49
        @Parameter(description = "The datetime at which the announcement will be shown (defaults to current time)") @RequestParam(required = false) Date startDate,
50
        @Parameter(description = "The datetime at which the announcement will stop being shown (optional)") @RequestParam(required = false) Date endDate,
51
        @Parameter(description = "The announcement to be sent out") @RequestParam String announcementText) {
52
53
        User user = getCurrentUser().getUser();
54
        Long userId = user.getId();
55
56
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
57
58 3 1. lambda$createAnnouncement$0 : replaced boolean return with true for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$createAnnouncement$0 → KILLED
2. createAnnouncement : negated conditional → KILLED
3. lambda$createAnnouncement$0 : replaced boolean return with false for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$createAnnouncement$0 → KILLED
        if (!auth.getAuthorities().stream().anyMatch(a -> a.getAuthority().equals("ROLE_ADMIN"))) {
59
            log.info("User is not an admin");
60
61
            Optional<UserCommons> userCommonsLookup =
62
                userCommonsRepository.findByCommonsIdAndUserId(commonsId, userId);
63
64 1 1. createAnnouncement : negated conditional → KILLED
            if (!userCommonsLookup.isPresent()) {
65 1 1. createAnnouncement : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::createAnnouncement → KILLED
                return ResponseEntity.badRequest().body("Commons_id must exist.");
66
            }
67
        }
68
69 1 1. createAnnouncement : negated conditional → KILLED
        if (startDate == null) {
70
            log.info("Start date not specified. Defaulting to current date.");
71
            startDate = new Date();
72
        }
73
74 1 1. createAnnouncement : negated conditional → KILLED
        if (announcementText == "") {
75 1 1. createAnnouncement : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::createAnnouncement → KILLED
            return ResponseEntity.badRequest().body("Announcement cannot be empty.");
76
        }
77
78 2 1. createAnnouncement : negated conditional → KILLED
2. createAnnouncement : negated conditional → KILLED
        if (endDate != null && startDate.after(endDate)) {
79 1 1. createAnnouncement : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::createAnnouncement → KILLED
            return ResponseEntity.badRequest().body("Start date must be before end date.");
80
        }
81
82
        Announcement announcementObj = Announcement.builder()
83
            .commonsId(commonsId)
84
            .startDate(startDate)
85
            .endDate(endDate)
86
            .announcementText(announcementText)
87
            .build();
88
89
        announcementRepository.save(announcementObj);
90
91 1 1. createAnnouncement : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::createAnnouncement → KILLED
        return ResponseEntity.ok(announcementObj);
92
    }
93
94
    @Operation(summary = "Get all announcements", description = "Get all announcements associated with a specific commons.")
95
    @PreAuthorize("hasAnyRole('ROLE_USER', 'ROLE_ADMIN')")
96
    @GetMapping("/getbycommonsid")
97
    public ResponseEntity<Object> getAnnouncements(
98
        @Parameter(description = "The id of the common") @RequestParam Long commonsId) {
99
100
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
101
102 3 1. getAnnouncements : negated conditional → KILLED
2. lambda$getAnnouncements$1 : replaced boolean return with false for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$getAnnouncements$1 → KILLED
3. lambda$getAnnouncements$1 : replaced boolean return with true for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$getAnnouncements$1 → KILLED
        if (!auth.getAuthorities().stream().anyMatch(a -> a.getAuthority().equals("ROLE_ADMIN"))) {
103
            log.info("User is not an admin");
104
105
            User user = getCurrentUser().getUser();
106
            Long userId = user.getId();
107
108
            Optional<UserCommons> userCommonsLookup =
109
                userCommonsRepository.findByCommonsIdAndUserId(commonsId, userId);
110
111 1 1. getAnnouncements : negated conditional → KILLED
            if (!userCommonsLookup.isPresent()) {
112 1 1. getAnnouncements : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::getAnnouncements → KILLED
                return ResponseEntity.badRequest().body("Commons_id must exist.");
113
            }
114
        }
115
116
        int MAX_ANNOUNCEMENTS = 1000;
117
118
        Page<Announcement> announcements =
119
            announcementRepository.findByCommonsId(
120
                commonsId,
121
                PageRequest.of(
122
                    0,
123
                    MAX_ANNOUNCEMENTS,
124
                    Sort.by("startDate").descending()));
125
126 1 1. getAnnouncements : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::getAnnouncements → KILLED
        return ResponseEntity.ok(announcements);
127
    }
128
129
    @Operation(summary = "Get current announcements", description = "Get current active announcements associated with a specific commons.")
130
    @PreAuthorize("hasAnyRole('ROLE_USER', 'ROLE_ADMIN')")
131
    @GetMapping("/current")
132
    public ResponseEntity<Object> getCurrentAnnouncements(
133
        @Parameter(description = "The id of the common") @RequestParam Long commonsId) {
134
135
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
136
137 3 1. getCurrentAnnouncements : negated conditional → KILLED
2. lambda$getCurrentAnnouncements$2 : replaced boolean return with true for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$getCurrentAnnouncements$2 → KILLED
3. lambda$getCurrentAnnouncements$2 : replaced boolean return with false for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$getCurrentAnnouncements$2 → KILLED
        if (!auth.getAuthorities().stream().anyMatch(a -> a.getAuthority().equals("ROLE_ADMIN"))) {
138
            log.info("User is not an admin");
139
140
            User user = getCurrentUser().getUser();
141
            Long userId = user.getId();
142
143
            Optional<UserCommons> userCommonsLookup =
144
                userCommonsRepository.findByCommonsIdAndUserId(commonsId, userId);
145
146 1 1. getCurrentAnnouncements : negated conditional → KILLED
            if (!userCommonsLookup.isPresent()) {
147 1 1. getCurrentAnnouncements : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::getCurrentAnnouncements → KILLED
                return ResponseEntity.badRequest().body("Commons_id must exist.");
148
            }
149
        }
150
151
        int MAX_ANNOUNCEMENTS = 1000;
152
153
        Page<Announcement> announcements =
154
            announcementRepository.findCurrentAnnouncementsByCommonsId(
155
                commonsId,
156
                PageRequest.of(
157
                    0,
158
                    MAX_ANNOUNCEMENTS,
159
                    Sort.by("startDate").descending()));
160
161 1 1. getCurrentAnnouncements : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::getCurrentAnnouncements → KILLED
        return ResponseEntity.ok(announcements);
162
    }
163
164
    @Operation(summary = "Get announcements by id", description = "Get announcement by its id.")
165
    @PreAuthorize("hasAnyRole('ROLE_USER', 'ROLE_ADMIN')")
166
    @GetMapping("/getbyid")
167
    public ResponseEntity<Object> getAnnouncementById(
168
        @Parameter(description = "The id of the announcement") @RequestParam Long id) {
169
170
        Optional<Announcement> announcementLookup =
171
            announcementRepository.findByAnnouncementId(id);
172
173 1 1. getAnnouncementById : negated conditional → KILLED
        if (!announcementLookup.isPresent()) {
174 1 1. getAnnouncementById : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::getAnnouncementById → KILLED
            return ResponseEntity.badRequest().body("Cannot find announcement. id is invalid.");
175
        }
176
177 1 1. getAnnouncementById : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::getAnnouncementById → KILLED
        return ResponseEntity.ok(announcementLookup.get());
178
    }
179
180
    @Operation(summary = "Edit an announcement", description = "Edit an announcement by its id.")
181
    @PreAuthorize("hasAnyRole('ROLE_USER', 'ROLE_ADMIN')")
182
    @PutMapping("/put")
183
    public ResponseEntity<Object> editAnnouncement(
184
        @Parameter(description = "The id of the announcement") @RequestParam Long id,
185
        @Parameter(description = "The id of the common") @RequestParam Long commonsId,
186
        @Parameter(description = "The datetime at which the announcement will be shown (defaults to current time)") @RequestParam(required = false) Date startDate,
187
        @Parameter(description = "The datetime at which the announcement will stop being shown (optional)") @RequestParam(required = false) Date endDate,
188
        @Parameter(description = "The announcement to be sent out") @RequestParam String announcementText) {
189
190
        User user = getCurrentUser().getUser();
191
        Long userId = user.getId();
192
193
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
194
195 3 1. lambda$editAnnouncement$3 : replaced boolean return with true for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$editAnnouncement$3 → KILLED
2. lambda$editAnnouncement$3 : replaced boolean return with false for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$editAnnouncement$3 → KILLED
3. editAnnouncement : negated conditional → KILLED
        if (!auth.getAuthorities().stream().anyMatch(a -> a.getAuthority().equals("ROLE_ADMIN"))) {
196
            log.info("User is not an admin");
197
198
            Optional<UserCommons> userCommonsLookup =
199
                userCommonsRepository.findByCommonsIdAndUserId(commonsId, userId);
200
201 1 1. editAnnouncement : negated conditional → KILLED
            if (!userCommonsLookup.isPresent()) {
202 1 1. editAnnouncement : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::editAnnouncement → KILLED
                return ResponseEntity.badRequest().body("Commons_id must exist.");
203
            }
204
        }
205
206 1 1. editAnnouncement : negated conditional → KILLED
        if (announcementText == "") {
207 1 1. editAnnouncement : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::editAnnouncement → KILLED
            return ResponseEntity.badRequest().body("Announcement cannot be empty.");
208
        }
209
210 1 1. editAnnouncement : negated conditional → KILLED
        if (startDate == null) {
211
            log.info("Start date not specified. Defaulting to current date.");
212
            startDate = new Date();
213
        }
214
215 2 1. editAnnouncement : negated conditional → KILLED
2. editAnnouncement : negated conditional → KILLED
        if (endDate != null && startDate.after(endDate)) {
216 1 1. editAnnouncement : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::editAnnouncement → KILLED
            return ResponseEntity.badRequest().body("Start date must be before end date.");
217
        }
218
219
        Optional<Announcement> announcementLookup =
220
            announcementRepository.findByAnnouncementId(id);
221
222 1 1. editAnnouncement : negated conditional → KILLED
        if (!announcementLookup.isPresent()) {
223 1 1. editAnnouncement : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::editAnnouncement → KILLED
            return ResponseEntity.badRequest().body("Announcement could not be found. Invalid id.");
224
        }
225
226
        Announcement announcementObj = announcementLookup.get();
227
228 1 1. editAnnouncement : removed call to edu/ucsb/cs156/happiercows/entities/Announcement::setStartDate → KILLED
        announcementObj.setStartDate(startDate);
229 1 1. editAnnouncement : removed call to edu/ucsb/cs156/happiercows/entities/Announcement::setEndDate → KILLED
        announcementObj.setEndDate(endDate);
230 1 1. editAnnouncement : removed call to edu/ucsb/cs156/happiercows/entities/Announcement::setAnnouncementText → KILLED
        announcementObj.setAnnouncementText(announcementText);
231
232
        announcementRepository.save(announcementObj);
233
234 1 1. editAnnouncement : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::editAnnouncement → KILLED
        return ResponseEntity.ok(announcementObj);
235
    }
236
237
    @Operation(summary = "Delete an announcement", description = "Delete an announcement associated with an id")
238
    @PreAuthorize("hasAnyRole('ROLE_ADMIN')")
239
    @DeleteMapping("/delete")
240
    public ResponseEntity<Object> deleteAnnouncement(
241
        @Parameter(description = "The id of the chat message") @RequestParam Long id) {
242
243
        Optional<Announcement> announcementLookup =
244
            announcementRepository.findByAnnouncementId(id);
245
246 1 1. deleteAnnouncement : negated conditional → KILLED
        if (!announcementLookup.isPresent()) {
247 1 1. deleteAnnouncement : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::deleteAnnouncement → KILLED
            return ResponseEntity.badRequest().body("Cannot find announcement. id is invalid.");
248
        }
249
250
        Announcement announcementObj = announcementLookup.get();
251
252 1 1. deleteAnnouncement : removed call to edu/ucsb/cs156/happiercows/repositories/AnnouncementRepository::delete → KILLED
        announcementRepository.delete(announcementObj);
253
254 1 1. deleteAnnouncement : replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::deleteAnnouncement → KILLED
        return ResponseEntity.ok(announcementObj);
255
    }
256
}

Mutations

58

1.1
Location : lambda$createAnnouncement$0
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userNotInCommonsCannotPostAnnouncements()]
replaced boolean return with true for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$createAnnouncement$0 → KILLED

2.2
Location : createAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userNotInCommonsCannotPostAnnouncements()]
negated conditional → KILLED

3.3
Location : lambda$createAnnouncement$0
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCanPostAnnouncements()]
replaced boolean return with false for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$createAnnouncement$0 → KILLED

64

1.1
Location : createAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userNotInCommonsCannotPostAnnouncements()]
negated conditional → KILLED

65

1.1
Location : createAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userNotInCommonsCannotPostAnnouncements()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::createAnnouncement → KILLED

69

1.1
Location : createAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCanPostAnnouncements()]
negated conditional → KILLED

74

1.1
Location : createAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotPostAnnouncementWithEmptyString()]
negated conditional → KILLED

75

1.1
Location : createAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotPostAnnouncementWithEmptyString()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::createAnnouncement → KILLED

78

1.1
Location : createAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotPostAnnouncementWithEndBeforeStart()]
negated conditional → KILLED

2.2
Location : createAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotPostAnnouncementWithEndBeforeStart()]
negated conditional → KILLED

79

1.1
Location : createAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotPostAnnouncementWithEndBeforeStart()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::createAnnouncement → KILLED

91

1.1
Location : createAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCanPostAnnouncements()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::createAnnouncement → KILLED

102

1.1
Location : getAnnouncements
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCanGetAllAnnouncements()]
negated conditional → KILLED

2.2
Location : lambda$getAnnouncements$1
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCanGetAllAnnouncements()]
replaced boolean return with false for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$getAnnouncements$1 → KILLED

3.3
Location : lambda$getAnnouncements$1
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotGetAllAnnouncementsIfNotInCommons()]
replaced boolean return with true for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$getAnnouncements$1 → KILLED

111

1.1
Location : getAnnouncements
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotGetAllAnnouncementsIfNotInCommons()]
negated conditional → KILLED

112

1.1
Location : getAnnouncements
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotGetAllAnnouncementsIfNotInCommons()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::getAnnouncements → KILLED

126

1.1
Location : getAnnouncements
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCanGetAllAnnouncements()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::getAnnouncements → KILLED

137

1.1
Location : getCurrentAnnouncements
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotGetCurrentAnnouncementsIfNotInCommons()]
negated conditional → KILLED

2.2
Location : lambda$getCurrentAnnouncements$2
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotGetCurrentAnnouncementsIfNotInCommons()]
replaced boolean return with true for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$getCurrentAnnouncements$2 → KILLED

3.3
Location : lambda$getCurrentAnnouncements$2
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCanGetCurrentAnnouncements()]
replaced boolean return with false for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$getCurrentAnnouncements$2 → KILLED

146

1.1
Location : getCurrentAnnouncements
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotGetCurrentAnnouncementsIfNotInCommons()]
negated conditional → KILLED

147

1.1
Location : getCurrentAnnouncements
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotGetCurrentAnnouncementsIfNotInCommons()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::getCurrentAnnouncements → KILLED

161

1.1
Location : getCurrentAnnouncements
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCanGetCurrentAnnouncements()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::getCurrentAnnouncements → KILLED

173

1.1
Location : getAnnouncementById
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotGetAnnouncementByIdThatDoesNotExist()]
negated conditional → KILLED

174

1.1
Location : getAnnouncementById
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotGetAnnouncementByIdThatDoesNotExist()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::getAnnouncementById → KILLED

177

1.1
Location : getAnnouncementById
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCanGetAnnouncementById()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::getAnnouncementById → KILLED

195

1.1
Location : lambda$editAnnouncement$3
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotEditAnnouncementIfNotInCommons()]
replaced boolean return with true for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$editAnnouncement$3 → KILLED

2.2
Location : lambda$editAnnouncement$3
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCanEditAnnouncement()]
replaced boolean return with false for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::lambda$editAnnouncement$3 → KILLED

3.3
Location : editAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotEditAnnouncementIfNotInCommons()]
negated conditional → KILLED

201

1.1
Location : editAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotEditAnnouncementIfNotInCommons()]
negated conditional → KILLED

202

1.1
Location : editAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotEditAnnouncementIfNotInCommons()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::editAnnouncement → KILLED

206

1.1
Location : editAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotEditAnnouncementToHaveEmptyStringAsAnnouncement()]
negated conditional → KILLED

207

1.1
Location : editAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotEditAnnouncementToHaveEmptyStringAsAnnouncement()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::editAnnouncement → KILLED

210

1.1
Location : editAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCanEditAnnouncement()]
negated conditional → KILLED

215

1.1
Location : editAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotEditAnnouncementToHaveEndBeforeStart()]
negated conditional → KILLED

2.2
Location : editAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotEditAnnouncementToHaveEndBeforeStart()]
negated conditional → KILLED

216

1.1
Location : editAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotEditAnnouncementToHaveEndBeforeStart()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::editAnnouncement → KILLED

222

1.1
Location : editAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotEditAnnouncementThatDoesNotExist()]
negated conditional → KILLED

223

1.1
Location : editAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:userCannotEditAnnouncementThatDoesNotExist()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::editAnnouncement → KILLED

228

1.1
Location : editAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCanEditAnnouncement()]
removed call to edu/ucsb/cs156/happiercows/entities/Announcement::setStartDate → KILLED

229

1.1
Location : editAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCanEditAnnouncement()]
removed call to edu/ucsb/cs156/happiercows/entities/Announcement::setEndDate → KILLED

230

1.1
Location : editAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCanEditAnnouncement()]
removed call to edu/ucsb/cs156/happiercows/entities/Announcement::setAnnouncementText → KILLED

234

1.1
Location : editAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCanEditAnnouncement()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::editAnnouncement → KILLED

246

1.1
Location : deleteAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCannotDeleteAnnouncementsThatDontExist()]
negated conditional → KILLED

247

1.1
Location : deleteAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCannotDeleteAnnouncementsThatDontExist()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::deleteAnnouncement → KILLED

252

1.1
Location : deleteAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCanDeleteAnnouncements()]
removed call to edu/ucsb/cs156/happiercows/repositories/AnnouncementRepository::delete → KILLED

254

1.1
Location : deleteAnnouncement
Killed by : edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.controllers.AnnouncementsControllerTests]/[method:adminCanDeleteAnnouncements()]
replaced return value with null for edu/ucsb/cs156/happiercows/controllers/AnnouncementsController::deleteAnnouncement → KILLED

Active mutators

Tests examined


Report generated by PIT 1.17.0