Initial commit
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
package org.egovframe.cloud.portalservice;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
@SpringBootTest
|
||||
class PortalServiceApplicationTests {
|
||||
|
||||
@Test
|
||||
void contextLoads() {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,593 @@
|
||||
package org.egovframe.cloud.portalservice.api.attachment;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bouncycastle.util.encoders.Base64;
|
||||
import org.egovframe.cloud.portalservice.api.attachment.dto.AttachmentBase64RequestDto;
|
||||
import org.egovframe.cloud.portalservice.api.attachment.dto.AttachmentEditorResponseDto;
|
||||
import org.egovframe.cloud.portalservice.api.attachment.dto.AttachmentFileResponseDto;
|
||||
import org.egovframe.cloud.portalservice.api.attachment.dto.AttachmentResponseDto;
|
||||
import org.egovframe.cloud.portalservice.api.attachment.dto.AttachmentTempSaveRequestDto;
|
||||
import org.egovframe.cloud.portalservice.api.attachment.dto.AttachmentUpdateRequestDto;
|
||||
import org.egovframe.cloud.portalservice.api.attachment.dto.AttachmentUploadRequestDto;
|
||||
import org.egovframe.cloud.portalservice.domain.attachment.Attachment;
|
||||
import org.egovframe.cloud.portalservice.domain.attachment.AttachmentRepository;
|
||||
import org.egovframe.cloud.portalservice.service.attachment.AttachmentService;
|
||||
import org.egovframe.cloud.portalservice.util.RestResponsePage;
|
||||
import org.egovframe.cloud.portalservice.utils.FileStorageUtils;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.boot.web.server.LocalServerPort;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.core.io.FileSystemResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.mock.web.MockMultipartFile;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
@EnableConfigurationProperties
|
||||
@TestPropertySource(properties = {"spring.config.location=classpath:application-test.yml"})
|
||||
@ActiveProfiles(profiles = "test")
|
||||
class AttachmentApiControllerTest {
|
||||
@LocalServerPort
|
||||
private int port;
|
||||
|
||||
@Autowired
|
||||
TestRestTemplate restTemplate;
|
||||
|
||||
@Autowired
|
||||
FileStorageUtils fileStorageUtils;
|
||||
|
||||
@Autowired
|
||||
AttachmentService attachmentService;
|
||||
|
||||
@Autowired
|
||||
AttachmentRepository attachmentRepository;
|
||||
|
||||
@AfterEach
|
||||
public void teardown() {
|
||||
List<Attachment> all = attachmentRepository.findAll();
|
||||
|
||||
for (int i = 0; i < all.size(); i++) {
|
||||
Attachment attachment = all.get(i);
|
||||
attachmentService.delete(attachment.getUniqueId());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* file to byte[]
|
||||
*
|
||||
* @param file
|
||||
* @return
|
||||
*/
|
||||
public byte[] getByteFile(File file) {
|
||||
byte[] data = new byte[(int) file.length()];
|
||||
try {
|
||||
FileInputStream inputStream = new FileInputStream(file);
|
||||
inputStream.read(data, 0, data.length);
|
||||
inputStream.close();
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
log.debug("file not found = {}", e);
|
||||
} catch (IOException e) {
|
||||
log.debug("file IO exception = {}", e);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* test.txt 파일 생성
|
||||
*
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
public static Resource getTestFile() throws IOException {
|
||||
Path testFile = Files.createTempFile("test-file", ".txt");
|
||||
System.out.println("Creating and Uploading Test File: " + testFile);
|
||||
Files.write(testFile, "Hello World !!, This is a test file.".getBytes());
|
||||
testFile.toFile().deleteOnExit();
|
||||
return new FileSystemResource(testFile.toFile());
|
||||
}
|
||||
|
||||
/**
|
||||
* 하나의 멀티파트 파일 생성
|
||||
*
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
private MultipartFile getMultipartFile() throws IOException {
|
||||
Resource resource = getTestFile();
|
||||
//String name, @Nullable String originalFilename, @Nullable String contentType, @Nullable byte[] content
|
||||
return new MockMultipartFile("files", resource.getFilename(),
|
||||
Files.probeContentType(resource.getFile().toPath()), resource.getInputStream());
|
||||
}
|
||||
|
||||
/**
|
||||
* 여러 건의 멀티파트 파일 생성
|
||||
*
|
||||
* @param size
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
private List<MultipartFile> getMultipartFileList(int size) throws IOException {
|
||||
List<MultipartFile> multipartFiles = new ArrayList<>();
|
||||
for (int i = 0; i < size; i++) {
|
||||
multipartFiles.add(getMultipartFile());
|
||||
}
|
||||
|
||||
return multipartFiles;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 여러 건의 .temp 파일 생성 후 AttachmentSaveRequestDto List return
|
||||
*
|
||||
* @param size
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
private List<AttachmentTempSaveRequestDto> getTempSaveDto(int size) throws IOException {
|
||||
List<MultipartFile> multipartFiles = getMultipartFileList(size);
|
||||
List<AttachmentFileResponseDto> responseDtos = attachmentService.uploadFiles(multipartFiles);
|
||||
|
||||
List<AttachmentTempSaveRequestDto> saveRequestDtoList = new ArrayList<>();
|
||||
for (int i = 0; i < responseDtos.size(); i++) {
|
||||
AttachmentFileResponseDto responseDto = responseDtos.get(i);
|
||||
saveRequestDtoList.add(AttachmentTempSaveRequestDto.builder()
|
||||
.physicalFileName(responseDto.getPhysicalFileName())
|
||||
.originalName(responseDto.getOriginalFileName())
|
||||
.size(responseDto.getSize())
|
||||
.fileType(responseDto.getFileType())
|
||||
.entityName("Policy")
|
||||
.entityId("testEntityId_"+i)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
return saveRequestDtoList;
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void 이미지_BASE64인코딩후_업로드_정상() throws Exception {
|
||||
//given
|
||||
String url = "/api/v1/upload/editor";
|
||||
|
||||
Path testFile = Paths.get("/Users/violet/Desktop/test/300.jpg")
|
||||
.toAbsolutePath().normalize();
|
||||
|
||||
String base64data = Base64.toBase64String(getByteFile(testFile.toFile()));
|
||||
AttachmentBase64RequestDto requestDto = AttachmentBase64RequestDto.builder()
|
||||
.fieldName("upload")
|
||||
.fileType("image/jpg")
|
||||
.fileBase64(base64data)
|
||||
.originalName("300.jpg")
|
||||
.size(testFile.toFile().length())
|
||||
.build();
|
||||
|
||||
|
||||
ResponseEntity<AttachmentEditorResponseDto> responseEntity =
|
||||
restTemplate.postForEntity(url, requestDto, AttachmentEditorResponseDto.class);
|
||||
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody().getOriginalFileName()).isEqualTo("300.jpg");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 첨부파일_싱글_업로드_정상() throws Exception {
|
||||
//given
|
||||
String url = "/api/v1/upload";
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
|
||||
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
|
||||
body.add("file", getTestFile());
|
||||
|
||||
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity(body, headers);
|
||||
|
||||
//when
|
||||
ResponseEntity<AttachmentFileResponseDto> responseEntity =
|
||||
restTemplate.postForEntity(url, requestEntity, AttachmentFileResponseDto.class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 첨부파일_멀티_업로드_정상() throws Exception {
|
||||
//given
|
||||
String url = "/api/v1/upload/multi";
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
|
||||
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
|
||||
body.add("files", getTestFile());
|
||||
body.add("files", getTestFile());
|
||||
body.add("files", getTestFile());
|
||||
|
||||
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity(body, headers);
|
||||
|
||||
//when
|
||||
ResponseEntity<List<AttachmentFileResponseDto>> responseEntity =
|
||||
restTemplate.exchange(url, HttpMethod.POST, requestEntity,
|
||||
new ParameterizedTypeReference<List<AttachmentFileResponseDto>>() {});
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 에디터이미지업로드_후_이미지태그에서_이미지파일_조회_정상() throws Exception {
|
||||
//given
|
||||
Path testFile = Paths.get("/Users/violet/Desktop/test/300.jpg")
|
||||
.toAbsolutePath().normalize();
|
||||
|
||||
String base64data = Base64.toBase64String(getByteFile(testFile.toFile()));
|
||||
AttachmentBase64RequestDto requestDto = AttachmentBase64RequestDto.builder()
|
||||
.fieldName("upload")
|
||||
.fileType("image/jpg")
|
||||
.fileBase64(base64data)
|
||||
.originalName("300.jpg")
|
||||
.size(testFile.toFile().length())
|
||||
.build();
|
||||
AttachmentEditorResponseDto responseDto = attachmentService.uploadEditor(requestDto);
|
||||
|
||||
String url = "/api/v1/images/editor/"+responseDto.getUrl();
|
||||
|
||||
//when
|
||||
ResponseEntity<byte[]> responseEntity = restTemplate.getForEntity(url, byte[].class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 새로운_첨부파일_temp파일_목록_저장_정상() throws Exception {
|
||||
//given
|
||||
List<AttachmentTempSaveRequestDto> saveRequestDtoList = getTempSaveDto(2);
|
||||
|
||||
String url = "/api/v1/attachments/temp";
|
||||
|
||||
//when
|
||||
ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, saveRequestDtoList, String.class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 첨부파일코드로_목록조회() throws Exception {
|
||||
//given
|
||||
List<AttachmentTempSaveRequestDto> saveRequestDtoList = getTempSaveDto(2);
|
||||
String attachmentCode = attachmentService.save(saveRequestDtoList);
|
||||
|
||||
String url = "/api/v1/attachments/"+attachmentCode;
|
||||
|
||||
//when
|
||||
ResponseEntity<List<AttachmentResponseDto>> responseEntity =
|
||||
restTemplate.exchange(url, HttpMethod.GET, null,
|
||||
new ParameterizedTypeReference<List<AttachmentResponseDto>>() {});
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody().size()).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 첨부파일코드가_있는_경우_temp파일에대해_새로운파일저장_and_삭제여부_Y_정상() throws Exception {
|
||||
//given
|
||||
List<AttachmentTempSaveRequestDto> saveRequestDtoList = getTempSaveDto(3);
|
||||
String attachmentCode = attachmentService.save(saveRequestDtoList);
|
||||
List<AttachmentResponseDto> attachmentList = attachmentService.findByCode(attachmentCode);
|
||||
|
||||
List<AttachmentTempSaveRequestDto> updateRequestDtoList = new ArrayList<>();
|
||||
|
||||
//짝수 index 첨부파일 삭제 = Y
|
||||
for (int i = 0; i < attachmentList.size(); i++) {
|
||||
AttachmentResponseDto attachmentResponseDto = attachmentList.get(i);
|
||||
updateRequestDtoList.add(
|
||||
AttachmentTempSaveRequestDto.builder()
|
||||
.uniqueId(attachmentResponseDto.getId())
|
||||
.physicalFileName(attachmentResponseDto.getPhysicalFileName())
|
||||
.originalName(attachmentResponseDto.getOriginalFileName())
|
||||
.size(attachmentResponseDto.getSize())
|
||||
.entityName(attachmentResponseDto.getEntityName())
|
||||
.entityId(attachmentResponseDto.getEntityId())
|
||||
.isDelete(i%2==0)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
//2개 첨부파일 더하기
|
||||
updateRequestDtoList.addAll(getTempSaveDto(2));
|
||||
|
||||
HttpEntity<List<AttachmentTempSaveRequestDto>> requestEntity = new HttpEntity<>(updateRequestDtoList);
|
||||
|
||||
//when
|
||||
String url = "/api/v1/attachments/temp/"+attachmentCode;
|
||||
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.PUT, requestEntity, String.class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 관리자_첨부파일_목록_조회_정상() throws Exception {
|
||||
//given
|
||||
List<AttachmentTempSaveRequestDto> saveRequestDtoList1 = getTempSaveDto(2);
|
||||
attachmentService.save(saveRequestDtoList1);
|
||||
|
||||
List<AttachmentTempSaveRequestDto> saveRequestDtoList2 = getTempSaveDto(3);
|
||||
attachmentService.save(saveRequestDtoList2);
|
||||
|
||||
String url = "/api/v1/attachments/admin";
|
||||
|
||||
//when
|
||||
ResponseEntity<RestResponsePage<AttachmentResponseDto>> responseEntity = restTemplate.exchange(
|
||||
url,
|
||||
HttpMethod.GET,
|
||||
null,
|
||||
new ParameterizedTypeReference<RestResponsePage<AttachmentResponseDto>>() {
|
||||
}
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
RestResponsePage<AttachmentResponseDto> page = responseEntity.getBody();
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getTotalElements()).isEqualTo(5);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 관리자_첨부파일_목록_검색조회_정상() throws Exception {
|
||||
//given
|
||||
List<AttachmentTempSaveRequestDto> saveRequestDtoList1 = getTempSaveDto(2);
|
||||
attachmentService.save(saveRequestDtoList1);
|
||||
|
||||
List<AttachmentTempSaveRequestDto> saveRequestDtoList2 = getTempSaveDto(3);
|
||||
String attachmentCode = attachmentService.save(saveRequestDtoList2);
|
||||
|
||||
String url = "/api/v1/attachments/admin?keywordType=id&keyword="+attachmentCode;
|
||||
|
||||
//when
|
||||
ResponseEntity<RestResponsePage<AttachmentResponseDto>> responseEntity = restTemplate.exchange(
|
||||
url,
|
||||
HttpMethod.GET,
|
||||
null,
|
||||
new ParameterizedTypeReference<RestResponsePage<AttachmentResponseDto>>() {
|
||||
}
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
RestResponsePage<AttachmentResponseDto> page = responseEntity.getBody();
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getTotalElements()).isEqualTo(3);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 관리자_삭제여부_Y_토글_정상() throws Exception {
|
||||
//given
|
||||
List<AttachmentTempSaveRequestDto> saveRequestDtoList2 = getTempSaveDto(3);
|
||||
String attachmentCode = attachmentService.save(saveRequestDtoList2);
|
||||
|
||||
List<AttachmentResponseDto> results = attachmentService.findByCode(attachmentCode);
|
||||
|
||||
String uniqueId = results.get(1).getId();
|
||||
String url = "/api/v1/attachments/admin/"+uniqueId+"/true";
|
||||
|
||||
//when
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.PUT, null, String.class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
List<AttachmentResponseDto> saved = attachmentService.findByCode(attachmentCode);
|
||||
AttachmentResponseDto updated = saved.stream()
|
||||
.filter(attachmentResponseDto -> attachmentResponseDto.getId().equals(uniqueId))
|
||||
.findAny().get();
|
||||
assertThat(updated.getIsDelete()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 관리자_첨부파일_한건_완전삭제_정상() throws Exception {
|
||||
//given
|
||||
List<AttachmentTempSaveRequestDto> saveRequestDtoList2 = getTempSaveDto(2);
|
||||
String attachmentCode = attachmentService.save(saveRequestDtoList2);
|
||||
List<AttachmentResponseDto> results = attachmentService.findByCode(attachmentCode);
|
||||
|
||||
String url = "/api/v1/attachments/admin/"+results.get(1).getId();
|
||||
//when
|
||||
restTemplate.delete(url);
|
||||
|
||||
//then
|
||||
List<AttachmentResponseDto> deleted = attachmentService.findByCode(attachmentCode);
|
||||
assertThat(deleted.size()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 첨부파일_업로드_저장_정상() throws Exception {
|
||||
//given
|
||||
String url = "/api/v1/attachments/upload";
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
|
||||
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
|
||||
body.add("files", getTestFile());
|
||||
body.add("files", getTestFile());
|
||||
body.add("files", getTestFile());
|
||||
|
||||
AttachmentUploadRequestDto uploadRequestDto =
|
||||
AttachmentUploadRequestDto.builder()
|
||||
.entityName("test")
|
||||
.entityId("testid")
|
||||
.build();
|
||||
body.add("info", uploadRequestDto);
|
||||
|
||||
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity(body, headers);
|
||||
|
||||
//when
|
||||
ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, requestEntity, String.class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
List<Attachment> attachmentList = attachmentRepository.findByCode(responseEntity.getBody());
|
||||
attachmentList.stream().forEach(attachment -> {
|
||||
Path filePath = Paths.get(fileStorageUtils.getFileStorageLocation()+"/" +attachment.getPhysicalFileName())
|
||||
.toAbsolutePath().normalize();
|
||||
assertThat(Files.exists(filePath));
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 첨부파일코드가_있는_경우_새로운파일_업로드_및_저장_and_삭제여부_Y_정상() throws Exception {
|
||||
//given
|
||||
List<MultipartFile> multipartFiles = getMultipartFileList(3);
|
||||
AttachmentUploadRequestDto uploadRequestDto =
|
||||
AttachmentUploadRequestDto.builder()
|
||||
.entityName("test")
|
||||
.entityId("testid")
|
||||
.build();
|
||||
String attachmentCode = attachmentService.uploadAndSave(multipartFiles, uploadRequestDto);
|
||||
List<AttachmentResponseDto> attachmentList = attachmentService.findByCode(attachmentCode);
|
||||
|
||||
List<AttachmentUpdateRequestDto> saveRequestDtoList = new ArrayList<>();
|
||||
|
||||
//모두 삭제 = Y
|
||||
for (int i = 0; i < attachmentList.size(); i++) {
|
||||
AttachmentResponseDto attachmentResponseDto = attachmentList.get(i);
|
||||
saveRequestDtoList.add(
|
||||
AttachmentUpdateRequestDto.builder()
|
||||
.uniqueId(attachmentResponseDto.getId())
|
||||
.isDelete(true)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
saveRequestDtoList.stream().forEach(System.out::println);
|
||||
//2개 첨부파일 더하기
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
|
||||
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
|
||||
body.add("files", getTestFile());
|
||||
body.add("files", getTestFile());
|
||||
body.add("info", uploadRequestDto);
|
||||
body.add("list", saveRequestDtoList);
|
||||
|
||||
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity(body, headers);
|
||||
|
||||
//when
|
||||
String url = "/api/v1/attachments/upload/"+attachmentCode;
|
||||
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.PUT, requestEntity, String.class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
List<Attachment> updateAttachments = attachmentRepository.findByCode(responseEntity.getBody());
|
||||
updateAttachments.stream().forEach(System.out::println);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 첨부파일업로드없이_기존파일삭제여부_Y_정상() throws Exception {
|
||||
//given
|
||||
List<MultipartFile> multipartFiles = getMultipartFileList(3);
|
||||
AttachmentUploadRequestDto uploadRequestDto =
|
||||
AttachmentUploadRequestDto.builder()
|
||||
.entityName("test")
|
||||
.entityId("testid")
|
||||
.build();
|
||||
String attachmentCode = attachmentService.uploadAndSave(multipartFiles, uploadRequestDto);
|
||||
List<AttachmentResponseDto> attachmentList = attachmentService.findByCode(attachmentCode);
|
||||
List<AttachmentUpdateRequestDto> saveRequestDtoList = new ArrayList<>();
|
||||
//모두 삭제 = Y
|
||||
for (int i = 0; i < attachmentList.size(); i++) {
|
||||
AttachmentResponseDto attachmentResponseDto = attachmentList.get(i);
|
||||
saveRequestDtoList.add(
|
||||
AttachmentUpdateRequestDto.builder()
|
||||
.uniqueId(attachmentResponseDto.getId())
|
||||
.isDelete(true)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
saveRequestDtoList.stream().forEach(System.out::println);
|
||||
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
|
||||
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
|
||||
body.add("info", uploadRequestDto);
|
||||
body.add("list", saveRequestDtoList);
|
||||
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity(body, headers);
|
||||
|
||||
//when
|
||||
String url = "/api/v1/attachments/"+attachmentCode;
|
||||
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.PUT, requestEntity, String.class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
List<Attachment> updateAttachments = attachmentRepository.findByCode(responseEntity.getBody());
|
||||
updateAttachments.stream().forEach(System.out::println);
|
||||
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// @Test
|
||||
// public void 첨부파일_다운로드_정상() throws Exception {
|
||||
// //given
|
||||
// List<AttachmentSaveRequestDto> saveRequestDtoList2 = getTempSaveDto(1);
|
||||
// String attachmentCode = attachmentService.save(saveRequestDtoList2);
|
||||
//
|
||||
// List<AttachmentResponseDto> byCode = attachmentService.findByCode(attachmentCode);
|
||||
//
|
||||
// String uniqueId = byCode.get(0).getUniqueId();
|
||||
// String url = "/api/v1/download/"+uniqueId;
|
||||
//
|
||||
// //when
|
||||
// ResponseEntity<ResponseEntity> responseEntity = restTemplate.getForEntity(url, ResponseEntity.class);
|
||||
//
|
||||
// //then
|
||||
// re
|
||||
//
|
||||
// }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,459 @@
|
||||
package org.egovframe.cloud.portalservice.api.banner;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.assertj.core.api.Condition;
|
||||
import org.egovframe.cloud.portalservice.api.banner.dto.BannerImageResponseDto;
|
||||
import org.egovframe.cloud.portalservice.api.banner.dto.BannerListResponseDto;
|
||||
import org.egovframe.cloud.portalservice.api.banner.dto.BannerResponseDto;
|
||||
import org.egovframe.cloud.portalservice.domain.banner.Banner;
|
||||
import org.egovframe.cloud.portalservice.domain.banner.BannerRepository;
|
||||
import org.egovframe.cloud.portalservice.domain.menu.Site;
|
||||
import org.egovframe.cloud.portalservice.domain.menu.SiteRepository;
|
||||
import org.egovframe.cloud.portalservice.util.RestResponsePage;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
|
||||
/**
|
||||
* org.egovframe.cloud.portalservice.api.banner.BannerApiControllerTest
|
||||
* <p>
|
||||
* 배너 Rest API 컨트롤러 테스트 클래스
|
||||
*
|
||||
* @author 표준프레임워크센터 jooho
|
||||
* @version 1.0
|
||||
* @since 2021/08/18
|
||||
*
|
||||
* <pre>
|
||||
* << 개정이력(Modification Information) >>
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2021/08/18 jooho 최초 생성
|
||||
* </pre>
|
||||
*/
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
@EnableConfigurationProperties
|
||||
@TestPropertySource(properties = {"spring.config.location=classpath:application-test.yml"})
|
||||
@ActiveProfiles(profiles = "test")
|
||||
class BannerApiControllerTest {
|
||||
|
||||
/**
|
||||
* test rest template
|
||||
*/
|
||||
@Autowired
|
||||
TestRestTemplate restTemplate;
|
||||
|
||||
/**
|
||||
* 배너 레파지토리 인터페이스
|
||||
*/
|
||||
@Autowired
|
||||
BannerRepository bannerRepository;
|
||||
|
||||
/**
|
||||
* 사이트 레파지토리 인터페이스
|
||||
*/
|
||||
@Autowired
|
||||
SiteRepository siteRepository;
|
||||
|
||||
/**
|
||||
* 배너 API 경로
|
||||
*/
|
||||
private static final String URL = "/api/v1/banners";
|
||||
|
||||
/**
|
||||
* 테스트 데이터 등록 횟수
|
||||
*/
|
||||
private final Integer GIVEN_DATA_COUNT = 10;
|
||||
|
||||
/**
|
||||
* 테스트 데이터
|
||||
*/
|
||||
private final String BANNER_TYPE_CODE_PREFIX = "000";
|
||||
private final String BANNER_TITLE_PREFIX = "배너 제목";
|
||||
private final String ATTACHMENT_CODE_PREFIX = "000000000";
|
||||
private final String URL_ADDR_PREFIX = "http://localhost:8000";
|
||||
private final String BANNER_CONTENT_PREFIX = "배너 내용";
|
||||
|
||||
private final Integer BANNER_NO = GIVEN_DATA_COUNT + 1;
|
||||
private final String INSERT_BANNER_TYPE_CODE = BANNER_TYPE_CODE_PREFIX + BANNER_NO;
|
||||
private final String INSERT_BANNER_TITLE = BANNER_TITLE_PREFIX + "_" + BANNER_NO;
|
||||
private final String INSERT_ATTACHMENT_CODE = ATTACHMENT_CODE_PREFIX + BANNER_NO;
|
||||
private final String INSERT_URL_ADDR = URL_ADDR_PREFIX + BANNER_NO;
|
||||
private final String INSERT_BANNER_CONTENT = BANNER_CONTENT_PREFIX + "_" + BANNER_NO;
|
||||
private final Boolean INSERT_NEW_WINDOW_AT = true;
|
||||
private final Integer INSERT_SORT_SEQ = 1;
|
||||
|
||||
private final String UPDATE_BANNER_TYPE_CODE = BANNER_TYPE_CODE_PREFIX + (BANNER_NO + 1);
|
||||
private final String UPDATE_BANNER_TITLE = BANNER_TITLE_PREFIX + "_" + (BANNER_NO + 1);
|
||||
private final String UPDATE_ATTACHMENT_CODE = ATTACHMENT_CODE_PREFIX + (BANNER_NO + 1);
|
||||
private final String UPDATE_URL_ADDR = URL_ADDR_PREFIX + (BANNER_NO + 1);
|
||||
private final String UPDATE_BANNER_CONTENT = BANNER_CONTENT_PREFIX + "_" + (BANNER_NO + 1);
|
||||
private final Boolean UPDATE_NEW_WINDOW_AT = true;
|
||||
private final Integer UPDATE_SORT_SEQ = 2;
|
||||
|
||||
/**
|
||||
* 테스트 데이터
|
||||
*/
|
||||
private Site site;
|
||||
private final List<Banner> banners = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 테스트 시작 전 수행
|
||||
*/
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
// 사이트 등록
|
||||
site = siteRepository.save(Site.builder()
|
||||
.name("TEST_SITE")
|
||||
.isUse(true)
|
||||
.sortSeq(1)
|
||||
.build());
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 종료 후 수행
|
||||
*/
|
||||
@AfterEach
|
||||
void tearDown() {
|
||||
// 배너 삭제
|
||||
bannerRepository.deleteAll();
|
||||
banners.clear();
|
||||
|
||||
// 사이트 삭제
|
||||
siteRepository.deleteAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* 배너 페이지 목록 조회 테스트
|
||||
*/
|
||||
@Test
|
||||
void 배너_페이지_목록_조회() {
|
||||
// given
|
||||
insertBanners();
|
||||
|
||||
String queryString = "?keywordType=bannerName&keyword=" + BANNER_TITLE_PREFIX; // 검색 조건
|
||||
queryString += "&page=0&size=" + GIVEN_DATA_COUNT; // 페이지 정보
|
||||
|
||||
// when
|
||||
ResponseEntity<RestResponsePage<BannerListResponseDto>> responseEntity = restTemplate.exchange(
|
||||
URL + queryString,
|
||||
HttpMethod.GET,
|
||||
null,
|
||||
new ParameterizedTypeReference<RestResponsePage<BannerListResponseDto>>() {
|
||||
}
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
RestResponsePage<BannerListResponseDto> page = responseEntity.getBody();
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getNumberOfElements()).isEqualTo(GIVEN_DATA_COUNT);
|
||||
assertThat(page.getContent())
|
||||
.isNotEmpty()
|
||||
.has(new Condition<>(l -> (BANNER_TITLE_PREFIX + "_1").equals(l.get(0).getBannerTitle()), "BannerApiControllerTest.findPage contains " + BANNER_TITLE_PREFIX + "_1"))
|
||||
.has(new Condition<>(l -> (BANNER_TITLE_PREFIX + "_2").equals(l.get(1).getBannerTitle()), "BannerApiControllerTest.findPage contains " + BANNER_TITLE_PREFIX + "_2"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 유형별 배너 목록 조회 테스트
|
||||
*/
|
||||
@Test
|
||||
void 유형별_배너_목록_조회() {
|
||||
// given
|
||||
insertBanners();
|
||||
|
||||
// when
|
||||
ResponseEntity<Map<String, List<BannerImageResponseDto>>> responseEntity = restTemplate.exchange(
|
||||
"/api/v1/" + site.getId() + "/banners/0001,0002/3",
|
||||
HttpMethod.GET,
|
||||
null,
|
||||
new ParameterizedTypeReference<Map<String, List<BannerImageResponseDto>>>() {
|
||||
}
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
Map<String, List<BannerImageResponseDto>> data = responseEntity.getBody();
|
||||
assertThat(data).isNotNull();
|
||||
assertThat(data.get("0001").size()).isEqualTo(1); // 사용중인 0001타입 배너 1개
|
||||
}
|
||||
|
||||
/**
|
||||
* 배너 상세 조회 테스트
|
||||
*/
|
||||
@Test
|
||||
void 배너_상세_조회() {
|
||||
// given
|
||||
Banner entity = insertBanner();
|
||||
|
||||
final Integer bannerNo = entity.getBannerNo();
|
||||
|
||||
String url = URL + "/" + bannerNo;
|
||||
|
||||
// when
|
||||
ResponseEntity<BannerResponseDto> responseEntity = restTemplate.exchange(
|
||||
url,
|
||||
HttpMethod.GET,
|
||||
null,
|
||||
new ParameterizedTypeReference<BannerResponseDto>() {
|
||||
}
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
BannerResponseDto dto = responseEntity.getBody();
|
||||
assertThat(dto).isNotNull();
|
||||
assertThat(dto.getSiteId()).isEqualTo(site.getId());
|
||||
assertThat(dto.getBannerNo()).isEqualTo(bannerNo);
|
||||
assertThat(dto.getBannerTypeCode()).isEqualTo(INSERT_BANNER_TYPE_CODE);
|
||||
assertThat(dto.getBannerTitle()).isEqualTo(INSERT_BANNER_TITLE);
|
||||
assertThat(dto.getAttachmentCode()).isEqualTo(INSERT_ATTACHMENT_CODE);
|
||||
assertThat(dto.getUrlAddr()).isEqualTo(INSERT_URL_ADDR);
|
||||
assertThat(dto.getBannerContent()).isEqualTo(INSERT_BANNER_CONTENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* 배너 다음 정렬 순서 조회 테스트
|
||||
*/
|
||||
@Test
|
||||
void 배너_다음_정렬_순서_조회() {
|
||||
// given
|
||||
Banner entity = insertBanner();
|
||||
|
||||
String url = URL + "/" + site.getId() + "/sort-seq/next";
|
||||
|
||||
// when
|
||||
ResponseEntity<Integer> responseEntity = restTemplate.exchange(
|
||||
url,
|
||||
HttpMethod.GET,
|
||||
null,
|
||||
new ParameterizedTypeReference<Integer>() {
|
||||
}
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
Integer nextSortSeq = responseEntity.getBody();
|
||||
assertThat(nextSortSeq).isNotNull();
|
||||
assertThat(nextSortSeq).isEqualTo(entity.getSortSeq() + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 배너 등록 테스트
|
||||
*/
|
||||
@Test
|
||||
void 배너_등록() {
|
||||
// given
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("siteId", site.getId());
|
||||
params.put("bannerTypeCode", INSERT_BANNER_TYPE_CODE);
|
||||
params.put("bannerTitle", INSERT_BANNER_TITLE);
|
||||
params.put("attachmentCode", INSERT_ATTACHMENT_CODE);
|
||||
params.put("urlAddr", INSERT_URL_ADDR);
|
||||
params.put("bannerContent", INSERT_BANNER_CONTENT);
|
||||
params.put("newWindowAt", INSERT_NEW_WINDOW_AT);
|
||||
params.put("sortSeq", INSERT_SORT_SEQ);
|
||||
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(params);
|
||||
|
||||
// when
|
||||
//ResponseEntity<BoardResponseDto> responseEntity = restTemplate.postForEntity(URL, requestDto, BoardResponseDto.class);
|
||||
ResponseEntity<BannerResponseDto> responseEntity = restTemplate.exchange(
|
||||
URL,
|
||||
HttpMethod.POST,
|
||||
httpEntity,
|
||||
new ParameterizedTypeReference<BannerResponseDto>() {
|
||||
}
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
BannerResponseDto dto = responseEntity.getBody();
|
||||
assertThat(dto).isNotNull();
|
||||
|
||||
final Integer bannerNo = dto.getBannerNo();
|
||||
|
||||
Optional<Banner> banner = selectData(bannerNo);
|
||||
assertThat(banner).isPresent();
|
||||
|
||||
Banner entity = banner.get();
|
||||
assertThat(entity.getSite().getId()).isEqualTo(site.getId());
|
||||
assertThat(entity.getBannerNo()).isEqualTo(bannerNo);
|
||||
assertThat(entity.getBannerTypeCode()).isEqualTo(INSERT_BANNER_TYPE_CODE);
|
||||
assertThat(entity.getBannerTitle()).isEqualTo(INSERT_BANNER_TITLE);
|
||||
assertThat(entity.getAttachmentCode()).isEqualTo(INSERT_ATTACHMENT_CODE);
|
||||
assertThat(entity.getUrlAddr()).isEqualTo(INSERT_URL_ADDR);
|
||||
assertThat(entity.getBannerContent()).isEqualTo(INSERT_BANNER_CONTENT);
|
||||
assertThat(entity.getNewWindowAt()).isEqualTo(INSERT_NEW_WINDOW_AT);
|
||||
assertThat(entity.getSortSeq()).isEqualTo(INSERT_SORT_SEQ);
|
||||
}
|
||||
|
||||
/**
|
||||
* 배너 수정 테스트
|
||||
*/
|
||||
@Test
|
||||
void 배너_수정() {
|
||||
// given
|
||||
Banner entity = insertBanner();
|
||||
|
||||
final Integer bannerNo = entity.getBannerNo();
|
||||
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("siteId", site.getId());
|
||||
params.put("bannerTypeCode", UPDATE_BANNER_TYPE_CODE);
|
||||
params.put("bannerTitle", UPDATE_BANNER_TITLE);
|
||||
params.put("attachmentCode", UPDATE_ATTACHMENT_CODE);
|
||||
params.put("urlAddr", UPDATE_URL_ADDR);
|
||||
params.put("bannerContent", UPDATE_BANNER_CONTENT);
|
||||
params.put("newWindowAt", UPDATE_NEW_WINDOW_AT);
|
||||
params.put("sortSeq", UPDATE_SORT_SEQ);
|
||||
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(params);
|
||||
|
||||
String url = URL + "/" + bannerNo;
|
||||
|
||||
// when
|
||||
ResponseEntity<BannerResponseDto> responseEntity = restTemplate.exchange(
|
||||
url,
|
||||
HttpMethod.PUT,
|
||||
httpEntity,
|
||||
new ParameterizedTypeReference<BannerResponseDto>() {
|
||||
}
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
BannerResponseDto dto = responseEntity.getBody();
|
||||
assertThat(dto).isNotNull();
|
||||
|
||||
Optional<Banner> banner = selectData(bannerNo);
|
||||
assertThat(banner).isPresent();
|
||||
|
||||
Banner updatedBanner = banner.get();
|
||||
assertThat(updatedBanner.getSite().getId()).isEqualTo(site.getId());
|
||||
assertThat(updatedBanner.getBannerNo()).isEqualTo(bannerNo);
|
||||
assertThat(updatedBanner.getBannerTypeCode()).isEqualTo(UPDATE_BANNER_TYPE_CODE);
|
||||
assertThat(updatedBanner.getBannerTitle()).isEqualTo(UPDATE_BANNER_TITLE);
|
||||
assertThat(updatedBanner.getAttachmentCode()).isEqualTo(UPDATE_ATTACHMENT_CODE);
|
||||
assertThat(updatedBanner.getUrlAddr()).isEqualTo(UPDATE_URL_ADDR);
|
||||
assertThat(updatedBanner.getBannerContent()).isEqualTo(UPDATE_BANNER_CONTENT);
|
||||
assertThat(updatedBanner.getNewWindowAt()).isEqualTo(UPDATE_NEW_WINDOW_AT);
|
||||
assertThat(updatedBanner.getUseAt()).isTrue();
|
||||
assertThat(updatedBanner.getSortSeq()).isEqualTo(UPDATE_SORT_SEQ);
|
||||
}
|
||||
|
||||
/**
|
||||
* 배너 삭제 테스트
|
||||
*/
|
||||
@Test
|
||||
void 배너_삭제() {
|
||||
// given
|
||||
Banner entity = insertBanner();
|
||||
|
||||
final Integer bannerNo = entity.getBannerNo();
|
||||
|
||||
String url = URL + "/" + bannerNo;
|
||||
|
||||
// when
|
||||
ResponseEntity<BannerResponseDto> responseEntity = restTemplate.exchange(
|
||||
url,
|
||||
HttpMethod.DELETE,
|
||||
null,
|
||||
BannerResponseDto.class
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
Optional<Banner> banner = selectData(bannerNo);
|
||||
assertThat(banner).isNotPresent();
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 데이터 등록
|
||||
*/
|
||||
private void insertBanners() {
|
||||
for (int i = 1; i <= GIVEN_DATA_COUNT; i++) {
|
||||
banners.add(bannerRepository.save(Banner.builder()
|
||||
.site(site)
|
||||
.bannerTypeCode(BANNER_TYPE_CODE_PREFIX + (i % 3 + 1))
|
||||
.bannerTitle(BANNER_TITLE_PREFIX + "_" + i)
|
||||
.attachmentCode(StringUtils.leftPad(String.valueOf(i), 10, '0'))
|
||||
.urlAddr(URL_ADDR_PREFIX + i)
|
||||
.bannerContent(BANNER_CONTENT_PREFIX + "_" + i)
|
||||
.useAt(i % 2 == 0)
|
||||
.newWindowAt(i % 2 == 0)
|
||||
.sortSeq(i)
|
||||
.build()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 데이터 삭제
|
||||
*/
|
||||
/*private void deleteBanners() {
|
||||
bannerRepository.deleteAll(banners);
|
||||
|
||||
banners.clear();
|
||||
}*/
|
||||
|
||||
/**
|
||||
* 테스트 데이터 단건 등록
|
||||
*
|
||||
* @return Banner 배너 엔티티
|
||||
*/
|
||||
private Banner insertBanner() {
|
||||
return bannerRepository.save(Banner.builder()
|
||||
.site(site)
|
||||
.bannerTypeCode(INSERT_BANNER_TYPE_CODE)
|
||||
.bannerTitle(INSERT_BANNER_TITLE)
|
||||
.attachmentCode(INSERT_ATTACHMENT_CODE)
|
||||
.urlAddr(INSERT_URL_ADDR)
|
||||
.bannerContent(INSERT_BANNER_CONTENT)
|
||||
.useAt(true)
|
||||
.newWindowAt(INSERT_NEW_WINDOW_AT)
|
||||
.sortSeq(INSERT_SORT_SEQ)
|
||||
.build());
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 데이터 단건 삭제
|
||||
*/
|
||||
/*private void deleteBanner(Integer bannerNo) {
|
||||
bannerRepository.deleteById(bannerNo);
|
||||
}*/
|
||||
|
||||
/**
|
||||
* 테스트 데이터 단건 조회
|
||||
*
|
||||
* @param bannerNo 배너 번호
|
||||
* @return Optional<Banner> 배너 엔티티
|
||||
*/
|
||||
private Optional<Banner> selectData(Integer bannerNo) {
|
||||
return bannerRepository.findById(bannerNo);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,225 @@
|
||||
package org.egovframe.cloud.portalservice.api.code;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.egovframe.cloud.common.dto.RequestDto;
|
||||
import org.egovframe.cloud.portalservice.api.code.dto.CodeResponseDto;
|
||||
import org.egovframe.cloud.portalservice.api.code.dto.CodeSaveRequestDto;
|
||||
import org.egovframe.cloud.portalservice.api.code.dto.CodeUpdateRequestDto;
|
||||
import org.json.JSONObject;
|
||||
import org.junit.jupiter.api.MethodOrderer;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.TestMethodOrder;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* org.egovframe.cloud.portalservice.api.code.CodeApiControllerTest
|
||||
* <p>
|
||||
* 공통코드 CRUD 요청을 처리하는 REST API Controller 테스트
|
||||
*
|
||||
* @author 표준프레임워크센터 jaeyeolkim
|
||||
* @version 1.0
|
||||
* @since 2021/07/12
|
||||
*
|
||||
* <pre>
|
||||
* << 개정이력(Modification Information) >>
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2021/07/12 jaeyeolkim 최초 생성
|
||||
* </pre>
|
||||
*/
|
||||
@Slf4j
|
||||
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
@EnableConfigurationProperties
|
||||
@TestPropertySource(properties = {"spring.config.location=classpath:application-test.yml"})
|
||||
@ActiveProfiles(profiles = "test")
|
||||
class CodeApiControllerTest {
|
||||
|
||||
@Autowired
|
||||
private TestRestTemplate restTemplate;
|
||||
|
||||
private static final String TEST_CODE_ID = "/TEST";
|
||||
private static final String TEST_COM = "@test.com";
|
||||
private static final String TEST_EMAIL = System.currentTimeMillis() + TEST_COM;
|
||||
private static final String TEST_PASSWORD = "test1234!";
|
||||
// private static final String PORTAL_SERVICE_URL = "http://localhost:8000/portal-service";
|
||||
private static final String USER_SERVICE_URL = "http://localhost:8000/user-service";
|
||||
private static final String API_URL = "/api/v1/codes";
|
||||
|
||||
// login 후 발급된 토큰 값이 입력된다
|
||||
private static String ACCESS_TOKEN = "";
|
||||
|
||||
@Test
|
||||
@Order(Integer.MIN_VALUE)
|
||||
public void setup() throws Exception {
|
||||
// 사용자 등록
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("email", TEST_EMAIL);
|
||||
jsonObject.put("password", TEST_PASSWORD);
|
||||
jsonObject.put("userName", "테스터");
|
||||
|
||||
String url = USER_SERVICE_URL + "/api/v1/users";
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(jsonObject.toString(), headers);
|
||||
ResponseEntity<Long> userResponseEntity = restTemplate.exchange(url, HttpMethod.POST, httpEntity, Long.class);
|
||||
assertThat(userResponseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
// 로그인 후 토큰 값 세팅
|
||||
jsonObject.remove("userName");
|
||||
ResponseEntity<String> responseEntity = restTemplate.postForEntity(USER_SERVICE_URL + "/login", jsonObject.toString(), String.class);
|
||||
ACCESS_TOKEN = responseEntity.getHeaders().get("access-token").get(0);
|
||||
log.info("token ={}", ACCESS_TOKEN);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(Integer.MAX_VALUE)
|
||||
public void cleanup() throws Exception {
|
||||
// 테스트 후 데이터 삭제
|
||||
String url = API_URL + TEST_CODE_ID;
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set(HttpHeaders.AUTHORIZATION, ACCESS_TOKEN);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(headers);
|
||||
restTemplate.exchange(url, HttpMethod.DELETE, httpEntity, String.class);
|
||||
|
||||
// TODO 사용자 데이터 삭제(어드민 유저 서비스)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(1)
|
||||
void 공통코드_저장된다() throws Exception {
|
||||
// given
|
||||
// String url = PORTAL_SERVICE_URL + API_URL;
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set(HttpHeaders.AUTHORIZATION, ACCESS_TOKEN);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
CodeSaveRequestDto requestDto = CodeSaveRequestDto.builder()
|
||||
.codeId("TEST")
|
||||
.codeName("테스트")
|
||||
.codeDescription("테스트 공통코드입니다")
|
||||
.sortSeq(1)
|
||||
.useAt(true)
|
||||
.build();
|
||||
|
||||
// when
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(new ObjectMapper().writeValueAsString(requestDto), headers);
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(API_URL, HttpMethod.POST, httpEntity, String.class);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(2)
|
||||
public void 공통코드_목록_검색어로_조회된다() throws Exception {
|
||||
// given
|
||||
// String url = PORTAL_SERVICE_URL + API_URL;
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set(HttpHeaders.AUTHORIZATION, ACCESS_TOKEN);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
RequestDto requestDto = RequestDto.builder()
|
||||
.keywordType("codeId")
|
||||
.keyword("ES")
|
||||
.build();
|
||||
|
||||
// when
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(new ObjectMapper().writeValueAsString(requestDto), headers);
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(API_URL, HttpMethod.GET, httpEntity, String.class);
|
||||
log.info("responseEntity.getBody() ={}", responseEntity.getBody());
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody()).contains("pageable");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(3)
|
||||
public void 공통코드_단건_조회된다() throws Exception {
|
||||
// given
|
||||
// String url = PORTAL_SERVICE_URL + API_URL + TEST_CODE_ID;
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set(HttpHeaders.AUTHORIZATION, ACCESS_TOKEN);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(headers);
|
||||
|
||||
// when
|
||||
ResponseEntity<CodeResponseDto> responseEntity = restTemplate.exchange(API_URL + TEST_CODE_ID, HttpMethod.GET, httpEntity, CodeResponseDto.class);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody().getCodeName()).isEqualTo("테스트");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(4)
|
||||
void 공통코드_수정된다() throws Exception {
|
||||
// given
|
||||
// String url = PORTAL_SERVICE_URL + API_URL + TEST_CODE_ID;
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set(HttpHeaders.AUTHORIZATION, ACCESS_TOKEN);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
CodeUpdateRequestDto requestDto = CodeUpdateRequestDto.builder()
|
||||
.codeName("테스트2")
|
||||
.codeDescription("테스트 공통코드입니다2")
|
||||
.sortSeq(2)
|
||||
.useAt(false)
|
||||
.build();
|
||||
|
||||
// when
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(new ObjectMapper().writeValueAsString(requestDto), headers);
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(API_URL + TEST_CODE_ID, HttpMethod.PUT, httpEntity, String.class);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(5)
|
||||
void 공통코드_사용여부_토글된다() throws Exception {
|
||||
// given
|
||||
String url = API_URL + TEST_CODE_ID + "/toggle-use?useAt=true";
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set(HttpHeaders.AUTHORIZATION, ACCESS_TOKEN);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
// when
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(headers);
|
||||
log.info("url={}", url);
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.PUT, httpEntity, String.class);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
// 수정된 데이터 확인
|
||||
url = API_URL + TEST_CODE_ID;
|
||||
ResponseEntity<CodeResponseDto> gerResponseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, CodeResponseDto.class);
|
||||
assertThat(gerResponseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(gerResponseEntity.getBody().getUseAt()).isTrue();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,255 @@
|
||||
package org.egovframe.cloud.portalservice.api.code;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.egovframe.cloud.portalservice.api.code.dto.CodeDetailRequestDto;
|
||||
import org.egovframe.cloud.portalservice.api.code.dto.CodeDetailResponseDto;
|
||||
import org.egovframe.cloud.portalservice.api.code.dto.CodeDetailSaveRequestDto;
|
||||
import org.egovframe.cloud.portalservice.api.code.dto.CodeUpdateRequestDto;
|
||||
import org.json.JSONObject;
|
||||
import org.junit.jupiter.api.MethodOrderer;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.TestMethodOrder;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* org.egovframe.cloud.portalservice.api.code.CodeDetailApiControllerTest
|
||||
* <p>
|
||||
* 공통코드 상세 CRUD 요청을 처리하는 REST API Controller 테스트
|
||||
*
|
||||
* @author 표준프레임워크센터 jaeyeolkim
|
||||
* @version 1.0
|
||||
* @since 2021/07/14
|
||||
*
|
||||
* <pre>
|
||||
* << 개정이력(Modification Information) >>
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2021/07/14 jaeyeolkim 최초 생성
|
||||
* </pre>
|
||||
*/
|
||||
@Slf4j
|
||||
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
@EnableConfigurationProperties
|
||||
@TestPropertySource(properties = {"spring.config.location=classpath:application-test.yml"})
|
||||
@ActiveProfiles(profiles = "test")
|
||||
class CodeDetailApiControllerTest {
|
||||
|
||||
@Autowired
|
||||
private TestRestTemplate restTemplate;
|
||||
|
||||
private static final String PARENT_CODE_ID = "TEST";
|
||||
private static final String TEST_CODE_ID = "TEST_1";
|
||||
private static final String TEST_CODE_NAME = "테스트상세1";
|
||||
private static final String TEST_COM = "@test.com";
|
||||
private static final String TEST_EMAIL = System.currentTimeMillis() + TEST_COM;
|
||||
private static final String TEST_PASSWORD = "test1234!";
|
||||
// private static final String PORTAL_SERVICE_URL = "http://localhost:8000/portal-service";
|
||||
private static final String USER_SERVICE_URL = "http://localhost:8000/user-service";
|
||||
private static final String API_URL = "/api/v1/code-details";
|
||||
|
||||
// login 후 발급된 토큰 값이 입력된다
|
||||
private static String ACCESS_TOKEN = "";
|
||||
|
||||
@Test
|
||||
@Order(Integer.MIN_VALUE)
|
||||
public void setup() throws Exception {
|
||||
// 사용자 등록
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("email", TEST_EMAIL);
|
||||
jsonObject.put("password", TEST_PASSWORD);
|
||||
jsonObject.put("userName", "테스터");
|
||||
|
||||
String url = USER_SERVICE_URL + "/api/v1/users";
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(jsonObject.toString(), headers);
|
||||
ResponseEntity<Long> userResponseEntity = restTemplate.exchange(url, HttpMethod.POST, httpEntity, Long.class);
|
||||
assertThat(userResponseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
// 로그인 후 토큰 값 세팅
|
||||
jsonObject.remove("userName");
|
||||
ResponseEntity<String> responseEntity = restTemplate.postForEntity(USER_SERVICE_URL + "/login", jsonObject.toString(), String.class);
|
||||
ACCESS_TOKEN = responseEntity.getHeaders().get("access-token").get(0);
|
||||
log.info("token ={}", ACCESS_TOKEN);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(Integer.MAX_VALUE)
|
||||
public void cleanup() throws Exception {
|
||||
// 테스트 후 데이터 삭제
|
||||
String url = API_URL + "/" + TEST_CODE_ID;
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set(HttpHeaders.AUTHORIZATION, ACCESS_TOKEN);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(headers);
|
||||
restTemplate.exchange(url, HttpMethod.DELETE, httpEntity, String.class);
|
||||
|
||||
// TODO 사용자 데이터 삭제(어드민 유저 서비스)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(1)
|
||||
void 공통코드상세_저장된다() throws Exception {
|
||||
// given
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set(HttpHeaders.AUTHORIZATION, ACCESS_TOKEN);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
CodeDetailSaveRequestDto requestDto = CodeDetailSaveRequestDto.builder()
|
||||
.parentCodeId(PARENT_CODE_ID)
|
||||
.codeId(TEST_CODE_ID)
|
||||
.codeName(TEST_CODE_NAME)
|
||||
.codeDescription("테스트 상세 공통코드입니다")
|
||||
.sortSeq(1)
|
||||
.useAt(true)
|
||||
.build();
|
||||
|
||||
// when
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(new ObjectMapper().writeValueAsString(requestDto), headers);
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(API_URL, HttpMethod.POST, httpEntity, String.class);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(2)
|
||||
public void 공통코드상세_목록_검색어로_조회된다() throws Exception {
|
||||
// given
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set(HttpHeaders.AUTHORIZATION, ACCESS_TOKEN);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
CodeDetailRequestDto requestDto = CodeDetailRequestDto.builder()
|
||||
.parentCodeId(PARENT_CODE_ID)
|
||||
.keywordType("codeId")
|
||||
.keyword("ES")
|
||||
.build();
|
||||
|
||||
// when
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(new ObjectMapper().writeValueAsString(requestDto), headers);
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(API_URL, HttpMethod.GET, httpEntity, String.class);
|
||||
log.info("responseEntity.getBody() ={}", responseEntity.getBody());
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody()).contains("pageable");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(3)
|
||||
public void 공통코드상세_단건_조회된다() throws Exception {
|
||||
// given
|
||||
String url = API_URL + "/" + TEST_CODE_ID;
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set(HttpHeaders.AUTHORIZATION, ACCESS_TOKEN);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(headers);
|
||||
|
||||
// when
|
||||
ResponseEntity<CodeDetailResponseDto> responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, CodeDetailResponseDto.class);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody().getCodeName()).isEqualTo(TEST_CODE_NAME);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(4)
|
||||
public void 공통코드상세_목록_조회된다() throws Exception {
|
||||
// given
|
||||
String url = API_URL + "/" + PARENT_CODE_ID + "/codes";
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set(HttpHeaders.AUTHORIZATION, ACCESS_TOKEN);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(headers);
|
||||
|
||||
// when
|
||||
ResponseEntity<List<CodeDetailResponseDto>> responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, new ParameterizedTypeReference<List<CodeDetailResponseDto>>() {});
|
||||
|
||||
// then
|
||||
List<CodeDetailResponseDto> list = responseEntity.getBody();
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(list.size()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(5)
|
||||
public void 공통코드상세_수정된다() throws Exception {
|
||||
// given
|
||||
String url = API_URL + "/" + TEST_CODE_ID;
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set(HttpHeaders.AUTHORIZATION, ACCESS_TOKEN);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
CodeUpdateRequestDto requestDto = CodeUpdateRequestDto.builder()
|
||||
.codeName(TEST_CODE_NAME + "2")
|
||||
.codeDescription("테스트 공통코드입니다2")
|
||||
.sortSeq(2)
|
||||
.useAt(false)
|
||||
.build();
|
||||
|
||||
// when
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(new ObjectMapper().writeValueAsString(requestDto), headers);
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.PUT, httpEntity, String.class);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
// 수정된 데이터 확인
|
||||
ResponseEntity<CodeDetailResponseDto> gerResponseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, CodeDetailResponseDto.class);
|
||||
assertThat(gerResponseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(gerResponseEntity.getBody().getCodeName()).isEqualTo(TEST_CODE_NAME + "2");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(6)
|
||||
void 공통코드상세_사용여부_토글된다() throws Exception {
|
||||
// given
|
||||
String url = API_URL + "/" + TEST_CODE_ID + "/toggle-use?useAt=true";
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set(HttpHeaders.AUTHORIZATION, ACCESS_TOKEN);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
// when
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(headers);
|
||||
log.info("url={}", url);
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.PUT, httpEntity, String.class);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
// 수정된 데이터 확인
|
||||
url = API_URL + "/" + TEST_CODE_ID;
|
||||
ResponseEntity<CodeDetailResponseDto> gerResponseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, CodeDetailResponseDto.class);
|
||||
assertThat(gerResponseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(gerResponseEntity.getBody().getUseAt()).isTrue();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,326 @@
|
||||
package org.egovframe.cloud.portalservice.api.content;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.assertj.core.api.Condition;
|
||||
import org.egovframe.cloud.portalservice.api.content.dto.ContentListResponseDto;
|
||||
import org.egovframe.cloud.portalservice.api.content.dto.ContentResponseDto;
|
||||
import org.egovframe.cloud.portalservice.domain.content.Content;
|
||||
import org.egovframe.cloud.portalservice.domain.content.ContentRepository;
|
||||
import org.egovframe.cloud.portalservice.util.RestResponsePage;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
|
||||
/**
|
||||
* org.egovframe.cloud.portalservice.api.content.ContentApiControllerTest
|
||||
* <p>
|
||||
* 컨텐츠 Rest API 컨트롤러 테스트 클래스
|
||||
*
|
||||
* @author 표준프레임워크센터 jooho
|
||||
* @version 1.0
|
||||
* @since 2021/07/23
|
||||
*
|
||||
* <pre>
|
||||
* << 개정이력(Modification Information) >>
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2021/07/23 jooho 최초 생성
|
||||
* </pre>
|
||||
*/
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
@EnableConfigurationProperties
|
||||
@TestPropertySource(properties = {"spring.config.location=classpath:application-test.yml"})
|
||||
@ActiveProfiles(profiles = "test")
|
||||
class ContentApiControllerTest {
|
||||
|
||||
/**
|
||||
* test rest template
|
||||
*/
|
||||
@Autowired
|
||||
TestRestTemplate restTemplate;
|
||||
|
||||
/**
|
||||
* 컨텐츠 레파지토리 인터페이스
|
||||
*/
|
||||
@Autowired
|
||||
ContentRepository contentRepository;
|
||||
|
||||
/**
|
||||
* 컨텐츠 API 경로
|
||||
*/
|
||||
private static final String URL = "/api/v1/contents";
|
||||
|
||||
/**
|
||||
* 테스트 데이터 등록 횟수
|
||||
*/
|
||||
private final Integer GIVEN_DATA_COUNT = 10;
|
||||
|
||||
/**
|
||||
* 테스트 데이터
|
||||
*/
|
||||
private final String CONTENT_NAME_PREFIX = "컨텐츠 명";
|
||||
private final String CONTENT_REMARK_PREFIX = "컨텐츠 비고";
|
||||
private final String CONTENT_VALUE_PREFIX = "컨텐츠 값";
|
||||
|
||||
private final Integer CONTENT_NO = GIVEN_DATA_COUNT + 1;
|
||||
private final String INSERT_CONTENT_NAME = CONTENT_NAME_PREFIX + "_" + CONTENT_NO;
|
||||
private final String INSERT_CONTENT_REMARK = CONTENT_REMARK_PREFIX + "_" + CONTENT_NO;
|
||||
private final String INSERT_CONTENT_VALUE = CONTENT_VALUE_PREFIX + "_" + CONTENT_NO;
|
||||
|
||||
private final String UPDATE_CONTENT_NAME = CONTENT_NAME_PREFIX + "_" + (CONTENT_NO + 1);
|
||||
private final String UPDATE_CONTENT_REMARK = CONTENT_REMARK_PREFIX + "_" + (CONTENT_NO + 1);
|
||||
private final String UPDATE_CONTENT_VALUE = CONTENT_VALUE_PREFIX + "_" + (CONTENT_NO + 1);
|
||||
|
||||
/**
|
||||
* 테스트 데이터
|
||||
*/
|
||||
private final List<Content> contents = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 테스트 시작 전 수행
|
||||
*/
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 종료 후 수행
|
||||
*/
|
||||
@AfterEach
|
||||
void tearDown() {
|
||||
// 컨텐츠 삭제
|
||||
contentRepository.deleteAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* 컨텐츠 페이지 목록 조회 테스트
|
||||
*/
|
||||
@Test
|
||||
void 컨텐츠_페이지_목록_조회() {
|
||||
// given
|
||||
insertContents();
|
||||
|
||||
String queryString = "?keywordType=contentName&keyword=" + CONTENT_NAME_PREFIX; // 검색 조건
|
||||
queryString += "&page=0&size=" + GIVEN_DATA_COUNT; // 페이지 정보
|
||||
|
||||
// when
|
||||
ResponseEntity<RestResponsePage<ContentListResponseDto>> responseEntity = restTemplate.exchange(
|
||||
URL + queryString, HttpMethod.GET, null,
|
||||
new ParameterizedTypeReference<RestResponsePage<ContentListResponseDto>>() {
|
||||
});
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
RestResponsePage<ContentListResponseDto> page = responseEntity.getBody();
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getNumberOfElements()).isEqualTo(GIVEN_DATA_COUNT);
|
||||
assertThat(page.getContent()).isNotEmpty()
|
||||
.has(new Condition<>(l -> (CONTENT_NAME_PREFIX + "_10").equals(l.get(0).getContentName()),
|
||||
"ContentApiControllerTest.findPage contains " + CONTENT_NAME_PREFIX + "_10"))
|
||||
.has(new Condition<>(l -> (CONTENT_NAME_PREFIX + "_9").equals(l.get(1).getContentName()),
|
||||
"ContentApiControllerTest.findPage contains " + CONTENT_NAME_PREFIX + "_9"));
|
||||
|
||||
deleteContents();
|
||||
}
|
||||
|
||||
/**
|
||||
* 컨텐츠 상세 조회 테스트
|
||||
*/
|
||||
@Test
|
||||
void 컨텐츠_상세_조회() {
|
||||
// given
|
||||
Content entity = insertContent();
|
||||
|
||||
final Integer contentNo = entity.getContentNo();
|
||||
|
||||
String url = URL + "/" + contentNo;
|
||||
|
||||
// when
|
||||
ResponseEntity<ContentResponseDto> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null,
|
||||
new ParameterizedTypeReference<ContentResponseDto>() {
|
||||
});
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
ContentResponseDto dto = responseEntity.getBody();
|
||||
assertThat(dto).isNotNull();
|
||||
assertThat(dto.getContentNo()).isEqualTo(contentNo);
|
||||
assertThat(dto.getContentName()).isEqualTo(INSERT_CONTENT_NAME);
|
||||
assertThat(dto.getContentRemark()).isEqualTo(INSERT_CONTENT_REMARK);
|
||||
assertThat(dto.getContentValue()).isEqualTo(INSERT_CONTENT_VALUE);
|
||||
|
||||
deleteContent(contentNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 컨텐츠 등록 테스트
|
||||
*/
|
||||
@Test
|
||||
void 컨텐츠_등록() {
|
||||
// given
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("contentName", INSERT_CONTENT_NAME);
|
||||
params.put("contentRemark", INSERT_CONTENT_REMARK);
|
||||
params.put("contentValue", INSERT_CONTENT_VALUE);
|
||||
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(params);
|
||||
|
||||
// when
|
||||
// ResponseEntity<BoardResponseDto> responseEntity =
|
||||
// restTemplate.postForEntity(URL, requestDto, BoardResponseDto.class);
|
||||
ResponseEntity<ContentResponseDto> responseEntity = restTemplate.exchange(URL, HttpMethod.POST, httpEntity,
|
||||
new ParameterizedTypeReference<ContentResponseDto>() {
|
||||
});
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
ContentResponseDto dto = responseEntity.getBody();
|
||||
assertThat(dto).isNotNull();
|
||||
|
||||
final Integer contentNo = dto.getContentNo();
|
||||
|
||||
Optional<Content> content = selectData(contentNo);
|
||||
assertThat(content).isPresent();
|
||||
|
||||
Content entity = content.get();
|
||||
assertThat(entity.getContentNo()).isEqualTo(contentNo);
|
||||
assertThat(entity.getContentName()).isEqualTo(INSERT_CONTENT_NAME);
|
||||
assertThat(entity.getContentRemark()).isEqualTo(INSERT_CONTENT_REMARK);
|
||||
assertThat(entity.getContentValue()).isEqualTo(INSERT_CONTENT_VALUE);
|
||||
|
||||
deleteContent(contentNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 컨텐츠 수정 테스트
|
||||
*/
|
||||
@Test
|
||||
void 컨텐츠_수정() {
|
||||
// given
|
||||
Content entity = insertContent();
|
||||
|
||||
final Integer contentNo = entity.getContentNo();
|
||||
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("contentName", UPDATE_CONTENT_NAME);
|
||||
params.put("contentRemark", UPDATE_CONTENT_REMARK);
|
||||
params.put("contentValue", UPDATE_CONTENT_VALUE);
|
||||
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(params);
|
||||
|
||||
String url = URL + "/" + contentNo;
|
||||
|
||||
// when
|
||||
ResponseEntity<ContentResponseDto> responseEntity = restTemplate.exchange(url, HttpMethod.PUT, httpEntity,
|
||||
new ParameterizedTypeReference<ContentResponseDto>() {
|
||||
});
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
ContentResponseDto dto = responseEntity.getBody();
|
||||
assertThat(dto).isNotNull();
|
||||
|
||||
Optional<Content> content = selectData(contentNo);
|
||||
assertThat(content).isPresent();
|
||||
|
||||
Content updatedContent = content.get();
|
||||
assertThat(updatedContent.getContentNo()).isEqualTo(contentNo);
|
||||
assertThat(updatedContent.getContentName()).isEqualTo(UPDATE_CONTENT_NAME);
|
||||
assertThat(updatedContent.getContentRemark()).isEqualTo(UPDATE_CONTENT_REMARK);
|
||||
assertThat(updatedContent.getContentValue()).isEqualTo(UPDATE_CONTENT_VALUE);
|
||||
|
||||
deleteContent(contentNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 컨텐츠 삭제 테스트
|
||||
*/
|
||||
@Test
|
||||
void 컨텐츠_삭제() {
|
||||
// given
|
||||
Content entity = insertContent();
|
||||
|
||||
final Integer contentNo = entity.getContentNo();
|
||||
|
||||
String url = URL + "/" + contentNo;
|
||||
|
||||
// when
|
||||
ResponseEntity<ContentResponseDto> responseEntity = restTemplate.exchange(url, HttpMethod.DELETE, null,
|
||||
ContentResponseDto.class);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
Optional<Content> content = selectData(contentNo);
|
||||
assertThat(content).isNotPresent();
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 데이터 등록
|
||||
*/
|
||||
private void insertContents() {
|
||||
for (int i = 1; i <= GIVEN_DATA_COUNT; i++) {
|
||||
contents.add(contentRepository.save(Content.builder().contentName(CONTENT_NAME_PREFIX + "_" + i)
|
||||
.contentRemark(CONTENT_REMARK_PREFIX + "_" + i).contentValue(CONTENT_VALUE_PREFIX + "_" + i)
|
||||
.build()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 데이터 삭제
|
||||
*/
|
||||
private void deleteContents() {
|
||||
contentRepository.deleteAll(contents);
|
||||
|
||||
contents.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 데이터 단건 등록
|
||||
*
|
||||
* @return Content 컨텐츠 엔티티
|
||||
*/
|
||||
private Content insertContent() {
|
||||
return contentRepository.save(Content.builder().contentName(INSERT_CONTENT_NAME)
|
||||
.contentRemark(INSERT_CONTENT_REMARK).contentValue(INSERT_CONTENT_VALUE).build());
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 데이터 단건 삭제
|
||||
*/
|
||||
private void deleteContent(Integer contentNo) {
|
||||
contentRepository.deleteById(contentNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 데이터 단건 조회
|
||||
*
|
||||
* @param contentNo 컨텐츠 번호
|
||||
* @return Optional<Content> 컨텐츠 엔티티
|
||||
*/
|
||||
private Optional<Content> selectData(Integer contentNo) {
|
||||
return contentRepository.findById(contentNo);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,439 @@
|
||||
package org.egovframe.cloud.portalservice.api.menu;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.egovframe.cloud.portalservice.api.menu.dto.MenuDnDRequestDto;
|
||||
import org.egovframe.cloud.portalservice.api.menu.dto.MenuResponseDto;
|
||||
import org.egovframe.cloud.portalservice.api.menu.dto.MenuTreeRequestDto;
|
||||
import org.egovframe.cloud.portalservice.api.menu.dto.MenuTreeResponseDto;
|
||||
import org.egovframe.cloud.portalservice.api.menu.dto.MenuUpdateRequestDto;
|
||||
import org.egovframe.cloud.portalservice.api.menu.dto.SiteResponseDto;
|
||||
import org.egovframe.cloud.portalservice.domain.menu.Menu;
|
||||
import org.egovframe.cloud.portalservice.domain.menu.MenuRepository;
|
||||
import org.egovframe.cloud.portalservice.domain.menu.Site;
|
||||
import org.egovframe.cloud.portalservice.domain.menu.SiteRepository;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
@EnableConfigurationProperties
|
||||
@TestPropertySource(properties = {"spring.config.location=classpath:application-test.yml"})
|
||||
@ActiveProfiles(profiles = "test")
|
||||
class MenuApiControllerTest {
|
||||
|
||||
|
||||
@Autowired
|
||||
private TestRestTemplate restTemplate;
|
||||
|
||||
@Autowired
|
||||
private MenuRepository menuRepository;
|
||||
|
||||
@Autowired
|
||||
private SiteRepository siteRepository;
|
||||
|
||||
|
||||
@BeforeEach
|
||||
public void setup() throws Exception {
|
||||
siteRepository.save(Site.builder()
|
||||
.name("site")
|
||||
.isUse(true)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
public void cleanup() throws Exception {
|
||||
menuRepository.deleteAll();
|
||||
siteRepository.deleteAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 메뉴목록을조회한다_bySiteId() throws Exception {
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
|
||||
Menu parentMenu = menuRepository.save(Menu.builder()
|
||||
.menuKorName("parent")
|
||||
.sortSeq(1)
|
||||
.site(site)
|
||||
.build());
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
Menu childMenu = Menu.builder()
|
||||
.menuKorName("child_" + i)
|
||||
.site(site)
|
||||
.parent(parentMenu)
|
||||
.sortSeq(i + 1)
|
||||
.build();
|
||||
childMenu.setParentMenu(parentMenu);
|
||||
menuRepository.save(childMenu);
|
||||
}
|
||||
|
||||
//when
|
||||
ResponseEntity<List<MenuTreeResponseDto>> responseEntity = restTemplate.exchange("/api/v1/"+site.getId()+"/menus", HttpMethod.GET, null, new ParameterizedTypeReference<List<MenuTreeResponseDto>>(){});
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
List<MenuTreeResponseDto> body = responseEntity.getBody();
|
||||
assertThat(body.size()).isEqualTo(1);
|
||||
body.stream().forEach(System.out::println);
|
||||
assertThat(body.get(0).getChildren().size()).isEqualTo(3);
|
||||
body.stream().forEach(menuTreeResponseDto -> {
|
||||
menuTreeResponseDto.getChildren().stream().forEach(System.out::println);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 메뉴관리_사이트콤보_목록_조회한다() throws Exception {
|
||||
//given
|
||||
siteRepository.save(Site.builder()
|
||||
.name("portal")
|
||||
.isUse(true)
|
||||
.build()
|
||||
);
|
||||
siteRepository.save(Site.builder()
|
||||
.name("admin")
|
||||
.isUse(true)
|
||||
.build()
|
||||
);
|
||||
|
||||
//when
|
||||
ResponseEntity<List<SiteResponseDto>> responseEntity = restTemplate.exchange("/api/v1/sites", HttpMethod.GET, null, new ParameterizedTypeReference<List<SiteResponseDto>>(){});
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody()).extracting("name").contains("portal", "admin");
|
||||
responseEntity.getBody().stream().forEach(System.out::println);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 메뉴관리_왼쪽트리_조회한다() throws Exception {
|
||||
//given
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
|
||||
Menu parentMenu1 = menuRepository.save(Menu.builder()
|
||||
.menuKorName("parent_1")
|
||||
.sortSeq(1)
|
||||
.site(site)
|
||||
.build());
|
||||
Menu parentMenu2 = menuRepository.save(Menu.builder()
|
||||
.menuKorName("parent_2")
|
||||
.sortSeq(2)
|
||||
.site(site)
|
||||
.build());
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
Menu childMenu1 = Menu.builder()
|
||||
.menuKorName("child_1_" + i)
|
||||
.site(site)
|
||||
.parent(parentMenu1)
|
||||
.sortSeq(i + 1)
|
||||
.build();
|
||||
childMenu1.setParentMenu(parentMenu1);
|
||||
menuRepository.save(childMenu1);
|
||||
if (i == 1) {
|
||||
Menu childChildMenu = Menu.builder()
|
||||
.menuKorName("child_child_1")
|
||||
.site(site)
|
||||
.parent(childMenu1)
|
||||
.sortSeq(1)
|
||||
.build();
|
||||
childChildMenu.setParentMenu(childMenu1);
|
||||
menuRepository.save(childChildMenu);
|
||||
Menu childChildMenu2 = Menu.builder()
|
||||
.menuKorName("child_child_1")
|
||||
.site(site)
|
||||
.parent(childMenu1)
|
||||
.sortSeq(2)
|
||||
.build();
|
||||
childChildMenu2.setParentMenu(childMenu1);
|
||||
menuRepository.save(childChildMenu2);
|
||||
}
|
||||
|
||||
Menu childMenu2 = Menu.builder()
|
||||
.menuKorName("child_2_" + i)
|
||||
.site(site)
|
||||
.parent(parentMenu2)
|
||||
.sortSeq(i + 1)
|
||||
.build();
|
||||
childMenu1.setParentMenu(parentMenu2);
|
||||
menuRepository.save(childMenu2);
|
||||
}
|
||||
|
||||
ResponseEntity<List<MenuTreeResponseDto>> responseEntity = restTemplate.exchange("/api/v1/menus/"+site.getId()+"/tree", HttpMethod.GET, null, new ParameterizedTypeReference<List<MenuTreeResponseDto>>(){});
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
List<MenuTreeResponseDto> body = responseEntity.getBody();
|
||||
assertThat(body).extracting("name").contains(parentMenu1.getMenuKorName(), parentMenu2.getMenuKorName());
|
||||
body.stream().forEach(menuTreeResponseDto -> {
|
||||
System.out.println(menuTreeResponseDto);
|
||||
menuTreeResponseDto.getChildren().stream().forEach(menuTreeResponseDto1 -> {
|
||||
System.out.println(menuTreeResponseDto1);
|
||||
menuTreeResponseDto1.getChildren().stream().forEach(System.out::println);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 메뉴관리_오른쪽_상세정보_조회한다() throws Exception {
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
|
||||
Menu parentMenu = menuRepository.save(Menu.builder()
|
||||
.menuKorName("parent")
|
||||
.sortSeq(1)
|
||||
.site(site)
|
||||
.build());
|
||||
|
||||
//when
|
||||
String url = "/api/v1/manager/menus/"+parentMenu.getId();
|
||||
ResponseEntity<MenuResponseDto> responseEntity = restTemplate.getForEntity(url, MenuResponseDto.class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody()).extracting("name").isEqualTo(parentMenu.getMenuKorName());
|
||||
System.out.println(responseEntity.getBody());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 메뉴관리_트리메뉴_추가한다() throws Exception {
|
||||
//given
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
|
||||
MenuTreeRequestDto menuTreeRequestDto = MenuTreeRequestDto.builder()
|
||||
.parentId(null)
|
||||
.siteId(site.getId())
|
||||
.name("parent")
|
||||
.sortSeq(1)
|
||||
.build();
|
||||
|
||||
String url = "/api/v1/menus";
|
||||
|
||||
//when
|
||||
ResponseEntity<MenuTreeResponseDto> responseEntity = restTemplate.postForEntity(url, menuTreeRequestDto, MenuTreeResponseDto.class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
System.out.println(responseEntity.getBody());
|
||||
assertThat(responseEntity.getBody()).extracting("name").isEqualTo(menuTreeRequestDto.getName());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @TODO
|
||||
* bulk update 수정 필요
|
||||
* @throws Exception
|
||||
*/
|
||||
@Test
|
||||
public void 메뉴관리_트리_드래그앤드랍_순서_및_부모메뉴_변경() throws Exception {
|
||||
//given
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
|
||||
Menu parentMenu1 = menuRepository.save(Menu.builder()
|
||||
.menuKorName("parent_1")
|
||||
.sortSeq(1)
|
||||
.site(site)
|
||||
.build());
|
||||
Menu parentMenu2 = menuRepository.save(Menu.builder()
|
||||
.menuKorName("parent_2")
|
||||
.sortSeq(2)
|
||||
.site(site)
|
||||
.build());
|
||||
|
||||
Long menuId = 0L;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
Menu childMenu1 = Menu.builder()
|
||||
.menuKorName("child_1_" + i)
|
||||
.site(site)
|
||||
.parent(parentMenu1)
|
||||
.sortSeq(i + 1)
|
||||
.build();
|
||||
childMenu1.setParentMenu(parentMenu1);
|
||||
Menu save = menuRepository.save(childMenu1);
|
||||
menuId = save.getId();
|
||||
}
|
||||
|
||||
List<MenuDnDRequestDto> updateList = new ArrayList<>();
|
||||
|
||||
updateList.add(MenuDnDRequestDto.builder()
|
||||
.menuId(menuId)
|
||||
.sortSeq(1)
|
||||
.parentId(parentMenu2.getId())
|
||||
.build());
|
||||
|
||||
HttpEntity<List<MenuDnDRequestDto>> httpEntity = new HttpEntity<>(
|
||||
updateList
|
||||
);
|
||||
|
||||
|
||||
String url = "/api/v1/menus/"+site.getId()+"/tree";
|
||||
|
||||
//when
|
||||
ResponseEntity<List<MenuTreeResponseDto>> responseEntity =
|
||||
restTemplate.exchange(url, HttpMethod.PUT, httpEntity, new ParameterizedTypeReference<List<MenuTreeResponseDto>>(){});
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
responseEntity.getBody().stream().forEach(System.out::println);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 메뉴관리_트리_이름변경한다() throws Exception {
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
|
||||
Menu parentMenu1 = menuRepository.save(Menu.builder()
|
||||
.menuKorName("parent_1")
|
||||
.sortSeq(1)
|
||||
.site(site)
|
||||
.build());
|
||||
|
||||
Long menuId = 0L;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
Menu childMenu1 = Menu.builder()
|
||||
.menuKorName("child_1_" + i)
|
||||
.site(site)
|
||||
.parent(parentMenu1)
|
||||
.sortSeq(i + 1)
|
||||
.build();
|
||||
childMenu1.setParentMenu(parentMenu1);
|
||||
Menu save = menuRepository.save(childMenu1);
|
||||
menuId = save.getId();
|
||||
}
|
||||
|
||||
String url = "/api/v1/menus/"+menuId+"/updateName";
|
||||
|
||||
//when
|
||||
ResponseEntity<MenuTreeResponseDto> responseEntity =
|
||||
restTemplate.exchange(url, HttpMethod.PUT, null, MenuTreeResponseDto.class);
|
||||
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody().getName()).isEqualTo("updateName");
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 메뉴관리_기본설정_저장한다() throws Exception {
|
||||
//given
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
|
||||
Menu parentMenu1 = menuRepository.save(Menu.builder()
|
||||
.menuKorName("parent_1")
|
||||
.sortSeq(1)
|
||||
.site(site)
|
||||
.build());
|
||||
|
||||
String url = "/api/v1/menus/"+parentMenu1.getId();
|
||||
|
||||
|
||||
HttpEntity<MenuUpdateRequestDto> httpEntity = new HttpEntity<>(
|
||||
MenuUpdateRequestDto.builder()
|
||||
.description("상위메뉴")
|
||||
.connectId(1)
|
||||
.menuType("menuType")
|
||||
.urlPath("/index")
|
||||
.subName("subname")
|
||||
.isUse(true)
|
||||
.isShow(true)
|
||||
.isBlank(false)
|
||||
.icon("icon")
|
||||
.build()
|
||||
);
|
||||
|
||||
//when
|
||||
ResponseEntity<MenuResponseDto> responseEntity =
|
||||
restTemplate.exchange(url, HttpMethod.PUT, httpEntity, MenuResponseDto.class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody()).extracting("description", "isUse").containsExactly("상위메뉴", true);
|
||||
System.out.println(responseEntity.getBody());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 메뉴관리_한건_삭제한다() throws Exception {
|
||||
//given
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
|
||||
Menu parentMenu1 = menuRepository.save(Menu.builder()
|
||||
.menuKorName("parent_1")
|
||||
.sortSeq(1)
|
||||
.site(site)
|
||||
.build());
|
||||
|
||||
Long menuId = 0L;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
Menu childMenu1 = Menu.builder()
|
||||
.menuKorName("child_1_" + i)
|
||||
.site(site)
|
||||
.parent(parentMenu1)
|
||||
.sortSeq(i + 1)
|
||||
.build();
|
||||
childMenu1.setParentMenu(parentMenu1);
|
||||
Menu save = menuRepository.save(childMenu1);
|
||||
menuId = save.getId();
|
||||
}
|
||||
|
||||
String url = "/api/v1/menus/"+menuId;
|
||||
//when
|
||||
restTemplate.delete(url);
|
||||
|
||||
//then
|
||||
Optional<Menu> optional = menuRepository.findById(menuId);
|
||||
assertThat(optional.isPresent()).isFalse();
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 메뉴관리_부모메뉴로_모두_삭제한다() throws Exception {
|
||||
//given
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
|
||||
Menu parentMenu1 = menuRepository.save(Menu.builder()
|
||||
.menuKorName("parent_1")
|
||||
.sortSeq(1)
|
||||
.site(site)
|
||||
.build());
|
||||
|
||||
Long menuId = 0L;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
Menu childMenu1 = Menu.builder()
|
||||
.menuKorName("child_1_" + i)
|
||||
.site(site)
|
||||
.parent(parentMenu1)
|
||||
.sortSeq(i + 1)
|
||||
.build();
|
||||
childMenu1.setParentMenu(parentMenu1);
|
||||
Menu save = menuRepository.save(childMenu1);
|
||||
menuId = save.getId();
|
||||
}
|
||||
|
||||
String url = "/api/v1/menus/"+parentMenu1.getId();
|
||||
//when
|
||||
restTemplate.delete(url);
|
||||
|
||||
//then
|
||||
List<Menu> menus = menuRepository.findAll();
|
||||
assertThat(menus.size()).isEqualTo(0);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,242 @@
|
||||
package org.egovframe.cloud.portalservice.api.menu;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.egovframe.cloud.portalservice.api.menu.dto.MenuRoleRequestDto;
|
||||
import org.egovframe.cloud.portalservice.api.menu.dto.MenuRoleResponseDto;
|
||||
import org.egovframe.cloud.portalservice.api.menu.dto.MenuSideResponseDto;
|
||||
import org.egovframe.cloud.portalservice.domain.menu.Menu;
|
||||
import org.egovframe.cloud.portalservice.domain.menu.MenuRepository;
|
||||
import org.egovframe.cloud.portalservice.domain.menu.MenuRole;
|
||||
import org.egovframe.cloud.portalservice.domain.menu.MenuRoleRepository;
|
||||
import org.egovframe.cloud.portalservice.domain.menu.Site;
|
||||
import org.egovframe.cloud.portalservice.domain.menu.SiteRepository;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
@EnableConfigurationProperties
|
||||
@TestPropertySource(properties = {"spring.config.location=classpath:application-test.yml"})
|
||||
@ActiveProfiles(profiles = "test")
|
||||
class MenuRoleApiControllerTest {
|
||||
|
||||
|
||||
@Autowired
|
||||
private TestRestTemplate restTemplate;
|
||||
|
||||
@Autowired
|
||||
private MenuRepository menuRepository;
|
||||
|
||||
@Autowired
|
||||
private SiteRepository siteRepository;
|
||||
|
||||
@Autowired
|
||||
private MenuRoleRepository menuRoleRepository;
|
||||
|
||||
@BeforeEach
|
||||
public void setup() throws Exception {
|
||||
Site site = Site.builder()
|
||||
.name("site")
|
||||
.isUse(true)
|
||||
.build();
|
||||
siteRepository.save(site);
|
||||
|
||||
Menu parentMenu = menuRepository.save(Menu.builder()
|
||||
.menuKorName("parent")
|
||||
.sortSeq(1)
|
||||
.site(site)
|
||||
.build());
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
Menu childMenu = Menu.builder()
|
||||
.menuKorName("child_" + i)
|
||||
.site(site)
|
||||
.parent(parentMenu)
|
||||
.sortSeq(i + 1)
|
||||
.build();
|
||||
childMenu.setParentMenu(parentMenu);
|
||||
menuRepository.save(childMenu);
|
||||
}
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
public void cleanup() throws Exception {
|
||||
menuRoleRepository.deleteAll();
|
||||
menuRepository.deleteAll();
|
||||
siteRepository.deleteAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 권한별메뉴_데이터없이_메뉴outerjoin_하여_조회한다() throws Exception {
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
//when
|
||||
ResponseEntity<List<MenuRoleResponseDto>> responseEntity =
|
||||
restTemplate.exchange("/api/v1/menu-roles/role/"+site.getId(), HttpMethod.GET, null, new ParameterizedTypeReference<List<MenuRoleResponseDto>>(){});
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
List<MenuRoleResponseDto> body = responseEntity.getBody();
|
||||
assertThat(body.size()).isEqualTo(1);
|
||||
assertThat(body.get(0).getChildren().size()).isEqualTo(3);
|
||||
body.stream().forEach(menuTreeResponseDto -> {
|
||||
System.out.println(menuTreeResponseDto.toString());
|
||||
menuTreeResponseDto.getChildren().stream().forEach(System.out::println);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 권한별메뉴_데이터있는경우_조회한다() throws Exception {
|
||||
|
||||
List<Menu> menus = menuRepository.findAll();
|
||||
Menu parent = menus.stream().filter(menu -> menu.getMenuKorName().equals("parent")).collect(Collectors.toList()).get(0);
|
||||
Menu child1 = menus.stream().filter(menu -> menu.getMenuKorName().equals("child_1")).collect(Collectors.toList()).get(0);
|
||||
|
||||
List<MenuRole> menuRoles = new ArrayList<>();
|
||||
menuRoles.add(MenuRole.builder().roleId("role").menu(parent).build());
|
||||
menuRoles.add(MenuRole.builder().roleId("role").menu(child1).build());
|
||||
menuRoleRepository.saveAll(menuRoles);
|
||||
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
//when
|
||||
ResponseEntity<List<MenuRoleResponseDto>> responseEntity =
|
||||
restTemplate.exchange("/api/v1/menu-roles/role/"+site.getId(), HttpMethod.GET, null, new ParameterizedTypeReference<List<MenuRoleResponseDto>>(){});
|
||||
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
List<MenuRoleResponseDto> body = responseEntity.getBody();
|
||||
assertThat(body.size()).isEqualTo(1);
|
||||
assertThat(body.get(0).getIsChecked()).isTrue();
|
||||
body.stream().forEach(System.out::println);
|
||||
assertThat(body.get(0).getChildren().size()).isEqualTo(3);
|
||||
body.stream().forEach(menuTreeResponseDto -> {
|
||||
menuTreeResponseDto.getChildren().stream().forEach(child -> {
|
||||
System.out.println(child);
|
||||
if (child.getKorName().equals("child_1")) {
|
||||
assertThat(child.getIsChecked()).isTrue();
|
||||
}else {
|
||||
assertThat(child.getIsChecked()).isFalse();
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 권한별메뉴관리_저장한다() throws Exception {
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
List<MenuRoleResponseDto> list = menuRoleRepository.findTree("role", site.getId());
|
||||
|
||||
List<MenuRoleRequestDto> requestDtoList = new ArrayList<>();
|
||||
List<MenuRoleRequestDto> children = new ArrayList<>();
|
||||
list.get(0).getChildren().stream().forEach(menuRoleResponseDto -> {
|
||||
if (menuRoleResponseDto.getKorName().equals("child_1")) {
|
||||
children.add(MenuRoleRequestDto.builder()
|
||||
.menuRoleId(menuRoleResponseDto.getMenuRoleId())
|
||||
.isChecked(true)
|
||||
.roleId("role")
|
||||
.id(menuRoleResponseDto.getId())
|
||||
.build());
|
||||
|
||||
}else {
|
||||
children.add(MenuRoleRequestDto.builder()
|
||||
.menuRoleId(menuRoleResponseDto.getMenuRoleId())
|
||||
.isChecked(false)
|
||||
.roleId("role")
|
||||
.id(menuRoleResponseDto.getId())
|
||||
.build());
|
||||
}
|
||||
});
|
||||
|
||||
requestDtoList.add(MenuRoleRequestDto.builder()
|
||||
.menuRoleId(list.get(0).getMenuRoleId())
|
||||
.isChecked(true)
|
||||
.id(list.get(0).getId())
|
||||
.children(children)
|
||||
.build());
|
||||
|
||||
HttpEntity<List<MenuRoleRequestDto>> httpEntity = new HttpEntity<>(
|
||||
requestDtoList
|
||||
);
|
||||
|
||||
|
||||
|
||||
//when
|
||||
ResponseEntity<String> responseEntity =
|
||||
restTemplate.exchange("/api/v1/menu-roles", HttpMethod.POST, httpEntity, String.class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody()).isEqualTo("Success");
|
||||
|
||||
List<MenuRole> roles = menuRoleRepository.findAll();
|
||||
roles.stream().forEach(System.out::println);
|
||||
assertThat(roles.size()).isEqualTo(2);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 로그인하지_않은_사용자의_메뉴조회() throws Exception {
|
||||
//given
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
Menu parentMenu = menuRepository.save(Menu.builder()
|
||||
.menuKorName("parent-any")
|
||||
.sortSeq(1)
|
||||
.site(site)
|
||||
.build());
|
||||
MenuRole parentMenuRole = MenuRole.builder()
|
||||
.roleId("ROLE_ANONYMOUS")
|
||||
.menu(parentMenu)
|
||||
.build();
|
||||
parentMenuRole.setMenu(parentMenu);
|
||||
menuRoleRepository.save(parentMenuRole);
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
Menu childMenu = Menu.builder()
|
||||
.menuKorName("child-any_" + i)
|
||||
.site(site)
|
||||
.parent(parentMenu)
|
||||
.sortSeq(i + 1)
|
||||
.build();
|
||||
childMenu.setParentMenu(parentMenu);
|
||||
menuRepository.save(childMenu);
|
||||
MenuRole role_any = MenuRole.builder()
|
||||
.roleId("ROLE_ANONYMOUS")
|
||||
.menu(childMenu)
|
||||
.build();
|
||||
role_any.setMenu(childMenu);
|
||||
menuRoleRepository.save(role_any);
|
||||
}
|
||||
//when
|
||||
ResponseEntity<List<MenuSideResponseDto>> responseEntity =
|
||||
restTemplate.exchange("/api/v1/menu-roles/"+site.getId(), HttpMethod.GET, null, new ParameterizedTypeReference<List<MenuSideResponseDto>>(){});
|
||||
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
List<MenuSideResponseDto> body = responseEntity.getBody();
|
||||
assertThat(body.size()).isEqualTo(1);
|
||||
body.stream().forEach(menuSideResponseDto -> {
|
||||
System.out.println(menuSideResponseDto);
|
||||
menuSideResponseDto.getChildren().stream().forEach(System.out::println);
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package org.egovframe.cloud.portalservice.api.message;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.assertj.core.api.Assertions;
|
||||
import org.egovframe.cloud.portalservice.api.message.dto.MessageListResponseDto;
|
||||
import org.egovframe.cloud.portalservice.domain.message.Message;
|
||||
import org.egovframe.cloud.portalservice.domain.message.MessageRepository;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
@EnableConfigurationProperties
|
||||
@TestPropertySource(properties = {"spring.config.location=classpath:application-test.yml"})
|
||||
@ActiveProfiles(profiles = "test")
|
||||
class MessageApiControllerTest {
|
||||
|
||||
@Autowired
|
||||
private TestRestTemplate restTemplate;
|
||||
|
||||
@Autowired
|
||||
private MessageRepository messageRepository;
|
||||
|
||||
private final static String API_URL = "/api/v1/messages/";
|
||||
|
||||
@BeforeEach
|
||||
public void setup() throws Exception {
|
||||
messageRepository.save(Message.builder().messageId("test.one").messageKoName("테스트1").build());
|
||||
messageRepository.save(Message.builder().messageId("test.two").messageKoName("테스트2").build());
|
||||
messageRepository.save(Message.builder().messageId("test.three").messageKoName("테스트3").messageEnName("TEST3").build());
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
public void cleanup() throws Exception {
|
||||
messageRepository.deleteAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 메시지_한글명_목록_조회된다() throws Exception {
|
||||
// given
|
||||
String lang = "ko";
|
||||
|
||||
// when
|
||||
ResponseEntity<List<MessageListResponseDto>> responseEntity = restTemplate.exchange(API_URL + lang, HttpMethod.GET, null, new ParameterizedTypeReference<List<MessageListResponseDto>>(){});
|
||||
|
||||
// then
|
||||
responseEntity.getBody().forEach(messageListResponseDto -> System.out.println("id = " + messageListResponseDto.getMessageId() + ", messageName() = " + messageListResponseDto.getMessageName()));
|
||||
Assertions.assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
Assertions.assertThat(responseEntity.getBody().size()).isEqualTo(3);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,218 @@
|
||||
package org.egovframe.cloud.portalservice.api.policy;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.egovframe.cloud.portalservice.api.policy.dto.PolicyResponseDto;
|
||||
import org.egovframe.cloud.portalservice.api.policy.dto.PolicySaveRequestDto;
|
||||
import org.egovframe.cloud.portalservice.api.policy.dto.PolicyUpdateRequestDto;
|
||||
import org.egovframe.cloud.portalservice.domain.policy.Policy;
|
||||
import org.egovframe.cloud.portalservice.domain.policy.PolicyRepository;
|
||||
import org.egovframe.cloud.portalservice.util.RestResponsePage;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.boot.web.server.LocalServerPort;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||
|
||||
@ExtendWith(SpringExtension.class)
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
@EnableConfigurationProperties
|
||||
@TestPropertySource(properties = {"spring.config.location=classpath:application-test.yml"})
|
||||
@ActiveProfiles(profiles = "test")
|
||||
class PolicyApiControllerTest {
|
||||
|
||||
@LocalServerPort
|
||||
private int port;
|
||||
|
||||
private static final String API_URL = "/api/v1/policies";
|
||||
|
||||
@Autowired
|
||||
TestRestTemplate restTemplate;
|
||||
|
||||
@Autowired
|
||||
private PolicyRepository policyRepository;
|
||||
|
||||
@BeforeEach
|
||||
public void setUp() {
|
||||
//given
|
||||
for (int i = 1; i <= 10; i++) {
|
||||
String title = "title_"+i;
|
||||
String contents = "contents " + i;
|
||||
String type = "TOS";
|
||||
if(i % 2 == 0){
|
||||
type = "PP";
|
||||
}
|
||||
|
||||
policyRepository.save(Policy.builder()
|
||||
.type(type)
|
||||
.title(title)
|
||||
.isUse(true)
|
||||
.regDate(ZonedDateTime.now())
|
||||
.contents(contents)
|
||||
.build());
|
||||
}
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
public void teardown() {
|
||||
policyRepository.deleteAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 이용약관_등록_정상() throws Exception {
|
||||
//given
|
||||
String type = "PP";
|
||||
String title= "test title";
|
||||
String contents = "test contents";
|
||||
|
||||
PolicySaveRequestDto requestDto = PolicySaveRequestDto.builder()
|
||||
.type(type)
|
||||
.title(title)
|
||||
.isUse(true)
|
||||
.regDate(ZonedDateTime.now())
|
||||
.contents(contents)
|
||||
.build();
|
||||
|
||||
String url = "http://localhost:"+port+API_URL;
|
||||
|
||||
//when
|
||||
ResponseEntity<Long> responseEntity = restTemplate.postForEntity(url, requestDto, Long.class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
Optional<Policy> policy = policyRepository.findById(responseEntity.getBody().longValue());
|
||||
|
||||
System.out.println(policy.get().toString());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 목록조회한다() throws Exception {
|
||||
|
||||
String url = "http://localhost:"+port+API_URL+"?size=3%page=0";
|
||||
//when
|
||||
ResponseEntity<RestResponsePage<PolicyResponseDto>> responseEntity =
|
||||
restTemplate.exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<RestResponsePage<PolicyResponseDto>>() {});
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
RestResponsePage<PolicyResponseDto> body = responseEntity.getBody();
|
||||
body.stream().forEach(System.out::println);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 회원가입시_가장최근_이용약관_조회_된다() throws Exception {
|
||||
|
||||
String url = "http://localhost:"+port+API_URL + "/latest/TOS";
|
||||
//when
|
||||
ResponseEntity<PolicyResponseDto> responseEntity = restTemplate.getForEntity(url, PolicyResponseDto.class);
|
||||
|
||||
//then
|
||||
System.out.println(responseEntity.getBody().toString());
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody().getTitle()).isEqualTo("title_9");
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ID로_한건조회_정상() throws Exception {
|
||||
|
||||
String url = "http://localhost:"+port+API_URL +"/9";
|
||||
|
||||
//when
|
||||
ResponseEntity<PolicyResponseDto> responseEntity = restTemplate.getForEntity(url, PolicyResponseDto.class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
System.out.println(responseEntity.getBody().toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 이용약관_수정_된다() throws Exception {
|
||||
//given
|
||||
Long id = policyRepository.save(Policy.builder()
|
||||
.type("TOS")
|
||||
.title("title")
|
||||
.contents("contents!!!!")
|
||||
.build()
|
||||
).getId();
|
||||
String url = "http://localhost:"+port+API_URL +"/"+id;
|
||||
|
||||
PolicyUpdateRequestDto requestDto = PolicyUpdateRequestDto.builder()
|
||||
.title("update title")
|
||||
.contents("update Details")
|
||||
.build();
|
||||
|
||||
//when
|
||||
HttpEntity<PolicyUpdateRequestDto> requestEntity = new HttpEntity<>(requestDto);
|
||||
|
||||
//when
|
||||
ResponseEntity<Long> responseEntity = restTemplate.exchange(url, HttpMethod.PUT, requestEntity, Long.class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody()).isEqualTo(id);
|
||||
Policy result = policyRepository.findById(id).get();
|
||||
System.out.println(result);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 이용약관_삭제_한다() {
|
||||
//given
|
||||
Long id = policyRepository.save(Policy.builder()
|
||||
.type("TOS")
|
||||
.title("title")
|
||||
.contents("contents!!!!")
|
||||
.build()
|
||||
).getId();
|
||||
String url = "http://localhost:"+port+API_URL +"/"+id;
|
||||
|
||||
//when
|
||||
restTemplate.delete(url);
|
||||
|
||||
//then
|
||||
Optional<Policy> terms = policyRepository.findById(id);
|
||||
assertThat(terms.isPresent()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 사용여부_수정_한다() throws Exception {
|
||||
//given
|
||||
Long id = policyRepository.save(Policy.builder()
|
||||
.type("TOS")
|
||||
.title("title")
|
||||
.isUse(true)
|
||||
.contents("contents!!!")
|
||||
.build()
|
||||
).getId();
|
||||
String url = "http://localhost:"+port+API_URL +"/"+id+"/"+false;
|
||||
|
||||
//when
|
||||
ResponseEntity<Long> responseEntity = restTemplate.exchange(url, HttpMethod.PUT, null, Long.class);
|
||||
|
||||
//then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody()).isEqualTo(id);
|
||||
Policy result = policyRepository.findById(id).get();
|
||||
System.out.println(result);
|
||||
assertThat(result.getIsUse()).isFalse();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,415 @@
|
||||
package org.egovframe.cloud.portalservice.api.privacy;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.assertj.core.api.Condition;
|
||||
import org.egovframe.cloud.portalservice.api.privacy.dto.PrivacyListResponseDto;
|
||||
import org.egovframe.cloud.portalservice.api.privacy.dto.PrivacyResponseDto;
|
||||
import org.egovframe.cloud.portalservice.domain.privacy.Privacy;
|
||||
import org.egovframe.cloud.portalservice.domain.privacy.PrivacyRepository;
|
||||
import org.egovframe.cloud.portalservice.util.RestResponsePage;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
|
||||
/**
|
||||
* org.egovframe.cloud.portalservice.api.privacy.PrivacyApiControllerTest
|
||||
*
|
||||
* 개인정보처리방침 Rest API 컨트롤러 테스트 클래스
|
||||
*
|
||||
* @author 표준프레임워크센터 jooho
|
||||
* @version 1.0
|
||||
* @since 2021/07/23
|
||||
*
|
||||
* <pre>
|
||||
* << 개정이력(Modification Information) >>
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2021/07/23 jooho 최초 생성
|
||||
* </pre>
|
||||
*/
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
@EnableConfigurationProperties
|
||||
@TestPropertySource(properties = {"spring.config.location=classpath:application-test.yml"})
|
||||
@ActiveProfiles(profiles = "test")
|
||||
class PrivacyApiControllerTest {
|
||||
|
||||
/**
|
||||
* test rest template
|
||||
*/
|
||||
@Autowired
|
||||
TestRestTemplate restTemplate;
|
||||
|
||||
/**
|
||||
* 개인정보처리방침 레파지토리 인터페이스
|
||||
*/
|
||||
@Autowired
|
||||
PrivacyRepository privacyRepository;
|
||||
|
||||
/**
|
||||
* 개인정보처리방침 API 경로
|
||||
*/
|
||||
private static final String URL = "/api/v1/privacies";
|
||||
|
||||
/**
|
||||
* 테스트 데이터 등록 횟수
|
||||
*/
|
||||
private final Integer GIVEN_DATA_COUNT = 10;
|
||||
|
||||
/**
|
||||
* 테스트 데이터
|
||||
*/
|
||||
private final String CONTENT_TITLE_PREFIX = "개인정보처리방침 제목";
|
||||
private final String CONTENT_CONTENT_PREFIX = "개인정보처리방침 내용";
|
||||
|
||||
private final Integer CONTENT_NO = GIVEN_DATA_COUNT + 1;
|
||||
private final String INSERT_CONTENT_TITLE = CONTENT_TITLE_PREFIX + "_" + CONTENT_NO;
|
||||
private final String INSERT_CONTENT_CONTENT = CONTENT_CONTENT_PREFIX + "_" + CONTENT_NO;
|
||||
private final Boolean INSERT_USE_AT = true;
|
||||
|
||||
private final String UPDATE_CONTENT_TITLE = CONTENT_TITLE_PREFIX + "_" + (CONTENT_NO + 1);
|
||||
private final String UPDATE_CONTENT_CONTENT = CONTENT_CONTENT_PREFIX + "_" + (CONTENT_NO + 1);
|
||||
private final Boolean UPDATE_USE_AT = false;
|
||||
|
||||
/**
|
||||
* 테스트 데이터
|
||||
*/
|
||||
private final List<Privacy> privacies = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 테스트 시작 전 수행
|
||||
*/
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 종료 후 수행
|
||||
*/
|
||||
@AfterEach
|
||||
void tearDown() {
|
||||
//개인정보처리방침 삭제
|
||||
privacyRepository.deleteAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* 개인정보처리방침 페이지 목록 조회 테스트
|
||||
*/
|
||||
@Test
|
||||
void 개인정보처리방침_페이지_목록_조회() {
|
||||
// given
|
||||
insertPrivacies();
|
||||
|
||||
String queryString = "?keywordType=privacyTitle&keyword=" + CONTENT_TITLE_PREFIX; // 검색 조건
|
||||
queryString += "&page=0&size=" + GIVEN_DATA_COUNT; // 페이지 정보
|
||||
|
||||
// when
|
||||
ResponseEntity<RestResponsePage<PrivacyListResponseDto>> responseEntity = restTemplate.exchange(
|
||||
URL + queryString,
|
||||
HttpMethod.GET,
|
||||
null,
|
||||
new ParameterizedTypeReference<RestResponsePage<PrivacyListResponseDto>>() {
|
||||
}
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
RestResponsePage<PrivacyListResponseDto> page = responseEntity.getBody();
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getNumberOfElements()).isEqualTo(GIVEN_DATA_COUNT);
|
||||
assertThat(page.getContent())
|
||||
.isNotEmpty()
|
||||
.has(new Condition<>(l -> (CONTENT_TITLE_PREFIX + "_10").equals(l.get(0).getPrivacyTitle()), "PrivacyApiControllerTest.findPage contains " + CONTENT_TITLE_PREFIX + "_10"))
|
||||
.has(new Condition<>(l -> (CONTENT_TITLE_PREFIX + "_9").equals(l.get(1).getPrivacyTitle()), "PrivacyApiControllerTest.findPage contains " + CONTENT_TITLE_PREFIX + "_9"));
|
||||
|
||||
deletePrivacies();
|
||||
}
|
||||
|
||||
/**
|
||||
* 개인정보처리방침 사용중 전체 목록 조회 테스트
|
||||
*/
|
||||
@Test
|
||||
void 개인정보처리방침_사용중_전체_목록_조회() {
|
||||
// given
|
||||
insertPrivacies();
|
||||
|
||||
// when
|
||||
ResponseEntity<List<PrivacyListResponseDto>> responseEntity = restTemplate.exchange(
|
||||
URL + "/all/use",
|
||||
HttpMethod.GET,
|
||||
null,
|
||||
new ParameterizedTypeReference<List<PrivacyListResponseDto>>() {
|
||||
}
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
List<PrivacyListResponseDto> list = responseEntity.getBody();
|
||||
assertThat(list).isNotNull();
|
||||
assertThat(list.size()).isEqualTo(GIVEN_DATA_COUNT / 2);
|
||||
assertThat(list)
|
||||
.isNotEmpty()
|
||||
.has(new Condition<>(l -> (CONTENT_TITLE_PREFIX + "_9").equals(l.get(0).getPrivacyTitle()), "PrivacyApiControllerTest.findAllByUseAtOrderByPrivacyNoDesc contains " + CONTENT_TITLE_PREFIX + "_9"))
|
||||
.has(new Condition<>(l -> (CONTENT_TITLE_PREFIX + "_7").equals(l.get(1).getPrivacyTitle()), "PrivacyApiControllerTest.findAllByUseAtOrderByPrivacyNoDesc contains " + CONTENT_TITLE_PREFIX + "_7"));
|
||||
|
||||
deletePrivacies();
|
||||
}
|
||||
|
||||
/**
|
||||
* 개인정보처리방침 상세 조회 테스트
|
||||
*/
|
||||
@Test
|
||||
void 개인정보처리방침_상세_조회() {
|
||||
// given
|
||||
Privacy entity = insertPrivacy();
|
||||
|
||||
final Integer privacyNo = entity.getPrivacyNo();
|
||||
|
||||
String url = URL + "/" + privacyNo;
|
||||
|
||||
// when
|
||||
ResponseEntity<PrivacyResponseDto> responseEntity = restTemplate.exchange(
|
||||
url,
|
||||
HttpMethod.GET,
|
||||
null,
|
||||
new ParameterizedTypeReference<PrivacyResponseDto>() {
|
||||
}
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
PrivacyResponseDto dto = responseEntity.getBody();
|
||||
assertThat(dto).isNotNull();
|
||||
assertThat(dto.getPrivacyNo()).isEqualTo(privacyNo);
|
||||
assertThat(dto.getPrivacyTitle()).isEqualTo(INSERT_CONTENT_TITLE);
|
||||
assertThat(dto.getPrivacyContent()).isEqualTo(INSERT_CONTENT_CONTENT);
|
||||
assertThat(dto.getUseAt()).isEqualTo(INSERT_USE_AT);
|
||||
|
||||
deletePrivacy(privacyNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 개인정보처리방침 등록 테스트
|
||||
*/
|
||||
@Test
|
||||
void 개인정보처리방침_등록() {
|
||||
// given
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("privacyTitle", INSERT_CONTENT_TITLE);
|
||||
params.put("privacyContent", INSERT_CONTENT_CONTENT);
|
||||
params.put("useAt", INSERT_USE_AT);
|
||||
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(params);
|
||||
|
||||
// when
|
||||
//ResponseEntity<BoardResponseDto> responseEntity = restTemplate.postForEntity(URL, requestDto, BoardResponseDto.class);
|
||||
ResponseEntity<PrivacyResponseDto> responseEntity = restTemplate.exchange(
|
||||
URL,
|
||||
HttpMethod.POST,
|
||||
httpEntity,
|
||||
new ParameterizedTypeReference<PrivacyResponseDto>() {
|
||||
}
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
PrivacyResponseDto dto = responseEntity.getBody();
|
||||
assertThat(dto).isNotNull();
|
||||
|
||||
final Integer privacyNo = dto.getPrivacyNo();
|
||||
|
||||
Optional<Privacy> privacy = selectData(privacyNo);
|
||||
assertThat(privacy).isPresent();
|
||||
|
||||
Privacy entity = privacy.get();
|
||||
assertThat(entity.getPrivacyNo()).isEqualTo(privacyNo);
|
||||
assertThat(entity.getPrivacyTitle()).isEqualTo(INSERT_CONTENT_TITLE);
|
||||
assertThat(entity.getPrivacyContent()).isEqualTo(INSERT_CONTENT_CONTENT);
|
||||
assertThat(entity.getUseAt()).isEqualTo(INSERT_USE_AT);
|
||||
|
||||
deletePrivacy(privacyNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 개인정보처리방침 수정 테스트
|
||||
*/
|
||||
@Test
|
||||
void 개인정보처리방침_수정() {
|
||||
// given
|
||||
Privacy entity = insertPrivacy();
|
||||
|
||||
final Integer privacyNo = entity.getPrivacyNo();
|
||||
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("privacyTitle", UPDATE_CONTENT_TITLE);
|
||||
params.put("privacyContent", UPDATE_CONTENT_CONTENT);
|
||||
params.put("useAt", UPDATE_USE_AT);
|
||||
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(params);
|
||||
|
||||
String url = URL + "/" + privacyNo;
|
||||
|
||||
// when
|
||||
ResponseEntity<PrivacyResponseDto> responseEntity = restTemplate.exchange(
|
||||
url,
|
||||
HttpMethod.PUT,
|
||||
httpEntity,
|
||||
new ParameterizedTypeReference<PrivacyResponseDto>() {
|
||||
}
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
PrivacyResponseDto dto = responseEntity.getBody();
|
||||
assertThat(dto).isNotNull();
|
||||
|
||||
Optional<Privacy> privacy = selectData(privacyNo);
|
||||
assertThat(privacy).isPresent();
|
||||
|
||||
Privacy updatedPrivacy = privacy.get();
|
||||
assertThat(updatedPrivacy.getPrivacyNo()).isEqualTo(privacyNo);
|
||||
assertThat(updatedPrivacy.getPrivacyTitle()).isEqualTo(UPDATE_CONTENT_TITLE);
|
||||
assertThat(updatedPrivacy.getPrivacyContent()).isEqualTo(UPDATE_CONTENT_CONTENT);
|
||||
assertThat(updatedPrivacy.getUseAt()).isEqualTo(UPDATE_USE_AT);
|
||||
|
||||
deletePrivacy(privacyNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 개인정보처리방침 사용 여부 수정 테스트
|
||||
*/
|
||||
@Test
|
||||
void 개인정보처리방침_사용여부_수정() {
|
||||
// given
|
||||
Privacy entity = insertPrivacy();
|
||||
|
||||
final Integer privacyNo = entity.getPrivacyNo();
|
||||
|
||||
String url = URL + "/" + privacyNo + "/" + UPDATE_USE_AT;
|
||||
|
||||
// when
|
||||
ResponseEntity<PrivacyResponseDto> responseEntity = restTemplate.exchange(
|
||||
url,
|
||||
HttpMethod.PUT,
|
||||
null,
|
||||
new ParameterizedTypeReference<PrivacyResponseDto>() {
|
||||
}
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
PrivacyResponseDto dto = responseEntity.getBody();
|
||||
assertThat(dto).isNotNull();
|
||||
|
||||
Optional<Privacy> privacy = selectData(privacyNo);
|
||||
assertThat(privacy).isPresent();
|
||||
|
||||
Privacy updatedPrivacy = privacy.get();
|
||||
assertThat(updatedPrivacy.getPrivacyNo()).isEqualTo(privacyNo);
|
||||
assertThat(updatedPrivacy.getUseAt()).isEqualTo(UPDATE_USE_AT);
|
||||
|
||||
deletePrivacy(privacyNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 개인정보처리방침 삭제 테스트
|
||||
*/
|
||||
@Test
|
||||
void 개인정보처리방침_삭제() {
|
||||
// given
|
||||
Privacy entity = insertPrivacy();
|
||||
|
||||
final Integer privacyNo = entity.getPrivacyNo();
|
||||
|
||||
String url = URL + "/" + privacyNo;
|
||||
|
||||
// when
|
||||
ResponseEntity<PrivacyResponseDto> responseEntity = restTemplate.exchange(
|
||||
url,
|
||||
HttpMethod.DELETE,
|
||||
null,
|
||||
PrivacyResponseDto.class
|
||||
);
|
||||
|
||||
// then
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
|
||||
Optional<Privacy> privacy = selectData(privacyNo);
|
||||
assertThat(privacy).isNotPresent();
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 데이터 등록
|
||||
*/
|
||||
private void insertPrivacies() {
|
||||
for (int i = 1; i <= GIVEN_DATA_COUNT; i++) {
|
||||
privacies.add(privacyRepository.save(Privacy.builder()
|
||||
.privacyTitle(CONTENT_TITLE_PREFIX + "_" + i)
|
||||
.privacyContent(CONTENT_CONTENT_PREFIX + "_" + i)
|
||||
.useAt(i % 2 == 1)
|
||||
.build()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 데이터 삭제
|
||||
*/
|
||||
private void deletePrivacies() {
|
||||
privacyRepository.deleteAll(privacies);
|
||||
|
||||
privacies.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 데이터 단건 등록
|
||||
*
|
||||
* @return Privacy 개인정보처리방침 엔티티
|
||||
*/
|
||||
private Privacy insertPrivacy() {
|
||||
return privacyRepository.save(Privacy.builder()
|
||||
.privacyTitle(INSERT_CONTENT_TITLE)
|
||||
.privacyContent(INSERT_CONTENT_CONTENT)
|
||||
.useAt(INSERT_USE_AT)
|
||||
.build());
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 데이터 단건 삭제
|
||||
*/
|
||||
private void deletePrivacy(Integer privacyNo) {
|
||||
privacyRepository.deleteById(privacyNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 테스트 데이터 단건 조회
|
||||
*
|
||||
* @param privacyNo 개인정보처리방침 번호
|
||||
* @return Optional<Privacy> 개인정보처리방침 엔티티
|
||||
*/
|
||||
private Optional<Privacy> selectData(Integer privacyNo) {
|
||||
return privacyRepository.findById(privacyNo);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package org.egovframe.cloud.portalservice.api.statistics;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.egovframe.cloud.portalservice.api.statistics.dto.StatisticsResponseDto;
|
||||
import org.egovframe.cloud.portalservice.domain.statistics.Statistics;
|
||||
import org.egovframe.cloud.portalservice.domain.statistics.StatisticsRepository;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
@EnableConfigurationProperties
|
||||
@TestPropertySource(properties = {"spring.config.location=classpath:application-test.yml"})
|
||||
@ActiveProfiles(profiles = "test")
|
||||
class StatisticsApiControllerTest {
|
||||
|
||||
@Autowired
|
||||
private TestRestTemplate restTemplate;
|
||||
|
||||
@Autowired
|
||||
private StatisticsRepository statisticsRepository;
|
||||
|
||||
|
||||
@BeforeEach
|
||||
public void setup() {
|
||||
for (int i = 0; i < 10; i++) {
|
||||
statisticsRepository.save(Statistics.builder()
|
||||
.siteId(1L)
|
||||
.remoteIp("testip")
|
||||
.build());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
public void tearDown() {
|
||||
statisticsRepository.deleteAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 월별접속통계_조회_성공() throws Exception {
|
||||
Long siteId = 1L;
|
||||
// when
|
||||
ResponseEntity< List<StatisticsResponseDto>> responseEntity =
|
||||
restTemplate.exchange("/api/v1/statistics/monthly/"+siteId,
|
||||
HttpMethod.GET,
|
||||
null,
|
||||
new ParameterizedTypeReference<List<StatisticsResponseDto>>(){});
|
||||
|
||||
responseEntity.getBody().forEach(System.out::println);
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody().size()).isEqualTo(1);
|
||||
assertThat(responseEntity.getBody().get(0).getY()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 일별접속통계_조회_성공() throws Exception {
|
||||
Long siteId = 1L;
|
||||
|
||||
// when
|
||||
ResponseEntity< List<StatisticsResponseDto>> responseEntity =
|
||||
restTemplate.exchange("/api/v1/statistics/daily/"+siteId+"?year=2021&month=9",
|
||||
HttpMethod.GET,
|
||||
null,
|
||||
new ParameterizedTypeReference<List<StatisticsResponseDto>>(){});
|
||||
|
||||
responseEntity.getBody().forEach(System.out::println);
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
assertThat(responseEntity.getBody().size()).isEqualTo(1);
|
||||
assertThat(responseEntity.getBody().get(0).getY()).isEqualTo(10);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package org.egovframe.cloud.portalservice.config;
|
||||
|
||||
import org.egovframe.cloud.common.exception.dto.ErrorResponse;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.context.MessageSource;
|
||||
import org.springframework.context.i18n.LocaleContextHolder;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
|
||||
|
||||
/**
|
||||
* org.egovframe.cloud.portalservice.config.ExceptionResponseTest
|
||||
* <p>
|
||||
* ExceptionResponse 정상 동작 확인 테스트
|
||||
*
|
||||
* @author 표준프레임워크센터 jaeyeolkim
|
||||
* @version 1.0
|
||||
* @since 2021/07/16
|
||||
*
|
||||
* <pre>
|
||||
* << 개정이력(Modification Information) >>
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2021/07/16 jaeyeolkim 최초 생성
|
||||
* </pre>
|
||||
*/
|
||||
@SpringBootTest(webEnvironment = RANDOM_PORT)
|
||||
public class ExceptionResponseTest {
|
||||
|
||||
@Autowired
|
||||
private TestRestTemplate restTemplate;
|
||||
|
||||
@Autowired
|
||||
private MessageSource messageSource;
|
||||
|
||||
@Test
|
||||
public void 해당_데이터가_존재하지_않습니다_오류메시지가_일치한다() throws Exception {
|
||||
// given
|
||||
String nonExistCode = "99999";
|
||||
|
||||
// when
|
||||
ResponseEntity<ErrorResponse> responseEntity = restTemplate.getForEntity("/api/v1/codes/" + nonExistCode, ErrorResponse.class);
|
||||
ErrorResponse errorResponse = responseEntity.getBody();
|
||||
System.out.println("errorResponse.getStatus() =" + errorResponse.getStatus() + ", errorResponse.getMessage() =" + errorResponse.getMessage());
|
||||
assertThat(responseEntity.getStatusCode().value()).isEqualTo(errorResponse.getStatus());
|
||||
assertThat(errorResponse.getMessage()).isEqualTo(messageSource.getMessage("err.entity.not.found", null, LocaleContextHolder.getLocale()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package org.egovframe.cloud.portalservice.config;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.context.MessageSource;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
|
||||
|
||||
@SpringBootTest(webEnvironment = RANDOM_PORT)
|
||||
class MessageSourceConfigTest {
|
||||
|
||||
@Autowired
|
||||
TestRestTemplate restTemplate;
|
||||
|
||||
@Test
|
||||
public void 메세지를_외부위치에서_읽어온다() throws Exception {
|
||||
// when
|
||||
String message = restTemplate.getForObject("http://localhost:8000/portal-service/api/v1/messages/common.login/ko", String.class);
|
||||
|
||||
// then
|
||||
assertThat(message).isEqualTo("로그인");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package org.egovframe.cloud.portalservice.config;
|
||||
|
||||
import org.assertj.core.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.context.MessageSource;
|
||||
import org.springframework.context.i18n.LocaleContextHolder;
|
||||
|
||||
/**
|
||||
* org.egovframe.cloud.portalservice.config.MessageSourceTest
|
||||
* <p>
|
||||
* MessageSource 정상 동작 확인 테스트
|
||||
*
|
||||
* @author 표준프레임워크센터 jaeyeolkim
|
||||
* @version 1.0
|
||||
* @since 2021/07/16
|
||||
*
|
||||
* <pre>
|
||||
* << 개정이력(Modification Information) >>
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2021/07/16 jaeyeolkim 최초 생성
|
||||
* </pre>
|
||||
*/
|
||||
@SpringBootTest
|
||||
public class MessageSourceTest {
|
||||
|
||||
@Autowired
|
||||
MessageSource messageSource;
|
||||
|
||||
@Test
|
||||
public void 메세지_읽어온다() throws Exception {
|
||||
// given
|
||||
String messageCode = "err.invalid.input.value";
|
||||
String messageName = "입력값이 올바르지 않습니다.";
|
||||
|
||||
// then
|
||||
String message = messageSource.getMessage(messageCode, new Object[]{}, "default", LocaleContextHolder.getLocale());
|
||||
System.out.println("message = " + message);
|
||||
Assertions.assertThat(message).isEqualTo(messageName);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,195 @@
|
||||
package org.egovframe.cloud.portalservice.domain.attachment;
|
||||
|
||||
import org.egovframe.cloud.portalservice.api.attachment.dto.AttachmentResponseDto;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
@ExtendWith(SpringExtension.class)
|
||||
@SpringBootTest
|
||||
class AttachmentRepositoryTest {
|
||||
@Autowired
|
||||
EntityManager em;
|
||||
|
||||
@Autowired
|
||||
AttachmentRepository attachmentRepository;
|
||||
|
||||
/**
|
||||
* 단위 테스트가 끝날때마다 수행되는 메소드
|
||||
* 테스트 데이터간 침범을 막기 위해 사용
|
||||
*/
|
||||
@AfterEach
|
||||
public void cleanUp() {
|
||||
attachmentRepository.deleteAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 첨부파일_등록() throws Exception {
|
||||
//given
|
||||
AttachmentId attachmentId = AttachmentId.builder()
|
||||
.code(UUID.randomUUID().toString())
|
||||
.seq(1L).build();
|
||||
|
||||
Attachment attachment = Attachment.builder()
|
||||
.attachmentId(attachmentId)
|
||||
.uniqueId(UUID.randomUUID().toString())
|
||||
.originalFileName("test.png")
|
||||
.physicalFileName(UUID.randomUUID().toString())
|
||||
.size(1232L)
|
||||
.build();
|
||||
|
||||
//when
|
||||
Attachment save = attachmentRepository.save(attachment);
|
||||
|
||||
//then
|
||||
System.out.println(save);
|
||||
assertThat(save.getAttachmentId().getSeq()).isEqualTo(1);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 여러건_등록() throws Exception {
|
||||
//given
|
||||
String code = UUID.randomUUID().toString();
|
||||
AttachmentId attachmentId1 = AttachmentId.builder()
|
||||
.code(code)
|
||||
.seq(1L).build();
|
||||
Attachment attachment1 = Attachment.builder()
|
||||
.attachmentId(attachmentId1)
|
||||
.uniqueId(UUID.randomUUID().toString())
|
||||
.originalFileName("test1.png")
|
||||
.physicalFileName(UUID.randomUUID().toString())
|
||||
.size(1232L)
|
||||
.build();
|
||||
|
||||
AttachmentId attachmentId2 = AttachmentId.builder()
|
||||
.code(code)
|
||||
.seq(2L)
|
||||
.build();
|
||||
Attachment attachment2 = Attachment.builder()
|
||||
.attachmentId(attachmentId2)
|
||||
.uniqueId(UUID.randomUUID().toString())
|
||||
.originalFileName("test2.png")
|
||||
.physicalFileName(UUID.randomUUID().toString())
|
||||
.size(1232L)
|
||||
.build();
|
||||
|
||||
//when
|
||||
attachmentRepository.save(attachment1);
|
||||
attachmentRepository.save(attachment2);
|
||||
|
||||
//then
|
||||
List<Attachment> all = attachmentRepository.findAll();
|
||||
all.stream().forEach(System.out::println);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void code로다건조회() throws Exception {
|
||||
//given
|
||||
String code = UUID.randomUUID().toString();
|
||||
for (Long i = 1L; i <= 5L; i++) {
|
||||
AttachmentId attachmentId = AttachmentId.builder()
|
||||
.code(code)
|
||||
.seq(i)
|
||||
.build();
|
||||
attachmentRepository.save(
|
||||
Attachment.builder()
|
||||
.attachmentId(attachmentId)
|
||||
.uniqueId(UUID.randomUUID().toString())
|
||||
.physicalFileName(UUID.randomUUID().toString())
|
||||
.originalFileName("test_"+i+".txt")
|
||||
.size(123L)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
//when
|
||||
List<Attachment> attachments = attachmentRepository.findByCode(code);
|
||||
|
||||
//then
|
||||
assertThat(attachments.size()).isEqualTo(5);
|
||||
attachments.stream().forEach(System.out::println);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 대체키로한건조회() throws Exception {
|
||||
//given
|
||||
String code = UUID.randomUUID().toString();
|
||||
String id = "";
|
||||
for (Long i = 1L; i <= 5L; i++) {
|
||||
AttachmentId attachmentId = AttachmentId.builder()
|
||||
.code(code)
|
||||
.seq(i)
|
||||
.build();
|
||||
id = UUID.randomUUID().toString();
|
||||
|
||||
attachmentRepository.save(
|
||||
Attachment.builder()
|
||||
.attachmentId(attachmentId)
|
||||
.uniqueId(id)
|
||||
.physicalFileName(UUID.randomUUID().toString())
|
||||
.originalFileName("test_"+i+".txt")
|
||||
.size(123L)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
//when
|
||||
Optional<Attachment> byId = attachmentRepository.findAllByUniqueId(id);
|
||||
|
||||
//then
|
||||
assertThat(byId.isPresent()).isTrue();
|
||||
assertThat(byId.get().getAttachmentId().getCode()).isEqualTo(code);
|
||||
System.out.println(byId.get());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 중복된유니크인덱스_오류() throws Exception {
|
||||
//given
|
||||
String code = UUID.randomUUID().toString();
|
||||
String uniqueId = UUID.randomUUID().toString();
|
||||
AttachmentId attachmentId1 = AttachmentId.builder()
|
||||
.code(code)
|
||||
.seq(1L).build();
|
||||
Attachment attachment1 = Attachment.builder()
|
||||
.attachmentId(attachmentId1)
|
||||
.uniqueId(uniqueId)
|
||||
.originalFileName("test1.png")
|
||||
.physicalFileName(UUID.randomUUID().toString())
|
||||
.size(1232L)
|
||||
.build();
|
||||
|
||||
AttachmentId attachmentId2 = AttachmentId.builder()
|
||||
.code(code)
|
||||
.seq(2L)
|
||||
.build();
|
||||
Attachment attachment2 = Attachment.builder()
|
||||
.attachmentId(attachmentId2)
|
||||
.uniqueId(uniqueId)
|
||||
.originalFileName("test2.png")
|
||||
.physicalFileName(UUID.randomUUID().toString())
|
||||
.size(1232L)
|
||||
.build();
|
||||
|
||||
//when
|
||||
attachmentRepository.save(attachment1);
|
||||
attachmentRepository.save(attachment2);
|
||||
|
||||
//then
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
package org.egovframe.cloud.portalservice.domain.code;
|
||||
|
||||
import org.egovframe.cloud.portalservice.api.code.dto.*;
|
||||
import org.egovframe.cloud.portalservice.service.code.CodeDetailService;
|
||||
import org.junit.jupiter.api.MethodOrderer;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.TestMethodOrder;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
|
||||
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
|
||||
|
||||
/**
|
||||
* org.egovframe.cloud.portalservice.api.code.CodeRepositoryTest
|
||||
* <p>
|
||||
* 공통코드 CRUD 요청을 처리하는 JPA 테스트
|
||||
*
|
||||
* @author 표준프레임워크센터 jaeyeolkim
|
||||
* @version 1.0
|
||||
* @since 2021/07/12
|
||||
*
|
||||
* <pre>
|
||||
* << 개정이력(Modification Information) >>
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2021/07/12 jaeyeolkim 최초 생성
|
||||
* </pre>
|
||||
*/
|
||||
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
|
||||
@SpringBootTest(webEnvironment = RANDOM_PORT)
|
||||
class CodeRepositoryTest {
|
||||
|
||||
@Autowired
|
||||
EntityManager em;
|
||||
|
||||
@Autowired
|
||||
CodeRepository codeRepository;
|
||||
|
||||
@Autowired
|
||||
CodeDetailService codeDetailService;
|
||||
|
||||
private static final String PARENT_CODE_ID = "TEST";
|
||||
private static final String PARENT_CODE_NAME = "테스트";
|
||||
|
||||
@Test
|
||||
@Order(Integer.MIN_VALUE)
|
||||
public void given() throws Exception {
|
||||
codeRepository.save(
|
||||
Code.builder()
|
||||
.codeId(PARENT_CODE_ID)
|
||||
.codeName(PARENT_CODE_NAME)
|
||||
.readonly(false)
|
||||
.sortSeq(1)
|
||||
.useAt(true)
|
||||
.build()
|
||||
);
|
||||
|
||||
for (int i = 1; i <= 30; i++) {
|
||||
codeRepository.save(
|
||||
Code.builder()
|
||||
.parentCodeId(PARENT_CODE_ID)
|
||||
.codeId(PARENT_CODE_ID + "_" + i)
|
||||
.codeName(PARENT_CODE_NAME + "_" + i)
|
||||
.readonly(false)
|
||||
.sortSeq(i)
|
||||
.useAt(true)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(Integer.MAX_VALUE)
|
||||
public void cleanup() throws Exception {
|
||||
codeRepository.deleteAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 공통코드상세_목록_조회된다() throws Exception {
|
||||
// given
|
||||
CodeDetailRequestDto requestDto = CodeDetailRequestDto.builder()
|
||||
.parentCodeId(PARENT_CODE_ID)
|
||||
.keywordType("codeId")
|
||||
.keyword(PARENT_CODE_ID)
|
||||
.build();
|
||||
|
||||
// when
|
||||
Page<CodeDetailListResponseDto> results = codeRepository.findAllDetailByKeyword(requestDto, PageRequest.of(1, 5));
|
||||
for (CodeDetailListResponseDto result : results) {
|
||||
System.out.println("result = " + result.getCodeId());
|
||||
}
|
||||
|
||||
// then
|
||||
assertThat(results.getTotalPages()).isEqualTo(30/5);
|
||||
assertThat(results.getTotalElements()).isEqualTo(30);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 공통코드상세_단건_조회된다() throws Exception {
|
||||
// when
|
||||
Code code = codeRepository.findByCodeId(PARENT_CODE_ID + "_1").get();
|
||||
|
||||
// then
|
||||
assertThat(code.getParentCodeId()).isEqualTo(PARENT_CODE_ID);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Test
|
||||
public void 공통코드상세_수정된다() throws Exception {
|
||||
// given
|
||||
|
||||
// when
|
||||
Code code = codeRepository.findByCodeId(PARENT_CODE_ID + "_1").get();
|
||||
code.updateDetail(code.getParentCodeId(), "수정", code.getCodeDescription(), 100, true);
|
||||
em.persist(code);
|
||||
|
||||
Code updateCode = codeRepository.findByCodeId(PARENT_CODE_ID + "_1").get();
|
||||
|
||||
// then
|
||||
assertThat(updateCode.getCodeName()).isEqualTo("수정");
|
||||
assertThat(updateCode.getSortSeq()).isEqualTo(100);
|
||||
assertThat(updateCode.getUseAt()).isTrue();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
package org.egovframe.cloud.portalservice.domain.menu;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@SpringBootTest
|
||||
//@Import(TestConfig.class)
|
||||
class MenuRepositoryTest {
|
||||
|
||||
@Autowired
|
||||
private EntityManager em;
|
||||
|
||||
@Autowired
|
||||
MenuRepository menuRepository;
|
||||
|
||||
@Autowired
|
||||
SiteRepository siteRepository;
|
||||
|
||||
@BeforeEach
|
||||
public void setup() {
|
||||
//given
|
||||
Site site1 = Site.builder().name("site1").isUse(true).build();
|
||||
Site site2 = Site.builder().name("site2").isUse(true).build();
|
||||
List<Site> sites = new ArrayList<>();
|
||||
sites.add(site1);
|
||||
sites.add(site2);
|
||||
siteRepository.saveAll(sites);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 새로운메뉴_한건_등록() throws Exception {
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
|
||||
Menu menu = Menu.builder()
|
||||
.menuKorName("testMenu")
|
||||
.sortSeq(1)
|
||||
.parent(null)
|
||||
.site(site)
|
||||
.build();
|
||||
|
||||
//when
|
||||
Menu savedMenu = menuRepository.save(menu);
|
||||
|
||||
//then
|
||||
assertThat(savedMenu.getMenuKorName()).isEqualTo(menu.getMenuKorName());
|
||||
System.out.println(savedMenu.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional
|
||||
public void 새로운_하위메뉴여러개_등록() throws Exception {
|
||||
//given
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
|
||||
Menu parentMenu = Menu.builder()
|
||||
.menuKorName("parent")
|
||||
.sortSeq(1)
|
||||
.site(site)
|
||||
.parent(null)
|
||||
.build();
|
||||
|
||||
em.persist(parentMenu);
|
||||
em.flush();
|
||||
|
||||
//when
|
||||
List<Menu> menus = new ArrayList<>();
|
||||
for (int i = 0; i < 3; i++) {
|
||||
Menu child = Menu.builder()
|
||||
.menuKorName("child_" + i)
|
||||
.site(site)
|
||||
.parent(parentMenu)
|
||||
.sortSeq(i + 1)
|
||||
.build();
|
||||
child.setParentMenu(parentMenu);
|
||||
menus.add(child);
|
||||
}
|
||||
|
||||
List<Menu> savedMenus = menuRepository.saveAll(menus);
|
||||
|
||||
//then
|
||||
assertThat(savedMenus.size()).isEqualTo(3);
|
||||
savedMenus.stream().forEach(System.out::println);
|
||||
assertThat(savedMenus.get(0).getParent().getId()).isEqualTo(parentMenu.getId());
|
||||
assertThat(savedMenus.get(0).getParent()).isSameAs(parentMenu);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional
|
||||
public void 계층구조_메뉴_조회() throws Exception {
|
||||
//given
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
|
||||
Menu parentMenu = Menu.builder()
|
||||
.menuKorName("parent")
|
||||
.sortSeq(1)
|
||||
.site(site)
|
||||
.build();
|
||||
em.persist(parentMenu);
|
||||
em.flush();
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
Menu childMenu = Menu.builder()
|
||||
.menuKorName("child_" + i)
|
||||
.site(site)
|
||||
.parent(parentMenu)
|
||||
.sortSeq(i + 1)
|
||||
.build();
|
||||
childMenu.setParentMenu(parentMenu);
|
||||
em.persist(childMenu);
|
||||
}
|
||||
em.flush();
|
||||
|
||||
Menu menu = menuRepository.findById(parentMenu.getId()).get();
|
||||
|
||||
menu.getChildren().stream().forEach(System.out::println);
|
||||
assertThat(menu.getChildren().size()).isEqualTo(3);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package org.egovframe.cloud.portalservice.domain.menu;
|
||||
|
||||
import org.assertj.core.api.Assertions;
|
||||
import org.egovframe.cloud.portalservice.api.menu.dto.MenuRoleResponseDto;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
@SpringBootTest
|
||||
class MenuRoleRepositoryTest {
|
||||
@Autowired
|
||||
private EntityManager em;
|
||||
|
||||
@Autowired
|
||||
MenuRepository menuRepository;
|
||||
|
||||
@Autowired
|
||||
SiteRepository siteRepository;
|
||||
|
||||
@Autowired
|
||||
MenuRoleRepository menuRoleRepository;
|
||||
|
||||
@BeforeEach
|
||||
public void setup() {
|
||||
//given
|
||||
Site site = Site.builder().name("site1").isUse(true).build();
|
||||
siteRepository.save(site);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
public void tearDown() {
|
||||
siteRepository.deleteAll();
|
||||
menuRepository.deleteAll();
|
||||
menuRoleRepository.deleteAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional
|
||||
public void 권한별메뉴_트리_조회한다() throws Exception {
|
||||
Site site = siteRepository.findAll().get(0);
|
||||
//given
|
||||
Menu parent = Menu.builder()
|
||||
.menuKorName("parent")
|
||||
.sortSeq(1)
|
||||
.site(site)
|
||||
.isShow(true)
|
||||
.isUse(true)
|
||||
.level(1)
|
||||
.parent(null)
|
||||
.build();
|
||||
|
||||
em.persist(parent);
|
||||
em.flush();
|
||||
|
||||
//when
|
||||
for (int i = 0; i < 3; i++) {
|
||||
Menu child = Menu.builder()
|
||||
.menuKorName("child_" + i)
|
||||
.site(site)
|
||||
.parent(parent)
|
||||
.sortSeq(i + 1)
|
||||
.level(2)
|
||||
.build();
|
||||
child.setParentMenu(parent);
|
||||
em.persist(child);
|
||||
}
|
||||
em.flush();
|
||||
|
||||
List<MenuRoleResponseDto> tree = menuRoleRepository.findTree("role", site.getId());
|
||||
|
||||
Assertions.assertThat(tree.size()).isEqualTo(1);
|
||||
Assertions.assertThat(tree.get(0).getChildren().size()).isEqualTo(3);
|
||||
tree.stream().forEach(menuRoleResponseDto -> {
|
||||
System.out.println(menuRoleResponseDto);
|
||||
menuRoleResponseDto.getChildren().stream().forEach(System.out::println);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package org.egovframe.cloud.portalservice.domain.message;
|
||||
|
||||
import org.egovframe.cloud.portalservice.api.message.dto.MessageListResponseDto;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
|
||||
|
||||
@SpringBootTest(webEnvironment = RANDOM_PORT)
|
||||
class MessageRepositoryTest {
|
||||
|
||||
@Autowired
|
||||
private MessageRepository messageRepository;
|
||||
|
||||
@BeforeEach
|
||||
@Transactional
|
||||
public void 메세지_입력된다() throws Exception {
|
||||
messageRepository.save(Message.builder().messageId("test.one").messageKoName("테스트1").build());
|
||||
messageRepository.save(Message.builder().messageId("test.two").messageKoName("테스트2").build());
|
||||
messageRepository.save(Message.builder().messageId("test.three").messageKoName("테스트3").messageEnName("TEST3").build());
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
@Transactional
|
||||
public void 메세지_삭제된다() throws Exception {
|
||||
messageRepository.deleteAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 메세지_한글명_목록_조회된다() throws Exception {
|
||||
List<MessageListResponseDto> results = messageRepository.findAllMessages("ko");
|
||||
System.out.println("results.size() = " + results.size());
|
||||
assertThat(results.size()).isEqualTo(3);
|
||||
assertThat(results.get(0).getMessageId()).isEqualTo("test.one");
|
||||
results.forEach(messageListResponseDto -> System.out.println("id = " + messageListResponseDto.getMessageId() + ", messageName() = " + messageListResponseDto.getMessageName()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 메세지_영문명_목록_조회된다() throws Exception {
|
||||
List<MessageListResponseDto> results = messageRepository.findAllMessages("en");
|
||||
System.out.println("results.size() = " + results.size());
|
||||
assertThat(results.size()).isEqualTo(3);
|
||||
assertThat(results.get(1).getMessageName()).isEqualTo("TEST3");
|
||||
results.forEach(messageListResponseDto -> System.out.println("id = " + messageListResponseDto.getMessageId() + ", messageName() = " + messageListResponseDto.getMessageName()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 메세지_한글명_목록_Map으로_조회된다() throws Exception {
|
||||
Map<String, String> results = messageRepository.findAllMessagesMap("ko");
|
||||
System.out.println("results.size() = " + results.size());
|
||||
assertThat(results.size()).isEqualTo(3);
|
||||
results.keySet().forEach(key -> System.out.println(key + "=" + results.get(key)));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
package org.egovframe.cloud.portalservice.domain.policy;
|
||||
|
||||
import org.egovframe.cloud.common.dto.RequestDto;
|
||||
import org.egovframe.cloud.portalservice.api.policy.dto.PolicyResponseDto;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||
|
||||
@SpringBootTest
|
||||
class PolicyRepositoryTest {
|
||||
|
||||
@Autowired
|
||||
EntityManager em;
|
||||
|
||||
@Autowired
|
||||
PolicyRepository policyRepository;
|
||||
|
||||
/**
|
||||
* 단위 테스트가 끝날때마다 수행되는 메소드
|
||||
* 테스트 데이터간 침범을 막기 위해 사용
|
||||
*/
|
||||
@AfterEach
|
||||
public void cleanUp() {
|
||||
policyRepository.deleteAll();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void 목록조회한다() throws Exception {
|
||||
//given
|
||||
for (int i = 0; i < 2; i++) {
|
||||
String title = "title_"+i;
|
||||
String contentStr = "contents " + i;
|
||||
String type = "TOS";
|
||||
if(i > 0){
|
||||
type = "PP";
|
||||
}
|
||||
|
||||
policyRepository.save(Policy.builder()
|
||||
.type(type)
|
||||
.title(title)
|
||||
.contents(contentStr)
|
||||
.build());
|
||||
}
|
||||
|
||||
//when
|
||||
Page<PolicyResponseDto> search = policyRepository.search(RequestDto.builder().build(), PageRequest.of(1, 10));
|
||||
|
||||
//then
|
||||
assertThat(search.getTotalElements()).isEqualTo(2);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 이용약관_조건부조회한다() {
|
||||
//given
|
||||
for (int i = 1; i <= 10; i++) {
|
||||
String title = "title_"+i;
|
||||
String contentStr = "contents " + i;
|
||||
String type = "TOS";
|
||||
if(i % 2 == 0){
|
||||
type = "PP";
|
||||
}
|
||||
|
||||
policyRepository.save(Policy.builder()
|
||||
.type(type)
|
||||
.title(title)
|
||||
.contents(contentStr)
|
||||
.build());
|
||||
}
|
||||
|
||||
RequestDto requestDto = RequestDto.builder()
|
||||
.keywordType("title")
|
||||
.keyword("title_2")
|
||||
.build();
|
||||
|
||||
//when
|
||||
Page<PolicyResponseDto> search = policyRepository.search(requestDto, PageRequest.of(1, 10));
|
||||
|
||||
//then
|
||||
assertThat(search.getTotalElements()).isEqualTo(1);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional
|
||||
public void 회원가입시_이용약관_한건조회_정상() throws Exception {
|
||||
//given
|
||||
for (int i = 1; i <= 10; i++) {
|
||||
String title = "title_"+i;
|
||||
String contentStr = "contents " + i;
|
||||
String type = "TOS";
|
||||
if(i % 2 == 0){
|
||||
type = "PP";
|
||||
}
|
||||
|
||||
|
||||
policyRepository.save(Policy.builder()
|
||||
.type(type)
|
||||
.title(title)
|
||||
.isUse(true)
|
||||
.regDate(ZonedDateTime.now())
|
||||
.contents(contentStr)
|
||||
.build());
|
||||
}
|
||||
|
||||
//when
|
||||
PolicyResponseDto responseDto = policyRepository.searchOne("TOS");
|
||||
|
||||
//then
|
||||
System.out.println(responseDto.toString());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ID로_한건조회() throws Exception {
|
||||
//given
|
||||
for (int i = 1; i <= 10; i++) {
|
||||
String title = "title_"+i;
|
||||
String contentStr = "contents " + i;
|
||||
String type = "TOS";
|
||||
if(i % 2 == 0){
|
||||
type = "PP";
|
||||
}
|
||||
|
||||
policyRepository.save(Policy.builder()
|
||||
.type(type)
|
||||
.title(title)
|
||||
.contents(contentStr)
|
||||
.build());
|
||||
}
|
||||
|
||||
//when
|
||||
Optional<Policy> optionalTerms = policyRepository.findById(1L);
|
||||
|
||||
//then
|
||||
System.out.println(optionalTerms.get());
|
||||
assertThat(optionalTerms.get().getTitle()).isEqualTo("title_1");
|
||||
assertThat(optionalTerms.get().getContents()).isEqualTo("contents 1");
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional
|
||||
public void 이용약관_수정한다() throws Exception {
|
||||
String updateTitle = "update title";
|
||||
String updateContents = "update Contents";
|
||||
Long id = 1L;
|
||||
//given
|
||||
for (int i = 1; i <= 10; i++) {
|
||||
String title = "title_"+i;
|
||||
String contentStr = "contents " + i;
|
||||
String type = "TOS";
|
||||
if(i % 2 == 0){
|
||||
type = "PP";
|
||||
}
|
||||
|
||||
id = policyRepository.save(Policy.builder()
|
||||
.type(type)
|
||||
.title(title)
|
||||
.contents(contentStr)
|
||||
.build()).getId();
|
||||
}
|
||||
|
||||
//when
|
||||
Optional<Policy> optional = policyRepository.findById(id);
|
||||
Policy policy = optional.get();
|
||||
|
||||
policy.update(updateTitle, true, updateContents);
|
||||
em.persist(policy);
|
||||
|
||||
//then
|
||||
Optional<Policy> updated = policyRepository.findById(id);
|
||||
|
||||
assertThat(updated.get().getTitle()).isEqualTo(updateTitle);
|
||||
assertThat(updated.get().getContents()).isEqualTo(updateContents);
|
||||
|
||||
System.out.println(updated.get());
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package org.egovframe.cloud.portalservice.domain.statistics;
|
||||
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@SpringBootTest
|
||||
class StatisticsRepositoryTest {
|
||||
@Autowired
|
||||
EntityManager em;
|
||||
|
||||
@Autowired
|
||||
StatisticsRepository statisticsRepository;
|
||||
|
||||
/**
|
||||
* 단위 테스트가 끝날때마다 수행되는 메소드
|
||||
* 테스트 데이터간 침범을 막기 위해 사용
|
||||
*/
|
||||
@AfterEach
|
||||
public void cleanUp() {
|
||||
statisticsRepository.deleteAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void 접속통계로그_입력된다() throws Exception {
|
||||
// given
|
||||
String statisticsId = UUID.randomUUID().toString();
|
||||
Statistics log = Statistics.builder()
|
||||
.statisticsId(statisticsId)
|
||||
.siteId(1L)
|
||||
.build();
|
||||
|
||||
// when
|
||||
Statistics analyticsLog = statisticsRepository.save(log);
|
||||
|
||||
// then
|
||||
assertThat(analyticsLog.getStatisticsId()).isEqualTo(statisticsId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package org.egovframe.cloud.portalservice.util;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import org.springframework.data.domain.PageImpl;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* org.egovframe.cloud.portalservice.util.RestResponsePage
|
||||
* <p>
|
||||
* 페이지 API 조회 시 JSON 형식의 응답 데이터를 페이지 객체를 구현하여 마이그레이션 해주는 클래스
|
||||
*
|
||||
* @author 표준프레임워크센터 jooho
|
||||
* @version 1.0
|
||||
* @since 2021/07/08
|
||||
*
|
||||
* <pre>
|
||||
* << 개정이력(Modification Information) >>
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2021/07/08 jooho 최초 생성
|
||||
* </pre>
|
||||
*/
|
||||
public class RestResponsePage<T> extends PageImpl<T> {
|
||||
|
||||
/**
|
||||
* Rest 응답 페이지 생성자
|
||||
*
|
||||
* @param content 목록
|
||||
* @param number 페이지 번호
|
||||
* @param size 조회할 데이터 수
|
||||
* @param totalElements 총 데이터 수
|
||||
* @param pageable 페이지 정보
|
||||
* @param last 마지막
|
||||
* @param totalPages 총 페이지
|
||||
* @param sort 정렬
|
||||
* @param first 처음
|
||||
* @param numberOfElements 조회된 데이터 수
|
||||
*/
|
||||
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
|
||||
public RestResponsePage(@JsonProperty("content") List<T> content,
|
||||
@JsonProperty("number") int number,
|
||||
@JsonProperty("size") int size,
|
||||
@JsonProperty("totalElements") Long totalElements,
|
||||
@JsonProperty("pageable") JsonNode pageable,
|
||||
@JsonProperty("last") boolean last,
|
||||
@JsonProperty("totalPages") int totalPages,
|
||||
@JsonProperty("sort") JsonNode sort,
|
||||
@JsonProperty("first") boolean first,
|
||||
@JsonProperty("numberOfElements") int numberOfElements) {
|
||||
super(content, PageRequest.of(number, size), totalElements);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rest 응답 페이지 생성자
|
||||
*
|
||||
* @param content 목록
|
||||
* @param pageable 페이지 정보
|
||||
* @param total 총 데이터 수
|
||||
*/
|
||||
public RestResponsePage(List<T> content, Pageable pageable, long total) {
|
||||
super(content, pageable, total);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rest 응답 페이지 생성자
|
||||
*
|
||||
* @param content 목록
|
||||
*/
|
||||
public RestResponsePage(List<T> content) {
|
||||
super(content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rest 응답 페이지 생성자
|
||||
*/
|
||||
public RestResponsePage() {
|
||||
super(Collections.emptyList());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
spring:
|
||||
application:
|
||||
name: portal-service
|
||||
|
||||
datasource:
|
||||
url: jdbc:h2:mem:testdb;MODE=MYSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false
|
||||
username: sa
|
||||
password:
|
||||
driver-class-name: org.h2.Driver
|
||||
jpa:
|
||||
hibernate:
|
||||
generate-ddl: true
|
||||
ddl-auto: create-drop
|
||||
properties:
|
||||
hibernate:
|
||||
format_sql: true
|
||||
default_batch_fetch_size: 1000
|
||||
show-sql: true
|
||||
h2:
|
||||
console:
|
||||
enabled: true
|
||||
path: /h2
|
||||
|
||||
logging.level:
|
||||
org.hibernate.SQL: debug
|
||||
|
||||
file:
|
||||
directory: ${user.home}/msa-attach-volume
|
||||
messages:
|
||||
directory: ${file.directory}/messages
|
||||
|
||||
# jwt token
|
||||
token:
|
||||
secret: egovframe_user_token
|
||||
|
||||
# ftp server
|
||||
ftp:
|
||||
enabled: false # ftp 사용 여부, FTP 서버에 최상위 디렉토리 자동 생성 및 구현체를 결정하게 된다.
|
||||
|
||||
# eureka 가 포함되면 eureka server 도 등록되므로 해제한다.
|
||||
eureka:
|
||||
client:
|
||||
register-with-eureka: false
|
||||
fetch-registry: false
|
||||
Reference in New Issue
Block a user