DiningCommonsService.java

1
package edu.ucsb.cs156.dining.services;
2
3
import com.fasterxml.jackson.databind.ObjectMapper;
4
import java.time.LocalDateTime;
5
import java.util.Arrays;
6
import java.util.HashMap;
7
import java.util.List;
8
import java.util.Map;
9
import lombok.extern.slf4j.Slf4j;
10
import org.springframework.beans.factory.annotation.Autowired;
11
import org.springframework.beans.factory.annotation.Value;
12
import org.springframework.boot.web.client.RestTemplateBuilder;
13
import org.springframework.http.HttpEntity;
14
import org.springframework.http.HttpHeaders;
15
import org.springframework.http.HttpMethod;
16
import org.springframework.http.HttpStatus;
17
import org.springframework.http.MediaType;
18
import org.springframework.http.ResponseEntity;
19
import org.springframework.stereotype.Service;
20
import org.springframework.web.client.RestTemplate;
21
22
/** Service object that wraps the UCSB Dining Commons API */
23
@Service
24
@Slf4j
25
public class DiningCommonsService {
26
27
  @Autowired private ObjectMapper objectMapper;
28
29
  @Value("${app.ucsb.api.consumer_key}")
30
  private String apiKey;
31
32
  private RestTemplate restTemplate = new RestTemplate();
33
34
  public DiningCommonsService(RestTemplateBuilder restTemplateBuilder) throws Exception {
35
    restTemplate = restTemplateBuilder.build();
36
  }
37
38
  public static final String NAMES_ENDPOINT =
39
      "https://api.ucsb.edu/dining/commons/v1/names";
40
41
  public static final String MEALS_BY_DATE_ENDPOINT = "https://api.ucsb.edu/dining/menu/v1/";
42
43
  public String getDiningCommonsJSON() throws Exception {
44
45
    HttpHeaders headers = new HttpHeaders();
46 1 1. getDiningCommonsJSON : removed call to org/springframework/http/HttpHeaders::setAccept → KILLED
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
47 1 1. getDiningCommonsJSON : removed call to org/springframework/http/HttpHeaders::setContentType → KILLED
    headers.setContentType(MediaType.APPLICATION_JSON);
48 1 1. getDiningCommonsJSON : removed call to org/springframework/http/HttpHeaders::set → KILLED
    headers.set("ucsb-api-version", "1.0");
49 1 1. getDiningCommonsJSON : removed call to org/springframework/http/HttpHeaders::set → KILLED
    headers.set("ucsb-api-key", this.apiKey);
50
51
    HttpEntity<String> entity = new HttpEntity<>("body", headers);
52
53
    String url = NAMES_ENDPOINT;
54
55
    log.info("url=" + url);
56
57
    String retVal = "";
58
    MediaType contentType = null;
59
    HttpStatus statusCode = null;
60
61
    ResponseEntity<String> re = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
62
    contentType = re.getHeaders().getContentType();
63
    statusCode = (HttpStatus) re.getStatusCode();
64
    retVal = re.getBody();
65
66
    log.info("json: {} contentType: {} statusCode: {}", retVal, contentType, statusCode);
67 1 1. getDiningCommonsJSON : replaced return value with "" for edu/ucsb/cs156/dining/services/DiningCommonsService::getDiningCommonsJSON → KILLED
    return retVal;
68
  }
69
70
  /**
71
   * Get the meals for a specific dining commons by date
72
   * @param date
73
   * @param diningCommonsCode
74
   * @return meals by date by dining common
75
   * @throws Exception
76
   */
77
  public String getMealsByDateJSON(LocalDateTime date, String diningCommonsCode) throws Exception {
78
79
    // set headers for api requests
80
    HttpHeaders headers = new HttpHeaders();
81 1 1. getMealsByDateJSON : removed call to org/springframework/http/HttpHeaders::setAccept → KILLED
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
82 1 1. getMealsByDateJSON : removed call to org/springframework/http/HttpHeaders::setContentType → KILLED
    headers.setContentType(MediaType.APPLICATION_JSON);
83 1 1. getMealsByDateJSON : removed call to org/springframework/http/HttpHeaders::set → KILLED
    headers.set("ucsb-api-version", "1.0");
84 1 1. getMealsByDateJSON : removed call to org/springframework/http/HttpHeaders::set → KILLED
    headers.set("ucsb-api-key", this.apiKey);
85
    HttpEntity<String> entity = new HttpEntity<>("body", headers);
86
87
    // set the date in the format that the api expects
88
    String formattedDate = date.toString();
89
    log.info("formattedDate: {}", formattedDate);
90
91
    // set the url for the api request (https://api.ucsb.edu/dining/menu/v1/2024-10-21T12%3A00%3A00/carrillo)
92
    String url = MEALS_BY_DATE_ENDPOINT + date.toString() + "/" + diningCommonsCode;
93
94
95
    // get the information from request
96
    String retVal = "";
97
    MediaType contentType = null;
98
    HttpStatus statusCode = null;
99
100
    ResponseEntity<String> re = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
101
    contentType = re.getHeaders().getContentType();
102
    statusCode = (HttpStatus) re.getStatusCode();
103
    retVal = re.getBody();
104
105
    log.info("json: {} contentType: {} statusCode: {}", retVal, contentType, statusCode);
106 1 1. getMealsByDateJSON : replaced return value with "" for edu/ucsb/cs156/dining/services/DiningCommonsService::getMealsByDateJSON → KILLED
    return retVal;
107
  }
108
109
110
  /**
111
   * Get the meals for a specific dining commons by date
112
   * @param meal
113
   * @param date
114
   * @param diningCommonsCode
115
   * @return meals by date by dining common
116
   * @throws Exception
117
   */
118
  public String getMenuItemsByMealAndDateJSON(LocalDateTime date, String diningCommonsCode, String meal) throws Exception {
119
120
    // set headers for api requests
121
    HttpHeaders headers = new HttpHeaders();
122 1 1. getMenuItemsByMealAndDateJSON : removed call to org/springframework/http/HttpHeaders::setAccept → KILLED
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
123 1 1. getMenuItemsByMealAndDateJSON : removed call to org/springframework/http/HttpHeaders::setContentType → KILLED
    headers.setContentType(MediaType.APPLICATION_JSON);
124 1 1. getMenuItemsByMealAndDateJSON : removed call to org/springframework/http/HttpHeaders::set → KILLED
    headers.set("ucsb-api-version", "1.0");
125 1 1. getMenuItemsByMealAndDateJSON : removed call to org/springframework/http/HttpHeaders::set → KILLED
    headers.set("ucsb-api-key", this.apiKey);
126
    HttpEntity<String> entity = new HttpEntity<>("body", headers);
127
128
    // set the date in the format that the api expects
129
    String formattedDate = date.toString();
130
    log.info("formattedDate: {}", formattedDate);
131
132
    // set the url for the api request e.g. (https://api.ucsb.edu/dining/menu/v1/2021-02-10/ortega/lunch)
133
    String url = MEALS_BY_DATE_ENDPOINT + date.toString() + "/" + diningCommonsCode + "/" + meal;
134
135
136
    // get the information from request
137
    String retVal = "";
138
    MediaType contentType = null;
139
    HttpStatus statusCode = null;
140
141
    ResponseEntity<String> re = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
142
    contentType = re.getHeaders().getContentType();
143
    statusCode = (HttpStatus) re.getStatusCode();
144
    retVal = re.getBody();
145
146
    log.info("json: {} contentType: {} statusCode: {}", retVal, contentType, statusCode);
147 1 1. getMenuItemsByMealAndDateJSON : replaced return value with "" for edu/ucsb/cs156/dining/services/DiningCommonsService::getMenuItemsByMealAndDateJSON → KILLED
    return retVal;
148
  }
149
}

