package service import "testing" func TestParsePage_非法值当作第1页(t *testing.T) { cases := []string{"", "abc", "0", "-1", "-100", " "} for _, c := range cases { if got := ParsePage(c); got != 1 { t.Errorf("ParsePage(%q) = %d,想要 1", c, got) } } } func TestParsePage_合法值原样返回(t *testing.T) { cases := map[string]int{"1": 1, "2": 2, "9999": 9999, " 3 ": 3} for in, want := range cases { if got := ParsePage(in); got != want { t.Errorf("ParsePage(%q) = %d,想要 %d", in, got, want) } } } func TestTotalPages_总数为0返回1不是0(t *testing.T) { if got := TotalPages(0); 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 页 } for total, want := range cases { if got := TotalPages(total); got != want { t.Errorf("TotalPages(%d) = %d,想要 %d", total, got, want) } } } func TestClampPage_越界兜到最后一页(t *testing.T) { if got := ClampPage(9999, 260); got != 260 { t.Errorf("ClampPage(9999, 260) = %d,想要 260(兜到最后一页,不是空表格)", got) } } func TestClampPage_小于1当作第1页(t *testing.T) { for _, p := range []int{0, -1, -100} { if got := ClampPage(p, 260); got != 1 { t.Errorf("ClampPage(%d, 260) = %d,想要 1", p, got) } } } func TestClampPage_合法范围原样返回(t *testing.T) { if got := ClampPage(3, 260); got != 3 { t.Errorf("ClampPage(3, 260) = %d,想要 3", got) } } func TestNewPaginationView_首页禁用上一页和首页(t *testing.T) { v := NewPaginationView(1, 260, "") if v.HasPrev { t.Error("第 1 页时 HasPrev 应为 false(首页/上一页要禁用)") } if !v.HasNext { t.Error("第 1 页且总页数 > 1 时 HasNext 应为 true") } } func TestNewPaginationView_末页禁用下一页和末页(t *testing.T) { v := NewPaginationView(260, 260, "") if v.HasPrev != true { t.Error("最后一页时 HasPrev 应为 true(前面还有页)") } if v.HasNext { t.Error("最后一页时 HasNext 应为 false(下一页/末页要禁用)") } } func TestNewPaginationView_总数为0时首尾都禁用(t *testing.T) { v := NewPaginationView(1, 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) } if v.NextURL != "?status=no_link&page=3" { t.Errorf("NextURL = %q,想要 ?status=no_link&page=3", v.NextURL) } if v.FirstURL != "?status=no_link&page=1" { t.Errorf("FirstURL = %q,想要 ?status=no_link&page=1", v.FirstURL) } if v.LastURL != "?status=no_link&page=260" { t.Errorf("LastURL = %q,想要 ?status=no_link&page=260", v.LastURL) } } func TestPaginationURL_无筛选条件时只有page(t *testing.T) { if got := PaginationURL("", 3); got != "?page=3" { t.Errorf("PaginationURL(\"\", 3) = %q,想要 ?page=3", got) } }