# 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