MenuItemReviewController.java

1
package edu.ucsb.cs156.example.controllers;
2
3
import edu.ucsb.cs156.example.entities.MenuItemReview;
4
import edu.ucsb.cs156.example.entities.UCSBDate;
5
import edu.ucsb.cs156.example.errors.EntityNotFoundException;
6
import edu.ucsb.cs156.example.repositories.MenuItemReviewRepository;
7
import edu.ucsb.cs156.example.repositories.UCSBDateRepository;
8
9
import io.swagger.v3.oas.annotations.Operation;
10
import io.swagger.v3.oas.annotations.Parameter;
11
import io.swagger.v3.oas.annotations.tags.Tag;
12
import lombok.extern.slf4j.Slf4j;
13
14
import com.fasterxml.jackson.core.JsonProcessingException;
15
16
import org.springframework.beans.factory.annotation.Autowired;
17
import org.springframework.data.repository.query.Param;
18
import org.springframework.format.annotation.DateTimeFormat;
19
import org.springframework.security.access.prepost.PreAuthorize;
20
import org.springframework.web.bind.annotation.DeleteMapping;
21
import org.springframework.web.bind.annotation.GetMapping;
22
import org.springframework.web.bind.annotation.PostMapping;
23
import org.springframework.web.bind.annotation.PutMapping;
24
import org.springframework.web.bind.annotation.RequestBody;
25
import org.springframework.web.bind.annotation.RequestMapping;
26
import org.springframework.web.bind.annotation.RequestParam;
27
import org.springframework.web.bind.annotation.RestController;
28
29
import jakarta.validation.Valid;
30
31
import java.time.LocalDateTime;
32
33
/**
34
 * This is a REST controller for MenuItemReviews
35
 */
