app-cloudep-permission-server/pkg/repository/role_permission_test.go

267 lines
6.5 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 repository
import (
"context"
"fmt"
"testing"
"time"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/repository"
mgo "code.30cm.net/digimon/library-go/mongo"
"github.com/stretchr/testify/assert"
"go.mongodb.org/mongo-driver/bson/primitive"
)
func SetupTestRolePermissionRepository(db string) (repository.RolePermissionRepository, func(), error) {
h, p, tearDown, err := startMongoContainer()
if err != nil {
return nil, nil, err
}
conf := &mgo.Conf{
Schema: Schema,
Host: fmt.Sprintf("%s:%s", h, p),
Database: db,
MaxStaleness: 300,
MaxPoolSize: 100,
MinPoolSize: 100,
MaxConnIdleTime: 300,
Compressors: []string{},
EnableStandardReadWriteSplitMode: false,
ConnectTimeoutMs: 3000,
}
param := RoleRepositoryParam{
Conf: conf,
}
repo := NewRolePermissionRepository(param)
_, _ = repo.Index20250225UP(context.Background())
return repo, tearDown, nil
}
func TestRolePermissionRepository_Create(t *testing.T) {
repo, tearDown, err := SetupTestRolePermissionRepository("testDB")
assert.NoError(t, err)
defer tearDown()
testCases := []struct {
name string
input entity.RolePermission
expectErr bool
}{
{
name: "成功插入新的 RolePermission",
input: entity.RolePermission{
RoleID: "role_1",
PermissionID: "perm_1",
},
expectErr: false,
},
{
name: "插入已經有 ID 的 RolePermission",
input: entity.RolePermission{
ID: primitive.NewObjectID(),
RoleID: "role_2",
PermissionID: "perm_2",
CreateAt: time.Now().UnixNano(),
UpdateAt: time.Now().UnixNano(),
},
expectErr: false,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
err := repo.Create(context.Background(), []entity.RolePermission{tc.input})
if tc.expectErr {
assert.Error(t, err, "應該返回錯誤")
} else {
assert.NoError(t, err, "不應該返回錯誤")
}
})
}
}
func TestRolePermissionRepository_Delete(t *testing.T) {
repo, tearDown, err := SetupTestRolePermissionRepository("testDB")
assert.NoError(t, err)
defer tearDown()
// 先準備測試資料
existingRolePermission := entity.RolePermission{
ID: primitive.NewObjectID(),
RoleID: "role_1",
PermissionID: "perm_1",
}
err = repo.Create(context.Background(), []entity.RolePermission{existingRolePermission})
assert.NoError(t, err, "應該成功插入測試資料")
testCases := []struct {
name string
roleID string
permission string
expectErr bool
}{
{
name: "成功刪除已存在的 RolePermission",
roleID: "role_1",
permission: "perm_1",
expectErr: false,
},
{
name: "刪除不存在的 RolePermission不應該報錯",
roleID: "role_2",
permission: "perm_2",
expectErr: false,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
err := repo.Delete(context.Background(), tc.roleID, []string{tc.permission})
if tc.expectErr {
assert.Error(t, err, "應該返回錯誤")
} else {
assert.NoError(t, err, "不應該返回錯誤")
}
})
}
}
func TestRolePermissionRepository_GetByPermissionID(t *testing.T) {
repo, tearDown, err := SetupTestRolePermissionRepository("testDB")
assert.NoError(t, err)
defer tearDown()
// 先準備測試資料
existingRolePermissions := []entity.RolePermission{
{
ID: primitive.NewObjectID(),
RoleID: "role_1",
PermissionID: "perm_1",
},
{
ID: primitive.NewObjectID(),
RoleID: "role_2",
PermissionID: "perm_2",
},
{
ID: primitive.NewObjectID(),
RoleID: "role_3",
PermissionID: "perm_3",
},
}
for _, rp := range existingRolePermissions {
err := repo.Create(context.Background(), []entity.RolePermission{rp})
assert.NoError(t, err, "應該成功插入測試資料")
}
testCases := []struct {
name string
permissionIDs []string
expectedCount int
expectErr bool
}{
{
name: "成功查詢符合的 RolePermission",
permissionIDs: []string{"perm_1", "perm_2"},
expectedCount: 2,
expectErr: false,
},
{
name: "查詢時沒有符合條件的 RolePermission",
permissionIDs: []string{"perm_99"},
expectedCount: 0,
expectErr: false,
},
{
name: "查詢時發生資料庫錯誤",
permissionIDs: nil, // 模擬無效的參數
expectedCount: 0,
expectErr: true,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
results, err := repo.GetByPermissionID(context.Background(), tc.permissionIDs)
if tc.expectErr {
assert.Error(t, err, "應該返回錯誤")
} else {
assert.NoError(t, err, "不應該返回錯誤")
assert.Len(t, results, tc.expectedCount, "回傳結果數量應符合預期")
}
})
}
}
func TestRolePermissionRepository_Get(t *testing.T) {
repo, tearDown, err := SetupTestRolePermissionRepository("testDB")
assert.NoError(t, err)
defer tearDown()
// 先準備測試資料
existingRolePermissions := []entity.RolePermission{
{
ID: primitive.NewObjectID(),
RoleID: "role_1",
PermissionID: "perm_1",
},
{
ID: primitive.NewObjectID(),
RoleID: "role_1",
PermissionID: "perm_2",
},
{
ID: primitive.NewObjectID(),
RoleID: "role_2",
PermissionID: "perm_3",
},
}
for _, rp := range existingRolePermissions {
err := repo.Create(context.Background(), []entity.RolePermission{rp})
assert.NoError(t, err, "應該成功插入測試資料")
}
testCases := []struct {
name string
roleID string
expectedCount int
expectErr bool
}{
{
name: "成功查詢符合的 RolePermission",
roleID: "role_1",
expectedCount: 2,
expectErr: false,
},
{
name: "查詢時沒有符合條件的 RolePermission",
roleID: "role_99",
expectedCount: 0,
expectErr: false,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
results, err := repo.Get(context.Background(), tc.roleID)
if tc.expectErr {
assert.Error(t, err, "應該返回錯誤")
} else {
assert.NoError(t, err, "不應該返回錯誤")
assert.Len(t, results, tc.expectedCount, "回傳結果數量應符合預期")
}
})
}
}