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 TestImSecurityPolicyPublishFilter(t *testing.T) { ctx := context.Background() if err := (&ImSecurityPolicyPublishInp{Id: 1, Reason: " "}).Filter(ctx); err == nil { t.Fatal("空发布原因应被拒绝") } if err := (&ImSecurityPolicyPublishInp{Id: 1, Reason: "管理员发布"}).Filter(ctx); err != nil { t.Fatalf("合法发布参数不应报错: %v", err) } } 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地址应被拒绝") } }