36
37
@Tag(name = "MenuItemReviews")
38
@RequestMapping("/api/menuitemreviews")
39
@RestController
40
@Slf4j
41
public class MenuItemReviewController extends ApiController {
42
43
    @Autowired
44
    MenuItemReviewRepository menuItemReviewRepository;
45
46
    /**
47
     * List all menu item reviews
48
     * 
49
     * @return an iterable of MenuItemReview
50
     */
51
    @Operation(summary= "List all menu item reviews")
52
    @PreAuthorize("hasRole('ROLE_USER')")
53
    @GetMapping("/all")
54
    public Iterable<MenuItemReview> allMenuItemReviews() {
55
        Iterable<MenuItemReview> reviews = menuItemReviewRepository.findAll();
56 1 1. allMenuItemReviews : replaced return value with Collections.emptyList for edu/ucsb/cs156/example/controllers/MenuItemReviewController::allMenuItemReviews → KILLED
        return reviews;
57
    }
58
59
60
61
/**
62
 * Create a new menu item review.
63
 *
64
 * @param itemID the ID of the menu item being reviewed
65
 * @param reviewerEmail the email of the reviewer
66
 * @param stars the number of stars given in the review
67
 * @param reviewDate the date and time of the review
68
 * @param comments the comments included in the review
69
 * @return the saved {@link MenuItemReview}
70
 * @throws JsonProcessingException if there is an error processing JSON
71
 */
72
73
    @Operation(summary= "Create a new menu item review")
74
    @PreAuthorize("hasRole('ROLE_ADMIN')")
75
    @PostMapping("/post")
76
    public MenuItemReview postMenuItemReview(
77
            @Parameter(name="itemID") @RequestParam long itemID,
78
            @Parameter(name="reviewerEmail") @RequestParam String reviewerEmail,
79
            @Parameter(name="stars") @RequestParam int stars,
80
            @Parameter(name="reviewDate") @RequestParam("reviewDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime reviewDate,
81
            @Parameter(name="comments") @RequestParam String comments)
82
            throws JsonProcessingException {
83
84
        // For an explanation of @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
85
        // See: https://www.baeldung.com/spring-date-parameters
86
87
        log.info("dateReviewed={}", reviewDate);
88
89
        MenuItemReview menuItemReview = new MenuItemReview();
90 1 1. postMenuItemReview : removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setItemId → KILLED
        menuItemReview.setItemId(itemID);
91 1 1. postMenuItemReview : removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setReviewerEmail → KILLED
        menuItemReview.setReviewerEmail(reviewerEmail);
92 1 1. postMenuItemReview : removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setStars → KILLED
        menuItemReview.setStars(stars);
93 1 1. postMenuItemReview : removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setDateReviewed → KILLED
        menuItemReview.setDateReviewed(reviewDate);
94 1 1. postMenuItemReview : removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setComments → KILLED
        menuItemReview.setComments(comments);
95
        // menuItemReview.setDateReviewed(reviewDate);
96
97
        MenuItemReview savedMenuItemReview = menuItemReviewRepository.save(menuItemReview);
98 1 1. postMenuItemReview : replaced return value with null for edu/ucsb/cs156/example/controllers/MenuItemReviewController::postMenuItemReview → KILLED
        return savedMenuItemReview;
99
        
100
101
    }
102
103
    /**
104
     * Get a single review by id
105
     * 
106
     * @param id the id of the review
107
     * @return a MenuItemReview
108
     */
109
    @Operation(summary= "Get a single review")
110
    @PreAuthorize("hasRole('ROLE_USER')")
111
    @GetMapping("")
112
    public MenuItemReview getById(
113
            @Parameter(name="id") @RequestParam Long id) {
114
        MenuItemReview menuItemReview = menuItemReviewRepository.findById(id)
115 1 1. lambda$getById$0 : replaced return value with null for edu/ucsb/cs156/example/controllers/MenuItemReviewController::lambda$getById$0 → KILLED
                .orElseThrow(() -> new EntityNotFoundException(MenuItemReview.class, id));
116
117 1 1. getById : replaced return value with null for edu/ucsb/cs156/example/controllers/MenuItemReviewController::getById → KILLED
        return menuItemReview;
118
    }
119
120
     /**
121
     * Update a single review
122
     * 
123
     * @param id       id of the review to update
124
     * @param incoming the new review
125
     * @return the updated review object
126
     */
127
    @Operation(summary= "Update a single review")
128
    @PreAuthorize("hasRole('ROLE_ADMIN')")
129
    @PutMapping("")
130
    public MenuItemReview updateReview(
131
            @Parameter(name="id") @RequestParam Long id,
132
            @RequestBody @Valid MenuItemReview incoming) {
133
134
        MenuItemReview menuItemReview = menuItemReviewRepository.findById(id)
135 1 1. lambda$updateReview$1 : replaced return value with null for edu/ucsb/cs156/example/controllers/MenuItemReviewController::lambda$updateReview$1 → KILLED
                .orElseThrow(() -> new EntityNotFoundException(MenuItemReview.class, id));
136
137 1 1. updateReview : removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setItemId → KILLED
        menuItemReview.setItemId(incoming.getItemId());
138 1 1. updateReview : removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setReviewerEmail → KILLED
        menuItemReview.setReviewerEmail(incoming.getReviewerEmail());
139 1 1. updateReview : removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setStars → KILLED
        menuItemReview.setStars(incoming.getStars());
140 1 1. updateReview : removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setDateReviewed → KILLED
        menuItemReview.setDateReviewed(incoming.getDateReviewed());
141 1 1. updateReview : removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setComments → KILLED
        menuItemReview.setComments(incoming.getComments());
142
143
        menuItemReviewRepository.save(menuItemReview);
144
145 1 1. updateReview : replaced return value with null for edu/ucsb/cs156/example/controllers/MenuItemReviewController::updateReview → KILLED
        return menuItemReview;
146
    }
147
148
    /**
149
     * Delete a menu item review
150
     * 
151
     * @param id the id of the review to delete
152
     * @return a message indicating the review was deleted
153
     */
154
    @Operation(summary= "Delete a MenuItemReview")
155
    @PreAuthorize("hasRole('ROLE_ADMIN')")
156
    @DeleteMapping("")
157
    public Object deleteMenuItemReview(
158
            @Parameter(name="id") @RequestParam Long id) {
159
160
        MenuItemReview menuItemReview = menuItemReviewRepository.findById(id)
161 1 1. lambda$deleteMenuItemReview$2 : replaced return value with null for edu/ucsb/cs156/example/controllers/MenuItemReviewController::lambda$deleteMenuItemReview$2 → KILLED
                .orElseThrow(() -> new EntityNotFoundException(MenuItemReview.class, id));
162 1 1. deleteMenuItemReview : removed call to edu/ucsb/cs156/example/repositories/MenuItemReviewRepository::delete → KILLED
        menuItemReviewRepository.delete(menuItemReview);
163 1 1. deleteMenuItemReview : replaced return value with null for edu/ucsb/cs156/example/controllers/MenuItemReviewController::deleteMenuItemReview → KILLED
        return genericMessage("MenuItemReview with id %s deleted".formatted(id));
164
    }
165
166
 
167
}

Mutations

56

1.1
Location : allMenuItemReviews
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[method:logged_in_user_can_get_all_menuitemreviews()]
replaced return value with Collections.emptyList for edu/ucsb/cs156/example/controllers/MenuItemReviewController::allMenuItemReviews → KILLED

90

1.1
Location : postMenuItemReview
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[method:an_admin_user_can_post_a_new_ucsbmenuitemreview()]
removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setItemId → KILLED

91

1.1
Location : postMenuItemReview
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[method:an_admin_user_can_post_a_new_ucsbmenuitemreview()]
removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setReviewerEmail → KILLED

92

1.1
Location : postMenuItemReview
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[method:an_admin_user_can_post_a_new_ucsbmenuitemreview()]
removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setStars → KILLED

93

1.1
Location : postMenuItemReview
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[method:an_admin_user_can_post_a_new_ucsbmenuitemreview()]
removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setDateReviewed → KILLED

94

1.1
Location : postMenuItemReview
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[method:an_admin_user_can_post_a_new_ucsbmenuitemreview()]
removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setComments → KILLED

98

1.1
Location : postMenuItemReview
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[method:an_admin_user_can_post_a_new_ucsbmenuitemreview()]
replaced return value with null for edu/ucsb/cs156/example/controllers/MenuItemReviewController::postMenuItemReview → KILLED

115

1.1
Location : lambda$getById$0
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[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/MenuItemReviewController::lambda$getById$0 → KILLED

117

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

135

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

137

1.1
Location : updateReview
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[method:admin_can_edit_an_existing_review()]
removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setItemId → KILLED

138

1.1
Location : updateReview
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[method:admin_can_edit_an_existing_review()]
removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setReviewerEmail → KILLED

139

1.1
Location : updateReview
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[method:admin_can_edit_an_existing_review()]
removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setStars → KILLED

140

1.1
Location : updateReview
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[method:admin_can_edit_an_existing_review()]
removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setDateReviewed → KILLED

141

1.1
Location : updateReview
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[method:admin_can_edit_an_existing_review()]
removed call to edu/ucsb/cs156/example/entities/MenuItemReview::setComments → KILLED

145

1.1
Location : updateReview
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[method:admin_can_edit_an_existing_review()]
replaced return value with null for edu/ucsb/cs156/example/controllers/MenuItemReviewController::updateReview → KILLED

161

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

162

1.1
Location : deleteMenuItemReview
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[method:admin_can_delete_a_review()]
removed call to edu/ucsb/cs156/example/repositories/MenuItemReviewRepository::delete → KILLED

163

1.1
Location : deleteMenuItemReview
Killed by : edu.ucsb.cs156.example.controllers.MenuItemReviewsTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.example.controllers.MenuItemReviewsTests]/[method:admin_can_delete_a_review()]
replaced return value with null for edu/ucsb/cs156/example/controllers/MenuItemReviewController::deleteMenuItemReview → KILLED

Active mutators

Tests examined


Report generated by PIT 1.17.0