diff --git a/app/models/invoice_item.rb b/app/models/invoice_item.rb index 2c30cacdc..6efd7b829 100644 --- a/app/models/invoice_item.rb +++ b/app/models/invoice_item.rb @@ -2,7 +2,18 @@ class InvoiceItem < ActiveRecord::Base include Versions belongs_to :invoice + delegate :vat_rate, to: :invoice + def item_sum_without_vat (price * quantity).round(2) end -end + alias_method :subtotal, :item_sum_without_vat + + def vat_amount + subtotal * (vat_rate / 100) + end + + def total + subtotal + vat_amount + end +end \ No newline at end of file diff --git a/test/models/invoice_item_test.rb b/test/models/invoice_item_test.rb index 15008718f..19d13ce42 100644 --- a/test/models/invoice_item_test.rb +++ b/test/models/invoice_item_test.rb @@ -1,8 +1,30 @@ require 'test_helper' class InvoiceItemTest < ActiveSupport::TestCase - def test_calculates_sum_without_vat + def test_calculates_subtotal invoice_item = InvoiceItem.new(price: 5, quantity: 2) assert_equal 10, invoice_item.item_sum_without_vat + assert_equal 10, invoice_item.subtotal end -end + + def test_returns_vat_rate + vat_rate = 20 + invoice = Invoice.new(vat_rate: vat_rate) + + invoice_item = InvoiceItem.new(invoice: invoice) + + assert_equal vat_rate, invoice_item.vat_rate + end + + def test_calculates_vat_amount + invoice = Invoice.new(vat_rate: 20) + invoice_item = InvoiceItem.new(price: 5, quantity: 2, invoice: invoice) + assert_equal 2, invoice_item.vat_amount + end + + def test_calculates_total + invoice = Invoice.new(vat_rate: 20) + invoice_item = InvoiceItem.new(price: 5, quantity: 2, invoice: invoice) + assert_equal 12, invoice_item.total + end +end \ No newline at end of file