RecommendationRequestsController.java

1
package edu.ucsb.cs156.example.controllers;
2
3
import edu.ucsb.cs156.example.entities.RecommendationRequest;
4
import edu.ucsb.cs156.example.repositories.RecommendationRequestRepository;
5
import edu.ucsb.cs156.example.errors.EntityNotFoundException;
6
7
import io.swagger.v3.oas.annotations.Operation;
8
import io.swagger.v3.oas.annotations.Parameter;
9
import io.swagger.v3.oas.annotations.tags.Tag;
10
11
import lombok.extern.slf4j.Slf4j;
12
import jakarta.validation.Valid;
13
14
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.format.annotation.DateTimeFormat;
16
import org.springframework.security.access.prepost.PreAuthorize;
17
import org.springframework.web.bind.annotation.GetMapping;
18
import org.springframework.web.bind.annotation.PostMapping;
19
import org.springframework.web.bind.annotation.RequestMapping;
20
import org.springframework.web.bind.annotation.RequestParam;
21
import org.springframework.web.bind.annotation.RestController;
22
import org.springframework.web.bind.annotation.RequestBody;
23
import org.springframework.web.bind.annotation.PutMapping;
24
import org.springframework.web.bind.annotation.DeleteMapping;
25
26
import java.time.LocalDateTime;
27
28
@Tag(name = "RecommendationRequests")
29
@RestController
30
@RequestMapping("/api/recommendationrequests")
31
@Slf4j
32
public class RecommendationRequestsController extends ApiController {
33
34
    @Autowired
35
    RecommendationRequestRepository recommendationRequestRepository;
36
37
    @Operation(summary = "List all recommendation requests")
38
    @PreAuthorize("hasRole('USER')")
39
    @GetMapping("/all")
40
    public Iterable<RecommendationRequest> allRecommendationRequests() {
41
        log.info("GET /api/recommendationrequests/all");
42 1 1. allRecommendationRequests : replaced return value with Collections.emptyList for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::allRecommendationRequests → KILLED
        return recommendationRequestRepository.findAll();
43
    }
44
45
    @Operation(summary = "Create a new recommendation request")
46
    @PreAuthorize("hasRole('ADMIN')")
47
    @PostMapping("/post")
48
    public RecommendationRequest postRecommendationRequest(
49
        @Parameter(name = "requesterEmail") @RequestParam String requesterEmail,
50
        @Parameter(name = "professorEmail")  @RequestParam String professorEmail,
51
        @Parameter(name = "explanation")     @RequestParam String explanation,
52
        @Parameter(name = "dateRequested", description = "ISO date-time") 
53
            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
54
            LocalDateTime dateRequested,
55
        @Parameter(name = "dateNeeded",    description = "ISO date-time") 
56
            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
57
            LocalDateTime dateNeeded,
58
        @Parameter(name = "done")         @RequestParam boolean done
59
    ) {
60
        log.info("POST /api/recommendationrequests/post");
61
        RecommendationRequest req = RecommendationRequest.builder()
62
            .requesterEmail(requesterEmail)
63
            .professorEmail(professorEmail)
64
            .explanation(explanation)
65
            .dateRequested(dateRequested)
66
            .dateNeeded(dateNeeded)
67
            .done(done)
68
            .build();
69
70 1 1. postRecommendationRequest : replaced return value with null for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::postRecommendationRequest → KILLED
        return recommendationRequestRepository.save(req);
71
    }
72
73
    /**
74
     * Get a single recommendationrequest by id
75
     * 
76
     * @param id the id of the recommendationrequest
77
     * @return a RecommendationRequest
78
     */
79
    @Operation(summary= "Get a single RecommendationRequest")
80
    @PreAuthorize("hasRole('USER')")
81
    @GetMapping("")
82
    public RecommendationRequest getById(
83
            @Parameter(name="id") @RequestParam Long id) {
84
        RecommendationRequest recommendationrequest  = recommendationRequestRepository.findById(id)
85 1 1. lambda$getById$0 : replaced return value with null for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::lambda$getById$0 → KILLED
                .orElseThrow(() -> new EntityNotFoundException(RecommendationRequest.class, id));
86
87 1 1. getById : replaced return value with null for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::getById → KILLED
        return recommendationrequest;
88
    }
89
90
    /**
91
     * Update a single recommendation request
92
     *
93
     * @param id       id of the recommendation request to update
94
     * @param incoming the new recommendation request payload
95
     * @return the updated RecommendationRequest
96
     */
97
    @Operation(summary = "Update a single recommendation request")
98
    @PreAuthorize("hasRole('ADMIN')")
99
    @PutMapping("")
100
    public RecommendationRequest updateRecommendationRequest(
101
            @Parameter(name="id") @RequestParam Long id,
102
            @RequestBody @Valid RecommendationRequest incoming) {
103
104
        RecommendationRequest req = recommendationRequestRepository.findById(id)
105 1 1. lambda$updateRecommendationRequest$1 : replaced return value with null for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::lambda$updateRecommendationRequest$1 → KILLED
                .orElseThrow(() -> new EntityNotFoundException(RecommendationRequest.class, id));
106
107 1 1. updateRecommendationRequest : removed call to edu/ucsb/cs156/example/entities/RecommendationRequest::setRequesterEmail → KILLED
        req.setRequesterEmail(incoming.getRequesterEmail());
108 1 1. updateRecommendationRequest : removed call to edu/ucsb/cs156/example/entities/RecommendationRequest::setProfessorEmail → KILLED
        req.setProfessorEmail(incoming.getProfessorEmail());
109 1 1. updateRecommendationRequest : removed call to edu/ucsb/cs156/example/entities/RecommendationRequest::setExplanation → KILLED
        req.setExplanation(incoming.getExplanation());
110 1 1. updateRecommendationRequest : removed call to edu/ucsb/cs156/example/entities/RecommendationRequest::setDateRequested → KILLED
        req.setDateRequested(incoming.getDateRequested());
111 1 1. updateRecommendationRequest : removed call to edu/ucsb/cs156/example/entities/RecommendationRequest::setDateNeeded → KILLED
        req.setDateNeeded(incoming.getDateNeeded());
112 1 1. updateRecommendationRequest : removed call to edu/ucsb/cs156/example/entities/RecommendationRequest::setDone → KILLED
        req.setDone(incoming.getDone());
113
114 1 1. updateRecommendationRequest : replaced return value with null for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::updateRecommendationRequest → KILLED
        return recommendationRequestRepository.save(req);
115
    }
116
117
    /**
118
     * Delete a RecommendationRequest
119
     *
120
     * @param id the id of the recommendation request to delete
121
     * @return a message indicating the request was deleted
122
     */
123
    @Operation(summary = "Delete a recommendation request")
124
    @PreAuthorize("hasRole('ADMIN')")
125
    @DeleteMapping("")
126
    public Object deleteRecommendationRequest(
127
            @Parameter(name="id") @RequestParam Long id) {
128
129
        RecommendationRequest req = recommendationRequestRepository.findById(id)
130 1 1. lambda$deleteRecommendationRequest$2 : replaced return value with null for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::lambda$deleteRecommendationRequest$2 → KILLED
                .orElseThrow(() -> new EntityNotFoundException(RecommendationRequest.class, id));
131
132 1 1. deleteRecommendationRequest : removed call to edu/ucsb/cs156/example/repositories/RecommendationRequestRepository::delete → KILLED
        recommendationRequestRepository.delete(req);
133 1 1. deleteRecommendationRequest : replaced return value with null for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::deleteRecommendationRequest → KILLED
        return genericMessage("RecommendationRequest with id %s deleted".formatted(id));
134
    }
135
}

