1 | package edu.ucsb.cs156.organic.controllers; | |
2 | ||
3 | import com.fasterxml.jackson.databind.ObjectMapper; | |
4 | ||
5 | import io.swagger.v3.oas.annotations.tags.Tag; | |
6 | import io.swagger.v3.oas.annotations.Operation; | |
7 | import io.swagger.v3.oas.annotations.Parameter; | |
8 | ||
9 | import org.springframework.beans.factory.annotation.Autowired; | |
10 | import org.springframework.data.domain.Page; | |
11 | import org.springframework.data.domain.PageRequest; | |
12 | import org.springframework.data.domain.Sort; | |
13 | import org.springframework.security.access.prepost.PreAuthorize; | |
14 | import org.springframework.web.bind.annotation.GetMapping; | |
15 | import org.springframework.web.bind.annotation.PostMapping; | |
16 | import org.springframework.web.bind.annotation.RequestMapping; | |
17 | import org.springframework.web.bind.annotation.RequestParam; | |
18 | import org.springframework.web.bind.annotation.RestController; | |
19 | ||
20 | ||
21 | import edu.ucsb.cs156.organic.entities.jobs.Job; | |
22 | import edu.ucsb.cs156.organic.jobs.TestJob; | |
23 | import edu.ucsb.cs156.organic.repositories.jobs.JobsRepository; | |
24 | import edu.ucsb.cs156.organic.services.jobs.JobService; | |
25 | ||
26 | ||
27 | @Tag(name = "Jobs") | |
28 | @RequestMapping("/api/jobs") | |
29 | @RestController | |
30 | public class JobsController extends ApiController { | |
31 | @Autowired | |
32 | private JobsRepository jobsRepository; | |
33 | ||
34 | @Autowired | |
35 | private JobService jobService; | |
36 | ||
37 | ||
38 | @Autowired | |
39 | ObjectMapper mapper; | |
40 | ||
41 | ||
42 | @Operation(summary = "List all jobs") | |
43 | @PreAuthorize("hasRole('ROLE_ADMIN')") | |
44 | @GetMapping("/all") | |
45 | public Iterable<Job> allJobs() { | |
46 | Iterable<Job> jobs = jobsRepository.findAll(); | |
47 |
1
1. allJobs : replaced return value with null for edu/ucsb/cs156/organic/controllers/JobsController::allJobs → KILLED |
return jobs; |
48 | } | |
49 | ||
50 | @Operation(summary = "List all jobs") | |
51 | @PreAuthorize("hasRole('ROLE_ADMIN')") | |
52 | @GetMapping("/all/pageable") | |
53 | public Page<Job> allJobsPaged( | |
54 | @Parameter(name="page") @RequestParam int page, | |
55 | @Parameter(name="size") @RequestParam int size | |
56 | ) { | |
57 | Page<Job> jobs = jobsRepository.findAll(PageRequest.of(page, size, Sort.by("id").descending())); | |
58 |
1
1. allJobsPaged : replaced return value with null for edu/ucsb/cs156/organic/controllers/JobsController::allJobsPaged → KILLED |
return jobs; |
59 | } | |
60 | ||
61 | @Operation(summary = "Launch Test Job (click fail if you want to test exception handling)") | |
62 | @PreAuthorize("hasRole('ROLE_ADMIN')") | |
63 | @PostMapping("/launch/testjob") | |
64 | public Job launchTestJob( | |
65 | @Parameter(name="fail") @RequestParam Boolean fail, | |
66 | @Parameter(name="sleepMs") @RequestParam Integer sleepMs | |
67 | ) { | |
68 | TestJob testJob = TestJob.builder() | |
69 | .fail(fail) | |
70 | .sleepMs(sleepMs) | |
71 | .build(); | |
72 | ||
73 | // Reference: frontend/src/components/Jobs/TestJobForm.js | |
74 |
4
1. launchTestJob : changed conditional boundary → KILLED 2. launchTestJob : changed conditional boundary → KILLED 3. launchTestJob : negated conditional → KILLED 4. launchTestJob : negated conditional → KILLED |
if (sleepMs < 0 || sleepMs > 60000) { |
75 | throw new IllegalArgumentException("sleepMs must be between 0 and 60000"); | |
76 | } | |
77 | ||
78 |
1
1. launchTestJob : replaced return value with null for edu/ucsb/cs156/organic/controllers/JobsController::launchTestJob → KILLED |
return jobService.runAsJob(testJob); |
79 | } | |
80 | } | |
Mutations | ||
47 |
1.1 |
|
58 |
1.1 |
|
74 |
1.1 2.2 3.3 4.4 |
|
78 |
1.1 |