feat: 支持主列表选择每页条数 (#242)
This commit is contained in:
@@ -20,27 +20,50 @@ func TestParsePage_合法值原样返回(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestParsePageSize_只接受白名单(t *testing.T) {
|
||||
for _, in := range []string{"20", "50", "100", " 50 "} {
|
||||
want := map[string]int{"20": 20, "50": 50, "100": 100, " 50 ": 50}[in]
|
||||
if got := ParsePageSize(in); got != want {
|
||||
t.Errorf("ParsePageSize(%q) = %d,想要 %d", in, got, want)
|
||||
}
|
||||
}
|
||||
for _, in := range []string{"", "0", "21", "200", "abc"} {
|
||||
if got := ParsePageSize(in); got != DefaultPageSize {
|
||||
t.Errorf("ParsePageSize(%q) = %d,非法值应回退 %d", in, got, DefaultPageSize)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestTotalPages_总数为0返回1不是0(t *testing.T) {
|
||||
if got := TotalPages(0); got != 1 {
|
||||
if got := TotalPages(0, 100); got != 1 {
|
||||
t.Errorf("TotalPages(0) = %d,想要 1(不能出现『第 1/0 页』)", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTotalPages_按PageSize向上取整(t *testing.T) {
|
||||
cases := map[int]int{
|
||||
1: 1,
|
||||
PageSize: 1,
|
||||
PageSize + 1: 2,
|
||||
PageSize * 2: 2,
|
||||
5195: 260, // 工单 #43 实测样本量:5195 条 / 20 条一页 = 260 页
|
||||
1: 1,
|
||||
DefaultPageSize: 1,
|
||||
DefaultPageSize + 1: 2,
|
||||
DefaultPageSize * 2: 2,
|
||||
5195: 260, // 工单 #43 实测样本量:5195 条 / 20 条一页 = 260 页
|
||||
}
|
||||
for total, want := range cases {
|
||||
if got := TotalPages(total); got != want {
|
||||
if got := TotalPages(total, DefaultPageSize); got != want {
|
||||
t.Errorf("TotalPages(%d) = %d,想要 %d", total, got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestTotalPages_按选择的每页条数计算(t *testing.T) {
|
||||
if got := TotalPages(101, 50); got != 3 {
|
||||
t.Errorf("TotalPages(101, 50) = %d,想要 3", got)
|
||||
}
|
||||
if got := TotalPages(101, 100); got != 2 {
|
||||
t.Errorf("TotalPages(101, 100) = %d,想要 2", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestClampPage_越界兜到最后一页(t *testing.T) {
|
||||
if got := ClampPage(9999, 260); got != 260 {
|
||||
t.Errorf("ClampPage(9999, 260) = %d,想要 260(兜到最后一页,不是空表格)", got)
|
||||
@@ -62,7 +85,7 @@ func TestClampPage_合法范围原样返回(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestNewPaginationView_首页禁用上一页和首页(t *testing.T) {
|
||||
v := NewPaginationView(1, 260, "")
|
||||
v := NewPaginationView(1, 20, 260, "")
|
||||
if v.HasPrev {
|
||||
t.Error("第 1 页时 HasPrev 应为 false(首页/上一页要禁用)")
|
||||
}
|
||||
@@ -72,7 +95,7 @@ func TestNewPaginationView_首页禁用上一页和首页(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestNewPaginationView_末页禁用下一页和末页(t *testing.T) {
|
||||
v := NewPaginationView(260, 260, "")
|
||||
v := NewPaginationView(260, 20, 260, "")
|
||||
if v.HasPrev != true {
|
||||
t.Error("最后一页时 HasPrev 应为 true(前面还有页)")
|
||||
}
|
||||
@@ -82,25 +105,31 @@ func TestNewPaginationView_末页禁用下一页和末页(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestNewPaginationView_总数为0时首尾都禁用(t *testing.T) {
|
||||
v := NewPaginationView(1, 1, "")
|
||||
v := NewPaginationView(1, 20, 1, "")
|
||||
if v.HasPrev || v.HasNext {
|
||||
t.Errorf("只有 1 页时前后都应禁用,HasPrev=%v HasNext=%v", v.HasPrev, v.HasNext)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewPaginationView_URL带上筛选条件(t *testing.T) {
|
||||
v := NewPaginationView(2, 260, "status=no_link")
|
||||
if v.PrevURL != "?status=no_link&page=1" {
|
||||
t.Errorf("PrevURL = %q,想要 ?status=no_link&page=1", v.PrevURL)
|
||||
v := NewPaginationView(2, 50, 260, "status=no_link&page_size=50")
|
||||
if v.PrevURL != "?page_size=50&status=no_link&page=1" {
|
||||
t.Errorf("PrevURL = %q,想要保留筛选和 page_size", v.PrevURL)
|
||||
}
|
||||
if v.NextURL != "?status=no_link&page=3" {
|
||||
t.Errorf("NextURL = %q,想要 ?status=no_link&page=3", v.NextURL)
|
||||
if v.NextURL != "?page_size=50&status=no_link&page=3" {
|
||||
t.Errorf("NextURL = %q,想要保留筛选和 page_size", v.NextURL)
|
||||
}
|
||||
if v.FirstURL != "?status=no_link&page=1" {
|
||||
t.Errorf("FirstURL = %q,想要 ?status=no_link&page=1", v.FirstURL)
|
||||
if v.FirstURL != "?page_size=50&status=no_link&page=1" {
|
||||
t.Errorf("FirstURL = %q,想要保留筛选和 page_size", v.FirstURL)
|
||||
}
|
||||
if v.LastURL != "?status=no_link&page=260" {
|
||||
t.Errorf("LastURL = %q,想要 ?status=no_link&page=260", v.LastURL)
|
||||
if v.LastURL != "?page_size=50&status=no_link&page=260" {
|
||||
t.Errorf("LastURL = %q,想要保留筛选和 page_size", v.LastURL)
|
||||
}
|
||||
if v.PageSize != 50 || !v.PageSizeOptions[1].Selected {
|
||||
t.Fatalf("当前页容量选择不正确: %+v", v)
|
||||
}
|
||||
if len(v.FilterFields) != 1 || v.FilterFields[0].Name != "status" {
|
||||
t.Fatalf("切换容量应只保留筛选且不保留 page/page_size: %+v", v.FilterFields)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user