From 30ea8802110ef3a680910a17f3d56ace6750c4ff Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Fri, 15 Mar 2019 19:31:51 +0200 Subject: [PATCH] Change `invoices.issue_date` database column to `NOT NULL` Closes #1008 --- app/models/invoice.rb | 1 - ..._change_invoices_issue_date_to_not_null.rb | 5 +++ db/structure.sql | 4 +- .../populate_invoice_issue_date.rake | 16 -------- test/models/invoice_test.rb | 5 --- .../populate_invoice_issue_date_test.rb | 37 ------------------- 6 files changed, 8 insertions(+), 60 deletions(-) create mode 100644 db/migrate/20190315172802_change_invoices_issue_date_to_not_null.rb delete mode 100644 lib/tasks/data_migrations/populate_invoice_issue_date.rake delete mode 100644 test/tasks/data_migrations/populate_invoice_issue_date_test.rb diff --git a/app/models/invoice.rb b/app/models/invoice.rb index 98fc67f02..7e4dfe392 100644 --- a/app/models/invoice.rb +++ b/app/models/invoice.rb @@ -26,7 +26,6 @@ class Invoice < ActiveRecord::Base scope :overdue, -> { unpaid.non_cancelled.where('due_date < ?', Time.zone.today) } - validates :issue_date, presence: true validates :due_date, :currency, :seller_name, :seller_iban, :buyer_name, :items, presence: true validates :vat_rate, numericality: { greater_than_or_equal_to: 0, less_than: 100 }, diff --git a/db/migrate/20190315172802_change_invoices_issue_date_to_not_null.rb b/db/migrate/20190315172802_change_invoices_issue_date_to_not_null.rb new file mode 100644 index 000000000..afd3dce8c --- /dev/null +++ b/db/migrate/20190315172802_change_invoices_issue_date_to_not_null.rb @@ -0,0 +1,5 @@ +class ChangeInvoicesIssueDateToNotNull < ActiveRecord::Migration + def change + change_column_null :invoices, :issue_date, false + end +end diff --git a/db/structure.sql b/db/structure.sql index 08ed08c47..4bc702d13 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -1082,7 +1082,7 @@ CREATE TABLE public.invoices ( total numeric(10,2) NOT NULL, in_directo boolean DEFAULT false, buyer_vat_no character varying, - issue_date date + issue_date date NOT NULL ); @@ -4934,6 +4934,8 @@ INSERT INTO schema_migrations (version) VALUES ('20190311111718'); INSERT INTO schema_migrations (version) VALUES ('20190312211614'); +INSERT INTO schema_migrations (version) VALUES ('20190315172802'); + INSERT INTO schema_migrations (version) VALUES ('20190319133036'); INSERT INTO schema_migrations (version) VALUES ('20190322152123'); diff --git a/lib/tasks/data_migrations/populate_invoice_issue_date.rake b/lib/tasks/data_migrations/populate_invoice_issue_date.rake deleted file mode 100644 index 90a6bd4cb..000000000 --- a/lib/tasks/data_migrations/populate_invoice_issue_date.rake +++ /dev/null @@ -1,16 +0,0 @@ -namespace :data_migrations do - task populate_invoice_issue_date: [:environment] do - processed_invoice_count = 0 - - Invoice.transaction do - Invoice.find_each do |invoice| - invoice_issue_date = invoice.created_at.to_date - invoice.update!(issue_date: invoice_issue_date) - - processed_invoice_count += 1 - end - end - - puts "Invoices processed: #{processed_invoice_count}" - end -end diff --git a/test/models/invoice_test.rb b/test/models/invoice_test.rb index 09643ba6d..56d533458 100644 --- a/test/models/invoice_test.rb +++ b/test/models/invoice_test.rb @@ -33,11 +33,6 @@ class InvoiceTest < ActiveSupport::TestCase 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 @invoice.vat_rate = nil assert @invoice.valid? diff --git a/test/tasks/data_migrations/populate_invoice_issue_date_test.rb b/test/tasks/data_migrations/populate_invoice_issue_date_test.rb deleted file mode 100644 index 549647963..000000000 --- a/test/tasks/data_migrations/populate_invoice_issue_date_test.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'test_helper' - -class PopulateInvoiceIssueDateTaskTest < ActiveSupport::TestCase - setup do - @invoice = invoices(:one) - end - - def test_populates_invoice_issue_date - eliminate_effect_of_other_invoices - @invoice.update_columns(issue_date: nil, created_at: Time.zone.parse('2010-07-05')) - assert_nil @invoice.read_attribute(:issue_date) - - capture_io { run_task } - @invoice.reload - - assert_equal Date.parse('2010-07-05'), @invoice.issue_date - end - - def test_outputs_results - eliminate_effect_of_other_invoices - @invoice.update_columns(issue_date: nil, created_at: Time.zone.parse('2010-07-05')) - - assert_output("Invoices processed: 1\n") { run_task } - end - - private - - def eliminate_effect_of_other_invoices - Invoice.connection.disable_referential_integrity do - Invoice.delete_all("id != #{@invoice.id}") - end - end - - def run_task - Rake::Task['data_migrations:populate_invoice_issue_date'].execute - end -end