Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 34s
mod/register-policy! domain rules + mod/decide-in domain r reports give each rose-ash domain its own rule set; unregistered domains fall back to default-rules (never unmoderated). Same spam report → remove under a strict market policy, hide under blog default. Engine already took rules as a param, so this is registry + fallback, no engine change. +14 tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
113 lines
3.1 KiB
Plaintext
113 lines
3.1 KiB
Plaintext
;; lib/mod/tests/policies.sx — Ext 17: per-domain policy registry.
|
|
|
|
(define mod-pol-count 0)
|
|
(define mod-pol-pass 0)
|
|
(define mod-pol-fail 0)
|
|
(define mod-pol-failures (list))
|
|
|
|
(define
|
|
mod-pol-test!
|
|
(fn
|
|
(name got expected)
|
|
(begin
|
|
(set! mod-pol-count (+ mod-pol-count 1))
|
|
(if
|
|
(= got expected)
|
|
(set! mod-pol-pass (+ mod-pol-pass 1))
|
|
(begin
|
|
(set! mod-pol-fail (+ mod-pol-fail 1))
|
|
(append!
|
|
mod-pol-failures
|
|
(str name "\n expected: " expected "\n got: " got)))))))
|
|
|
|
(mod/policies-reset!)
|
|
|
|
;; market is strict: spam is removed outright, not just hidden
|
|
(define
|
|
mod-pol-market-rules
|
|
(list
|
|
(mod/mk-rule
|
|
"market-spam-remove"
|
|
:remove (list (list :classification "spam")))
|
|
(mod/mk-rule "default-keep" :keep (list))))
|
|
|
|
(mod-pol-test!
|
|
"unregistered domain falls back to default"
|
|
(mod/policy-registered? "market")
|
|
false)
|
|
(mod/register-policy! "market" mod-pol-market-rules)
|
|
(mod-pol-test!
|
|
"domain registered after register!"
|
|
(mod/policy-registered? "market")
|
|
true)
|
|
|
|
(define mod-pol-spam (mod/mk-report "r1" "a" "b" "this is spam"))
|
|
|
|
;; ── same report, different domain → different action ──
|
|
|
|
(mod-pol-test!
|
|
"market policy removes spam"
|
|
(get (mod/decide-in "market" mod-pol-spam (list mod-pol-spam)) :action)
|
|
"remove")
|
|
(mod-pol-test!
|
|
"market decision uses market rule"
|
|
(get (mod/decide-in "market" mod-pol-spam (list mod-pol-spam)) :rule)
|
|
"market-spam-remove")
|
|
(mod-pol-test!
|
|
"blog (unregistered) uses default → hide"
|
|
(get (mod/decide-in "blog" mod-pol-spam (list mod-pol-spam)) :action)
|
|
"hide")
|
|
(mod-pol-test!
|
|
"blog decision uses default rule"
|
|
(get (mod/decide-in "blog" mod-pol-spam (list mod-pol-spam)) :rule)
|
|
"spam-hide")
|
|
|
|
;; ── policy-for resolution ──
|
|
|
|
(mod-pol-test!
|
|
"policy-for market returns market rules"
|
|
(mod/policy-for "market")
|
|
mod-pol-market-rules)
|
|
(mod-pol-test!
|
|
"policy-for unknown returns default"
|
|
(mod/policy-for "events")
|
|
mod/default-rules)
|
|
(mod-pol-test!
|
|
"registered-domains lists market"
|
|
(mod/registered-domains)
|
|
(list "market"))
|
|
|
|
;; ── a second domain ──
|
|
|
|
(define
|
|
mod-pol-events-rules
|
|
(list (mod/mk-rule "events-keep-all" :keep (list))))
|
|
|
|
(mod/register-policy! "events" mod-pol-events-rules)
|
|
(mod-pol-test!
|
|
"events policy keeps everything (even spam)"
|
|
(get (mod/decide-in "events" mod-pol-spam (list mod-pol-spam)) :action)
|
|
"keep")
|
|
(mod-pol-test!
|
|
"two domains registered"
|
|
(len (mod/registered-domains))
|
|
2)
|
|
(mod-pol-test!
|
|
"market still removes after second registration"
|
|
(get (mod/decide-in "market" mod-pol-spam (list mod-pol-spam)) :action)
|
|
"remove")
|
|
|
|
;; ── clean report is keep everywhere ──
|
|
|
|
(define mod-pol-clean (mod/mk-report "r2" "a" "b" "a fine post"))
|
|
(mod-pol-test!
|
|
"clean report keep in market"
|
|
(get (mod/decide-in "market" mod-pol-clean (list mod-pol-clean)) :action)
|
|
"keep")
|
|
(mod-pol-test!
|
|
"clean report keep in blog"
|
|
(get (mod/decide-in "blog" mod-pol-clean (list mod-pol-clean)) :action)
|
|
"keep")
|
|
|
|
(define mod-policies-tests-run! (fn () {:failures mod-pol-failures :total mod-pol-count :passed mod-pol-pass :failed mod-pol-fail}))
|