From 39f1eac300327411b1acb9f6d100f8bc0244c86b Mon Sep 17 00:00:00 2001 From: David Cook Date: Tue, 21 May 2024 14:32:11 +1000 Subject: [PATCH] Move invoices specs to the invoices spec file The orders file is too big and causes a bottleneck for parallelising specs. Maybe they should be merged with the above specs, but I'm not familiar enough to know for sure. --- spec/system/admin/order_spec.rb | 161 -------------------- spec/system/admin/orders/invoices_spec.rb | 175 ++++++++++++++++++++++ 2 files changed, 175 insertions(+), 161 deletions(-) diff --git a/spec/system/admin/order_spec.rb b/spec/system/admin/order_spec.rb index b0b08badee..5a0ff97a0b 100644 --- a/spec/system/admin/order_spec.rb +++ b/spec/system/admin/order_spec.rb @@ -1140,165 +1140,4 @@ RSpec.describe ' end end end - - describe "Legal Invoices", feature: :invoices do - before do - login_as user - end - - describe "for order states" do - context "complete" do - let!(:order1) { - create(:order_with_totals_and_distribution, user:, distributor:, - order_cycle:, state: 'complete', - payment_state: 'balance_due', - customer_id: customer.id) - } - - context "editing the order" do - before do - visit spree.edit_admin_order_path(order1) - end - - it "displays the invoice tab" do - expect(page).to have_content "Complete".upcase - expect(page).to have_content "Invoices".upcase - end - end - - context "visiting the invoices tab" do - let!(:table_header) { - [ - "Date/Time", - "Invoice Number", - "Amount", - "Status", - "File", - ].join(" ").upcase - } - - let(:invoice_number){ "#{order.distributor_id}-1" } - let(:table_contents) { - [ - Invoice.first.created_at.strftime('%B %d, %Y').to_s, - invoice_number, - "0.0", - "Active", - "Download" - ].join(" ") - } - let(:download_href) { - "#{spree.print_admin_order_path(order1)}?invoice_id=#{Invoice.last.id}" - } - - before do - Spree::Config[:enterprise_number_required_on_invoices?] = false - visit spree.admin_order_invoices_path(order1) - end - - it "displays the invoices table" do - # with no invoices, only the table header is displayed - expect(page).to have_css "table.index" - expect(page).to have_content "#{customer.first_name} #{customer.last_name} -" - expect(page.find("table").text).to have_content(table_header) - - # the New invoice button + the warning should be visible - expect(page).to have_link "Create or Update Invoice" - expect(page).to have_content "The order has changed since the last invoice update." - click_link "Create or Update Invoice" - - # and disappear after clicking - expect(page).not_to have_link "Create or Update Invoice" - expect(page).not_to have_content "The order has changed since the last invoice update." - - # creating an invoice, displays a second row - expect(page.find("table").text).to have_content(table_contents) - - # with a valid invoice download link - expect(page).to have_link("Download", - href: download_href) - end - - context "the Create or Update Invoice button" do - context "when an ABN number is mandatory for invoices but not present" do - before do - Spree::Config[:enterprise_number_required_on_invoices?] = true - end - - it "displays a warning that an ABN is required when it's clicked" do - visit spree.admin_order_invoices_path(order1) - message = accept_prompt { click_link "Create or Update Invoice" } - distributor = order1.distributor - expect(message) - .to eq "#{distributor.name} must have a valid ABN before invoices can be used." - end - end - end - end - end - - context "resumed" do - let!(:order2) { - create(:order_with_totals_and_distribution, user:, distributor:, - order_cycle:, state: 'resumed', - payment_state: 'balance_due') - } - before do - visit spree.edit_admin_order_path(order2) - end - - it "displays the invoice tab" do - expect(page).to have_content "Resumed".upcase - expect(page).to have_content "Invoices".upcase - end - end - - context "canceled" do - let!(:order3) { - create(:order_with_totals_and_distribution, user:, distributor:, - order_cycle:, state: 'canceled', - payment_state: 'balance_due') - } - before do - visit spree.edit_admin_order_path(order3) - end - - it "displays the invoice tab" do - expect(page).to have_content "Cancelled".upcase - expect(page).to have_content "Invoices".upcase - end - end - - context "cart" do - let!(:order_empty) { - create(:order_with_line_items, user:, distributor:, order_cycle:, - line_items_count: 0) - } - before do - visit spree.edit_admin_order_path(order_empty) - end - - it "should not display the invoice tab" do - expect(page).to have_content "Cart".upcase - expect(page).not_to have_content "Invoices".upcase - end - end - - context "payment" do - let!(:order4) do - create(:order_ready_for_payment, user:, distributor:, - order_cycle:, - payment_state: 'balance_due') - end - before do - visit spree.edit_admin_order_path(order4) - end - - it "should not display the invoice tab" do - expect(page).to have_content "Payment".upcase - expect(page).not_to have_content "Invoices".upcase - end - end - end - end end diff --git a/spec/system/admin/orders/invoices_spec.rb b/spec/system/admin/orders/invoices_spec.rb index b5ade9edc9..b101a28a7a 100644 --- a/spec/system/admin/orders/invoices_spec.rb +++ b/spec/system/admin/orders/invoices_spec.rb @@ -211,3 +211,178 @@ RSpec.describe ' end end end + +RSpec.describe "Invoice order states", feature: :invoices do + let(:user) { create(:user) } + let(:product) { create(:simple_product) } + let(:distributor) { create(:distributor_enterprise, owner: user, charges_sales_tax: true) } + let(:order_cycle) do + create(:simple_order_cycle, name: 'One', distributors: [distributor], + variants: [product.variants.first]) + end + let(:order) do + create(:order_with_totals_and_distribution, user:, distributor:, + order_cycle:, state: 'complete', + payment_state: 'balance_due') + end + let(:customer) { order.customer } + + before do + order.finalize! + + login_as user + end + + context "complete" do + let!(:order1) { + create(:order_with_totals_and_distribution, user:, distributor:, + order_cycle:, state: 'complete', + payment_state: 'balance_due', + customer_id: customer.id) + } + + context "editing the order" do + before do + visit spree.edit_admin_order_path(order1) + end + + it "displays the invoice tab" do + expect(page).to have_content "Complete".upcase + expect(page).to have_content "Invoices".upcase + end + end + + context "visiting the invoices tab" do + let!(:table_header) { + [ + "Date/Time", + "Invoice Number", + "Amount", + "Status", + "File", + ].join(" ").upcase + } + + let(:invoice_number){ "#{order.distributor_id}-1" } + let(:table_contents) { + [ + Invoice.first.created_at.strftime('%B %d, %Y').to_s, + invoice_number, + "0.0", + "Active", + "Download" + ].join(" ") + } + let(:download_href) { + "#{spree.print_admin_order_path(order1)}?invoice_id=#{Invoice.last.id}" + } + + before do + Spree::Config[:enterprise_number_required_on_invoices?] = false + visit spree.admin_order_invoices_path(order1) + end + + it "displays the invoices table" do + # with no invoices, only the table header is displayed + expect(page).to have_css "table.index" + expect(page).to have_content "#{customer.first_name} #{customer.last_name} -" + expect(page.find("table").text).to have_content(table_header) + + # the New invoice button + the warning should be visible + expect(page).to have_link "Create or Update Invoice" + expect(page).to have_content "The order has changed since the last invoice update." + click_link "Create or Update Invoice" + + # and disappear after clicking + expect(page).not_to have_link "Create or Update Invoice" + expect(page).not_to have_content "The order has changed since the last invoice update." + + # creating an invoice, displays a second row + expect(page.find("table").text).to have_content(table_contents) + + # with a valid invoice download link + expect(page).to have_link("Download", + href: download_href) + end + + context "the Create or Update Invoice button" do + context "when an ABN number is mandatory for invoices but not present" do + before do + Spree::Config[:enterprise_number_required_on_invoices?] = true + end + + it "displays a warning that an ABN is required when it's clicked" do + visit spree.admin_order_invoices_path(order1) + message = accept_prompt { click_link "Create or Update Invoice" } + distributor = order1.distributor + expect(message) + .to eq "#{distributor.name} must have a valid ABN before invoices can be used." + end + end + end + end + end + + context "resumed" do + let!(:order2) { + create(:order_with_totals_and_distribution, user:, distributor:, + order_cycle:, state: 'resumed', + payment_state: 'balance_due') + } + before do + visit spree.edit_admin_order_path(order2) + end + + it "displays the invoice tab" do + expect(page).to have_content "Resumed".upcase + expect(page).to have_content "Invoices".upcase + end + end + + context "canceled" do + let!(:order3) { + create(:order_with_totals_and_distribution, user:, distributor:, + order_cycle:, state: 'canceled', + payment_state: 'balance_due') + } + before do + visit spree.edit_admin_order_path(order3) + end + + it "displays the invoice tab" do + expect(page).to have_content "Cancelled".upcase + expect(page).to have_content "Invoices".upcase + end + end + + context "cart" do + let!(:order_empty) { + create(:order_with_line_items, user:, distributor:, order_cycle:, + line_items_count: 0) + } + before do + visit spree.edit_admin_order_path(order_empty) + end + + it "should not display the invoice tab" do + expect(page).to have_content "Cart".upcase + expect(page).not_to have_content "Invoices".upcase + end + end + + context "payment" do + let!(:order4) do + create(:order_ready_for_payment, user:, distributor:, + order_cycle:, + payment_state: 'balance_due') + end + before do + visit spree.edit_admin_order_path(order4) + end + + it "should not display the invoice tab" do + expect(page).to have_content "Payment".upcase + expect(page).not_to have_content "Invoices".upcase + end + end +end