productListLogic_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package product
  2. import (
  3. "context"
  4. "testing"
  5. "time"
  6. productModel "perms-system-server/internal/model/product"
  7. "perms-system-server/internal/svc"
  8. "perms-system-server/internal/testutil"
  9. "perms-system-server/internal/types"
  10. "github.com/stretchr/testify/assert"
  11. "github.com/stretchr/testify/require"
  12. )
  13. // TC-0053: 正常分页
  14. func TestProductList_Normal(t *testing.T) {
  15. ctx := context.Background()
  16. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  17. conn := testutil.GetTestSqlConn()
  18. now := time.Now().Unix()
  19. var ids []int64
  20. for i := 0; i < 3; i++ {
  21. code := testutil.UniqueId()
  22. result, err := svcCtx.SysProductModel.Insert(ctx, &productModel.SysProduct{
  23. Code: code, Name: "列表测试产品", AppKey: "k_" + code, AppSecret: "s_" + code,
  24. Status: 1, CreateTime: now, UpdateTime: now,
  25. })
  26. require.NoError(t, err)
  27. id, _ := result.LastInsertId()
  28. ids = append(ids, id)
  29. }
  30. t.Cleanup(func() {
  31. testutil.CleanTable(ctx, conn, "`sys_product`", ids...)
  32. })
  33. logic := NewProductListLogic(ctx, svcCtx)
  34. resp, err := logic.ProductList(&types.ProductListReq{Page: 1, PageSize: 10})
  35. require.NoError(t, err)
  36. require.NotNil(t, resp)
  37. assert.True(t, resp.Total >= 3)
  38. items, ok := resp.List.([]types.ProductItem)
  39. require.True(t, ok)
  40. assert.True(t, len(items) >= 3)
  41. }
  42. // TC-0054: 默认分页
  43. func TestProductList_DefaultPagination(t *testing.T) {
  44. ctx := context.Background()
  45. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  46. logic := NewProductListLogic(ctx, svcCtx)
  47. resp, err := logic.ProductList(&types.ProductListReq{Page: 0, PageSize: 0})
  48. require.NoError(t, err)
  49. require.NotNil(t, resp)
  50. items, ok := resp.List.([]types.ProductItem)
  51. require.True(t, ok)
  52. assert.True(t, len(items) <= 20, "default pageSize should be 20")
  53. }
  54. // TC-0055: pageSize超过上限
  55. func TestProductList_PageSizeExceedsLimit(t *testing.T) {
  56. ctx := context.Background()
  57. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  58. logic := NewProductListLogic(ctx, svcCtx)
  59. resp, err := logic.ProductList(&types.ProductListReq{Page: 1, PageSize: 500})
  60. require.NoError(t, err)
  61. require.NotNil(t, resp)
  62. items, ok := resp.List.([]types.ProductItem)
  63. require.True(t, ok)
  64. assert.True(t, len(items) <= 100, "pageSize should be capped at 100")
  65. }
  66. // TC-0056: pageSize=0
  67. func TestProductList_PageSizeZero_DefaultsTo20(t *testing.T) {
  68. ctx := context.Background()
  69. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  70. logic := NewProductListLogic(ctx, svcCtx)
  71. resp, err := logic.ProductList(&types.ProductListReq{Page: 1, PageSize: 0})
  72. require.NoError(t, err)
  73. require.NotNil(t, resp)
  74. items, ok := resp.List.([]types.ProductItem)
  75. require.True(t, ok)
  76. assert.True(t, len(items) <= 20, "default pageSize should be 20")
  77. }
  78. // TC-0057: page负值
  79. func TestProductList_NegativePage_DefaultsTo1(t *testing.T) {
  80. ctx := context.Background()
  81. svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
  82. logic := NewProductListLogic(ctx, svcCtx)
  83. resp, err := logic.ProductList(&types.ProductListReq{Page: -1, PageSize: 10})
  84. require.NoError(t, err)
  85. require.NotNil(t, resp)
  86. }