mirror of
https://github.com/internetee/registry.git
synced 2025-06-09 22:24:47 +02:00
Refactor and improve invoices
- `runner 'Invoice.cancel_overdue_invoices'` in `schedule.rb` is changed to `rake 'invoices:cancel_overdue'`. - `invoices.payment_term` database column is removed and its value is hardcoded in UI. - `invoices.paid_at` is removed as unused - `invoices.due_date` column's type is now `date`. - `Invoice#invoice_items` renamed to `Invoice#items` and `Invoice` interface to get a list of items is unified. - Default date format in UI. - Default translations are used. - Tests improved. - Specs converted to tests and removed along with factories. - Database structure improved.
This commit is contained in:
parent
d86ec026e3
commit
a97728c0f3
65 changed files with 758 additions and 341 deletions
|
@ -2,11 +2,40 @@ require 'test_helper'
|
|||
|
||||
class InvoiceTest < ActiveSupport::TestCase
|
||||
setup do
|
||||
@invoice = invoices(:valid)
|
||||
@invoice = invoices(:one)
|
||||
end
|
||||
|
||||
def test_valid
|
||||
assert @invoice.valid?
|
||||
def test_fixture_is_valid
|
||||
assert @invoice.valid?, proc { @invoice.errors.full_messages }
|
||||
end
|
||||
|
||||
def test_overdue_scope_returns_unpaid_uncancelled_invoices_with_past_due_date
|
||||
travel_to Time.zone.parse('2010-07-05')
|
||||
@invoice.update!(account_activity: nil, cancelled_at: nil, due_date: '2010-07-04')
|
||||
|
||||
assert Invoice.overdue.include?(@invoice), 'Should return overdue invoice'
|
||||
end
|
||||
|
||||
def test_overdue_scope_does_not_return_paid_invoices
|
||||
assert @invoice.paid?
|
||||
assert_not Invoice.overdue.include?(@invoice), 'Should not return paid invoice'
|
||||
end
|
||||
|
||||
def test_overdue_scope_does_not_return_cancelled_invoices
|
||||
@invoice.update!(cancelled_at: '2010-07-05')
|
||||
assert_not Invoice.overdue.include?(@invoice), 'Should not return cancelled invoice'
|
||||
end
|
||||
|
||||
def test_overdue_scope_does_not_return_invoices_with_due_due_of_today_or_in_the_future
|
||||
travel_to Time.zone.parse('2010-07-05')
|
||||
@invoice.update!(due_date: '2010-07-05')
|
||||
|
||||
assert_not Invoice.overdue.include?(@invoice), 'Should not return non-overdue invoice'
|
||||
end
|
||||
|
||||
def test_invalid_without_issue_date
|
||||
@invoice.issue_date = nil
|
||||
assert @invoice.invalid?
|
||||
end
|
||||
|
||||
def test_optional_vat_rate
|
||||
|
@ -30,7 +59,7 @@ class InvoiceTest < ActiveSupport::TestCase
|
|||
|
||||
def test_serializes_and_deserializes_vat_rate
|
||||
invoice = @invoice.dup
|
||||
invoice.invoice_items = @invoice.invoice_items
|
||||
invoice.items = @invoice.items
|
||||
invoice.vat_rate = BigDecimal('25.5')
|
||||
invoice.save!
|
||||
invoice.reload
|
||||
|
@ -42,7 +71,7 @@ class InvoiceTest < ActiveSupport::TestCase
|
|||
invoice = @invoice.dup
|
||||
invoice.vat_rate = nil
|
||||
invoice.buyer = registrar
|
||||
invoice.invoice_items = @invoice.invoice_items
|
||||
invoice.items = @invoice.items
|
||||
|
||||
registrar.stub(:effective_vat_rate, BigDecimal(55)) do
|
||||
invoice.save!
|
||||
|
@ -59,7 +88,9 @@ class InvoiceTest < ActiveSupport::TestCase
|
|||
end
|
||||
|
||||
def test_calculates_vat_amount
|
||||
assert_equal BigDecimal('1.5'), @invoice.vat_amount
|
||||
invoice_item = InvoiceItem.new(price: 25, quantity: 2)
|
||||
invoice = Invoice.new(vat_rate: 10, items: [invoice_item, invoice_item.dup])
|
||||
assert_equal 10, invoice.vat_amount
|
||||
end
|
||||
|
||||
def test_vat_amount_is_zero_when_vat_rate_is_blank
|
||||
|
@ -69,7 +100,7 @@ class InvoiceTest < ActiveSupport::TestCase
|
|||
|
||||
def test_calculates_subtotal
|
||||
line_item = InvoiceItem.new
|
||||
invoice = Invoice.new(invoice_items: [line_item, line_item])
|
||||
invoice = Invoice.new(items: [line_item, line_item])
|
||||
|
||||
line_item.stub(:item_sum_without_vat, BigDecimal('2.5')) do
|
||||
assert_equal BigDecimal(5), invoice.subtotal
|
||||
|
@ -84,7 +115,7 @@ class InvoiceTest < ActiveSupport::TestCase
|
|||
line_item = InvoiceItem.new
|
||||
invoice = Invoice.new
|
||||
invoice.vat_rate = 10
|
||||
invoice.invoice_items = [line_item, line_item]
|
||||
invoice.items = [line_item, line_item]
|
||||
|
||||
line_item.stub(:item_sum_without_vat, BigDecimal('2.5')) do
|
||||
assert_equal BigDecimal('5.50'), invoice.total
|
||||
|
@ -102,8 +133,25 @@ class InvoiceTest < ActiveSupport::TestCase
|
|||
invoice = @invoice.dup
|
||||
invoice.buyer_vat_no = nil
|
||||
invoice.buyer = registrar
|
||||
invoice.invoice_items = @invoice.invoice_items
|
||||
invoice.items = @invoice.items
|
||||
invoice.save!
|
||||
assert_equal 'US1234', invoice.buyer_vat_no
|
||||
end
|
||||
end
|
||||
|
||||
def test_invalid_without_invoice_items
|
||||
@invoice.items.clear
|
||||
assert @invoice.invalid?
|
||||
end
|
||||
|
||||
def test_iterates_over_invoice_items
|
||||
invoice = Invoice.new(items: [InvoiceItem.new(description: 'test')])
|
||||
|
||||
iteration_count = 0
|
||||
invoice.each do |invoice_item|
|
||||
assert_equal 'test', invoice_item.description
|
||||
iteration_count += 1
|
||||
end
|
||||
|
||||
assert_equal 1, iteration_count
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue