test: add tests for handler, email, cmd/server, version and enforce 80% coverage

This commit is contained in:
2026-07-26 20:59:56 +02:00
parent 08554695da
commit 4dd7b6991d
8 changed files with 1295 additions and 6 deletions
+15 -4
View File
@@ -20,23 +20,34 @@ import (
"sourcedock.dev/petrbalvin/nuntius/pkg/contactform"
)
// formSender is the interface for delivering a submission.
type formSender interface {
Send(req contactform.Request) error
}
// subscriberStorer persists newsletter subscribers.
// storage.NewsletterStore satisfies this interface.
type subscriberStorer interface {
Append(sub storage.Subscriber) error
}
// ContactHandler serves one or more contact forms, dispatched by URL path.
// Each form has its own sender, rate limiter, CORS allowlist, and honeypot.
// Newsletter-type forms also get a per-form subscriber store.
type ContactHandler struct {
forms map[string]*config.Form
senders map[string]*email.FormSender
senders map[string]formSender
rateLimits map[string]*rateLimiter
stores map[string]*storage.NewsletterStore
stores map[string]subscriberStorer
}
// New constructs a ContactHandler that serves all forms defined in cfg.
func New(cfg *config.Config) *ContactHandler {
h := &ContactHandler{
forms: make(map[string]*config.Form, len(cfg.Forms)),
senders: make(map[string]*email.FormSender, len(cfg.Forms)),
senders: make(map[string]formSender, len(cfg.Forms)),
rateLimits: make(map[string]*rateLimiter, len(cfg.Forms)),
stores: make(map[string]*storage.NewsletterStore, len(cfg.Forms)),
stores: make(map[string]subscriberStorer, len(cfg.Forms)),
}
for i := range cfg.Forms {
f := &cfg.Forms[i]