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 with a course ID")
24
  @PostMapping("/api/user-activity")
25
  public ResponseEntity<Void> insertUserActivity(@RequestBody UserActivityRequest body) {
26 1 1. insertUserActivity : negated conditional → KILLED
    if (body.userid() == null
27 1 1. insertUserActivity : negated conditional → KILLED
        || body.courseId() == null
28 1 1. insertUserActivity : negated conditional → KILLED
        || body.eventType() == null
29 1 1. insertUserActivity : negated conditional → KILLED
        || body.eventType().isBlank()) {
30 1 1. insertUserActivity : replaced return value with null for edu/ucsb/cs/scaffold/controller/UserActivityController::insertUserActivity → KILLED
      return ResponseEntity.badRequest().build();
31
    }
32
33
    UserActivity activity = new UserActivity();
34 1 1. insertUserActivity : removed call to edu/ucsb/cs/scaffold/model/UserActivity::setUserid → KILLED
    activity.setUserid(body.userid());
35 1 1. insertUserActivity : removed call to edu/ucsb/cs/scaffold/model/UserActivity::setCourseId → KILLED
    activity.setCourseId(body.courseId());
36 1 1. insertUserActivity : removed call to edu/ucsb/cs/scaffold/model/UserActivity::setEventType → KILLED
    activity.setEventType(body.eventType());
37 1 1. insertUserActivity : removed call to edu/ucsb/cs/scaffold/model/UserActivity::setPayload → KILLED
    activity.setPayload(
38 1 1. insertUserActivity : negated conditional → KILLED
        writeJson(body.payload() == null ? objectMapper.createObjectNode() : body.payload()));
39
    userActivityRepository.save(activity);
40 1 1. insertUserActivity : replaced return value with null for edu/ucsb/cs/scaffold/controller/UserActivityController::insertUserActivity → KILLED
    return ResponseEntity.noContent().build();
41
  }
42
43
  private String writeJson(Object value) {
44
    try {
45 1 1. writeJson : replaced return value with "" for edu/ucsb/cs/scaffold/controller/UserActivityController::writeJson → KILLED
      return objectMapper.writeValueAsString(value);
46
    } catch (JsonProcessingException e) {
47
      throw new IllegalArgumentException("Unable to serialize JSON payload", e);
48
    }
49
  }
50
51
  public record UserActivityRequest(
52
      Long userid,
53
      @JsonProperty("courseId") Long courseId,
54
      @JsonProperty("event_type") String eventType,
55
      JsonNode payload) {}
56
}

Mutations

26

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

27

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

28

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

29

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

30

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

34

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

35

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

36

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

37

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

38

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

40

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

45

1.1
Location : writeJson
Killed by : edu.ucsb.cs.scaffold.controller.UserActivityControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs.scaffold.controller.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