Files
Squid a79cb61104 Add Migadu domain admin with shared lists, compaction, and safer apply.
Build the Go API and React UI for managing domain denylist/allowlist/recipient
deny and spam settings, plus shared lists that import/apply across domains with
wildcard compaction, entry verification, and Migadu-friendly list encoding
(including per-domain recipient filtering and rejection bisect on apply).
2026-07-26 21:50:26 +02:00

65 lines
1.7 KiB
Go

package migadu
import (
"encoding/json"
"testing"
)
func TestStringListUnmarshal(t *testing.T) {
cases := []struct {
name string
raw string
want []string
}{
{name: "null", raw: `null`, want: []string{}},
{name: "empty string", raw: `""`, want: []string{}},
{name: "csv string", raw: `"a@x.com, b@y.com"`, want: []string{"a@x.com", "b@y.com"}},
{name: "array", raw: `["a@x.com","b@y.com"]`, want: []string{"a@x.com", "b@y.com"}},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
var got StringList
if err := json.Unmarshal([]byte(tc.raw), &got); err != nil {
t.Fatalf("unmarshal: %v", err)
}
if len(got) != len(tc.want) {
t.Fatalf("len=%d want %d (%v)", len(got), len(tc.want), got)
}
for i := range tc.want {
if got[i] != tc.want[i] {
t.Fatalf("got %v want %v", got, tc.want)
}
}
})
}
}
func TestDomainUpdateNilListMarshalsAsEmptyArray(t *testing.T) {
var nilList []string
update := DomainUpdate{
SenderDenylist: &nilList,
SenderAllowlist: &[]string{"a@b.com", "c@d.com"},
RecipientDenylist: &[]string{},
}
update.normalizeListPointers()
raw, err := json.Marshal(update)
if err != nil {
t.Fatalf("marshal: %v", err)
}
var decoded map[string]json.RawMessage
if err := json.Unmarshal(raw, &decoded); err != nil {
t.Fatalf("decode: %v", err)
}
if string(decoded["sender_denylist"]) != `""` {
t.Fatalf("sender_denylist=%s want empty string", decoded["sender_denylist"])
}
if string(decoded["sender_allowlist"]) != `"a@b.com,c@d.com"` {
t.Fatalf("sender_allowlist=%s", decoded["sender_allowlist"])
}
if string(decoded["recipient_denylist"]) != `""` {
t.Fatalf("recipient_denylist=%s want empty string", decoded["recipient_denylist"])
}
}