mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-12-11 22:24:21 +01:00
52 lines
1.9 KiB
Ruby
52 lines
1.9 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
require 'test_helper'
|
||
|
|
||
|
class Cart::AddItemServiceTest < ActiveSupport::TestCase
|
||
|
setup do
|
||
|
@panneaux = Product.find_by(slug: 'panneaux-de-mdf')
|
||
|
@caisse_en_bois = Product.find_by(slug: 'caisse-en-bois')
|
||
|
@cart = Order.find_by(token: 'MkI5z9qVxe_YdNYCR_WN6g1666628074732')
|
||
|
end
|
||
|
|
||
|
test 'add a product to cart' do
|
||
|
cart = Cart::AddItemService.new.call(@cart, @panneaux, 10)
|
||
|
assert_equal cart.total, @panneaux.amount * 10
|
||
|
assert_equal cart.order_items.length, 1
|
||
|
assert_equal cart.order_items.first.amount, @panneaux.amount
|
||
|
assert_equal cart.order_items.first.quantity, 10
|
||
|
end
|
||
|
|
||
|
test 'add a product with quantity min' do
|
||
|
cart = Cart::AddItemService.new.call(@cart, @caisse_en_bois)
|
||
|
assert_equal cart.total, @caisse_en_bois.amount * @caisse_en_bois.quantity_min
|
||
|
assert_equal cart.order_items.length, 1
|
||
|
assert_equal cart.order_items.first.amount, @caisse_en_bois.amount
|
||
|
assert_equal cart.order_items.first.quantity, @caisse_en_bois.quantity_min
|
||
|
end
|
||
|
|
||
|
test 'add two product to cart' do
|
||
|
cart = Cart::AddItemService.new.call(@cart, @panneaux, 10)
|
||
|
cart = Cart::AddItemService.new.call(@cart, @caisse_en_bois)
|
||
|
assert_equal cart.total, (@caisse_en_bois.amount * 5) + (@panneaux.amount * 10)
|
||
|
assert_equal cart.order_items.length, 2
|
||
|
assert_equal cart.order_items.first.amount, @panneaux.amount
|
||
|
assert_equal cart.order_items.first.quantity, 10
|
||
|
assert_equal cart.order_items.last.amount, @caisse_en_bois.amount
|
||
|
assert_equal cart.order_items.last.quantity, 5
|
||
|
end
|
||
|
|
||
|
test 'cannot add a product out of stock' do
|
||
|
assert_raise Cart::OutStockError do
|
||
|
Cart::AddItemService.new.call(@cart, @caisse_en_bois, 101)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
test 'cannot add a product inactive' do
|
||
|
assert_raise Cart::InactiveProductError do
|
||
|
product_inactive = Product.find_by(slug: 'sticker-hello')
|
||
|
Cart::AddItemService.new.call(@cart, product_inactive, 1)
|
||
|
end
|
||
|
end
|
||
|
end
|