package tools import ( "testing" "fwh-toolbox-server/domain" ) func TestSiteSearchFilter(t *testing.T) { if f, err := siteSearchFilter(siteSearchArgs{Keyword: "x"}); err != nil || f != nil { t.Errorf("没有筛选条件时应返回 nil:%+v %v", f, err) } f, err := siteSearchFilter(siteSearchArgs{Country: "us", Online: "online", Version: "V10R11(B42", ActiveFrom: "2026-01-01", ActiveTo: "2026-01-31"}) if err != nil || f == nil || f.Logic != "and" || len(f.SubFilter) != 1 { t.Fatalf("应生成一组“且”条件:%+v %v", f, err) } got := map[string]domain.SiteInfoFilterConfig{} for _, c := range f.SubFilter[0].Config { got[c.Key] = c } if c := got["countryId"]; c.Type != domain.FilterEqualInt || *c.Para1.Int != 2 { t.Errorf("us 应为 countryId=2:%+v", c) } if c := got["status"]; *c.Para1.Int != 1 { t.Errorf("online 应为 status=1:%+v", c) } if c := got["version"]; c.Type != domain.FilterIncludeString || *c.Para1.String != `V10R11\(B42` { t.Errorf("版本应转义为字面匹配:%q", *c.Para1.String) } if c := got["activeTime"]; *c.Para1.String != "2026-01-01 00:00:00" || *c.Para2.String != "2026-01-31 23:59:59" { t.Errorf("激活时间范围不对:%s ~ %s", *c.Para1.String, *c.Para2.String) } f, _ = siteSearchFilter(siteSearchArgs{ActiveFrom: "2026-01-01 08:00:00"}) if c := f.SubFilter[0].Config[0]; *c.Para1.String != "2026-01-01 08:00:00" || *c.Para2.String != "9999-12-31 23:59:59" { t.Errorf("只给起始时间时止时间不限:%s ~ %s", *c.Para1.String, *c.Para2.String) } for _, bad := range []siteSearchArgs{{Country: "cn"}, {RunStatus: "busy"}, {ActiveTo: "2026/01/01"}} { if _, err := siteSearchFilter(bad); err == nil { t.Errorf("应拒绝:%+v", bad) } } }