Files
mailgoserver/internal/webui/mailbox_rules_test.go
T

56 lines
2.0 KiB
Go

package webui
import (
"net/http"
"net/http/httptest"
"net/url"
"strconv"
"strings"
"testing"
)
// TestAdminRulesAddMultiConditionAndRenders confirms the admin-side rule builder
// (mirroring the self-service one) accepts a multi-condition submission and that the
// rules list page actually renders it (ruleSummary executes correctly at runtime,
// not just parses at template-load time).
func TestAdminRulesAddMultiConditionAndRenders(t *testing.T) {
app := newTestApp(t)
mux := app.Mux()
cookie := loginSession(t, app)
domains, _ := app.DB.ListDomains()
mbox := createMailboxFor(t, app, "adminruler@example.com", domains[0].ID)
form := url.Values{
"priority": {"0"},
"match_type": {"all"},
"condition_field": {"to", "subject"},
"condition_op": {"contains", "contains"},
"condition_value": {"sales", "invoice"},
"action": {"mark_as_spam"},
"action_value": {""},
}
addReq := httptest.NewRequest(http.MethodPost, Prefix+"/mailboxes/"+strconv.FormatInt(mbox.ID, 10)+"/rules/add", strings.NewReader(form.Encode()))
addReq.Header.Set("Content-Type", "application/x-www-form-urlencoded")
addReq.AddCookie(cookie)
addRec := httptest.NewRecorder()
mux.ServeHTTP(addRec, addReq)
if addRec.Code != http.StatusFound {
t.Fatalf("add rule: status=%d body=%s", addRec.Code, addRec.Body.String())
}
listReq := httptest.NewRequest(http.MethodGet, Prefix+"/mailboxes/"+strconv.FormatInt(mbox.ID, 10)+"/rules", nil)
listReq.AddCookie(cookie)
listRec := httptest.NewRecorder()
mux.ServeHTTP(listRec, listReq)
if listRec.Code != http.StatusOK {
t.Fatalf("rules list: status=%d body=%s", listRec.Code, listRec.Body.String())
}
body := listRec.Body.String()
if !strings.Contains(body, "to contains "sales"") || !strings.Contains(body, "AND") {
t.Fatalf("expected the rendered condition summary to show both AND'd conditions, got: %s", body)
}
if !strings.Contains(body, "Mark as Spam") {
t.Fatal("expected the mark_as_spam action to render")
}
}