Aggiunge fascia oraria, prova manuale obbligatoria e cruscotto invii email.
Le campagne rispettano orario e giorni lavorativi, richiedono una mail di test con dati inseriti a mano prima dell'invio massivo e offrono una dashboard per monitorare l'avanzamento. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,11 +1,12 @@
|
||||
require "test_helper"
|
||||
|
||||
class SendMailingRecipientJobTest < ActiveJob::TestCase
|
||||
include ActionMailer::TestHelper
|
||||
test "sends pending recipients in sequence" do
|
||||
opportunities(:deal).update!(send_status: "to_send")
|
||||
mailing = create_mailing(audience: "to_send")
|
||||
mailing.rebuild_recipients!
|
||||
mailing.update!(status: "sending", queued_at: Time.current)
|
||||
mailing.update!(status: "sending", queued_at: Time.current, test_sent_at: Time.current, test_sent_to: "test@example.com")
|
||||
|
||||
perform_enqueued_jobs do
|
||||
SendMailingRecipientJob.perform_later(mailing.mailing_recipients.first.id)
|
||||
@@ -14,4 +15,37 @@ class SendMailingRecipientJobTest < ActiveJob::TestCase
|
||||
assert_equal "sent", mailing.reload.status
|
||||
assert_equal "sent", mailing.mailing_recipients.first.status
|
||||
end
|
||||
|
||||
test "does not send outside the working window and resumes next workday" do
|
||||
opportunities(:deal).update!(send_status: "to_send")
|
||||
mailing = create_mailing(
|
||||
audience: "to_send",
|
||||
send_window_enabled: true,
|
||||
send_window_start_minutes: 10 * 60,
|
||||
send_window_end_minutes: 18 * 60,
|
||||
interval_seconds: 120
|
||||
)
|
||||
mailing.rebuild_recipients!
|
||||
recipient = mailing.mailing_recipients.first
|
||||
mailing.update!(test_sent_at: Time.current, test_sent_to: "test@example.com")
|
||||
|
||||
travel_to Time.zone.local(2026, 4, 3, 18, 30, 0) do
|
||||
mailing.update!(test_sent_at: Time.current, test_sent_to: "test@example.com")
|
||||
assert_no_emails do
|
||||
mailing.queue_send!
|
||||
end
|
||||
assert_equal "sending", mailing.reload.status
|
||||
assert_equal "pending", recipient.reload.status
|
||||
assert_equal Time.zone.local(2026, 4, 7, 10, 0, 0), mailing.next_send_at
|
||||
assert_enqueued_jobs 0, only: SendMailingRecipientJob
|
||||
end
|
||||
|
||||
travel_to Time.zone.local(2026, 4, 7, 10, 0, 0) do
|
||||
perform_enqueued_jobs do
|
||||
ResumeMailingsJob.perform_now
|
||||
end
|
||||
assert_equal "sent", recipient.reload.status
|
||||
assert_equal "sent", mailing.reload.status
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user