Mutations

46

1.1
Location : getDiningCommonsJSON
Killed by : edu.ucsb.cs156.dining.services.DiningCommonsServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.services.DiningCommonsServiceTests]/[method:get_returns_all_dining_commons()]
removed call to org/springframework/http/HttpHeaders::setAccept → KILLED

47

1.1
Location : getDiningCommonsJSON
Killed by : edu.ucsb.cs156.dining.services.DiningCommonsServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.services.DiningCommonsServiceTests]/[method:get_returns_all_dining_commons()]
removed call to org/springframework/http/HttpHeaders::setContentType → KILLED

48

1.1
Location : getDiningCommonsJSON
Killed by : edu.ucsb.cs156.dining.services.DiningCommonsServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.services.DiningCommonsServiceTests]/[method:get_returns_all_dining_commons()]
removed call to org/springframework/http/HttpHeaders::set → KILLED

49

1.1
Location : getDiningCommonsJSON
Killed by : edu.ucsb.cs156.dining.services.DiningCommonsServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.services.DiningCommonsServiceTests]/[method:get_returns_all_dining_commons()]
removed call to org/springframework/http/HttpHeaders::set → KILLED

67

1.1
Location : getDiningCommonsJSON
Killed by : edu.ucsb.cs156.dining.services.DiningCommonsServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.services.DiningCommonsServiceTests]/[method:get_returns_all_dining_commons()]
replaced return value with "" for edu/ucsb/cs156/dining/services/DiningCommonsService::getDiningCommonsJSON → KILLED

