UserActivityController.java

1
package edu.ucsb.cs.scaffold.controller;
2
3
import com.fasterxml.jackson.annotation.JsonProperty;
4
import com.fasterxml.jackson.core.JsonProcessingException;
5
import com.fasterxml.jackson.databind.JsonNode;
6
import com.fasterxml.jackson.databind.ObjectMapper;
7
import edu.ucsb.cs.scaffold.model.UserActivity;
8
import edu.ucsb.cs.scaffold.repository.UserActivityRepository;
9
import io.swagger.v3.oas.annotations.Operation;
10
import io.swagger.v3.oas.annotations.tags.Tag;
11
import lombok.RequiredArgsConstructor;
12
import org.springframework.http.ResponseEntity;
13
import org.springframework.web.bind.annotation.*;
14
15
@Tag(name = "User Activity")
16
@RestController
17
@RequiredArgsConstructor
18
public class UserActivityController {
19
20
  private final UserActivityRepository userActivityRepository;
21
  private final ObjectMapper objectMapper;
22
23
  @Operation(summary = "Insert a user activity event")
24
  @PostMapping("/api/user-activity")
25
  public ResponseEntity<Void> insertUserActivity(@RequestBody UserActivityRequest body) {
26 3 1. insertUserActivity : negated conditional → KILLED
2. insertUserActivity : negated conditional → KILLED
3. insertUserActivity : negated conditional → KILLED
    if (body.userid() == null || body.eventType() == null || body.eventType().isBlank()) {
27 1 1. insertUserActivity : replaced return value with null for edu/ucsb/cs/scaffold/controller/UserActivityController::insertUserActivity → KILLED
      return ResponseEntity.badRequest().build();
28
    }
29
30
    UserActivity activity = new UserActivity();
31 1 1. insertUserActivity : removed call to edu/ucsb/cs/scaffold/model/UserActivity::setUserid → KILLED
    activity.setUserid(body.userid());
32 1 1. insertUserActivity : removed call to edu/ucsb/cs/scaffold/model/UserActivity::setEventType → KILLED
    activity.setEventType(body.eventType());
33 1 1. insertUserActivity : removed call to edu/ucsb/cs/scaffold/model/UserActivity::setPayload → KILLED
    activity.setPayload(
34 1 1. insertUserActivity : negated conditional → KILLED
        writeJson(body.payload() == null ? objectMapper.createObjectNode() : body.payload()));
35
    userActivityRepository.save(activity);
36 1 1. insertUserActivity : replaced return value with null for edu/ucsb/cs/scaffold/controller/UserActivityController::insertUserActivity → KILLED
    return ResponseEntity.noContent().build();
37
  }
38
39
  private String writeJson(Object value) {
40
    try {
41 1 1. writeJson : replaced return value with "" for edu/ucsb/cs/scaffold/controller/UserActivityController::writeJson → KILLED
      return objectMapper.writeValueAsString(value);
42
    } catch (JsonProcessingException e) {
43
      throw new IllegalArgumentException("Unable to serialize JSON payload", e);
44
    }
45
  }
46
47
  public record UserActivityRequest(
48
      Long userid, @JsonProperty("event_type") String eventType, JsonNode payload) {}
49
}

Mutations

26

1.1
Location : insertUserActivity
Killed by : edu.ucsb.cs.scaffold.controllers.UserActivityControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs.scaffold.controllers.UserActivityControllerTests]/[method:post_with_null_userid_returns_400()]
negated conditional → KILLED

2.2
Location : insertUserActivity
Killed by : edu.ucsb.cs.scaffold.controllers.UserActivityControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs.scaffold.controllers.UserActivityControllerTests]/[method:post_with_null_event_type_returns_400()]
negated conditional → KILLED

3.3
Location : insertUserActivity
Killed by : edu.ucsb.cs.scaffold.ScaffoldApplicationTests.[engine:junit-jupiter]/[class:edu.ucsb.cs.scaffold.ScaffoldApplicationTests]/[method:insertUserActivityWithBlankEventTypeReturnsBadRequest()]
negated conditional → KILLED

27

1.1
Location : insertUserActivity
Killed by : edu.ucsb.cs.scaffold.controllers.UserActivityControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs.scaffold.controllers.UserActivityControllerTests]/[method:post_with_null_event_type_returns_400()]
replaced return value with null for edu/ucsb/cs/scaffold/controller/UserActivityController::insertUserActivity → KILLED

31

1.1
Location : insertUserActivity
Killed by : edu.ucsb.cs.scaffold.ScaffoldApplicationTests.[engine:junit-jupiter]/[class:edu.ucsb.cs.scaffold.ScaffoldApplicationTests]/[method:insertUserActivityWithNullPayloadSucceeds()]
removed call to edu/ucsb/cs/scaffold/model/UserActivity::setUserid → KILLED

32

1.1
Location : insertUserActivity
Killed by : edu.ucsb.cs.scaffold.ScaffoldApplicationTests.[engine:junit-jupiter]/[class:edu.ucsb.cs.scaffold.ScaffoldApplicationTests]/[method:insertUserActivityWithNullPayloadSucceeds()]
removed call to edu/ucsb/cs/scaffold/model/UserActivity::setEventType → KILLED

33

1.1
Location : insertUserActivity
Killed by : edu.ucsb.cs.scaffold.controllers.UserActivityControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs.scaffold.controllers.UserActivityControllerTests]/[method:post_with_payload_saves_serialized_json_string()]
removed call to edu/ucsb/cs/scaffold/model/UserActivity::setPayload → KILLED

34

1.1
Location : insertUserActivity
Killed by : edu.ucsb.cs.scaffold.controllers.UserActivityControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs.scaffold.controllers.UserActivityControllerTests]/[method:post_with_payload_saves_serialized_json_string()]
negated conditional → KILLED

36

1.1
Location : insertUserActivity
Killed by : edu.ucsb.cs.scaffold.controllers.UserActivityControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs.scaffold.controllers.UserActivityControllerTests]/[method:post_with_payload_saves_serialized_json_string()]
replaced return value with null for edu/ucsb/cs/scaffold/controller/UserActivityController::insertUserActivity → KILLED

41

1.1
Location : writeJson
Killed by : edu.ucsb.cs.scaffold.controllers.UserActivityControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs.scaffold.controllers.UserActivityControllerTests]/[method:post_with_payload_saves_serialized_json_string()]
replaced return value with "" for edu/ucsb/cs/scaffold/controller/UserActivityController::writeJson → KILLED

Active mutators

Tests examined


Report generated by PIT 1.17.0