UCSBDiningMenuItemsController.java

1
package edu.ucsb.cs156.dining.controllers;
2
3
import edu.ucsb.cs156.dining.entities.MenuItem;
4
import edu.ucsb.cs156.dining.entities.Review;
5
import edu.ucsb.cs156.dining.errors.EntityNotFoundException;
6
import edu.ucsb.cs156.dining.models.Entree;
7
import edu.ucsb.cs156.dining.repositories.MenuItemRepository;
8
import edu.ucsb.cs156.dining.repositories.ReviewRepository;
9
import edu.ucsb.cs156.dining.services.UCSBDiningMenuItemsService;
10
import edu.ucsb.cs156.dining.statuses.ModerationStatus;
11
import io.swagger.v3.oas.annotations.Operation;
12
import io.swagger.v3.oas.annotations.Parameter;
13
import io.swagger.v3.oas.annotations.tags.Tag;
14
import java.util.ArrayList;
15
import java.util.List;
16
import java.util.Optional;
17
import lombok.extern.slf4j.Slf4j;
18
import org.springframework.beans.factory.annotation.Autowired;
19
import org.springframework.http.ResponseEntity;
20
import org.springframework.web.bind.annotation.GetMapping;
21
import org.springframework.web.bind.annotation.PathVariable;
22
import org.springframework.web.bind.annotation.RequestMapping;
23
import org.springframework.web.bind.annotation.RequestParam;
24
import org.springframework.web.bind.annotation.RestController;
25
26
@Tag(name = "UCSBDiningMenuItems")
27
@RestController
28
@RequestMapping("/api/diningcommons")
29
@Slf4j
30
public class UCSBDiningMenuItemsController extends ApiController {
31
32
  @Autowired UCSBDiningMenuItemsService ucsbDiningMenuItemsService;
33
34
  @Autowired MenuItemRepository menuItemRepository;
35
36
  @Autowired ReviewRepository reviewRepository;
37
38
  @Operation(summary = "Get list of entrees being served at given meal, dining common, and day")
39
  @GetMapping(
40
      value = "/{date-time}/{dining-commons-code}/{meal-code}",
41
      produces = "application/json")
42
  public ResponseEntity<List<MenuItem>> get_menu_items(
43
      @Parameter(
44
              description =
45
                  "date (in iso format, e.g. YYYY-mm-dd) or date-time (in iso format e.g. YYYY-mm-ddTHH:MM:SS)")
46
          @PathVariable("date-time")
47
          String datetime,
48
      @PathVariable("dining-commons-code") String diningcommoncode,
49
      @PathVariable("meal-code") String mealcode)
50
      throws Exception {
51
52
    List<Entree> body = ucsbDiningMenuItemsService.get(datetime, diningcommoncode, mealcode);
53
54
    List<MenuItem> menuitems = new ArrayList<>();
55
56
    for (Entree entree : body) {
57
      Optional<MenuItem> exists =
58
          menuItemRepository.findByDiningCommonsCodeAndMealCodeAndNameAndStation(
59
              diningcommoncode, mealcode, entree.getName(), entree.getStation());
60
61
      MenuItem newMenuItem = exists.orElse(new MenuItem());
62
      // MenuItem newMenuItem = new MenuItem();
63 1 1. get_menu_items : removed call to edu/ucsb/cs156/dining/entities/MenuItem::setDiningCommonsCode → KILLED
      newMenuItem.setDiningCommonsCode(diningcommoncode);
64 1 1. get_menu_items : removed call to edu/ucsb/cs156/dining/entities/MenuItem::setMealCode → KILLED
      newMenuItem.setMealCode(mealcode);
65 1 1. get_menu_items : removed call to edu/ucsb/cs156/dining/entities/MenuItem::setName → KILLED
      newMenuItem.setName(entree.getName());
66 1 1. get_menu_items : removed call to edu/ucsb/cs156/dining/entities/MenuItem::setStation → KILLED
      newMenuItem.setStation(entree.getStation());
67
68
      menuItemRepository.save(newMenuItem);
69
70
      List<Review> approvedReviews =
71
          (List<Review>)
72
              reviewRepository.findByItemAndStatus(newMenuItem, ModerationStatus.APPROVED);
73 1 1. get_menu_items : removed call to edu/ucsb/cs156/dining/entities/MenuItem::setReviews → KILLED
      newMenuItem.setReviews(approvedReviews);
74
75
      menuitems.add(newMenuItem);
76
    }
77
78 1 1. get_menu_items : replaced return value with null for edu/ucsb/cs156/dining/controllers/UCSBDiningMenuItemsController::get_menu_items → KILLED
    return ResponseEntity.ok().body(menuitems);
79
  }
80
81
  @Operation(summary = "Get a single menu item by ID")
82
  @GetMapping(value = "/menuitem", produces = "application/json")
83
  public ResponseEntity<MenuItem> get_menu_item_by_id(
84
      @Parameter(description = "ID of the menu item") @RequestParam long id) throws Exception {
85
    Optional<MenuItem> menuItem = menuItemRepository.findById(id);
86 1 1. get_menu_item_by_id : negated conditional → KILLED
    if (menuItem.isEmpty()) {
87
      throw new EntityNotFoundException(MenuItem.class, id);
88
    }
89 1 1. get_menu_item_by_id : replaced return value with null for edu/ucsb/cs156/dining/controllers/UCSBDiningMenuItemsController::get_menu_item_by_id → KILLED
    return ResponseEntity.ok().body(menuItem.get());
90
  }
91
}

Mutations

63

1.1
Location : get_menu_items
Killed by : edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests]/[method:meal_item_created_and_found()]
removed call to edu/ucsb/cs156/dining/entities/MenuItem::setDiningCommonsCode → KILLED

64

1.1
Location : get_menu_items
Killed by : edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests]/[method:meal_item_created_and_found()]
removed call to edu/ucsb/cs156/dining/entities/MenuItem::setMealCode → KILLED

65

1.1
Location : get_menu_items
Killed by : edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests]/[method:approved_reviews_are_included_in_menu_items_response()]
removed call to edu/ucsb/cs156/dining/entities/MenuItem::setName → KILLED

66

1.1
Location : get_menu_items
Killed by : edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests]/[method:meal_item_created_and_found()]
removed call to edu/ucsb/cs156/dining/entities/MenuItem::setStation → KILLED

73

1.1
Location : get_menu_items
Killed by : edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests]/[method:approved_reviews_are_included_in_menu_items_response()]
removed call to edu/ucsb/cs156/dining/entities/MenuItem::setReviews → KILLED

78

1.1
Location : get_menu_items
Killed by : edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests]/[method:approved_reviews_are_included_in_menu_items_response()]
replaced return value with null for edu/ucsb/cs156/dining/controllers/UCSBDiningMenuItemsController::get_menu_items → KILLED

86

1.1
Location : get_menu_item_by_id
Killed by : edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests]/[method:get_menu_item_by_id_success()]
negated conditional → KILLED

89

1.1
Location : get_menu_item_by_id
Killed by : edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UCSBDiningMenuItemsControllerTests]/[method:get_menu_item_by_id_success()]
replaced return value with null for edu/ucsb/cs156/dining/controllers/UCSBDiningMenuItemsController::get_menu_item_by_id → KILLED

Active mutators

Tests examined


Report generated by PIT 1.17.0