1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-12-01 12:24:28 +01:00
fab-manager/test/services/prepaid_pack_service_test.rb

77 lines
2.8 KiB
Ruby

# frozen_string_literal: true
require 'test_helper'
class PrepaidPackServiceTest < ActiveSupport::TestCase
setup do
@acamus = User.find_by(username: 'acamus')
@machine = Machine.first
end
test 'get user packs' do
packs = PrepaidPackService.user_packs(@acamus, @machine)
p = StatisticProfilePrepaidPack.where(statistic_profile_id: @acamus.statistic_profile.id)
assert_not_empty packs
assert_equal packs.length, 1
assert_equal p.length, 2
assert_equal packs.first.id, p.last.id
end
test 'total number of prepaid minutes available' do
minutes_available = PrepaidPackService.minutes_available(@acamus, @machine)
assert_equal minutes_available, 600
end
test 'update user pack minutes' do
availabilities_service = Availabilities::AvailabilitiesService.new(@acamus)
slots = availabilities_service.machines([@machine], @acamus, { start: Time.current, end: 1.day.from_now })
reservation = Reservation.create(
reservable_id: @machine.id,
reservable_type: Machine.name,
slots: [slots[0], slots[1]],
statistic_profile_id: @acamus.statistic_profile.id
)
PrepaidPackService.update_user_minutes(@acamus, reservation)
minutes_available = PrepaidPackService.minutes_available(@acamus, @machine)
assert_equal minutes_available, 480
end
test 'member has multiple active packs' do
availabilities_service = Availabilities::AvailabilitiesService.new(@acamus)
# user with current pack reserve 8 slots (on 10 available in the pack)
slots = availabilities_service.machines([@machine], @acamus, { start: Time.current, end: 10.days.from_now })
reservation = Reservation.create(
reservable_id: @machine.id,
reservable_type: Machine.name,
slots: [slots[0], slots[1], slots[2], slots[3], slots[4], slots[5], slots[6], slots[7]],
statistic_profile_id: @acamus.statistic_profile.id
)
PrepaidPackService.update_user_minutes(@acamus, reservation)
minutes_available = PrepaidPackService.minutes_available(@acamus, @machine)
assert_equal 120, minutes_available
# user buy a new pack
prepaid_pack = PrepaidPack.first
StatisticProfilePrepaidPack.create!(prepaid_pack: prepaid_pack, statistic_profile: @acamus.statistic_profile)
minutes_available = PrepaidPackService.minutes_available(@acamus, @machine)
assert_equal 720, minutes_available
# user books a new reservation of 4 slots
reservation = Reservation.create(
reservable_id: @machine.id,
reservable_type: Machine.name,
slots: [slots[8], slots[9], slots[10], slots[11]],
statistic_profile_id: @acamus.statistic_profile.id
)
PrepaidPackService.update_user_minutes(@acamus, reservation)
minutes_available = PrepaidPackService.minutes_available(@acamus, @machine)
assert_equal 480, minutes_available
end
end