UsersController.java

1
package edu.ucsb.cs156.dining.controllers;
2
3
import com.fasterxml.jackson.core.JsonProcessingException;
4
import edu.ucsb.cs156.dining.entities.User;
5
import edu.ucsb.cs156.dining.errors.EntityNotFoundException;
6
import edu.ucsb.cs156.dining.models.CurrentUser;
7
import edu.ucsb.cs156.dining.models.UserDataDTO;
8
import edu.ucsb.cs156.dining.repositories.UserRepository;
9
import edu.ucsb.cs156.dining.services.UserDataDTOService;
10
import edu.ucsb.cs156.dining.statuses.ModerationStatus;
11
import io.swagger.v3.oas.annotations.Operation;
12
import io.swagger.v3.oas.annotations.tags.Tag;
13
import java.time.LocalDate;
14
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.data.domain.Page;
16
import org.springframework.data.domain.Pageable;
17
import org.springframework.http.HttpStatus;
18
import org.springframework.http.ResponseEntity;
19
import org.springframework.security.access.prepost.PreAuthorize;
20
import org.springframework.web.bind.annotation.*;
21
import org.springframework.web.server.ResponseStatusException;
22
23
@Tag(name = "User information (admin only)")
24
@RequestMapping("/api")
25
@RestController
26
public class UsersController extends ApiController {
27
28
  @Autowired UserRepository userRepository;
29
30
  @Autowired UserDataDTOService userDataDTOService;
31
32
  @Operation(summary = "Get a list of all users")
33
  @PreAuthorize("hasRole('ROLE_ADMIN')")
34
  @GetMapping("/admin/users")
35
  public Page<UserDataDTO> users(Pageable pageable) throws JsonProcessingException {
36 1 1. users : replaced return value with null for edu/ucsb/cs156/dining/controllers/UsersController::users → KILLED
    return userDataDTOService.getUserDataDTOs(pageable);
37
  }
38
39
  @Operation(summary = "Get a list of all users with a proposed alias")
40
  @PreAuthorize("hasRole('ROLE_ADMIN')")
41
  @GetMapping("/admin/usersWithProposedAlias")
42
  public ResponseEntity<Iterable<User>> getUsersWithProposedAlias() {
43
    Iterable<User> users = userRepository.findByProposedAliasNotNull();
44 1 1. getUsersWithProposedAlias : replaced return value with null for edu/ucsb/cs156/dining/controllers/UsersController::getUsersWithProposedAlias → KILLED
    return ResponseEntity.ok().body(users);
45
  }
46
47
  @Operation(summary = "Get all aliases needing moderation")
48
  @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_MODERATOR')")
49
  @GetMapping("/admin/users/needsmoderation")
50
  public ResponseEntity<Iterable<User>> getAliasesNeedingModeration() {
51
    Iterable<User> users =
52
        userRepository.findByStatusAndProposedAliasNotNull(ModerationStatus.AWAITING_REVIEW);
53
54 1 1. getAliasesNeedingModeration : replaced return value with null for edu/ucsb/cs156/dining/controllers/UsersController::getAliasesNeedingModeration → KILLED
    return ResponseEntity.ok().body(users);
55
  }
56
57
  @Operation(summary = "Update proposed alias of the current user")
58
  @PreAuthorize("hasRole('ROLE_USER')")
59
  @PostMapping("/currentUser/updateAlias")
60
  public ResponseEntity<User> updateProposedAlias(@RequestParam String proposedAlias) {
61
    CurrentUser currentUser = super.getCurrentUser();
62
    User user = currentUser.getUser();
63
64 1 1. updateProposedAlias : negated conditional → KILLED
    if (userRepository.findByAlias(proposedAlias).isPresent()) {
65
      throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Alias already in use.");
66
    }
67
68 1 1. updateProposedAlias : removed call to edu/ucsb/cs156/dining/entities/User::setProposedAlias → KILLED
    user.setProposedAlias(proposedAlias);
69 1 1. updateProposedAlias : removed call to edu/ucsb/cs156/dining/entities/User::setStatus → KILLED
    user.setStatus(ModerationStatus.AWAITING_REVIEW);
70
    User savedUser = userRepository.save(user);
71
72 1 1. updateProposedAlias : replaced return value with null for edu/ucsb/cs156/dining/controllers/UsersController::updateProposedAlias → KILLED
    return ResponseEntity.ok(savedUser);
73
  }
74
75
  @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_MODERATOR')")
76
  @PutMapping("/currentUser/updateAliasModeration")
77
  public User updateAliasModeration(@RequestParam long id, @RequestParam Boolean approved) {
78
    User user =
79 1 1. lambda$updateAliasModeration$0 : replaced return value with null for edu/ucsb/cs156/dining/controllers/UsersController::lambda$updateAliasModeration$0 → KILLED
        userRepository.findById(id).orElseThrow(() -> new EntityNotFoundException(User.class, id));
80
81 1 1. updateAliasModeration : negated conditional → KILLED
    if (approved) {
82 1 1. updateAliasModeration : removed call to edu/ucsb/cs156/dining/entities/User::setAlias → KILLED
      user.setAlias(user.getProposedAlias());
83 1 1. updateAliasModeration : removed call to edu/ucsb/cs156/dining/entities/User::setStatus → KILLED
      user.setStatus(ModerationStatus.APPROVED);
84 1 1. updateAliasModeration : removed call to edu/ucsb/cs156/dining/entities/User::setDateApproved → KILLED
      user.setDateApproved(LocalDate.now());
85 1 1. updateAliasModeration : removed call to edu/ucsb/cs156/dining/entities/User::setProposedAlias → KILLED
      user.setProposedAlias(null);
86
    } else {
87 1 1. updateAliasModeration : removed call to edu/ucsb/cs156/dining/entities/User::setStatus → KILLED
      user.setStatus(ModerationStatus.REJECTED);
88
    }
89
90
    userRepository.save(user);
91
92 1 1. updateAliasModeration : replaced return value with null for edu/ucsb/cs156/dining/controllers/UsersController::updateAliasModeration → KILLED
    return user;
93
  }
94
}

