Files
honeyDueAPI/internal/worker/scheduler_test.go
Trey T bec880886b Coverage priorities 1-5: test pure functions, extract interfaces, mock-based handler tests
- Priority 1: Test NewSendEmailTask + NewSendPushTask (5 tests)
- Priority 2: Test customHTTPErrorHandler — all 15+ branches (21 tests)
- Priority 3: Extract Enqueuer interface + payload builders in worker pkg (5 tests)
- Priority 4: Extract ClassifyFile/ComputeRelPath in migrate-encrypt (6 tests)
- Priority 5: Define Handler interfaces, refactor to accept them, mock-based tests (14 tests)
- Fix .gitignore: /worker instead of worker to stop ignoring internal/worker/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 20:30:09 -05:00

111 lines
3.0 KiB
Go

package worker
import (
"encoding/json"
"testing"
)
// --- Payload roundtrip tests ---
func TestWelcomeEmailPayload_MarshalRoundtrip(t *testing.T) {
original := WelcomeEmailPayload{
EmailPayload: EmailPayload{To: "a@b.com", FirstName: "Alice"},
ConfirmationCode: "ABC123",
}
data, err := json.Marshal(original)
if err != nil {
t.Fatalf("marshal: %v", err)
}
var got WelcomeEmailPayload
if err := json.Unmarshal(data, &got); err != nil {
t.Fatalf("unmarshal: %v", err)
}
if got.To != original.To || got.FirstName != original.FirstName || got.ConfirmationCode != original.ConfirmationCode {
t.Errorf("roundtrip mismatch: got %+v, want %+v", got, original)
}
}
func TestVerificationEmailPayload_MarshalRoundtrip(t *testing.T) {
original := VerificationEmailPayload{
EmailPayload: EmailPayload{To: "b@c.com", FirstName: "Bob"},
Code: "999888",
}
data, err := json.Marshal(original)
if err != nil {
t.Fatalf("marshal: %v", err)
}
var got VerificationEmailPayload
if err := json.Unmarshal(data, &got); err != nil {
t.Fatalf("unmarshal: %v", err)
}
if got.To != original.To || got.FirstName != original.FirstName || got.Code != original.Code {
t.Errorf("roundtrip mismatch: got %+v, want %+v", got, original)
}
}
func TestPasswordResetEmailPayload_MarshalRoundtrip(t *testing.T) {
original := PasswordResetEmailPayload{
EmailPayload: EmailPayload{To: "c@d.com", FirstName: "Carol"},
Code: "XYZ",
ResetToken: "tok-abc-123",
}
data, err := json.Marshal(original)
if err != nil {
t.Fatalf("marshal: %v", err)
}
var got PasswordResetEmailPayload
if err := json.Unmarshal(data, &got); err != nil {
t.Fatalf("unmarshal: %v", err)
}
if got.To != original.To || got.FirstName != original.FirstName || got.Code != original.Code || got.ResetToken != original.ResetToken {
t.Errorf("roundtrip mismatch: got %+v, want %+v", got, original)
}
}
func TestPasswordChangedEmailPayload_MarshalRoundtrip(t *testing.T) {
original := EmailPayload{To: "d@e.com", FirstName: "Dave"}
data, err := json.Marshal(original)
if err != nil {
t.Fatalf("marshal: %v", err)
}
var got EmailPayload
if err := json.Unmarshal(data, &got); err != nil {
t.Fatalf("unmarshal: %v", err)
}
if got.To != original.To || got.FirstName != original.FirstName {
t.Errorf("roundtrip mismatch: got %+v, want %+v", got, original)
}
}
// --- Task type constant tests ---
func TestTaskTypeConstants_Unique(t *testing.T) {
types := []string{
TypeWelcomeEmail,
TypeVerificationEmail,
TypePasswordResetEmail,
TypePasswordChangedEmail,
}
seen := make(map[string]bool)
for _, typ := range types {
if seen[typ] {
t.Errorf("duplicate task type: %q", typ)
}
seen[typ] = true
}
}
func TestTaskTypeConstants_EmailPrefix(t *testing.T) {
types := []string{
TypeWelcomeEmail,
TypeVerificationEmail,
TypePasswordResetEmail,
TypePasswordChangedEmail,
}
for _, typ := range types {
if len(typ) < 6 || typ[:6] != "email:" {
t.Errorf("task type %q does not have 'email:' prefix", typ)
}
}
}