mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-12-01 12:24:28 +01:00
96 lines
2.9 KiB
Ruby
96 lines
2.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'test_helper'
|
|
|
|
module Prices; end
|
|
|
|
class Prices::AsAdminTest < ActionDispatch::IntegrationTest
|
|
setup do
|
|
admin = User.with_role(:admin).first
|
|
login_as(admin, scope: :user)
|
|
end
|
|
|
|
test 'compute price for a simple training' do
|
|
user = User.find_by(username: 'jdupond')
|
|
availability = Availability.find(2)
|
|
slot = Availability.find(2).slots.first
|
|
printer_training = availability.trainings.first
|
|
|
|
post '/api/prices/compute',
|
|
params: {
|
|
customer_id: user.id,
|
|
items: [
|
|
{
|
|
reservation: {
|
|
reservable_id: printer_training.id,
|
|
reservable_type: printer_training.class.name,
|
|
slots_reservations_attributes: [
|
|
{
|
|
slot_id: slot.id,
|
|
offered: false
|
|
}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}.to_json,
|
|
headers: default_headers
|
|
|
|
# Check response format & status
|
|
assert_equal 200, response.status, response.body
|
|
assert_match Mime[:json].to_s, response.content_type
|
|
|
|
# Check the price was computed correctly
|
|
price = json_response(response.body)
|
|
assert_equal (printer_training.trainings_pricings.where(group_id: user.group_id).first.amount / 100.0),
|
|
price[:price],
|
|
'Computed price did not match training price'
|
|
end
|
|
|
|
test 'compute price for a machine reservation with an offered slot and a subscription' do
|
|
user = User.find_by(username: 'jdupond')
|
|
availability = Availability.find(3)
|
|
laser = availability.machines.where(id: 1).first
|
|
plan = Plan.find_by(group_id: user.group_id, interval: 'month')
|
|
|
|
post '/api/prices/compute',
|
|
params: {
|
|
customer_id: user.id,
|
|
items: [
|
|
{
|
|
reservation: {
|
|
reservable_id: laser.id,
|
|
reservable_type: laser.class.name,
|
|
slots_reservations_attributes: [
|
|
{
|
|
slot_id: availability.slots.first.id,
|
|
offered: true
|
|
},
|
|
{
|
|
slot_id: availability.slots.last.id,
|
|
offered: false
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
subscription: {
|
|
plan_id: plan.id
|
|
}
|
|
}
|
|
]
|
|
}.to_json,
|
|
headers: default_headers
|
|
|
|
# Check response format & status
|
|
assert_equal 200, response.status, response.body
|
|
assert_match Mime[:json].to_s, response.content_type
|
|
|
|
# Check the event was created correctly
|
|
price = json_response(response.body)
|
|
assert_equal ((laser.prices.where(group_id: user.group_id, plan_id: plan.id).first.amount + plan.amount) / 100.0),
|
|
price[:price],
|
|
'Computed price did not match machine + subscription price'
|
|
end
|
|
end
|