import { describe, expect, it } from "vitest"; import { decidePull, hasActiveFilterConfig } from "@/services/imap/pull-filter"; describe("decidePull", () => { it("empty rules → business fallback for 新增预报", () => { const d = decidePull({ fromAddr: "a@x.com", subject: "新增预报 MATU2745683", body: "请查收", filenames: ["卡派.xlsx"], rules: [], }); expect(d).toEqual({ pull: true, reason: "BUSINESS_FALLBACK" }); }); it("empty rules → skip unrelated", () => { const d = decidePull({ fromAddr: "noreply@github.com", subject: "Your security digest", body: "hello", filenames: [], rules: [], }); expect(d.pull).toBe(false); expect(d.reason).toBe("SKIP_FILTER"); }); it("sender blacklist wins", () => { const d = decidePull({ fromAddr: "spam@x.com", subject: "新增预报", body: "", rules: [ { kind: "sender_blacklist", value: "spam@x.com", enabled: true }, { kind: "keyword", value: "新增预报", enabled: true }, ], }); expect(d).toEqual({ pull: false, reason: "SKIP_BLACKLIST" }); }); it("keyword blacklist wins over whitelist? no — blacklist first then whitelist", () => { const d = decidePull({ fromAddr: "vip@x.com", subject: "广告促销", body: "广告", rules: [ { kind: "keyword_blacklist", value: "广告", enabled: true }, { kind: "sender_whitelist", value: "vip@x.com", enabled: true }, ], }); expect(d).toEqual({ pull: false, reason: "SKIP_BLACKLIST" }); }); it("whitelist pulls without keyword", () => { const d = decidePull({ fromAddr: "vip@Partner.COM", subject: "hello", body: "world", rules: [ { kind: "sender_whitelist", value: "vip@partner.com", enabled: true }, { kind: "keyword", value: "预报", enabled: true }, ], }); expect(d).toEqual({ pull: true, reason: "WHITELIST" }); }); it("keyword match when configured", () => { const d = decidePull({ fromAddr: "other@x.com", subject: "关于卡派资料", body: "", rules: [{ kind: "keyword", value: "卡派", enabled: true }], }); expect(d).toEqual({ pull: true, reason: "KEYWORD" }); }); it("configured but no match → SKIP_FILTER (no business fallback)", () => { const d = decidePull({ fromAddr: "other@x.com", subject: "新增预报 MATU2745683", body: "请查收卡派", filenames: ["卡派.xlsx"], rules: [{ kind: "keyword", value: "只有这个才拉", enabled: true }], }); expect(d).toEqual({ pull: false, reason: "SKIP_FILTER" }); }); it("hasActiveFilterConfig ignores disabled", () => { expect( hasActiveFilterConfig([ { kind: "keyword", value: "x", enabled: false }, ]), ).toBe(false); }); });