efaf016c5f
test / test (push) Has been cancelled
The panel now suggests policy-only DMARC by default, lets operators configure a default and per-domain report address, and DNS-checks hub _report._dmarc records. Future in-panel report ingestion is tracked as dmarc-reports in the roadmap. Co-authored-by: Cursor <cursoragent@cursor.com>
57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package store
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
)
|
|
|
|
func TestUpdateAdmin(t *testing.T) {
|
|
st := openTestStore(t)
|
|
|
|
if err := st.CreateAdmin("admin", "hash-one"); err != nil {
|
|
t.Fatalf("CreateAdmin: %v", err)
|
|
}
|
|
if err := st.UpdateAdmin("operator", "hash-two", "reports@hub.example"); err != nil {
|
|
t.Fatalf("UpdateAdmin: %v", err)
|
|
}
|
|
|
|
a, err := st.GetAdmin()
|
|
if err != nil {
|
|
t.Fatalf("GetAdmin: %v", err)
|
|
}
|
|
if a.DMARCReportEmail != "reports@hub.example" {
|
|
t.Fatalf("dmarc email = %q", a.DMARCReportEmail)
|
|
}
|
|
|
|
if err := st.UpdateAdmin("operator", "hash-three", ""); err != nil {
|
|
t.Fatalf("clear dmarc email: %v", err)
|
|
}
|
|
a, err = st.GetAdmin()
|
|
if err != nil {
|
|
t.Fatalf("GetAdmin: %v", err)
|
|
}
|
|
if a.Username != "operator" || a.PasswordHash != "hash-three" {
|
|
t.Fatalf("unexpected admin after update: %+v", a)
|
|
}
|
|
if a.CreatedAt.IsZero() {
|
|
t.Fatal("update dropped created_at")
|
|
}
|
|
}
|
|
|
|
// An update before setup must not create the account: only the one-time setup
|
|
// flow may do that (security.md).
|
|
func TestUpdateAdminWithoutAdmin(t *testing.T) {
|
|
st := openTestStore(t)
|
|
|
|
if err := st.UpdateAdmin("operator", "hash", ""); !errors.Is(err, ErrNoAdmin) {
|
|
t.Fatalf("UpdateAdmin without admin = %v, want ErrNoAdmin", err)
|
|
}
|
|
exists, err := st.AdminExists()
|
|
if err != nil {
|
|
t.Fatalf("AdminExists: %v", err)
|
|
}
|
|
if exists {
|
|
t.Fatal("UpdateAdmin created an administrator")
|
|
}
|
|
}
|