From 081268b3063ff3760bf7b94cc150ba612fb94605 Mon Sep 17 00:00:00 2001 From: chenyuan Date: Thu, 30 Jul 2026 14:00:40 +0800 Subject: [PATCH] feat: expose training task default restore APIs --- .../stu/TrainingTaskController.java | 27 +++++++++ ...iningTaskControllerRestoreDefaultTest.java | 57 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 src/test/java/com/sztzjy/linkCommerce/controller/stu/TrainingTaskControllerRestoreDefaultTest.java diff --git a/src/main/java/com/sztzjy/linkCommerce/controller/stu/TrainingTaskController.java b/src/main/java/com/sztzjy/linkCommerce/controller/stu/TrainingTaskController.java index ce27ed1..34f17c7 100644 --- a/src/main/java/com/sztzjy/linkCommerce/controller/stu/TrainingTaskController.java +++ b/src/main/java/com/sztzjy/linkCommerce/controller/stu/TrainingTaskController.java @@ -118,6 +118,33 @@ public class TrainingTaskController { } } + @DeleteMapping("/classes/{teachingClassId}/{taskKey}/override") + @ApiOperation("Restore training task default for teaching class") + public ResultEntity restoreClassTaskDefault(@PathVariable String teachingClassId, + @PathVariable String taskKey, + HttpServletRequest request) { + JwtUser user = requireTeacher(request); + try { + trainingTaskService.restoreClassTaskDefault(teachingClassId, taskKey, user.getUserId()); + return new ResultEntity(HttpStatus.OK, "Restore success"); + } catch (IllegalArgumentException e) { + return new ResultEntity(HttpStatus.BAD_REQUEST, e.getMessage()); + } + } + + @DeleteMapping("/classes/{teachingClassId}/overrides") + @ApiOperation("Restore all training task defaults for teaching class") + public ResultEntity restoreClassTasksDefaults(@PathVariable String teachingClassId, + HttpServletRequest request) { + JwtUser user = requireTeacher(request); + try { + trainingTaskService.restoreClassTasksDefaults(teachingClassId, user.getUserId()); + return new ResultEntity(HttpStatus.OK, "Restore success"); + } catch (IllegalArgumentException e) { + return new ResultEntity(HttpStatus.BAD_REQUEST, e.getMessage()); + } + } + @PostMapping @ApiOperation("Create training task") public ResultEntity create(@RequestBody TrainingTask task, HttpServletRequest request) { diff --git a/src/test/java/com/sztzjy/linkCommerce/controller/stu/TrainingTaskControllerRestoreDefaultTest.java b/src/test/java/com/sztzjy/linkCommerce/controller/stu/TrainingTaskControllerRestoreDefaultTest.java new file mode 100644 index 0000000..a4f8316 --- /dev/null +++ b/src/test/java/com/sztzjy/linkCommerce/controller/stu/TrainingTaskControllerRestoreDefaultTest.java @@ -0,0 +1,57 @@ +package com.sztzjy.linkCommerce.controller.stu; + +import com.sztzjy.linkCommerce.config.security.JwtUser; +import com.sztzjy.linkCommerce.config.security.TokenProvider; +import com.sztzjy.linkCommerce.service.TrainingTaskService; +import com.sztzjy.linkCommerce.util.ResultEntity; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.test.util.ReflectionTestUtils; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +class TrainingTaskControllerRestoreDefaultTest { + + @Test + void teacherCanRestoreOneTaskToDefault() { + TrainingTaskController controller = controllerWithService(); + TrainingTaskService service = (TrainingTaskService) ReflectionTestUtils.getField(controller, "trainingTaskService"); + + ResultEntity result = controller.restoreClassTaskDefault("class-1", "new-product-survey", requestFor("teacher-1")); + + assertEquals(HttpStatus.OK, result.getStatusCode()); + verify(service).restoreClassTaskDefault("class-1", "new-product-survey", "teacher-1"); + } + + @Test + void teacherCanRestoreAllClassTasksToDefault() { + TrainingTaskController controller = controllerWithService(); + TrainingTaskService service = (TrainingTaskService) ReflectionTestUtils.getField(controller, "trainingTaskService"); + + ResultEntity result = controller.restoreClassTasksDefaults("class-1", requestFor("teacher-1")); + + assertEquals(HttpStatus.OK, result.getStatusCode()); + verify(service).restoreClassTasksDefaults("class-1", "teacher-1"); + } + + private TrainingTaskController controllerWithService() { + TrainingTaskController controller = new TrainingTaskController(); + ReflectionTestUtils.setField(controller, "trainingTaskService", mock(TrainingTaskService.class)); + return controller; + } + + private MockHttpServletRequest requestFor(String userId) { + JwtUser user = new JwtUser(); + user.setUserId(userId); + user.setRoleId(3); + user.setUsername(userId); + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setUserPrincipal(new UsernamePasswordAuthenticationToken(user, null)); + request.addHeader("Authorization", "Bearer " + TokenProvider.createToken(user)); + return request; + } +}