| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- package product
- import (
- "context"
- "errors"
- "testing"
- "time"
- productModel "perms-system-server/internal/model/product"
- "perms-system-server/internal/response"
- "perms-system-server/internal/svc"
- "perms-system-server/internal/testutil"
- "perms-system-server/internal/testutil/ctxhelper"
- "perms-system-server/internal/types"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- )
- func insertTestProduct(t *testing.T, ctx context.Context) *productModel.SysProduct {
- t.Helper()
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- conn := testutil.GetTestSqlConn()
- code := testutil.UniqueId()
- now := time.Now().Unix()
- result, err := svcCtx.SysProductModel.Insert(ctx, &productModel.SysProduct{
- Code: code,
- Name: "待更新产品",
- AppKey: "test_key_" + code,
- AppSecret: "test_secret_" + code,
- Remark: "原始备注",
- Status: 1,
- CreateTime: now,
- UpdateTime: now,
- })
- require.NoError(t, err)
- id, _ := result.LastInsertId()
- t.Cleanup(func() {
- testutil.CleanTable(ctx, conn, "`sys_product`", id)
- })
- return &productModel.SysProduct{
- Id: id,
- Code: code,
- Name: "待更新产品",
- AppKey: "test_key_" + code,
- AppSecret: "test_secret_" + code,
- Remark: "原始备注",
- Status: 1,
- CreateTime: now,
- UpdateTime: now,
- }
- }
- // TC-0076: 正常更新
- func TestUpdateProduct_Success(t *testing.T) {
- ctx := ctxhelper.SuperAdminCtx()
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- p := insertTestProduct(t, ctx)
- logic := NewUpdateProductLogic(ctx, svcCtx)
- err := logic.UpdateProduct(&types.UpdateProductReq{
- Id: p.Id,
- Name: "已更新名称",
- Remark: "已更新备注",
- Status: 2,
- })
- require.NoError(t, err)
- updated, err := svcCtx.SysProductModel.FindOne(ctx, p.Id)
- require.NoError(t, err)
- assert.Equal(t, "已更新名称", updated.Name)
- assert.Equal(t, "已更新备注", updated.Remark)
- assert.Equal(t, int64(2), updated.Status)
- }
- // TC-0077: 不存在
- func TestUpdateProduct_NotFound(t *testing.T) {
- ctx := ctxhelper.SuperAdminCtx()
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- logic := NewUpdateProductLogic(ctx, svcCtx)
- err := logic.UpdateProduct(&types.UpdateProductReq{
- Id: 999999999,
- Name: "不存在",
- })
- require.Error(t, err)
- var codeErr *response.CodeError
- require.True(t, errors.As(err, &codeErr))
- assert.Equal(t, 404, codeErr.Code())
- assert.Equal(t, "产品不存在", codeErr.Error())
- }
- // TC-0078: 不传status
- func TestUpdateProduct_StatusZeroUnchanged(t *testing.T) {
- ctx := ctxhelper.SuperAdminCtx()
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- p := insertTestProduct(t, ctx)
- logic := NewUpdateProductLogic(ctx, svcCtx)
- err := logic.UpdateProduct(&types.UpdateProductReq{
- Id: p.Id,
- Name: "新名称",
- Remark: "新备注",
- Status: 0,
- })
- require.NoError(t, err)
- updated, err := svcCtx.SysProductModel.FindOne(ctx, p.Id)
- require.NoError(t, err)
- assert.Equal(t, "新名称", updated.Name)
- assert.Equal(t, "新备注", updated.Remark)
- assert.Equal(t, int64(1), updated.Status, "status should remain unchanged when req.Status is 0")
- }
- // TC-0536: updateProduct非超管拒绝
- func TestUpdateProduct_NonSuperAdminRejected(t *testing.T) {
- ctx := ctxhelper.AdminCtx("test_product")
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- logic := NewUpdateProductLogic(ctx, svcCtx)
- err := logic.UpdateProduct(&types.UpdateProductReq{Id: 1, Name: "test"})
- require.Error(t, err)
- var ce *response.CodeError
- require.True(t, errors.As(err, &ce))
- assert.Equal(t, 403, ce.Code())
- }
- // TC-0090: updateProduct 非法状态值被拒绝(H-4修复验证)
- func TestUpdateProduct_InvalidStatusRejected(t *testing.T) {
- ctx := ctxhelper.SuperAdminCtx()
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- p := insertTestProduct(t, ctx)
- logic := NewUpdateProductLogic(ctx, svcCtx)
- invalid := []int64{3, 99, -1}
- for _, st := range invalid {
- err := logic.UpdateProduct(&types.UpdateProductReq{Id: p.Id, Status: st})
- require.Error(t, err, "status=%d 应被拒绝", st)
- var ce *response.CodeError
- require.True(t, errors.As(err, &ce))
- assert.Equal(t, 400, ce.Code())
- }
- after, err := svcCtx.SysProductModel.FindOne(ctx, p.Id)
- require.NoError(t, err)
- assert.Equal(t, int64(1), after.Status, "非法状态不应落库")
- }
|