Files
im_manager/server/internal/model/input/sysin/im_policy_test.go
T

154 lines
4.6 KiB
Go

package sysin
import (
"context"
"testing"
"hotgo/internal/consts"
"github.com/gogf/gf/v2/encoding/gjson"
)
func TestImMessageCurfewRuleFilter(t *testing.T) {
ctx := context.Background()
valid := &ImMessageCurfewRuleInp{
RuleCode: "after_work",
RuleName: "下班时段",
DateType: consts.ImCurfewDateWeekday,
StartTime: "18:00",
EndTime: "09:00",
Scope: consts.ImCurfewScopePrivate,
}
if err := valid.Filter(ctx); err != nil {
t.Fatalf("跨午夜宵禁规则应合法: %v", err)
}
if valid.Timezone != "Asia/Shanghai" || valid.Status != consts.StatusEnabled {
t.Fatalf("默认值未补齐: timezone=%s status=%d", valid.Timezone, valid.Status)
}
invalidTime := *valid
invalidTime.StartTime = "25:00"
if err := invalidTime.Filter(ctx); err == nil {
t.Fatal("非法宵禁时间应被拒绝")
}
}
func TestImSecurityPolicySaveFilterRequiresCurfewRule(t *testing.T) {
in := &ImSecurityPolicySaveInp{
PolicyName: "默认策略",
GlobalFriendEnabled: 1,
MessageCurfewEnabled: 1,
}
if err := in.Filter(context.Background()); err == nil {
t.Fatal("启用宵禁但未配置规则应被拒绝")
}
in.CurfewRules = []*ImMessageCurfewRuleInp{{
RuleCode: "group_only",
RuleName: "仅群聊",
DateType: consts.ImCurfewDateDaily,
StartTime: "18:00",
EndTime: "09:00",
Scope: consts.ImCurfewScopeGroup,
}}
if err := in.Filter(context.Background()); err == nil {
t.Fatal("宵禁仅配置群聊规则时应被拒绝")
}
}
func TestImSecurityPolicySaveFilterForcesEveryFriendEntryOff(t *testing.T) {
in := &ImSecurityPolicySaveInp{
PolicyName: "下班策略",
GlobalFriendEnabled: 0,
MessageCurfewEnabled: 0,
FriendDisabledPolicy: gjson.New(map[string]interface{}{
"hide_profile": false,
"blocked_entries": []string{"search"},
}),
}
if err := in.Filter(context.Background()); err != nil {
t.Fatalf("关闭全局好友功能的策略应合法: %v", err)
}
policy := in.FriendDisabledPolicy.Map()
if hide, ok := policy["hide_profile"].(bool); !ok || !hide {
t.Fatal("关闭全局好友功能时必须强制隐藏个人资料")
}
entries := in.FriendDisabledPolicy.Get("blocked_entries").Array()
if len(entries) != 6 {
t.Fatalf("关闭全局好友功能时必须禁用全部6个入口: %#v", policy["blocked_entries"])
}
}
func TestImSecurityIPRuleEditFilter(t *testing.T) {
ctx := context.Background()
valid := &ImSecurityIPRuleEditInp{
RuleType: "blacklist",
IpCidr: "192.0.2.0/24",
Action: consts.ImSecurityActionBlock,
SceneJson: gjson.New([]string{"login"}),
RiskLevel: consts.ImRiskLevelHigh,
}
if err := valid.Filter(ctx); err != nil {
t.Fatalf("合法IP阻断规则不应报错: %v", err)
}
invalidAction := *valid
invalidAction.Action = consts.ImPolicyActionDeny
if err := invalidAction.Filter(ctx); err == nil {
t.Fatal("数据库枚举不支持的deny动作应被拒绝")
}
}
func TestImSensitiveWordEditFilter(t *testing.T) {
in := &ImSensitiveWordEditInp{
GroupId: 1,
Word: "测试词",
MatchType: consts.ImSensitiveMatchContains,
SceneJson: gjson.New([]string{"private_message"}),
Action: consts.ImSensitiveActionReplace,
RiskLevel: consts.ImRiskLevelMedium,
}
if err := in.Filter(context.Background()); err == nil {
t.Fatal("替换动作未填写替换文本应被拒绝")
}
}
func TestImSensitiveWordGroupEditFilter(t *testing.T) {
in := &ImSensitiveWordGroupEditInp{GroupCode: "default", GroupName: " "}
if err := in.Filter(context.Background()); err == nil {
t.Fatal("空分组名称应被拒绝")
}
}
func TestImUserPolicyGroupInputFilter(t *testing.T) {
ctx := context.Background()
group := &ImUserPolicyGroupEditInp{
GroupCode: "staff",
GroupName: " ",
PolicyJson: gjson.New(map[string]interface{}{}),
}
if err := group.Filter(ctx); err == nil {
t.Fatal("空用户策略分组名称应被拒绝")
}
if err := (&ImUserPolicyGroupMemberAddInp{GroupId: 1, UserId: 0}).Filter(ctx); err == nil {
t.Fatal("无效用户ID应被拒绝")
}
}
func TestImTenantLoginIPWhitelistSaveFilter(t *testing.T) {
in := &ImTenantLoginIPWhitelistSaveInp{
TenantId: 1,
AppList: []string{" 203.0.113.10 ", "2001:db8::/32", "203.0.113.10"},
WebList: []string{"198.51.100.7/24"},
}
if err := in.Filter(context.Background()); err != nil {
t.Fatalf("合法租户登录白名单不应报错: %v", err)
}
if len(in.AppList) != 2 || in.AppList[0] != "203.0.113.10" || in.WebList[0] != "198.51.100.0/24" {
t.Fatalf("IP白名单未正确规范化: app=%v web=%v", in.AppList, in.WebList)
}
in.AppList = []string{"not-an-ip"}
if err := in.Filter(context.Background()); err == nil {
t.Fatal("非法IP地址应被拒绝")
}
}