Mutations

36

1.1
Location : users
Killed by : edu.ucsb.cs156.dining.controllers.UsersControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UsersControllerTests]/[method:users__admin_logged_in()]
replaced return value with null for edu/ucsb/cs156/dining/controllers/UsersController::users → KILLED

44

1.1
Location : getUsersWithProposedAlias
Killed by : edu.ucsb.cs156.dining.controllers.UsersControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UsersControllerTests]/[method:admin_can_get_all_users_with_proposed_alias()]
replaced return value with null for edu/ucsb/cs156/dining/controllers/UsersController::getUsersWithProposedAlias → KILLED

54

1.1
Location : getAliasesNeedingModeration
Killed by : edu.ucsb.cs156.dining.controllers.UsersControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UsersControllerTests]/[method:admin_gets_empty_list_if_no_aliases_need_moderation()]
replaced return value with null for edu/ucsb/cs156/dining/controllers/UsersController::getAliasesNeedingModeration → KILLED

64

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

68

1.1
Location : updateProposedAlias
Killed by : edu.ucsb.cs156.dining.controllers.UsersControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UsersControllerTests]/[method:a_user_can_post_a_new_alias()]
removed call to edu/ucsb/cs156/dining/entities/User::setProposedAlias → KILLED

69

1.1
Location : updateProposedAlias
Killed by : edu.ucsb.cs156.dining.controllers.UsersControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UsersControllerTests]/[method:a_user_can_post_a_new_alias()]
removed call to edu/ucsb/cs156/dining/entities/User::setStatus → KILLED

72

1.1
Location : updateProposedAlias
Killed by : edu.ucsb.cs156.dining.controllers.UsersControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UsersControllerTests]/[method:a_user_can_post_a_new_alias()]
replaced return value with null for edu/ucsb/cs156/dining/controllers/UsersController::updateProposedAlias → KILLED

79

1.1
Location : lambda$updateAliasModeration$0
Killed by : edu.ucsb.cs156.dining.controllers.UsersControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UsersControllerTests]/[method:admin_cannot_approve_nonexistent_user()]
replaced return value with null for edu/ucsb/cs156/dining/controllers/UsersController::lambda$updateAliasModeration$0 → KILLED

81

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

82

1.1
Location : updateAliasModeration
Killed by : edu.ucsb.cs156.dining.controllers.UsersControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UsersControllerTests]/[method:admin_can_approve_proposed_alias()]
removed call to edu/ucsb/cs156/dining/entities/User::setAlias → KILLED

83

1.1
Location : updateAliasModeration
Killed by : edu.ucsb.cs156.dining.controllers.UsersControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UsersControllerTests]/[method:admin_can_approve_proposed_alias()]
removed call to edu/ucsb/cs156/dining/entities/User::setStatus → KILLED

84

1.1
Location : updateAliasModeration
Killed by : edu.ucsb.cs156.dining.controllers.UsersControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UsersControllerTests]/[method:admin_can_approve_proposed_alias()]
removed call to edu/ucsb/cs156/dining/entities/User::setDateApproved → KILLED

85

1.1
Location : updateAliasModeration
Killed by : edu.ucsb.cs156.dining.controllers.UsersControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UsersControllerTests]/[method:admin_can_approve_proposed_alias()]
removed call to edu/ucsb/cs156/dining/entities/User::setProposedAlias → KILLED

87

1.1
Location : updateAliasModeration
Killed by : edu.ucsb.cs156.dining.controllers.UsersControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UsersControllerTests]/[method:admin_does_not_approve_alias()]
removed call to edu/ucsb/cs156/dining/entities/User::setStatus → KILLED

92

1.1
Location : updateAliasModeration
Killed by : edu.ucsb.cs156.dining.controllers.UsersControllerTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.dining.controllers.UsersControllerTests]/[method:admin_can_approve_proposed_alias()]
replaced return value with null for edu/ucsb/cs156/dining/controllers/UsersController::updateAliasModeration → KILLED

Active mutators

Tests examined


Report generated by PIT 1.17.0