Enhance InvoiceItem

#329
This commit is contained in:
Artur Beljajev 2019-05-20 17:33:24 +03:00
parent d85e57d800
commit c807bb9fcd
2 changed files with 36 additions and 3 deletions

View file

@ -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

View file

@ -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