56 lines
1.1 KiB
Ruby
56 lines
1.1 KiB
Ruby
require "minitest/autorun"
|
|
|
|
require "./checkout.rb"
|
|
|
|
class TestCheckout < Minitest::Test
|
|
def setup
|
|
@checkout = Checkout.new
|
|
end
|
|
|
|
def test_that_unknown_items_cannot_be_added
|
|
assert_raises Checkout::InvalidItem do
|
|
@checkout.add(:foo)
|
|
end
|
|
end
|
|
|
|
def test_that_allowed_items_are_added
|
|
@checkout.add(:PI5)
|
|
@checkout.add(:ZERO2W)
|
|
@checkout.add(:PICO2)
|
|
|
|
assert_equal [:PI5, :ZERO2W, :PICO2].sort, @checkout.items.sort
|
|
end
|
|
|
|
def test_that_total_is_the_sum_of_all_items # Not accounting for discounts at the moment
|
|
@checkout.add(:PI5) # 60.00
|
|
@checkout.add(:ZERO2W) # 15.00
|
|
@checkout.add(:PICO2) # 4.00
|
|
# -----
|
|
# 79.00 total
|
|
|
|
assert_equal 79.00, @checkout.total
|
|
end
|
|
|
|
def test_that_an_empty_checkout_total_is_zero
|
|
assert_equal 0.00, @checkout.total
|
|
end
|
|
|
|
# Discounts
|
|
|
|
def test_that_bogof_applied
|
|
4.times do
|
|
@checkout.add(:ZERO2W)
|
|
end
|
|
|
|
assert_equal 30.00, @checkout.total
|
|
end
|
|
|
|
def test_that_bogof_applied_with_odd_number
|
|
5.times do
|
|
@checkout.add(:ZERO2W)
|
|
end
|
|
|
|
assert_equal 45.00, @checkout.total
|
|
end
|
|
end
|