diff --git a/src/main/java/egovframework/example/sample/service/EgovSampleService.java b/src/main/java/egovframework/example/sample/service/EgovSampleService.java index 1c8ce06..474e025 100644 --- a/src/main/java/egovframework/example/sample/service/EgovSampleService.java +++ b/src/main/java/egovframework/example/sample/service/EgovSampleService.java @@ -36,44 +36,44 @@ public interface EgovSampleService { /** * 글을 등록한다. - * @param vo - 등록할 정보가 담긴 SampleVO + * @param sampleVO - 등록할 정보가 담긴 SampleVO * @return 등록 결과 */ - void insertSample(SampleVO vo); + int insertSample(SampleVO sampleVO); /** * 글을 수정한다. - * @param vo - 수정할 정보가 담긴 SampleVO + * @param sampleVO - 수정할 정보가 담긴 SampleVO * @return void형 */ - void updateSample(SampleVO vo); + int updateSample(SampleVO sampleVO); /** * 글을 삭제한다. - * @param vo - 삭제할 정보가 담긴 SampleVO + * @param sampleVO - 삭제할 정보가 담긴 SampleVO * @return void형 */ - void deleteSample(SampleVO vo); + int deleteSample(SampleVO sampleVO); /** * 글을 조회한다. - * @param vo - 조회할 정보가 담긴 SampleVO + * @param sampleVO - 조회할 정보가 담긴 SampleVO * @return 조회한 글 */ - SampleVO selectSample(SampleVO vo); + SampleVO selectSample(SampleVO sampleVO); /** * 글 목록을 조회한다. - * @param vo - 조회할 정보가 담긴 VO + * @param sampleVO - 조회할 정보가 담긴 VO * @return 글 목록 */ - List selectSampleList(SampleVO vo); + List selectSampleList(SampleVO sampleVO); /** * 글 총 개수를 조회한다. - * @param vo - 조회할 정보가 담긴 VO + * @param sampleVO - 조회할 정보가 담긴 VO * @return 글 총 개수 */ - int selectSampleListTotCnt(SampleVO vo); + int selectSampleListTotCnt(SampleVO sampleVO); } diff --git a/src/main/java/egovframework/example/sample/service/SampleDefaultVO.java b/src/main/java/egovframework/example/sample/service/SampleDefaultVO.java index 2f171f0..ceac3d6 100644 --- a/src/main/java/egovframework/example/sample/service/SampleDefaultVO.java +++ b/src/main/java/egovframework/example/sample/service/SampleDefaultVO.java @@ -58,10 +58,10 @@ public class SampleDefaultVO implements Serializable { private int pageIndex = 1; /** 페이지개수 */ - private int pageUnit = 10; + private Integer pageUnit; /** 페이지사이즈 */ - private int pageSize = 10; + private Integer pageSize; /** firstIndex */ private int firstIndex = 1; diff --git a/src/main/java/egovframework/example/sample/service/impl/EgovSampleServiceImpl.java b/src/main/java/egovframework/example/sample/service/impl/EgovSampleServiceImpl.java index 8bdf06d..9d29647 100644 --- a/src/main/java/egovframework/example/sample/service/impl/EgovSampleServiceImpl.java +++ b/src/main/java/egovframework/example/sample/service/impl/EgovSampleServiceImpl.java @@ -46,7 +46,7 @@ * @version 1.0 * @see */ -@Service("sampleService") +@Service @RequiredArgsConstructor @Slf4j public class EgovSampleServiceImpl extends EgovAbstractServiceImpl implements EgovSampleService { @@ -57,54 +57,52 @@ public class EgovSampleServiceImpl extends EgovAbstractServiceImpl implements Eg /** * 글을 등록한다. - * @param vo - 등록할 정보가 담긴 SampleVO + * @param sampleVO - 등록할 정보가 담긴 SampleVO * @return 등록 결과 */ @Override - public void insertSample(SampleVO vo) { - log.debug(vo.toString()); + public int insertSample(SampleVO sampleVO) { + log.debug("id={}", sampleVO.getId()); /** ID Generation Service */ - String id; try { - id = egovIdGnrService.getNextStringId(); + sampleVO.setId(egovIdGnrService.getNextStringId()); } catch (FdlException e) { throw new BaseRuntimeException(e); } - vo.setId(id); - log.debug(vo.toString()); + log.debug("id={}", sampleVO.getId()); - sampleMapper.insertSample(vo); + return sampleMapper.insertSample(sampleVO); } /** * 글을 수정한다. - * @param vo - 수정할 정보가 담긴 SampleVO + * @param sampleVO - 수정할 정보가 담긴 SampleVO * @return void형 */ @Override - public void updateSample(SampleVO vo) { - sampleMapper.updateSample(vo); + public int updateSample(SampleVO sampleVO) { + return sampleMapper.updateSample(sampleVO); } /** * 글을 삭제한다. - * @param vo - 삭제할 정보가 담긴 SampleVO + * @param sampleVO - 삭제할 정보가 담긴 SampleVO * @return void형 */ @Override - public void deleteSample(SampleVO vo) { - sampleMapper.deleteSample(vo); + public int deleteSample(SampleVO sampleVO) { + return sampleMapper.deleteSample(sampleVO); } /** * 글을 조회한다. - * @param vo - 조회할 정보가 담긴 SampleVO + * @param sampleVO - 조회할 정보가 담긴 SampleVO * @return 조회한 글 */ @Override - public SampleVO selectSample(SampleVO vo) { - SampleVO resultVO = sampleMapper.selectSample(vo); + public SampleVO selectSample(SampleVO sampleVO) { + SampleVO resultVO = sampleMapper.selectSample(sampleVO); if (resultVO == null) { throw new BaseRuntimeException(processException("info.nodata.msg")); } @@ -113,22 +111,22 @@ public SampleVO selectSample(SampleVO vo) { /** * 글 목록을 조회한다. - * @param vo - 조회할 정보가 담긴 VO + * @param sampleVO - 조회할 정보가 담긴 VO * @return 글 목록 */ @Override - public List selectSampleList(SampleVO vo) { - return sampleMapper.selectSampleList(vo); + public List selectSampleList(SampleVO sampleVO) { + return sampleMapper.selectSampleList(sampleVO); } /** * 글 총 개수를 조회한다. - * @param vo - 조회할 정보가 담긴 VO + * @param sampleVO - 조회할 정보가 담긴 VO * @return 글 총 개수 */ @Override - public int selectSampleListTotCnt(SampleVO vo) { - return sampleMapper.selectSampleListTotCnt(vo); + public int selectSampleListTotCnt(SampleVO sampleVO) { + return sampleMapper.selectSampleListTotCnt(sampleVO); } } diff --git a/src/main/java/egovframework/example/sample/service/impl/SampleMapper.java b/src/main/java/egovframework/example/sample/service/impl/SampleMapper.java index e55c87b..56fa849 100644 --- a/src/main/java/egovframework/example/sample/service/impl/SampleMapper.java +++ b/src/main/java/egovframework/example/sample/service/impl/SampleMapper.java @@ -43,44 +43,44 @@ public interface SampleMapper { /** * 글을 등록한다. - * @param vo - 등록할 정보가 담긴 SampleVO + * @param sampleVO - 등록할 정보가 담긴 SampleVO * @return 등록 결과 */ - void insertSample(SampleVO vo); + int insertSample(SampleVO sampleVO); /** * 글을 수정한다. - * @param vo - 수정할 정보가 담긴 SampleVO + * @param sampleVO - 수정할 정보가 담긴 SampleVO * @return void형 */ - void updateSample(SampleVO vo); + int updateSample(SampleVO sampleVO); /** * 글을 삭제한다. - * @param vo - 삭제할 정보가 담긴 SampleVO + * @param sampleVO - 삭제할 정보가 담긴 SampleVO * @return void형 */ - void deleteSample(SampleVO vo); + int deleteSample(SampleVO sampleVO); /** * 글을 조회한다. - * @param vo - 조회할 정보가 담긴 SampleVO + * @param sampleVO - 조회할 정보가 담긴 SampleVO * @return 조회한 글 */ - SampleVO selectSample(SampleVO vo); + SampleVO selectSample(SampleVO sampleVO); /** * 글 목록을 조회한다. - * @param vo - 조회할 정보가 담긴 VO + * @param sampleVO - 조회할 정보가 담긴 VO * @return 글 목록 */ - List selectSampleList(SampleVO vo); + List selectSampleList(SampleVO sampleVO); /** * 글 총 개수를 조회한다. - * @param vo - 조회할 정보가 담긴 VO + * @param sampleVO - 조회할 정보가 담긴 VO * @return 글 총 개수 */ - int selectSampleListTotCnt(SampleVO vo); + int selectSampleListTotCnt(SampleVO sampleVO); } diff --git a/src/main/java/egovframework/example/sample/web/EgovSampleController.java b/src/main/java/egovframework/example/sample/web/EgovSampleController.java index 8e438ba..2ecef81 100644 --- a/src/main/java/egovframework/example/sample/web/EgovSampleController.java +++ b/src/main/java/egovframework/example/sample/web/EgovSampleController.java @@ -21,7 +21,6 @@ import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; @@ -56,6 +55,9 @@ @Slf4j public class EgovSampleController { + private static final int MAX_PAGE_UNIT = 100; + private static final int MAX_PAGE_SIZE = 100; + /** EgovSampleService */ private final EgovSampleService sampleService; @@ -63,7 +65,7 @@ public class EgovSampleController { private final EgovPropertyService propertiesService; @GetMapping("/") - public String index(@ModelAttribute SampleVO sampleVO, ModelMap model) { + public String index(@ModelAttribute SampleVO sampleVO, Model model) { return this.selectSampleList(sampleVO, model); } @@ -74,11 +76,11 @@ public String index(@ModelAttribute SampleVO sampleVO, ModelMap model) { * @return "egovSampleList" */ @GetMapping("/egovSampleList.do") - public String selectSampleList(@ModelAttribute SampleVO sampleVO, ModelMap model) { + public String selectSampleList(@ModelAttribute SampleVO sampleVO, Model model) { /** EgovPropertyService.sample */ - sampleVO.setPageUnit(propertiesService.getInt("pageUnit")); - sampleVO.setPageSize(propertiesService.getInt("pageSize")); + sampleVO.setPageUnit(resolvePageValue(sampleVO.getPageUnit(), "pageUnit", MAX_PAGE_UNIT)); + sampleVO.setPageSize(resolvePageValue(sampleVO.getPageSize(), "pageSize", MAX_PAGE_SIZE)); /** pageing setting */ PaginationInfo paginationInfo = new PaginationInfo(); @@ -91,7 +93,7 @@ public String selectSampleList(@ModelAttribute SampleVO sampleVO, ModelMap model sampleVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); /** List */ - List sampleList = sampleService.selectSampleList(sampleVO); + List sampleList = sampleService.selectSampleList(sampleVO); model.addAttribute("resultList", sampleList); /** Count */ @@ -123,17 +125,20 @@ public String addSampleView( @ModelAttribute SampleVO sampleVO, Model model) { * @param sampleVO - 등록할 정보가 담긴 VO * @param status * @return "forward:/egovSampleList.do" - */ + */ @PostMapping("/addSample.do") - public String addSample(@Valid @ModelAttribute SampleVO sampleVO, BindingResult bindingResult, Model model, SessionStatus status) { + public String addSample(@Valid @ModelAttribute SampleVO sampleVO, BindingResult bindingResult, Model model, + RedirectAttributes redirectAttributes, SessionStatus status) { if (bindingResult.hasErrors()) { model.addAttribute("sampleVO", sampleVO); return "sample/egovSampleRegister"; } - sampleService.insertSample(sampleVO); + int result = sampleService.insertSample(sampleVO); + log.debug("result={}", result); status.setComplete(); + addPaginationAttributes(sampleVO, redirectAttributes); return "redirect:/egovSampleList.do"; } @@ -143,7 +148,7 @@ public String addSample(@Valid @ModelAttribute SampleVO sampleVO, BindingResult * @param sampleVO - 수정할 글 정보가 담긴 VO * @param model * @return "egovSampleRegister" - */ + */ @PostMapping("/updateSampleView.do") public String updateSampleView(@ModelAttribute SampleVO sampleVO, Model model) { @@ -151,6 +156,8 @@ public String updateSampleView(@ModelAttribute SampleVO sampleVO, Model model) { detail.setSearchCondition(sampleVO.getSearchCondition()); detail.setSearchKeyword(sampleVO.getSearchKeyword()); detail.setPageIndex(sampleVO.getPageIndex()); + detail.setPageUnit(sampleVO.getPageUnit()); + detail.setPageSize(sampleVO.getPageSize()); model.addAttribute("sampleVO", detail); @@ -172,12 +179,14 @@ public String updateSample(@Valid @ModelAttribute SampleVO sampleVO, BindingResu return "sample/egovSampleRegister"; } - sampleService.updateSample(sampleVO); + int result = sampleService.updateSample(sampleVO); + log.debug("result={}", result); status.setComplete(); redirectAttributes.addAttribute("searchCondition", sampleVO.getSearchCondition()); redirectAttributes.addAttribute("searchKeyword", sampleVO.getSearchKeyword()); redirectAttributes.addAttribute("pageIndex", sampleVO.getPageIndex()); + addPaginationAttributes(sampleVO, redirectAttributes); return "redirect:/egovSampleList.do"; } @@ -191,14 +200,33 @@ public String updateSample(@Valid @ModelAttribute SampleVO sampleVO, BindingResu @PostMapping("/deleteSample.do") public String deleteSample(@ModelAttribute SampleVO sampleVO, RedirectAttributes redirectAttributes, SessionStatus status) { - sampleService.deleteSample(sampleVO); + int result = sampleService.deleteSample(sampleVO); + log.debug("result={}", result); status.setComplete(); redirectAttributes.addAttribute("searchCondition", sampleVO.getSearchCondition()); redirectAttributes.addAttribute("searchKeyword", sampleVO.getSearchKeyword()); redirectAttributes.addAttribute("pageIndex", sampleVO.getPageIndex()); + addPaginationAttributes(sampleVO, redirectAttributes); return "redirect:/egovSampleList.do"; } + private int resolvePageValue(Integer value, String property, int maximum) { + if (value != null && value > 0 && value <= maximum) { + return value; + } + // 요청값뿐 아니라 서버 기본값도 안전한 범위로 제한한다. + return Math.max(1, Math.min(propertiesService.getInt(property), maximum)); + } + + private void addPaginationAttributes(SampleVO sampleVO, RedirectAttributes redirectAttributes) { + if (sampleVO.getPageUnit() != null) { + redirectAttributes.addAttribute("pageUnit", sampleVO.getPageUnit()); + } + if (sampleVO.getPageSize() != null) { + redirectAttributes.addAttribute("pageSize", sampleVO.getPageSize()); + } + } + } diff --git a/src/main/resources/egovframework/sqlmap/example/mappers/EgovSample_Sample_SQL.xml b/src/main/resources/egovframework/sqlmap/example/mappers/EgovSample_Sample_SQL.xml index d881b2d..d335670 100644 --- a/src/main/resources/egovframework/sqlmap/example/mappers/EgovSample_Sample_SQL.xml +++ b/src/main/resources/egovframework/sqlmap/example/mappers/EgovSample_Sample_SQL.xml @@ -1,17 +1,9 @@ - - - - - - - - - - + + - - + + - - + + - + - - + + + + + - + - - - AND ID LIKE '%' || #{searchKeyword} || '%' - - - AND NAME LIKE '%' || #{searchKeyword} || '%' - - - +]]> + + + \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/example/sql-mapper-config.xml b/src/main/resources/egovframework/sqlmap/example/sql-mapper-config.xml index 1b57ffd..7f8bc49 100644 --- a/src/main/resources/egovframework/sqlmap/example/sql-mapper-config.xml +++ b/src/main/resources/egovframework/sqlmap/example/sql-mapper-config.xml @@ -2,6 +2,12 @@ + + + + + + diff --git a/src/main/resources/templates/thymeleaf/sample/egovSampleList.html b/src/main/resources/templates/thymeleaf/sample/egovSampleList.html index a3fdba1..db0999d 100644 --- a/src/main/resources/templates/thymeleaf/sample/egovSampleList.html +++ b/src/main/resources/templates/thymeleaf/sample/egovSampleList.html @@ -47,6 +47,7 @@

+
@@ -67,6 +68,12 @@

+ +
@@ -74,6 +81,9 @@

+

+ 검색 결과 0건 +

diff --git a/src/main/resources/templates/thymeleaf/sample/egovSampleRegister.html b/src/main/resources/templates/thymeleaf/sample/egovSampleRegister.html index ba3b013..a804001 100644 --- a/src/main/resources/templates/thymeleaf/sample/egovSampleRegister.html +++ b/src/main/resources/templates/thymeleaf/sample/egovSampleRegister.html @@ -80,6 +80,8 @@

+ +
diff --git a/src/test/java/egovframework/example/sample/service/SampleDefaultVOTest.java b/src/test/java/egovframework/example/sample/service/SampleDefaultVOTest.java index ecdbc2c..93cafad 100644 --- a/src/test/java/egovframework/example/sample/service/SampleDefaultVOTest.java +++ b/src/test/java/egovframework/example/sample/service/SampleDefaultVOTest.java @@ -33,8 +33,8 @@ void defaultValues_searchFields() { @DisplayName("기본값 확인 - 페이지 관련 필드는 1 또는 10") void defaultValues_pageFields() { assertThat(vo.getPageIndex()).isEqualTo(1); - assertThat(vo.getPageUnit()).isEqualTo(10); - assertThat(vo.getPageSize()).isEqualTo(10); + assertThat(vo.getPageUnit()).isEqualTo(null); + assertThat(vo.getPageSize()).isEqualTo(null); assertThat(vo.getFirstIndex()).isEqualTo(1); assertThat(vo.getLastIndex()).isEqualTo(1); assertThat(vo.getRecordCountPerPage()).isEqualTo(10); diff --git a/src/test/java/egovframework/example/sample/service/impl/EgovSampleServiceImplTest.java b/src/test/java/egovframework/example/sample/service/impl/EgovSampleServiceImplTest.java index d6852db..e5eb978 100644 --- a/src/test/java/egovframework/example/sample/service/impl/EgovSampleServiceImplTest.java +++ b/src/test/java/egovframework/example/sample/service/impl/EgovSampleServiceImplTest.java @@ -74,7 +74,8 @@ void setUp() { @DisplayName("글 수정 - 정상적으로 updateSample을 호출한다") void updateSample_정상() { // given - doNothing().when(sampleMapper).updateSample(sampleVO); +// doNothing().when(sampleMapper).updateSample(sampleVO); + when(sampleMapper.updateSample(sampleVO)).thenReturn(1); // when sut.updateSample(sampleVO); @@ -87,7 +88,8 @@ void setUp() { @DisplayName("글 삭제 - 정상적으로 deleteSample을 호출한다") void deleteSample_정상() { // given - doNothing().when(sampleMapper).deleteSample(sampleVO); +// doNothing().when(sampleMapper).deleteSample(sampleVO); + when(sampleMapper.deleteSample(sampleVO)).thenReturn(1); // when sut.deleteSample(sampleVO); @@ -126,7 +128,6 @@ void setUp() { @Test @DisplayName("글 목록 조회 - 목록을 정상적으로 반환한다") - @SuppressWarnings("unchecked") void selectSampleList_정상() { // given SampleVO item1 = new SampleVO(); @@ -137,7 +138,7 @@ void setUp() { when((List) sampleMapper.selectSampleList(sampleVO)).thenReturn(expected); // when - List result = sut.selectSampleList(sampleVO); + List result = sut.selectSampleList(sampleVO); // then assertNotNull(result); diff --git a/src/test/java/egovframework/example/sample/web/EgovSampleControllerTestAddTest.java b/src/test/java/egovframework/example/sample/web/EgovSampleControllerTestAddTest.java index b26a697..bcfd952 100644 --- a/src/test/java/egovframework/example/sample/web/EgovSampleControllerTestAddTest.java +++ b/src/test/java/egovframework/example/sample/web/EgovSampleControllerTestAddTest.java @@ -8,7 +8,6 @@ import java.util.List; import org.egovframe.rte.fdl.cmmn.exception.BaseRuntimeException; -import org.egovframe.rte.psl.dataaccess.util.EgovMap; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; @@ -89,13 +88,13 @@ void test() throws BaseRuntimeException, Exception { sampleVO.setFirstIndex(0); sampleVO.setSearchCondition("1"); sampleVO.setSearchKeyword(insertVO.getName()); - final List resultList = egovSampleService.selectSampleList(sampleVO); - EgovMap result = (EgovMap) resultList.get(0); + final List resultList = egovSampleService.selectSampleList(sampleVO); + SampleVO result = resultList.get(0); final SampleVO resultSampleVO = new SampleVO(); - resultSampleVO.setName((String) result.get("name")); - resultSampleVO.setDescription((String) result.get("description")); - resultSampleVO.setUseYn((String) result.get("useYn")); - resultSampleVO.setRegUser((String) result.get("regUser")); + resultSampleVO.setName(result.getName()); + resultSampleVO.setDescription(result.getDescription()); + resultSampleVO.setUseYn(result.getUseYn()); + resultSampleVO.setRegUser(result.getRegUser()); if (log.isDebugEnabled()) { log.debug("sampleVO={}", sampleVO); diff --git a/src/test/java/egovframework/example/sample/web/EgovSampleControllerTestDeleteTest.java b/src/test/java/egovframework/example/sample/web/EgovSampleControllerTestDeleteTest.java index 3abab2f..aef6ed1 100644 --- a/src/test/java/egovframework/example/sample/web/EgovSampleControllerTestDeleteTest.java +++ b/src/test/java/egovframework/example/sample/web/EgovSampleControllerTestDeleteTest.java @@ -25,7 +25,6 @@ import java.util.List; import org.egovframe.rte.fdl.cmmn.exception.BaseRuntimeException; -import org.egovframe.rte.psl.dataaccess.util.EgovMap; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; @@ -70,9 +69,9 @@ void test() throws BaseRuntimeException, Exception { insertVO.setFirstIndex(0); insertVO.setSearchCondition("1"); insertVO.setSearchKeyword(insertVO.getName()); - final List insertedList = egovSampleService.selectSampleList(insertVO); - final EgovMap insertedRow = (EgovMap) insertedList.get(0); - final String insertedId = (String) insertedRow.get("id"); + final List insertedList = egovSampleService.selectSampleList(insertVO); + final SampleVO insertedRow = insertedList.get(0); + final String insertedId = insertedRow.getId(); // when mockMvc.perform( diff --git a/src/test/java/egovframework/example/sample/web/EgovSampleControllerTestUpdateTest.java b/src/test/java/egovframework/example/sample/web/EgovSampleControllerTestUpdateTest.java index 32d4f11..19c87ab 100644 --- a/src/test/java/egovframework/example/sample/web/EgovSampleControllerTestUpdateTest.java +++ b/src/test/java/egovframework/example/sample/web/EgovSampleControllerTestUpdateTest.java @@ -25,7 +25,6 @@ import java.util.List; import org.egovframe.rte.fdl.cmmn.exception.BaseRuntimeException; -import org.egovframe.rte.psl.dataaccess.util.EgovMap; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; @@ -70,9 +69,9 @@ void test() throws BaseRuntimeException, Exception { insertVO.setFirstIndex(0); insertVO.setSearchCondition("1"); insertVO.setSearchKeyword(insertVO.getName()); - final List insertedList = egovSampleService.selectSampleList(insertVO); - final EgovMap insertedRow = (EgovMap) insertedList.get(0); - final String insertedId = (String) insertedRow.get("id"); + final List insertedList = egovSampleService.selectSampleList(insertVO); + final SampleVO insertedRow = insertedList.get(0); + final String insertedId = insertedRow.getId(); final String updatedName = "test 수정후 카테고리명 " + now; final String updatedDescription = "test 수정후 설명 " + now; diff --git a/src/test/java/egovframework/example/sample/web/EgovSamplePaginationTest.java b/src/test/java/egovframework/example/sample/web/EgovSamplePaginationTest.java new file mode 100644 index 0000000..6b13b83 --- /dev/null +++ b/src/test/java/egovframework/example/sample/web/EgovSamplePaginationTest.java @@ -0,0 +1,82 @@ +package egovframework.example.sample.web; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import org.egovframe.rte.fdl.cmmn.exception.BaseRuntimeException; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.transaction.annotation.Transactional; + +import egovframework.example.sample.service.EgovSampleService; +import egovframework.example.sample.service.SampleVO; + +@SpringBootTest +@AutoConfigureMockMvc +@Transactional +class EgovSamplePaginationTest { + + @Autowired + private MockMvc mockMvc; + + @Autowired + private EgovSampleService sampleService; + + @ParameterizedTest + @ValueSource(strings = { "0", "-1", "101", "2147483647" }) + void invalidPageSizesUseDefaults(String value) throws BaseRuntimeException, Exception { + for (String path : new String[] { "/", "/egovSampleList.do" }) { + var result = mockMvc.perform(get(path).param("pageUnit", value).param("pageSize", value)) + .andExpect(status().isOk()).andReturn(); + SampleVO criteria = (SampleVO) result.getModelAndView().getModel().get("sampleVO"); + assertThat(criteria.getPageUnit()).isEqualTo(10); + assertThat(criteria.getPageSize()).isEqualTo(10); + } + } + + @Test + void customPageSizesAreRenderedAndUsedForNextPage() throws BaseRuntimeException, Exception { + var result = mockMvc + .perform( + get("/egovSampleList.do").param("pageIndex", "2").param("pageUnit", "5").param("pageSize", "3")) + .andExpect(status().isOk()).andExpect(content().string(containsString("value=\"5\" selected=\"selected\""))) + .andExpect(content().string(containsString("name=\"pageSize\" value=\"3\""))).andReturn(); + SampleVO criteria = (SampleVO) result.getModelAndView().getModel().get("sampleVO"); + assertThat(criteria.getFirstIndex()).isEqualTo(5); + assertThat(criteria.getRecordCountPerPage()).isEqualTo(5); + } + + @Test + void detailAndCrudRedirectsKeepPageSizes() throws BaseRuntimeException, Exception { + SampleVO sample = new SampleVO(); + sample.setName("pagination test"); + sample.setDescription("pagination test"); + sample.setUseYn("Y"); + sample.setRegUser("tester"); + sampleService.insertSample(sample); + + for (String path : new String[] { "/addSampleView.do", "/updateSampleView.do" }) { + mockMvc.perform(post(path).param("id", sample.getId()).param("pageUnit", "5").param("pageSize", "3")) + .andExpect(status().isOk()) + .andExpect(content().string(containsString("name=\"pageUnit\" value=\"5\""))) + .andExpect(content().string(containsString("name=\"pageSize\" value=\"3\""))); + } + for (String path : new String[] { "/updateSample.do", "/deleteSample.do", "/addSample.do" }) { + var result = mockMvc + .perform(post(path).param("id", sample.getId()).param("name", sample.getName()) + .param("description", sample.getDescription()).param("useYn", "Y") + .param("regUser", "tester").param("pageUnit", "5").param("pageSize", "3")) + .andExpect(status().is3xxRedirection()).andReturn(); + assertThat(result.getResponse().getRedirectedUrl()).contains("pageUnit=5", "pageSize=3"); + } + } +}