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:
Artur Beljajev 2018-10-17 12:21:04 +03:00
parent d86ec026e3
commit a97728c0f3
65 changed files with 758 additions and 341 deletions

View file

@ -0,0 +1,20 @@
require 'test_helper'
class AdminAreaInvoicesTest < ApplicationSystemTestCase
setup do
sign_in users(:admin)
@invoice = invoices(:one)
end
def test_cancels_an_invoice
@invoice.account_activity = nil
assert @invoice.cancellable?
visit admin_invoice_url(@invoice)
click_on 'Cancel'
@invoice.reload
assert @invoice.cancelled?
assert_text 'Invoice has been cancelled'
end
end

View file

@ -1,12 +1,12 @@
require 'test_helper'
class ListInvoicesTest < ApplicationSystemTestCase
def setup
super
setup do
@user = users(:api_bestnames)
@registrar_invoices = @user.registrar.invoices
sign_in @user
@invoice = invoices(:one)
eliminate_effect_of_other_invoices
end
def test_show_balance
@ -14,15 +14,31 @@ class ListInvoicesTest < ApplicationSystemTestCase
assert_text "Your current account balance is 100,00 EUR"
end
def test_show_multiple_invoices
@invoices = invoices
@registrar_invoices = []
@invoices.each do |invoice|
@registrar_invoices << invoice
end
def test_show_invoices_of_current_registrar
registrar = registrars(:bestnames)
@user.update!(registrar: registrar)
@invoice.update!(seller: registrar)
visit registrar_invoices_path
assert_text "Unpaid", count: 5
assert_text "Invoice no.", count: 7
visit registrar_invoices_url
assert_css '.invoice'
end
end
def test_do_not_show_invoices_of_other_registrars
registrar = registrars(:goodnames)
@user.update!(registrar: registrar)
@invoice.update!(seller: registrar)
visit registrar_invoices_url
assert_no_css '.invoice'
end
private
def eliminate_effect_of_other_invoices
Invoice.connection.disable_referential_integrity do
Invoice.delete_all("id != #{@invoice.id}")
end
end
end

View file

@ -12,8 +12,8 @@ class PaymentCallbackTest < ApplicationSystemTestCase
@invoice = invoices(:for_payments_test)
invoice_item = invoice_items(:one)
@invoice.invoice_items << invoice_item
@invoice.invoice_items << invoice_item
@invoice.items << invoice_item
@invoice.items << invoice_item
@user.registrar.invoices << @invoice
end

View file

@ -12,8 +12,8 @@ class PaymentReturnTest < ApplicationSystemTestCase
@invoice = invoices(:for_payments_test)
invoice_item = invoice_items(:one)
@invoice.invoice_items << invoice_item
@invoice.invoice_items << invoice_item
@invoice.items << invoice_item
@invoice.items << invoice_item
@user.registrar.invoices << @invoice
end

View file

@ -0,0 +1,20 @@
require 'test_helper'
class RegistrarAreaInvoicesTest < ApplicationSystemTestCase
setup do
sign_in users(:api_bestnames)
@invoice = invoices(:one)
end
def test_cancels_an_invoice
@invoice.account_activity = nil
assert @invoice.cancellable?
visit registrar_invoice_url(@invoice)
click_on 'Cancel'
@invoice.reload
assert @invoice.cancelled?
assert_text 'Invoice has been cancelled'
end
end