Mutations

42

1.1
Location : allRecommendationRequests
Killed by : edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests]/[method:logged_in_user_can_get_all_recommendationrequests()]
replaced return value with Collections.emptyList for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::allRecommendationRequests → KILLED

70

1.1
Location : postRecommendationRequest
Killed by : edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests]/[method:an_admin_user_can_post_a_new_recommendationrequest()]
replaced return value with null for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::postRecommendationRequest → KILLED

85

1.1
Location : lambda$getById$0
Killed by : edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests]/[method:test_that_logged_in_user_can_get_by_id_when_the_id_does_not_exist()]
replaced return value with null for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::lambda$getById$0 → KILLED

87

1.1
Location : getById
Killed by : edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests]/[method:test_that_logged_in_user_can_get_by_id_when_the_id_does_exist()]
replaced return value with null for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::getById → KILLED

105

1.1
Location : lambda$updateRecommendationRequest$1
Killed by : edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests]/[method:admin_cannot_edit_recommendationrequest_that_does_not_exist()]
replaced return value with null for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::lambda$updateRecommendationRequest$1 → KILLED

107

1.1
Location : updateRecommendationRequest
Killed by : edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests]/[method:admin_can_edit_an_existing_recommendationrequest()]
removed call to edu/ucsb/cs156/example/entities/RecommendationRequest::setRequesterEmail → KILLED

108

1.1
Location : updateRecommendationRequest
Killed by : edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests]/[method:admin_can_edit_an_existing_recommendationrequest()]
removed call to edu/ucsb/cs156/example/entities/RecommendationRequest::setProfessorEmail → KILLED

109

1.1
Location : updateRecommendationRequest
Killed by : edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests]/[method:admin_can_edit_an_existing_recommendationrequest()]
removed call to edu/ucsb/cs156/example/entities/RecommendationRequest::setExplanation → KILLED

110

1.1
Location : updateRecommendationRequest
Killed by : edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests]/[method:admin_can_edit_an_existing_recommendationrequest()]
removed call to edu/ucsb/cs156/example/entities/RecommendationRequest::setDateRequested → KILLED

111

1.1
Location : updateRecommendationRequest
Killed by : edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests]/[method:admin_can_edit_an_existing_recommendationrequest()]
removed call to edu/ucsb/cs156/example/entities/RecommendationRequest::setDateNeeded → KILLED

112

1.1
Location : updateRecommendationRequest
Killed by : edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests]/[method:admin_can_edit_an_existing_recommendationrequest()]
removed call to edu/ucsb/cs156/example/entities/RecommendationRequest::setDone → KILLED

114

1.1
Location : updateRecommendationRequest
Killed by : edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests]/[method:admin_can_edit_an_existing_recommendationrequest()]
replaced return value with null for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::updateRecommendationRequest → KILLED

130

1.1
Location : lambda$deleteRecommendationRequest$2
Killed by : edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests]/[method:admin_cannot_delete_nonexistent_recommendation_request()]
replaced return value with null for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::lambda$deleteRecommendationRequest$2 → KILLED

132

1.1
Location : deleteRecommendationRequest
Killed by : edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests]/[method:admin_can_delete_a_recommendation_request()]
removed call to edu/ucsb/cs156/example/repositories/RecommendationRequestRepository::delete → KILLED

133

1.1
Location : deleteRecommendationRequest
Killed by : edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.RecommendationRequestsControllerTests]/[method:admin_can_delete_a_recommendation_request()]
replaced return value with null for edu/ucsb/cs156/example/controllers/RecommendationRequestsController::deleteRecommendationRequest → KILLED

Active mutators

Tests examined


Report generated by PIT 1.17.0