# frozen_string_literal: true

require 'test_helper'

class Cart::SetQuantityServiceTest < ActiveSupport::TestCase
  setup do
    @panneaux = Product.find_by(slug: 'panneaux-de-mdf')
    @caisse_en_bois = Product.find_by(slug: 'caisse-en-bois')
    @cart1 = Order.find_by(token: 'KbSmmD_gi9w_CrpwtK9OwA1666687433963')
    @cart2 = Order.find_by(token: 'MkI5z9qVxe_YdNYCR_WN6g1666628074732')
    @cart3 = Order.find_by(token: '4bB96D-MlqJGBr5T8eui-g1666690417460')
  end

  test 'change quantity of product in cart' do
    cart = Cart::SetQuantityService.new.call(@cart1, @panneaux, 10)
    assert_equal cart.total, @panneaux.amount * 10
    assert_equal cart.order_items.length, 1
  end

  test 'change quantity of product greater than stock' do
    assert_raise Cart::OutStockError do
      Cart::SetQuantityService.new.call(@cart1, @panneaux, 1000)
    end
  end

  test 'cannot change quantity less than product quantity min' do
    cart = Cart::SetQuantityService.new.call(@cart3, @caisse_en_bois, 1)
    assert_equal cart.total, @caisse_en_bois.amount * @caisse_en_bois.quantity_min
    assert_equal cart.order_items.first.quantity, @caisse_en_bois.quantity_min
  end

  test 'cannot change quantity if product that isnt in cart' do
    assert_raise ActiveRecord::RecordNotFound do
      Cart::SetQuantityService.new.call(@cart2, @panneaux, 10)
    end
  end
end