1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-12-10 21:24:20 +01:00
fab-manager/test/workers/reservation_reminder_worker_test.rb

110 lines
2.6 KiB
Ruby

# frozen_string_literal: true
require 'test_helper'
require 'minitest/autorun'
class ReservationReminderWorkerTest < ActiveSupport::TestCase
include ActionMailer::TestHelper
setup do
@worker = ReservationReminderWorker.new
@training_slot = slots(:slot_1)
@event = events(:event_1)
@event_slot = slots(:slot_129)
@event_reservation = Reservation.create!(
reservable: @event,
nb_reserve_places: 1,
statistic_profile_id: statistic_profiles(:pdurand).id,
slots_reservations_attributes: [slot_id: @event_slot.id]
)
end
test 'send a reminder 24 hours before by default and is idempotent' do
travel_to @training_slot.start_at - 24.hours
assert_enqueued_emails 1 do
@worker.perform
end
assert_enqueued_emails 0 do
@worker.perform
end
end
test 'reminder_delay can be changed and is respected' do
Setting.set('reminder_delay', 15)
travel_to @training_slot.start_at - 17.hours
assert_enqueued_emails 0 do
@worker.perform
end
travel_to @training_slot.start_at - 13.hours
assert_enqueued_emails 0 do
@worker.perform
end
travel_to @training_slot.start_at - 15.hours
assert_enqueued_emails 1 do
@worker.perform
end
assert_enqueued_emails 0 do
@worker.perform
end
end
test 'do nothing if setting reminder_enable is false' do
Setting.set('reminder_enable', false)
assert_enqueued_emails 0 do
assert_nil @worker.perform
end
end
test 'do nothing if slots_reservations is canceled' do
travel_to @training_slot.start_at - 24.hours
@training_slot.slots_reservations[0].update!(canceled_at: 1.day.ago)
assert_enqueued_emails 0 do
@worker.perform
end
end
test '[event] do nothing if event.pre_registration is true and slots_reservation is not valid' do
@event.update!(pre_registration: true)
@event_reservation.slots_reservations.update_all(is_valid: false)
travel_to @event_slot.start_at - 24.hours
assert_enqueued_emails 0 do
@worker.perform
end
end
test '[event] do send the notification if event.pre_registration is true and slots_reservation is valid' do
@event.update!(pre_registration: true)
@event_reservation.slots_reservations.update_all(is_valid: true)
travel_to @event_slot.start_at - 24.hours
assert_enqueued_emails 1 do
@worker.perform
end
end
test '[event] do send the notification if event.pre_registration is false' do
travel_to @event_slot.start_at - 24.hours
assert_enqueued_emails 1 do
@worker.perform
end
end
end