Initial commit

This commit is contained in:
jooho
2021-10-20 17:12:00 +09:00
parent 0c884beff8
commit 8caa4bbc5a
487 changed files with 44198 additions and 0 deletions

View File

@@ -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() {
}
}

View File

@@ -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
//
// }
}

View File

@@ -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);
}
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
});
}
}

View File

@@ -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);
}
}

View File

@@ -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();
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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()));
}
}

View File

@@ -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("로그인");
}
}

View File

@@ -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);
}
}

View File

@@ -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
}
}

View File

@@ -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();
}
}

View File

@@ -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);
}
}

View File

@@ -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);
});
}
}

View File

@@ -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)));
}
}

View File

@@ -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());
}
}

View File

@@ -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);
}
}

View File

@@ -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());
}
}

View File

@@ -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