parent
a7e807cba5
commit
a36479778f
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt;
|
||||
package kr.re.etri.autoflow;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.advice;
|
||||
package kr.re.etri.autoflow.advice;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
@ -1,13 +1,13 @@
|
||||
package kr.re.etri.security.jwt.controllers;
|
||||
package kr.re.etri.autoflow.controllers;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.enums.ParameterIn;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import kr.re.etri.security.jwt.entity.ProjectEntity;
|
||||
import kr.re.etri.security.jwt.payload.request.BaseSearchRequest;
|
||||
import kr.re.etri.security.jwt.payload.request.ProjectRequest;
|
||||
import kr.re.etri.security.jwt.service.ProjectService;
|
||||
import kr.re.etri.autoflow.entity.ProjectEntity;
|
||||
import kr.re.etri.autoflow.payload.request.BaseSearchRequest;
|
||||
import kr.re.etri.autoflow.payload.request.ProjectRequest;
|
||||
import kr.re.etri.autoflow.service.ProjectService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.controllers;
|
||||
package kr.re.etri.autoflow.controllers;
|
||||
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.entity;
|
||||
package kr.re.etri.autoflow.entity;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.persistence.*;
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.exception;
|
||||
package kr.re.etri.autoflow.exception;
|
||||
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.models;
|
||||
package kr.re.etri.autoflow.models;
|
||||
|
||||
public enum ERole {
|
||||
ROLE_USER,
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.models;
|
||||
package kr.re.etri.autoflow.models;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.models;
|
||||
package kr.re.etri.autoflow.models;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Getter;
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.models;
|
||||
package kr.re.etri.autoflow.models;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.payload.request;
|
||||
package kr.re.etri.autoflow.payload.request;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.payload.request;
|
||||
package kr.re.etri.autoflow.payload.request;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Getter;
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.payload.request;
|
||||
package kr.re.etri.autoflow.payload.request;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.payload.request;
|
||||
package kr.re.etri.autoflow.payload.request;
|
||||
|
||||
import jakarta.validation.constraints.*;
|
||||
import lombok.Getter;
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.payload.response;
|
||||
package kr.re.etri.autoflow.payload.response;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.payload.response;
|
||||
package kr.re.etri.autoflow.payload.response;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
@ -1,6 +1,6 @@
|
||||
package kr.re.etri.security.jwt.repository;
|
||||
package kr.re.etri.autoflow.repository;
|
||||
|
||||
import kr.re.etri.security.jwt.entity.ProjectEntity;
|
||||
import kr.re.etri.autoflow.entity.ProjectEntity;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
@ -1,12 +1,12 @@
|
||||
package kr.re.etri.security.jwt.repository;
|
||||
package kr.re.etri.autoflow.repository;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Modifying;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import kr.re.etri.security.jwt.models.RefreshToken;
|
||||
import kr.re.etri.security.jwt.models.User;
|
||||
import kr.re.etri.autoflow.models.RefreshToken;
|
||||
import kr.re.etri.autoflow.models.User;
|
||||
|
||||
@Repository
|
||||
public interface RefreshTokenRepository extends JpaRepository<RefreshToken, Long> {
|
||||
@ -1,12 +1,12 @@
|
||||
package kr.re.etri.security.jwt.repository;
|
||||
package kr.re.etri.autoflow.repository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import kr.re.etri.security.jwt.models.ERole;
|
||||
import kr.re.etri.security.jwt.models.Role;
|
||||
import kr.re.etri.autoflow.models.ERole;
|
||||
import kr.re.etri.autoflow.models.Role;
|
||||
|
||||
@Repository
|
||||
public interface RoleRepository extends JpaRepository<Role, Long> {
|
||||
@ -1,11 +1,11 @@
|
||||
package kr.re.etri.security.jwt.repository;
|
||||
package kr.re.etri.autoflow.repository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import kr.re.etri.security.jwt.models.User;
|
||||
import kr.re.etri.autoflow.models.User;
|
||||
|
||||
@Repository
|
||||
public interface UserRepository extends JpaRepository<User, Long> {
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.security.jwt;
|
||||
package kr.re.etri.autoflow.security.jwt;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
@ -1,10 +1,10 @@
|
||||
package kr.re.etri.security.jwt.service;
|
||||
package kr.re.etri.autoflow.service;
|
||||
|
||||
import kr.re.etri.security.jwt.entity.ProjectEntity;
|
||||
import kr.re.etri.security.jwt.payload.request.BaseSearchRequest;
|
||||
import kr.re.etri.security.jwt.payload.request.ProjectRequest;
|
||||
import kr.re.etri.security.jwt.repository.ProjectRepository;
|
||||
import kr.re.etri.security.jwt.specification.ProjectSpecification;
|
||||
import kr.re.etri.autoflow.entity.ProjectEntity;
|
||||
import kr.re.etri.autoflow.payload.request.BaseSearchRequest;
|
||||
import kr.re.etri.autoflow.payload.request.ProjectRequest;
|
||||
import kr.re.etri.autoflow.repository.ProjectRepository;
|
||||
import kr.re.etri.autoflow.specification.ProjectSpecification;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.data.domain.*;
|
||||
@ -1,11 +1,11 @@
|
||||
package kr.re.etri.security.jwt.specification;
|
||||
package kr.re.etri.autoflow.specification;
|
||||
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.metamodel.Attribute;
|
||||
import jakarta.persistence.metamodel.EntityType;
|
||||
import jakarta.persistence.metamodel.Metamodel;
|
||||
import kr.re.etri.security.jwt.entity.ProjectEntity;
|
||||
import kr.re.etri.autoflow.entity.ProjectEntity;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt.swagger;
|
||||
package kr.re.etri.autoflow.swagger;
|
||||
|
||||
import io.swagger.v3.oas.models.OpenAPI;
|
||||
import io.swagger.v3.oas.models.info.Info;
|
||||
@ -0,0 +1,142 @@
|
||||
package kr.re.etri.autoflow.controllers;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.times;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
import kr.re.etri.autoflow.models.ERole;
|
||||
import kr.re.etri.autoflow.models.Role;
|
||||
import kr.re.etri.autoflow.models.User;
|
||||
import kr.re.etri.autoflow.payload.request.SignupRequest;
|
||||
import kr.re.etri.autoflow.payload.response.MessageResponse;
|
||||
import kr.re.etri.autoflow.repository.RoleRepository;
|
||||
import kr.re.etri.autoflow.repository.UserRepository;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.*;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
|
||||
class AuthControllerTest {
|
||||
|
||||
@InjectMocks
|
||||
private AuthController authController;
|
||||
|
||||
@Mock
|
||||
private UserRepository userRepository;
|
||||
|
||||
@Mock
|
||||
private RoleRepository roleRepository;
|
||||
|
||||
@Mock
|
||||
private PasswordEncoder encoder;
|
||||
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
MockitoAnnotations.openMocks(this);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRegisterUser_Success() {
|
||||
SignupRequest request = new SignupRequest();
|
||||
request.setUsername("testuser");
|
||||
request.setEmail("test@example.com");
|
||||
request.setPassword("password");
|
||||
request.setRole(Set.of("ROLE_USER"));
|
||||
|
||||
when(userRepository.existsByUsername("testuser")).thenReturn(false);
|
||||
when(userRepository.existsByEmail("test@example.com")).thenReturn(false);
|
||||
when(encoder.encode("password")).thenReturn("encodedPassword");
|
||||
|
||||
Role roleUser = new Role();
|
||||
roleUser.setName(ERole.ROLE_USER);
|
||||
when(roleRepository.findByName(ERole.ROLE_USER)).thenReturn(Optional.of(roleUser));
|
||||
|
||||
when(userRepository.save(any(User.class))).thenAnswer(i -> i.getArguments()[0]);
|
||||
|
||||
ResponseEntity<?> response = authController.registerUser(request);
|
||||
|
||||
assert response.getStatusCode().is2xxSuccessful();
|
||||
assert response.getBody() instanceof MessageResponse;
|
||||
assert ((MessageResponse)response.getBody()).getMessage().equals("사용자 등록이 완료되었습니다.");
|
||||
|
||||
verify(userRepository, times(1)).save(any(User.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRegisterUser_UsernameExists() {
|
||||
SignupRequest request = new SignupRequest();
|
||||
request.setUsername("testuser");
|
||||
request.setEmail("test@example.com");
|
||||
|
||||
when(userRepository.existsByUsername("testuser")).thenReturn(true);
|
||||
|
||||
ResponseEntity<?> response = authController.registerUser(request);
|
||||
|
||||
assert response.getStatusCode().is4xxClientError();
|
||||
assert response.getBody() instanceof MessageResponse;
|
||||
assert ((MessageResponse)response.getBody()).getMessage().contains("이미 사용 중인 사용자 이름입니다.");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRegisterUser_EmailExists() {
|
||||
SignupRequest request = new SignupRequest();
|
||||
request.setUsername("testuser");
|
||||
request.setEmail("test@example.com");
|
||||
|
||||
when(userRepository.existsByUsername("testuser")).thenReturn(false);
|
||||
when(userRepository.existsByEmail("test@example.com")).thenReturn(true);
|
||||
|
||||
ResponseEntity<?> response = authController.registerUser(request);
|
||||
|
||||
assert response.getStatusCode().is4xxClientError();
|
||||
assert response.getBody() instanceof MessageResponse;
|
||||
assert ((MessageResponse)response.getBody()).getMessage().contains("이미 사용 중인 이메일입니다.");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRegisterUser_InvalidRole() {
|
||||
SignupRequest request = new SignupRequest();
|
||||
request.setUsername("testuser");
|
||||
request.setEmail("test@example.com");
|
||||
request.setPassword("password");
|
||||
request.setRole(Set.of("INVALID_ROLE"));
|
||||
|
||||
when(userRepository.existsByUsername("testuser")).thenReturn(false);
|
||||
when(userRepository.existsByEmail("test@example.com")).thenReturn(false);
|
||||
when(encoder.encode("password")).thenReturn("encodedPassword");
|
||||
|
||||
ResponseEntity<?> response = authController.registerUser(request);
|
||||
|
||||
assert response.getStatusCode().is4xxClientError();
|
||||
assert response.getBody() instanceof MessageResponse;
|
||||
assert ((MessageResponse)response.getBody()).getMessage().contains("역할은 유효하지 않습니다.");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRegisterUser_RoleNotFoundInDb() {
|
||||
SignupRequest request = new SignupRequest();
|
||||
request.setUsername("testuser");
|
||||
request.setEmail("test@example.com");
|
||||
request.setPassword("password");
|
||||
request.setRole(Set.of("ROLE_ADMIN"));
|
||||
|
||||
when(userRepository.existsByUsername("testuser")).thenReturn(false);
|
||||
when(userRepository.existsByEmail("test@example.com")).thenReturn(false);
|
||||
when(encoder.encode("password")).thenReturn("encodedPassword");
|
||||
|
||||
when(roleRepository.findByName(ERole.ROLE_ADMIN)).thenReturn(Optional.empty());
|
||||
|
||||
ResponseEntity<?> response;
|
||||
try {
|
||||
response = authController.registerUser(request);
|
||||
assert false; // 예외가 발생해야 함
|
||||
} catch (RuntimeException e) {
|
||||
assert e.getMessage().contains("역할이 DB에 존재하지 않습니다.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,190 @@
|
||||
package kr.re.etri.autoflow.controllers;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import kr.re.etri.autoflow.entity.ProjectEntity;
|
||||
import kr.re.etri.autoflow.payload.request.ProjectRequest;
|
||||
import kr.re.etri.autoflow.service.ProjectService;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.Mockito;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||
import org.springframework.boot.test.context.TestConfiguration;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
|
||||
import org.springframework.security.web.SecurityFilterChain;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
@WebMvcTest(ProjectController.class)
|
||||
@Import(ProjectControllerTest.MockConfig.class)
|
||||
class ProjectControllerTest {
|
||||
|
||||
@Autowired
|
||||
private MockMvc mockMvc;
|
||||
|
||||
@Autowired
|
||||
private ProjectService projectService;
|
||||
|
||||
@Autowired
|
||||
private ObjectMapper objectMapper;
|
||||
|
||||
@TestConfiguration
|
||||
static class MockConfig {
|
||||
|
||||
@Bean
|
||||
public ProjectService projectService() {
|
||||
return Mockito.mock(ProjectService.class);
|
||||
}
|
||||
|
||||
// 테스트 시 Security 완전 무시
|
||||
@Bean
|
||||
public SecurityFilterChain testSecurityFilterChain(HttpSecurity http) throws Exception {
|
||||
http
|
||||
.authorizeHttpRequests(authz -> authz.anyRequest().permitAll())
|
||||
.csrf(csrf -> csrf.disable());
|
||||
return http.build();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private ProjectEntity sampleProject(Long id, String code, String name) {
|
||||
return ProjectEntity.builder()
|
||||
.id(id)
|
||||
.prjCd(code)
|
||||
.prjNm(name)
|
||||
.prjStartDt(LocalDate.of(2025, 8, 1))
|
||||
.prjEndDt(LocalDate.of(2025, 12, 31))
|
||||
.build();
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("모든 프로젝트 조회")
|
||||
void getAllProjects() throws Exception {
|
||||
ProjectEntity entity = sampleProject(1L, "PRJ001", "AI 프로젝트");
|
||||
when(projectService.findAll()).thenReturn(List.of(entity));
|
||||
|
||||
mockMvc.perform(get("/api/projects"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$[0].prjCd").value("PRJ001"));
|
||||
}
|
||||
|
||||
@Nested
|
||||
class GetProjectByIdTests {
|
||||
@Test
|
||||
@DisplayName("ID로 프로젝트 조회 - 성공")
|
||||
void success() throws Exception {
|
||||
ProjectEntity entity = sampleProject(1L, "PRJ001", "AI 프로젝트");
|
||||
when(projectService.findById(1L)).thenReturn(Optional.of(entity));
|
||||
|
||||
mockMvc.perform(get("/api/projects/1"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$.prjCd").value("PRJ001"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("ID로 프로젝트 조회 - 실패")
|
||||
void notFound() throws Exception {
|
||||
when(projectService.findById(999L)).thenReturn(Optional.empty());
|
||||
|
||||
mockMvc.perform(get("/api/projects/999"))
|
||||
.andExpect(status().isNotFound());
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
class CreateProjectTests {
|
||||
@Test
|
||||
@DisplayName("프로젝트 생성 - 성공")
|
||||
void success() throws Exception {
|
||||
ProjectEntity input = sampleProject(null, "PRJ002", "새 프로젝트");
|
||||
when(projectService.create(any())).thenReturn(input);
|
||||
|
||||
mockMvc.perform(post("/api/projects")
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(input)))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$.prjCd").value("PRJ002"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("프로젝트 생성 - 실패(중복 등)")
|
||||
void failure() throws Exception {
|
||||
ProjectEntity input = ProjectEntity.builder().prjCd("PRJ_DUP").build();
|
||||
when(projectService.create(any())).thenThrow(new IllegalArgumentException("중복된 프로젝트 코드입니다."));
|
||||
|
||||
mockMvc.perform(post("/api/projects")
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(input)))
|
||||
.andExpect(status().isBadRequest())
|
||||
.andExpect(content().string("중복된 프로젝트 코드입니다."));
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
class UpdateProjectTests {
|
||||
@Test
|
||||
@DisplayName("프로젝트 수정 - 성공")
|
||||
void success() throws Exception {
|
||||
ProjectRequest request = new ProjectRequest();
|
||||
request.setPrjNm("수정된 이름");
|
||||
|
||||
ProjectEntity updated = sampleProject(1L, "PRJ001", "수정된 이름");
|
||||
when(projectService.update(Mockito.eq(1L), any())).thenReturn(Optional.of(updated));
|
||||
|
||||
mockMvc.perform(put("/api/projects/1")
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(request)))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("$.prjNm").value("수정된 이름"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("프로젝트 수정 - 실패")
|
||||
void notFound() throws Exception {
|
||||
ProjectRequest request = new ProjectRequest();
|
||||
request.setPrjNm("수정된 이름");
|
||||
|
||||
when(projectService.update(Mockito.eq(999L), any())).thenReturn(Optional.empty());
|
||||
|
||||
mockMvc.perform(put("/api/projects/999")
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(request)))
|
||||
.andExpect(status().isNotFound());
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
class DeleteProjectTests {
|
||||
@Test
|
||||
@DisplayName("프로젝트 삭제 - 성공")
|
||||
void success() throws Exception {
|
||||
when(projectService.delete(1L)).thenReturn(true);
|
||||
|
||||
mockMvc.perform(delete("/api/projects/1"))
|
||||
.andExpect(status().isNoContent());
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("프로젝트 삭제 - 실패")
|
||||
void notFound() throws Exception {
|
||||
when(projectService.delete(999L)).thenReturn(false);
|
||||
|
||||
mockMvc.perform(delete("/api/projects/999"))
|
||||
.andExpect(status().isNotFound());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package kr.re.etri.security.jwt;
|
||||
package kr.re.etri.autoflow;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
Loading…
Reference in new issue