Files
cmautobuy/admin/service/pagination_test.go
T

147 lines
4.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 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 TestParsePageSize_缺失时默认100(t *testing.T) {
if DefaultPageSize != 100 || ParsePageSize("") != 100 {
t.Fatalf("公共分页缺失参数时应默认 100,DefaultPageSize=%d got=%d", DefaultPageSize, ParsePageSize(""))
}
}
func TestTotalPages_总数为0返回1不是0(t *testing.T) {
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,
DefaultPageSize: 1,
DefaultPageSize + 1: 2,
DefaultPageSize * 2: 2,
5195: 52, // 工单 #43 实测样本量:5195 条 / 100 条一页 = 52 页
}
for total, want := range cases {
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)
}
}
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, 20, 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, 20, 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, 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, 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 != "?page_size=50&status=no_link&page=3" {
t.Errorf("NextURL = %q,想要保留筛选和 page_size", v.NextURL)
}
if v.FirstURL != "?page_size=50&status=no_link&page=1" {
t.Errorf("FirstURL = %q,想要保留筛选和 page_size", v.FirstURL)
}
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)
}
}
func TestPaginationURL_无筛选条件时只有page(t *testing.T) {
if got := PaginationURL("", 3); got != "?page=3" {
t.Errorf("PaginationURL(\"\", 3) = %q,想要 ?page=3", got)
}
}