| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- 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"
- )
- // TC-0058: 正常查询
- func TestProductDetail_Success(t *testing.T) {
- ctx := context.Background()
- 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: "dk_" + code,
- AppSecret: "ds_" + 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)
- })
- logic := NewProductDetailLogic(ctx, svcCtx)
- item, err := logic.ProductDetail(&types.ProductDetailReq{Id: id})
- require.NoError(t, err)
- require.NotNil(t, item)
- assert.Equal(t, id, item.Id)
- assert.Equal(t, code, item.Code)
- assert.Equal(t, "详情测试产品", item.Name)
- assert.Equal(t, "", item.AppKey, "AppKey should be hidden for non-superadmin")
- assert.Equal(t, "详情备注", item.Remark)
- assert.Equal(t, int64(1), item.Status)
- assert.Equal(t, now, item.CreateTime)
- }
- // TC-0059: 不存在
- func TestProductDetail_NotFound(t *testing.T) {
- ctx := context.Background()
- svcCtx := svc.NewServiceContext(testutil.GetTestConfig())
- logic := NewProductDetailLogic(ctx, svcCtx)
- _, err := logic.ProductDetail(&types.ProductDetailReq{Id: 999999999})
- 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-0528: 非超管AppKey隐藏
- func TestProductDetail_NonSuperAdminAppKeyHidden(t *testing.T) {
- ctx := ctxhelper.MemberCtx("test_product")
- 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: "detail_appkey", AppKey: "secret_dk_" + code, AppSecret: "ds_" + code,
- Status: 1, CreateTime: now, UpdateTime: now,
- })
- require.NoError(t, err)
- id, _ := result.LastInsertId()
- t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_product`", id) })
- logic := NewProductDetailLogic(ctx, svcCtx)
- item, err := logic.ProductDetail(&types.ProductDetailReq{Id: id})
- require.NoError(t, err)
- assert.Empty(t, item.AppKey, "非超管不应看到AppKey")
- }
- // TC-0529: 超管可见AppKey
- func TestProductDetail_SuperAdminAppKeyVisible(t *testing.T) {
- ctx := ctxhelper.SuperAdminCtx()
- 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: "detail_appkey_sa", AppKey: "visible_dk_" + code, AppSecret: "ds_" + code,
- Status: 1, CreateTime: now, UpdateTime: now,
- })
- require.NoError(t, err)
- id, _ := result.LastInsertId()
- t.Cleanup(func() { testutil.CleanTable(ctx, conn, "`sys_product`", id) })
- logic := NewProductDetailLogic(ctx, svcCtx)
- item, err := logic.ProductDetail(&types.ProductDetailReq{Id: id})
- require.NoError(t, err)
- assert.Equal(t, "visible_dk_"+code, item.AppKey, "超管应能看到AppKey")
- }
|