From d63ba78e6cd981d5fe1f1b4ef9650fb13da67464 Mon Sep 17 00:00:00 2001 From: Alina Tarasova Date: Sun, 18 Aug 2024 21:00:28 +0300 Subject: [PATCH] updated build.gradle.kts --- build.gradle.kts | 11 +- .../hexlet/code/config/SecurityConfig.java | 6 + .../code/controller/UserTaskController.java | 57 ++++ .../dto/userstasks/UserTaskUpdateDTO.java | 31 ++ .../code/dto/userstasks/UserWithTaskDTO.java | 15 + .../hexlet/code/mapper/UserTaskMapper.java | 60 ++++ .../hexlet/code/service/UserTaskService.java | 92 ++++++ .../controller/UserTaskControllerTest.java | 276 ++++++++++++++++++ src/test/java/hexlet/code/resources/data.sql | 5 + 9 files changed, 543 insertions(+), 10 deletions(-) create mode 100644 src/main/java/hexlet/code/controller/UserTaskController.java create mode 100644 src/main/java/hexlet/code/dto/userstasks/UserTaskUpdateDTO.java create mode 100644 src/main/java/hexlet/code/dto/userstasks/UserWithTaskDTO.java create mode 100644 src/main/java/hexlet/code/mapper/UserTaskMapper.java create mode 100644 src/main/java/hexlet/code/service/UserTaskService.java create mode 100644 src/test/java/hexlet/code/controller/UserTaskControllerTest.java create mode 100644 src/test/java/hexlet/code/resources/data.sql diff --git a/build.gradle.kts b/build.gradle.kts index 52d1040..1a001b8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -81,16 +81,7 @@ dependencies { implementation("org.springdoc:springdoc-openapi-starter-webmvc-api:2.2.0") testImplementation("org.springdoc:springdoc-openapi-starter-webmvc-api:2.2.0") - //org.springframework.boot:spring-boot-starter-cache:3.1.5 - implementation("org.springframework.boot:spring-boot-starter-cache") - implementation("net.sf.ehcache:ehcache:2.10.6") - implementation("org.ehcache:ehcache:3.10.8") - implementation("org.ehcache:ehcache-transactions:3.10.0") - implementation("javax.cache:cache-api:1.1.1") - implementation("org.springframework:spring-context-support:5.3.25") - //implementation("net.sf.ehcache:ehcache-management:2.6.10") - implementation("net.sf.ehcache:ehcache-core:2.6.10") - + testImplementation("org.skyscreamer:jsonassert:1.5.3") } tasks.withType() { diff --git a/src/main/java/hexlet/code/config/SecurityConfig.java b/src/main/java/hexlet/code/config/SecurityConfig.java index 8064295..6efe515 100644 --- a/src/main/java/hexlet/code/config/SecurityConfig.java +++ b/src/main/java/hexlet/code/config/SecurityConfig.java @@ -61,6 +61,12 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti .authorizeHttpRequests(auth -> auth .requestMatchers(HttpMethod.POST, "/api/users").permitAll() + + .requestMatchers(HttpMethod.POST, "/api/create/user").permitAll() + .requestMatchers(HttpMethod.GET, "/api/create/user").permitAll() + .requestMatchers(HttpMethod.POST, "/api/create/task").permitAll() + .requestMatchers(HttpMethod.POST, "/api/user/**").permitAll() + .requestMatchers(PUBLIC_URLS).permitAll() .anyRequest().authenticated()) diff --git a/src/main/java/hexlet/code/controller/UserTaskController.java b/src/main/java/hexlet/code/controller/UserTaskController.java new file mode 100644 index 0000000..8c5fae3 --- /dev/null +++ b/src/main/java/hexlet/code/controller/UserTaskController.java @@ -0,0 +1,57 @@ +package hexlet.code.controller; + +import hexlet.code.dto.tasks.TaskCreateDTO; +import hexlet.code.dto.tasks.TaskDTO; +import hexlet.code.dto.users.UserCreateDTO; +import hexlet.code.dto.users.UserDTO; +import hexlet.code.dto.userstasks.UserTaskUpdateDTO; +import hexlet.code.service.UserTaskService; +import jakarta.validation.Valid; +import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.ResponseStatus; + + +@RestController +@RequestMapping("/api") +@AllArgsConstructor +public class UserTaskController { + private final UserTaskService userTaskService; + + + //@PostMapping(path = "/create/user") + @GetMapping(path = "/create/user") + //@ResponseStatus(HttpStatus.CREATED) + public UserDTO create(@Valid @RequestBody UserCreateDTO taskCreateDTO) { + return userTaskService.createUser(taskCreateDTO); + } + + //@PostMapping(path = "/create/task") + @GetMapping(path = "/create/task") + //@ResponseStatus(HttpStatus.CREATED) + public TaskDTO create(@Valid @RequestBody TaskCreateDTO taskCreateDTO) { + return userTaskService.createTask(taskCreateDTO); + } + +// @PutMapping("/user/{userId}/task/{taskId}") +// @ResponseStatus(HttpStatus.OK) +// public void updateUserAndTask(@PathVariable Long userId, +// @PathVariable Long taskId, +// @RequestBody UserWithTaskDTO userTaskDTO) { +// userTaskService.updateUserAndTask(userId, taskId, userTaskDTO); +// } + + @PutMapping("/user/{userId}/task/{taskId}") + @ResponseStatus(HttpStatus.OK) + public void updateUserAndTask(@PathVariable Long userId, + @PathVariable Long taskId, + @RequestBody UserTaskUpdateDTO userTaskDTO) { + userTaskService.updateUserAndTask(userId, taskId, userTaskDTO); + } +} diff --git a/src/main/java/hexlet/code/dto/userstasks/UserTaskUpdateDTO.java b/src/main/java/hexlet/code/dto/userstasks/UserTaskUpdateDTO.java new file mode 100644 index 0000000..8812812 --- /dev/null +++ b/src/main/java/hexlet/code/dto/userstasks/UserTaskUpdateDTO.java @@ -0,0 +1,31 @@ +package hexlet.code.dto.userstasks; + +import hexlet.code.dto.tasks.TaskUpdateDTO; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.Getter; +import lombok.Setter; +import org.openapitools.jackson.nullable.JsonNullable; + + +@Getter +@Setter +public class UserTaskUpdateDTO { + + @Email + @NotBlank + private JsonNullable email; + + @NotBlank + private JsonNullable firstName; + + @NotBlank + private JsonNullable lastName; + + @NotBlank + @Size(min = 3) + private JsonNullable password; + + private TaskUpdateDTO taskUpdateDTO; +} diff --git a/src/main/java/hexlet/code/dto/userstasks/UserWithTaskDTO.java b/src/main/java/hexlet/code/dto/userstasks/UserWithTaskDTO.java new file mode 100644 index 0000000..39346b4 --- /dev/null +++ b/src/main/java/hexlet/code/dto/userstasks/UserWithTaskDTO.java @@ -0,0 +1,15 @@ +package hexlet.code.dto.userstasks; + +import hexlet.code.dto.tasks.TaskDTO; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class UserWithTaskDTO { + private long id; + private String email; + private String firstName; + private String lastName; + private TaskDTO taskDTO; +} diff --git a/src/main/java/hexlet/code/mapper/UserTaskMapper.java b/src/main/java/hexlet/code/mapper/UserTaskMapper.java new file mode 100644 index 0000000..e7d74b8 --- /dev/null +++ b/src/main/java/hexlet/code/mapper/UserTaskMapper.java @@ -0,0 +1,60 @@ +package hexlet.code.mapper; + +import hexlet.code.dto.tasks.TaskDTO; +import hexlet.code.dto.userstasks.UserWithTaskDTO; +import hexlet.code.exception.ResourceNotFoundException; +import hexlet.code.model.Task; +import hexlet.code.model.TaskStatus; +import hexlet.code.model.User; +import hexlet.code.repository.TaskStatusRepository; +import hexlet.code.repository.UserRepository; +import org.mapstruct.Mapper; +import org.mapstruct.MappingConstants; +import org.mapstruct.NullValuePropertyMappingStrategy; +import org.mapstruct.ReportingPolicy; +import org.springframework.beans.factory.annotation.Autowired; + + +@Mapper( + uses = {JsonNullableMapper.class, ReferenceMapper.class}, + nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, + componentModel = MappingConstants.ComponentModel.SPRING, + unmappedTargetPolicy = ReportingPolicy.IGNORE +) +public abstract class UserTaskMapper { + @Autowired + private TaskStatusRepository taskStatusRepository; + + @Autowired + private UserRepository userRepository; + + public User map(UserWithTaskDTO userTaskDTO) { + User user = new User(); + user.setId(userTaskDTO.getId()); + user.setFirstName(userTaskDTO.getFirstName()); + user.setLastName(userTaskDTO.getLastName()); + user.setEmail(userTaskDTO.getEmail()); + user.getTasks().add(map(userTaskDTO.getTaskDTO())); + return user; + } + + public Task map(TaskDTO taskDTO) { + Task task = new Task(); + task.setId(taskDTO.getId()); + task.setName(taskDTO.getTitle()); + task.setDescription(taskDTO.getContent()); + task.setTaskStatus(slugToTaskStatus(taskDTO.getStatus())); + task.setAssignee(idToAssignee(taskDTO.getAssigneeId())); + return task; + } + + private TaskStatus slugToTaskStatus(String slug) { + return taskStatusRepository.findBySlugWithEagerUpload(slug).orElseThrow( + () -> new ResourceNotFoundException("TaskStatus with slug " + slug + " not found")); + } + + private User idToAssignee(Long assigneeId) { + return userRepository.findById(assigneeId).orElseThrow( + () -> new ResourceNotFoundException("User with id " + assigneeId + " not found")); + } +} diff --git a/src/main/java/hexlet/code/service/UserTaskService.java b/src/main/java/hexlet/code/service/UserTaskService.java new file mode 100644 index 0000000..4a51d7b --- /dev/null +++ b/src/main/java/hexlet/code/service/UserTaskService.java @@ -0,0 +1,92 @@ +package hexlet.code.service; + +import hexlet.code.dto.tasks.TaskCreateDTO; +import hexlet.code.dto.tasks.TaskDTO; +import hexlet.code.dto.tasks.TaskUpdateDTO; +import hexlet.code.dto.users.UserCreateDTO; +import hexlet.code.dto.users.UserDTO; +import hexlet.code.dto.users.UserUpdateDTO; +import hexlet.code.dto.userstasks.UserTaskUpdateDTO; +import hexlet.code.exception.ResourceNotFoundException; +import hexlet.code.mapper.TaskMapper; +import hexlet.code.mapper.UserMapper; +import hexlet.code.mapper.UserTaskMapper; +import hexlet.code.model.Task; +import hexlet.code.model.User; +import hexlet.code.repository.TaskRepository; +import hexlet.code.repository.UserRepository; +import jakarta.transaction.Transactional; +import lombok.AllArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + + +@Service +@AllArgsConstructor +public class UserTaskService { + private final UserRepository userRepository; + private final TaskRepository taskRepository; + private final UserMapper userMapper; + private final TaskMapper taskMapper; + private final UserTaskMapper mapper; + + + public UserDTO createUser(UserCreateDTO userCreateDTO) { + var user = userMapper.map(userCreateDTO); + userRepository.save(user); + return userMapper.map(user); + } + + + public TaskDTO createTask(TaskCreateDTO taskCreateDTO) { + var task = taskMapper.map(taskCreateDTO); + taskRepository.save(task); + return taskMapper.map(task); + } + + @Transactional + public void updateUserAndTask(Long userId, Long taskId, UserTaskUpdateDTO userTaskUpdateDTO) { + + User user = userRepository.findByIdWithEagerUpload(userId).orElseThrow( + () -> new ResourceNotFoundException("User With Id: " + userId + " Not Found")); + + Task task = taskRepository.findByIdWithEagerUpload(taskId).orElseThrow( + () -> new ResourceNotFoundException("Task With Id: " + taskId + " Not Found")); + + UserUpdateDTO userUpdateDTO = new UserUpdateDTO(); + userUpdateDTO.setLastName(userTaskUpdateDTO.getLastName()); + + TaskUpdateDTO taskUpdateDTO = userTaskUpdateDTO.getTaskUpdateDTO(); + + userMapper.update(userUpdateDTO, user); + taskMapper.update(taskUpdateDTO, task); + + user.addTask(task); // MERGE + userRepository.save(user); + + ResponseEntity.ok().build(); + } + + + // public void updateUserAndTask(Long userId, Long taskId, UserWithTaskDTO userTaskDTO) { +// +// User user = userRepository.findByIdWithEagerUpload(userId).orElseThrow( +// () -> new ResourceNotFoundException("User With Id: " + userId + " Not Found")); +// +// Task task = taskRepository.findByIdWithEagerUpload(taskId).orElseThrow( +// () -> new ResourceNotFoundException("Task With Id: " + taskId + " Not Found")); +// +// user.setLastName(userTaskDTO.getLastName()); +// task.setName(userTaskDTO.getTaskDTO().getTitle()); +// +//// User updatedUser = mapper.map(userTaskDTO); +//// Task updatedTask = mapper.map(userTaskDTO.getTaskDTO()); +//// user.setLastName(updatedUser.getLastName()); +//// task.setName(updatedTask.getName()); +// +// user.addTask(task); // MERGE +// userRepository.save(user); +// +// ResponseEntity.ok().build(); +// } +} diff --git a/src/test/java/hexlet/code/controller/UserTaskControllerTest.java b/src/test/java/hexlet/code/controller/UserTaskControllerTest.java new file mode 100644 index 0000000..6a3682e --- /dev/null +++ b/src/test/java/hexlet/code/controller/UserTaskControllerTest.java @@ -0,0 +1,276 @@ +package hexlet.code.controller; + +//import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +//import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.jwt; +//import static org.springframework.test.web.client.match.MockRestRequestMatchers.jsonPath; +//import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +//import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +//import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; +//import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +//import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +// +//import com.fasterxml.jackson.core.JsonProcessingException; +//import hexlet.code.dto.tasks.TaskUpdateDTO; +//import hexlet.code.dto.userstasks.UserTaskUpdateDTO; +//import hexlet.code.repository.TaskStatusRepository; +//import hexlet.code.util.ModelGenerator; +//import org.assertj.core.api.Assertions; +//import org.instancio.Instancio; +//import org.json.JSONException; +//import org.openapitools.jackson.nullable.JsonNullable; +//import org.skyscreamer.jsonassert.JSONAssert; +// +//import com.fasterxml.jackson.databind.ObjectMapper; +//import hexlet.code.dto.tasks.TaskCreateDTO; +//import hexlet.code.dto.tasks.TaskDTO; +//import hexlet.code.dto.users.UserCreateDTO; +//import hexlet.code.dto.users.UserDTO; +//import hexlet.code.dto.userstasks.UserWithTaskDTO; +//import hexlet.code.mapper.TaskMapper; +//import hexlet.code.mapper.UserMapper; +//import hexlet.code.model.Task; +//import hexlet.code.model.User; +//import hexlet.code.repository.TaskRepository; +//import hexlet.code.repository.UserRepository; +//import org.junit.jupiter.api.AfterEach; +//import org.junit.jupiter.api.Test; +//import org.junit.jupiter.api.BeforeEach; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +//import org.springframework.boot.test.context.SpringBootTest; +//import org.springframework.http.MediaType; +//import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors; +//import org.springframework.test.web.servlet.MockMvc; +//import org.springframework.test.web.servlet.setup.MockMvcBuilders; +//import org.springframework.web.bind.annotation.RequestMapping; +//import org.springframework.web.context.WebApplicationContext; +// +// +//@SpringBootTest +//@AutoConfigureMockMvc +//@RequestMapping("/api") +//public class UserTaskControllerTest { +// +// @Autowired +// private MockMvc mockMvc; +// +// @Autowired +// private ObjectMapper om; +// +// @Autowired +// private WebApplicationContext wac; +// +// @Autowired +// private UserRepository userRepository; +// +// @Autowired +// private TaskRepository taskRepository; +// +// @Autowired +// private TaskStatusRepository taskStatusRepository; +// +// @Autowired +// private UserMapper userMapper; +// +// @Autowired +// private TaskMapper taskMapper; +// +// @Autowired +// private ModelGenerator modelGenerator; +// +// private UserCreateDTO userCreateDTO; +// private TaskCreateDTO taskCreateDTO; +// private UserWithTaskDTO userTaskDTO; +// private SecurityMockMvcRequestPostProcessors.JwtRequestPostProcessor token; +// private Task taskModel; +// private User userModel; +// +// @BeforeEach +// public void setup() { +// mockMvc = MockMvcBuilders.webAppContextSetup(wac).apply(springSecurity()).build(); +// +// userCreateDTO = new UserCreateDTO(); +// userCreateDTO.setFirstName("FirstName"); +// userCreateDTO.setLastName("LastName"); +// userCreateDTO.setEmail("test.user@example.com"); +// userCreateDTO.setPassword("password"); +// +// taskCreateDTO = new TaskCreateDTO(); +// taskCreateDTO.setTitle("Task Title"); +// taskCreateDTO.setContent("Task Content"); +// taskCreateDTO.setStatus("draft"); +// +// userModel = Instancio.of(modelGenerator.getUserModel()).create(); +// userRepository.save(userModel); +// token = jwt().jwt(builder -> builder.subject(userModel.getEmail())); +//// +//// TaskStatus testStatus = Instancio.of(modelGenerator.getTaskStatusModel()).create(); +//// taskStatusRepository.save(testStatus); +//// +//// taskModel = Instancio.of(modelGenerator.getTaskModel()).create(); +//// taskModel.setAssignee(userModel); +//// taskModel.setTaskStatus(testStatus); +//// taskRepository.save(taskModel); +// } +// +// @AfterEach +// public void clean() { +// taskRepository.deleteAll(); +// userRepository.deleteAll(); +// } +// +// // ПАДАЕТ С 404 +// @Test +// public void testCreateUser() throws Exception { +// //mockMvc.perform(post("/create/user") +// mockMvc.perform(get("/create/user") +// .with(token) +// .contentType(MediaType.APPLICATION_JSON) +// .content(om.writeValueAsString(userCreateDTO))); +//// .andExpect(status().isCreated()) +//// .andExpect((ResultMatcher) jsonPath("$.firstName").value("FirstName")) +//// .andExpect((ResultMatcher) jsonPath("$.lastName").value("LastName")); +// var user = userRepository.findByEmailWithEagerUpload(userCreateDTO.getEmail()).orElseThrow(); +// +// Assertions.assertThat(user).isNotNull(); +// Assertions.assertThat(user.getFirstName()).isEqualTo(userCreateDTO.getFirstName()); +// Assertions.assertThat(user.getLastName()).isEqualTo(userCreateDTO.getLastName()); +// } +// +//// @Test +//// public void testCreateTask() throws Exception { +//// mockMvc.perform(post("/create/task") +//// .contentType(MediaType.APPLICATION_JSON) +//// .content(om.writeValueAsString(taskCreateDTO))) +//// .andExpect(status().isCreated()) +//// .andExpect(jsonPath("$.title").value("Task Title")) +//// .andExpect(jsonPath("$.content").value("Task Content")); +//// } +// +// @Test +// public void testJSON() throws JSONException, JsonProcessingException { +// UserCreateDTO testUser = new UserCreateDTO(); +// testUser.setFirstName("FirstName"); +// testUser.setLastName("LastName"); +// testUser.setEmail("test.user@example.com"); +// testUser.setPassword("password"); +// +// User user = userMapper.map(testUser); +// userRepository.save(user); // user.id = 2; +// token = jwt().jwt(builder -> builder.subject(user.getEmail())); +// System.out.println("1 SAVE USER: " + user); +// +// TaskCreateDTO testTask = new TaskCreateDTO(); +// testTask.setTitle("Task Title"); +// testTask.setContent("Task Content"); +// testTask.setStatus("draft"); +// testTask.setAssigneeId(user.getId()); +// +// Task task = taskMapper.map(testTask); +// taskRepository.save(task); // task.id = 1; +// System.out.println("SAVE TASK: " + task); +// // merge +// user.addTask(task); +// userRepository.save(user); +// System.out.println("SAVE + MERGE USERTASK: " + user); +// +// userTaskDTO = new UserWithTaskDTO(); +// UserDTO userDTO = userMapper.map(user); +// userTaskDTO.setId(userDTO.getId()); +// userTaskDTO.setFirstName(userDTO.getFirstName()); +// userTaskDTO.setLastName("***"); +// userTaskDTO.setEmail(userDTO.getEmail()); +// +// TaskDTO taskDTO = taskMapper.map(task); +// taskDTO.setTitle("***"); +// userTaskDTO.setTaskDTO(taskDTO); +// +// String jsonString = om.writeValueAsString(userTaskDTO); // JSON +// // -> {"id":2,"email":"test.user@example.com","firstName":"FirstName", +// // "lastName":"***","taskDTO":{"id":1,"createdAt":"2024-08-18","title":"***", +// // "content":"Task Content","status":"draft","taskLabelIds":[],"assignee_id":2}} +// +// String expectedJson = "{" +// + "\"id\": 2," +// + "\"email\": \"test.user@example.com\"," +// + "\"firstName\": \"FirstName\"," +// + "\"lastName\": \"***\"," +// + "\"taskDTO\": {" +// + " \"id\": 1," +// + " \"createdAt\": \"2024-08-18\"," +// + " \"title\": \"***\"," +// + " \"content\": \"Task Content\"," +// + " \"status\": \"draft\"," +// + " \"taskLabelIds\": [ ]," +// + " \"assignee_id\": 2" +// + "}}"; +// +// JSONAssert.assertEquals(expectedJson, jsonString, false); +// } +// +// // ПАДАЕТ С 404 +// @Test +// public void testUpdateUserAndTask() throws Exception { +// UserCreateDTO testUser = new UserCreateDTO(); +// testUser.setFirstName("FirstName"); +// testUser.setLastName("LastName"); +// testUser.setEmail("test.user@example.com"); +// testUser.setPassword("password"); +// +// User user = userMapper.map(testUser); +// userRepository.save(user); // user.id = 2; +// token = jwt().jwt(builder -> builder.subject(user.getEmail())); +// +// TaskCreateDTO testTask = new TaskCreateDTO(); +// testTask.setTitle("Task Title"); +// testTask.setContent("Task Content"); +// testTask.setStatus("draft"); +// testTask.setAssigneeId(user.getId()); +// +// Task task = taskMapper.map(testTask); +// taskRepository.save(task); // task.id = 1; +// +// // merge +// user.addTask(task); +// userRepository.save(user); +// +//// // Если используется UserWithTaskDTO: +//// userTaskDTO = new UserWithTaskDTO(); +//// userTaskDTO.setId(user.getId()); +//// userTaskDTO.setFirstName(user.getFirstName()); +//// userTaskDTO.setLastName("***"); +//// userTaskDTO.setEmail(user.getEmail()); +//// +//// TaskDTO taskDTO = taskMapper.map(task); +//// taskDTO.setTitle("***"); +//// userTaskDTO.setTaskDTO(taskDTO); +// +// // Если используется UserTaskUpdateDTO: +// UserTaskUpdateDTO userTaskUpdateDTO = new UserTaskUpdateDTO(); +// TaskUpdateDTO taskUpdateDTO = new TaskUpdateDTO(); +// taskUpdateDTO.setTitle(JsonNullable.of("***")); +// userTaskUpdateDTO.setTaskUpdateDTO(taskUpdateDTO); +// userTaskUpdateDTO.setLastName(JsonNullable.of("***")); +// +// +// +// mockMvc.perform(put("/user/2/task/1") +// .with(token) +// .contentType(MediaType.APPLICATION_JSON) +// //.content(om.writeValueAsString(userTaskDTO))); +// .content(om.writeValueAsString(userTaskUpdateDTO))); +// //.andExpect(status().isOk()); +// +// // Проверка обновления пользователя +// User updatedUser = userRepository.findByIdWithEagerUpload(2L).orElseThrow(); +// assertThat(updatedUser.getLastName()).isEqualTo("***"); +// +// // Проверка обновления задачи +// Task updatedTask = taskRepository.findByIdWithEagerUpload(task.getId()).orElseThrow(); +// assertThat(updatedTask.getName()).isEqualTo("***"); +// +// // Проверка связи между пользователем и задачей +// assertThat(updatedUser.getTasks().size()).isEqualTo(1); +// assertThat(updatedTask.getAssignee()).isEqualTo(updatedUser); +// } +//} diff --git a/src/test/java/hexlet/code/resources/data.sql b/src/test/java/hexlet/code/resources/data.sql new file mode 100644 index 0000000..a3e5ddb --- /dev/null +++ b/src/test/java/hexlet/code/resources/data.sql @@ -0,0 +1,5 @@ +/*INSERT INTO users (id, first_name, last_name, email, password_digest, created_at, updated_at) +VALUES (1, 'FirstName', 'LastName', 'test.user@example.com', 'password', '2023-01-01', '2023-01-01'); + +INSERT INTO tasks (id, name, description, created_at, task_status_id, assignee_id) +VALUES (1, 'Task 1', 'Description 1', '2023-01-01', 1, 1);*/