mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-12-12 23:09:03 +01:00
110 lines
2.6 KiB
Ruby
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
|