| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- 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-0050: 正常更新
- 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-0051: 不存在
- 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-0052: 不传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-0485: 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())
- }
|