81

1.1
Location : getMealsByDateJSON
Killed by : edu.ucsb.cs156.dining.services.DiningCommonsServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.services.DiningCommonsServiceTests]/[method:get_returns_all_meals_by_date()]
removed call to org/springframework/http/HttpHeaders::setAccept → KILLED

82

1.1
Location : getMealsByDateJSON
Killed by : edu.ucsb.cs156.dining.services.DiningCommonsServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.services.DiningCommonsServiceTests]/[method:get_returns_all_meals_by_date()]
removed call to org/springframework/http/HttpHeaders::setContentType → KILLED

83

1.1
Location : getMealsByDateJSON
Killed by : edu.ucsb.cs156.dining.services.DiningCommonsServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.services.DiningCommonsServiceTests]/[method:get_returns_all_meals_by_date()]
removed call to org/springframework/http/HttpHeaders::set → KILLED

84

1.1
Location : getMealsByDateJSON
Killed by : edu.ucsb.cs156.dining.services.DiningCommonsServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.services.DiningCommonsServiceTests]/[method:get_returns_all_meals_by_date()]
removed call to org/springframework/http/HttpHeaders::set → KILLED

106

1.1
Location : getMealsByDateJSON
Killed by : edu.ucsb.cs156.dining.services.DiningCommonsServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.services.DiningCommonsServiceTests]/[method:get_returns_all_meals_by_date()]
replaced return value with "" for edu/ucsb/cs156/dining/services/DiningCommonsService::getMealsByDateJSON → KILLED

122

1.1
Location : getMenuItemsByMealAndDateJSON
Killed by : edu.ucsb.cs156.dining.services.DiningCommonsServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.services.DiningCommonsServiceTests]/[method:get_returns_all_menuitems_by_meal_date_diningcommons()]
removed call to org/springframework/http/HttpHeaders::setAccept → KILLED

123

1.1
Location : getMenuItemsByMealAndDateJSON
Killed by : edu.ucsb.cs156.dining.services.DiningCommonsServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.services.DiningCommonsServiceTests]/[method:get_returns_all_menuitems_by_meal_date_diningcommons()]
removed call to org/springframework/http/HttpHeaders::setContentType → KILLED

124

1.1
Location : getMenuItemsByMealAndDateJSON
Killed by : edu.ucsb.cs156.dining.services.DiningCommonsServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.services.DiningCommonsServiceTests]/[method:get_returns_all_menuitems_by_meal_date_diningcommons()]
removed call to org/springframework/http/HttpHeaders::set → KILLED

125

1.1
Location : getMenuItemsByMealAndDateJSON
Killed by : edu.ucsb.cs156.dining.services.DiningCommonsServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.services.DiningCommonsServiceTests]/[method:get_returns_all_menuitems_by_meal_date_diningcommons()]
removed call to org/springframework/http/HttpHeaders::set → KILLED

147

1.1
Location : getMenuItemsByMealAndDateJSON
Killed by : edu.ucsb.cs156.dining.services.DiningCommonsServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.services.DiningCommonsServiceTests]/[method:get_returns_all_menuitems_by_meal_date_diningcommons()]
replaced return value with "" for edu/ucsb/cs156/dining/services/DiningCommonsService::getMenuItemsByMealAndDateJSON → KILLED

Active mutators

Tests examined


Report generated by PIT 1.17.0