require "minitest/autorun" require 'buy_x_get_one_free_discount.rb' class BuyXGetOneFreeDiscountTest < Minitest::Test def test_appropriate_discount_is_applied unit_price = 4.00 (2..4).each do |trigger_quantity| discount = BuyXGetOneFreeDiscount.new(unit_price: unit_price, trigger_quantity: trigger_quantity) # Single discount at and above trigger quantity assert_equal unit_price, discount.discount_for_quantity(trigger_quantity) assert_equal unit_price, discount.discount_for_quantity(trigger_quantity + 1) assert_equal unit_price, discount.discount_for_quantity(trigger_quantity + trigger_quantity - 1) # No discount if less than trigger quantity assert_equal 0.00, discount.discount_for_quantity(trigger_quantity - 1) # Double discount if double trigger quantity assert_equal unit_price * 2, discount.discount_for_quantity(trigger_quantity * 2) assert_equal unit_price * 2, discount.discount_for_quantity((trigger_quantity * 2) + 1) end end end