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>
This commit is contained in:
@@ -30,38 +30,43 @@ const (
|
||||
|
||||
// Handler handles background job processing
|
||||
type Handler struct {
|
||||
db *gorm.DB
|
||||
taskRepo *repositories.TaskRepository
|
||||
residenceRepo *repositories.ResidenceRepository
|
||||
reminderRepo *repositories.ReminderRepository
|
||||
notificationRepo *repositories.NotificationRepository
|
||||
pushClient *push.Client
|
||||
emailService *services.EmailService
|
||||
notificationService *services.NotificationService
|
||||
onboardingService *services.OnboardingEmailService
|
||||
config *config.Config
|
||||
db *gorm.DB
|
||||
taskRepo TaskRepo
|
||||
residenceRepo ResidenceRepo
|
||||
reminderRepo ReminderRepo
|
||||
notificationRepo NotificationRepo
|
||||
pushClient PushSender
|
||||
emailService EmailSender
|
||||
notificationService NotificationSender
|
||||
onboardingService OnboardingEmailSender
|
||||
config *config.Config
|
||||
}
|
||||
|
||||
// NewHandler creates a new job handler
|
||||
func NewHandler(db *gorm.DB, pushClient *push.Client, emailService *services.EmailService, notificationService *services.NotificationService, cfg *config.Config) *Handler {
|
||||
// Create onboarding email service
|
||||
var onboardingService *services.OnboardingEmailService
|
||||
if emailService != nil {
|
||||
onboardingService = services.NewOnboardingEmailService(db, emailService, cfg.Server.BaseURL)
|
||||
h := &Handler{
|
||||
db: db,
|
||||
taskRepo: repositories.NewTaskRepository(db),
|
||||
residenceRepo: repositories.NewResidenceRepository(db),
|
||||
reminderRepo: repositories.NewReminderRepository(db),
|
||||
notificationRepo: repositories.NewNotificationRepository(db),
|
||||
config: cfg,
|
||||
}
|
||||
|
||||
return &Handler{
|
||||
db: db,
|
||||
taskRepo: repositories.NewTaskRepository(db),
|
||||
residenceRepo: repositories.NewResidenceRepository(db),
|
||||
reminderRepo: repositories.NewReminderRepository(db),
|
||||
notificationRepo: repositories.NewNotificationRepository(db),
|
||||
pushClient: pushClient,
|
||||
emailService: emailService,
|
||||
notificationService: notificationService,
|
||||
onboardingService: onboardingService,
|
||||
config: cfg,
|
||||
// Assign interface fields only when concrete values are non-nil
|
||||
// to preserve correct nil checks on the interface values.
|
||||
if pushClient != nil {
|
||||
h.pushClient = pushClient
|
||||
}
|
||||
if emailService != nil {
|
||||
h.emailService = emailService
|
||||
h.onboardingService = services.NewOnboardingEmailService(db, emailService, cfg.Server.BaseURL)
|
||||
}
|
||||
if notificationService != nil {
|
||||
h.notificationService = notificationService
|
||||
}
|
||||
|
||||
return h
|
||||
}
|
||||
|
||||
// HandleDailyDigest processes daily digest notifications with task statistics
|
||||
|
||||
Reference in New Issue
Block a user