Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ <h2 class="heading-large" th:text="#{list.sample}"></h2>
</thead>
<tbody>
<tr th:each="result, iterStat : ${resultList}">
<td class="text-center" th:text="${paginationInfo.totalRecordCount + 1 - ((sampleVO.pageIndex - 1) * sampleVO.pageSize + iterStat.count)}"></td>
<td class="text-center" th:text="${paginationInfo.totalRecordCount + 1 - ((sampleVO.pageIndex - 1) * sampleVO.recordCountPerPage + iterStat.count)}"></td>
<td class="text-center">
<a href="#" th:onclick="sampleDetail([[${result.id}]])" th:text="${result.id}"></a>
</td>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package egovframework.example.sample.web;

import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.egovframe.rte.fdl.property.impl.EgovPropertyServiceImpl;
import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
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.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;

/**
* [게시판][EgovSampleController.selectList] 목록 행 번호 단위 테스트
*
* 페이지당 건수(pageUnit)와 페이지 링크 묶음 크기(pageSize)를 다른 값으로 두고
* 행 번호가 페이지당 건수를 따라가는지 확인한다.
*
* @author wantaek
* @since 2026-09-09
*/
@SpringBootTest
@AutoConfigureMockMvc
class EgovSampleControllerTestSelectListRowNumberTest {

private static final int PAGE_INDEX = 2;

/** 목록 No 칸. 이름·설명 칸에는 숫자만 들어가는 값이 없어 이 칸만 잡힌다. */
private static final Pattern ROW_NUMBER = Pattern.compile("<td class=\"text-center\">(\\d+)</td>");

@Autowired
private MockMvc mockMvc;

/**
* 두 값이 같으면 행 번호 식이 어느 쪽을 쓰든 결과가 같아 검증이 되지 않으므로
* pageUnit 과 pageSize 를 다르게 준다.
*/
@TestConfiguration
static class EgovConfigPropertiesTestConfig {

@Bean(destroyMethod = "destroy")
EgovPropertyServiceImpl propertiesService() {
final Map<String, String> properties = new HashMap<>();
properties.put("pageUnit", "10");
properties.put("pageSize", "5");

final EgovPropertyServiceImpl egovPropertyServiceImpl = new EgovPropertyServiceImpl();
egovPropertyServiceImpl.setProperties(properties);
return egovPropertyServiceImpl;
}

}

@Test
@DisplayName("행 번호는 페이지 링크 묶음 크기가 아니라 페이지당 건수만큼 페이지마다 건너뛴다")
void test_행번호_페이지당건수() throws Exception {
// given
final MvcResult mvcResult = mockMvc
.perform(get("/egovSampleList.do").param("pageIndex", String.valueOf(PAGE_INDEX)))
.andExpect(status().isOk())
.andReturn();

final PaginationInfo paginationInfo = (PaginationInfo) mvcResult.getModelAndView().getModel()
.get("paginationInfo");

assertThat(paginationInfo.getRecordCountPerPage()).isNotEqualTo(paginationInfo.getPageSize());
assertThat(paginationInfo.getTotalRecordCount()).isGreaterThan(paginationInfo.getRecordCountPerPage());

// when
final String content = mvcResult.getResponse().getContentAsString();

// then
// 목록은 내림차순이므로 2페이지 첫 행 = 총건수 + 1 - ((2 - 1) * 페이지당건수 + 1)
final int expected = paginationInfo.getTotalRecordCount() + 1
- ((PAGE_INDEX - 1) * paginationInfo.getRecordCountPerPage() + 1);

final Matcher matcher = ROW_NUMBER.matcher(content);
assertThat(matcher.find()).isTrue();
assertThat(Integer.parseInt(matcher.group(1))).isEqualTo(expected);
}

}