mirror of
https://github.com/internetee/registry.git
synced 2025-06-11 23:24:48 +02:00
Merge pull request #1388 from internetee/add-db-constraints
Add database constraints
This commit is contained in:
commit
3d73f41a55
5 changed files with 58 additions and 18 deletions
|
@ -0,0 +1,14 @@
|
|||
class AddInvoiceItemsQuantityConstraint < ActiveRecord::Migration
|
||||
def up
|
||||
execute <<~SQL
|
||||
ALTER TABLE invoice_items ADD CONSTRAINT invoice_items_quantity_is_positive
|
||||
CHECK (quantity > 0);
|
||||
SQL
|
||||
end
|
||||
|
||||
def down
|
||||
execute <<~SQL
|
||||
ALTER TABLE invoice_items DROP CONSTRAINT invoice_items_quantity_is_positive;
|
||||
SQL
|
||||
end
|
||||
end
|
|
@ -0,0 +1,14 @@
|
|||
class AddInvoicesDueDateConstraint < ActiveRecord::Migration
|
||||
def up
|
||||
execute <<~SQL
|
||||
ALTER TABLE invoices ADD CONSTRAINT invoices_due_date_is_not_before_issue_date
|
||||
CHECK (due_date >= issue_date);
|
||||
SQL
|
||||
end
|
||||
|
||||
def down
|
||||
execute <<~SQL
|
||||
ALTER TABLE invoices DROP CONSTRAINT invoices_due_date_is_not_before_issue_date;
|
||||
SQL
|
||||
end
|
||||
end
|
|
@ -899,7 +899,8 @@ CREATE TABLE public.invoice_items (
|
|||
created_at timestamp without time zone,
|
||||
updated_at timestamp without time zone,
|
||||
creator_str character varying,
|
||||
updator_str character varying
|
||||
updator_str character varying,
|
||||
CONSTRAINT invoice_items_quantity_is_positive CHECK ((quantity > 0))
|
||||
);
|
||||
|
||||
|
||||
|
@ -968,7 +969,8 @@ CREATE TABLE public.invoices (
|
|||
total numeric(10,2) NOT NULL,
|
||||
in_directo boolean DEFAULT false,
|
||||
buyer_vat_no character varying,
|
||||
issue_date date NOT NULL
|
||||
issue_date date NOT NULL,
|
||||
CONSTRAINT invoices_due_date_is_not_before_issue_date CHECK ((due_date >= issue_date))
|
||||
);
|
||||
|
||||
|
||||
|
@ -4878,3 +4880,7 @@ INSERT INTO schema_migrations (version) VALUES ('20191007123000');
|
|||
|
||||
INSERT INTO schema_migrations (version) VALUES ('20191008024334');
|
||||
|
||||
INSERT INTO schema_migrations (version) VALUES ('20191024153351');
|
||||
|
||||
INSERT INTO schema_migrations (version) VALUES ('20191024160038');
|
||||
|
||||
|
|
|
@ -11,7 +11,8 @@ class InvoiceTest < ActiveSupport::TestCase
|
|||
|
||||
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')
|
||||
@invoice.update!(account_activity: nil, cancelled_at: nil, issue_date: '2010-07-04',
|
||||
due_date: '2010-07-04')
|
||||
|
||||
assert Invoice.overdue.include?(@invoice), 'Should return overdue invoice'
|
||||
end
|
||||
|
@ -108,4 +109,4 @@ class InvoiceTest < ActiveSupport::TestCase
|
|||
seller_zip: nil)
|
||||
assert_equal 'street, city, state', invoice.seller_address
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,7 +2,6 @@ require 'test_helper'
|
|||
|
||||
class OverdueInvoiceCancellerTest < ActiveSupport::TestCase
|
||||
setup do
|
||||
@invoice = invoices(:one)
|
||||
@original_days_to_keep_overdue_invoices_active = Setting.days_to_keep_overdue_invoices_active
|
||||
end
|
||||
|
||||
|
@ -28,26 +27,24 @@ class OverdueInvoiceCancellerTest < ActiveSupport::TestCase
|
|||
|
||||
def test_cancels_overdue_invoices
|
||||
travel_to Time.zone.parse('2010-07-05')
|
||||
@invoice.update!(account_activity: nil, cancelled_at: nil, due_date: '2010-07-03')
|
||||
assert @invoice.cancellable?
|
||||
invoice = cancellable_invoice(due_date: '2010-07-03')
|
||||
|
||||
canceller = OverdueInvoiceCanceller.new(delay: 1.day)
|
||||
canceller.cancel
|
||||
@invoice.reload
|
||||
invoice.reload
|
||||
|
||||
assert @invoice.cancelled?
|
||||
assert invoice.cancelled?
|
||||
end
|
||||
|
||||
def test_yields_cancelled_invoices
|
||||
travel_to Time.zone.parse('2010-07-05')
|
||||
@invoice.update!(account_activity: nil, cancelled_at: nil, due_date: '2010-07-03')
|
||||
assert @invoice.cancellable?
|
||||
invoice = cancellable_invoice(due_date: '2010-07-03')
|
||||
|
||||
canceller = OverdueInvoiceCanceller.new(delay: 1.day)
|
||||
|
||||
iteration_count = 0
|
||||
canceller.cancel do |invoice|
|
||||
assert_equal @invoice, invoice
|
||||
canceller.cancel do |cancelled_invoice|
|
||||
assert_equal invoice, cancelled_invoice
|
||||
iteration_count += 1
|
||||
end
|
||||
assert_equal 1, iteration_count
|
||||
|
@ -55,13 +52,21 @@ class OverdueInvoiceCancellerTest < ActiveSupport::TestCase
|
|||
|
||||
def test_keeps_not_overdue_invoices_intact
|
||||
travel_to Time.zone.parse('2010-07-05')
|
||||
@invoice.update!(account_activity: nil, cancelled_at: nil, due_date: '2010-07-04')
|
||||
assert @invoice.cancellable?
|
||||
invoice = cancellable_invoice(due_date: '2010-07-04')
|
||||
|
||||
canceller = OverdueInvoiceCanceller.new(delay: 1.day)
|
||||
canceller.cancel
|
||||
@invoice.reload
|
||||
invoice.reload
|
||||
|
||||
assert @invoice.not_cancelled?
|
||||
assert invoice.not_cancelled?
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def cancellable_invoice(due_date:)
|
||||
invoice = invoices(:one)
|
||||
invoice.update!(account_activity: nil, cancelled_at: nil, issue_date: due_date,
|
||||
due_date: due_date)
|
||||
invoice
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue