154 lines
4.6 KiB
Go
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地址应被拒绝")
|
|
}
|
|
}
|