From f4108e97c71f4ef0fc3e54c4879ce42275782830 Mon Sep 17 00:00:00 2001 From: filipefurtad0 Date: Tue, 9 Apr 2024 17:10:43 +0100 Subject: [PATCH 1/2] Improves regression spec after reviewer feedback Removes shared_examples, defines a separate method Removes pending to bring spec to green --- spec/system/admin/orders_spec.rb | 121 ++++++++++++++++--------------- 1 file changed, 63 insertions(+), 58 deletions(-) diff --git a/spec/system/admin/orders_spec.rb b/spec/system/admin/orders_spec.rb index 01aa5d5802..d8befcb8d4 100644 --- a/spec/system/admin/orders_spec.rb +++ b/spec/system/admin/orders_spec.rb @@ -584,6 +584,23 @@ describe ' reader.pages.map(&:text) end + def print_all_invoices + page.find("span.icon-reorder", text: "ACTIONS").click + within ".ofn-drop-down .menu" do + expect { + page.find("span", text: "Print Invoices").click # Prints invoices in bulk + }.to enqueue_job(BulkInvoiceJob).exactly(:once) + end + + expect(page).to have_content "Compiling Invoices" + expect(page).to have_content "Please wait until the PDF is ready " \ + "before closing this modal." + + perform_enqueued_jobs(only: BulkInvoiceJob) + + expect(page).to have_content "Bulk Invoice created" + end + let(:order4_selector){ "#order_#{order4.id} input[name='bulk_ids[]']" } let(:order5_selector){ "#order_#{order5.id} input[name='bulk_ids[]']" } @@ -662,36 +679,6 @@ describe ' end end - shared_examples "prints invoices accordering to column ordering" do - it "bulk prints invoices in pdf format" do - page.find("span.icon-reorder", text: "ACTIONS").click - within ".ofn-drop-down .menu" do - expect { - page.find("span", text: "Print Invoices").click # Prints invoices in bulk - }.to enqueue_job(BulkInvoiceJob).exactly(:once) - end - - expect(page).to have_content "Compiling Invoices" - expect(page).to have_content "Please wait until the PDF is ready " \ - "before closing this modal." - - perform_enqueued_jobs(only: BulkInvoiceJob) - - expect(page).to have_content "Bulk Invoice created" - - within ".modal-content" do - expect(page).to have_link(class: "button", text: "VIEW FILE", - href: /invoices/) - - invoice_content = extract_pdf_content - - expect( - invoice_content.join - ).to match(/#{surnames[0]}.*#{surnames[1]}.*#{surnames[2]}.*#{surnames[3]}/m) - end - end - end - context "ABN is not required" do before do allow(Spree::Config).to receive(:enterprise_number_required_on_invoices?) @@ -703,34 +690,7 @@ describe ' context "with legal invoices feature", feature: :invoices do it_behaves_like "can bulk print invoices from 2 orders" end - context "ordering by customer name" do - context "ascending" do - let!(:surnames) { - [order2.name.gsub(/.* /, ""), order3.name.gsub(/.* /, ""), - order4.name.gsub(/.* /, ""), order5.name.gsub(/.* /, "")].sort - } - before do - page.find('a', text: "NAME").click # orders alphabetically (asc) - sleep(0.5) # waits for column sorting - page.find('#selectAll').click - end - it_behaves_like "prints invoices accordering to column ordering" - end - context "descending" do - let!(:surnames) { - [order2.name.gsub(/.* /, ""), order3.name.gsub(/.* /, ""), - order4.name.gsub(/.* /, ""), order5.name.gsub(/.* /, "")].sort.reverse - } - before do - page.find('a', text: "NAME").click # orders alphabetically (asc) - sleep(0.5) # waits for column sorting - page.find('a', text: "NAME").click # orders alphabetically (desc) - sleep(0.5) # waits for column sorting - page.find('#selectAll').click - end - it_behaves_like "prints invoices accordering to column ordering" - end - end + context "one of the two orders is not invoiceable" do before do order4.cancel! @@ -741,6 +701,51 @@ describe ' it_behaves_like "should ignore the non invoiceable order" end end + + context "ordering by customer name" do + context "ascending" do + let!(:surnames) { + [order2.name.gsub(/.* /, ""), order3.name.gsub(/.* /, ""), + order4.name.gsub(/.* /, ""), order5.name.gsub(/.* /, "")].sort + } + it "orders by customer name ascending" do + page.find('a', text: "NAME").click # orders alphabetically (asc) + sleep(0.5) # waits for column sorting + + page.find("#selectAll").click + + print_all_invoices + + invoice_content = extract_pdf_content + + expect( + invoice_content.join + ).to match(/#{surnames[0]}.*#{surnames[1]}.*#{surnames[2]}.*#{surnames[3]}/m) + end + end + context "descending" do + let!(:surnames) { + [order2.name.gsub(/.* /, ""), order3.name.gsub(/.* /, ""), + order4.name.gsub(/.* /, ""), order5.name.gsub(/.* /, "")].sort.reverse + } + it "order by customer name descending" do + page.find('a', text: "NAME").click # orders alphabetically (asc) + sleep(0.5) # waits for column sorting + page.find('a', text: "NAME").click # orders alphabetically (desc) + sleep(0.5) # waits for column sorting + + page.find("#selectAll").click + + print_all_invoices + + invoice_content = extract_pdf_content + + expect( + invoice_content.join + ).to match(/#{surnames[0]}.*#{surnames[1]}.*#{surnames[2]}.*#{surnames[3]}/m) + end + end + end end context "ABN is required" do before do From fd54a12bcb484a9e0882d37cbadf8c40338f3153 Mon Sep 17 00:00:00 2001 From: filipefurtad0 Date: Thu, 11 Apr 2024 12:36:47 +0100 Subject: [PATCH 2/2] Moves methods to end of the file --- spec/system/admin/orders_spec.rb | 53 ++++++++++++++++---------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/spec/system/admin/orders_spec.rb b/spec/system/admin/orders_spec.rb index d8befcb8d4..d7b4ca715f 100644 --- a/spec/system/admin/orders_spec.rb +++ b/spec/system/admin/orders_spec.rb @@ -574,33 +574,6 @@ describe ' end context "can bulk print invoices" do - def extract_pdf_content - # Extract last part of invoice URL - link = page.find(class: "button", text: "VIEW FILE") - filename = link[:href].match %r{/invoices/.*} - - # Load invoice temp file directly instead of downloading - reader = PDF::Reader.new("tmp/#{filename}.pdf") - reader.pages.map(&:text) - end - - def print_all_invoices - page.find("span.icon-reorder", text: "ACTIONS").click - within ".ofn-drop-down .menu" do - expect { - page.find("span", text: "Print Invoices").click # Prints invoices in bulk - }.to enqueue_job(BulkInvoiceJob).exactly(:once) - end - - expect(page).to have_content "Compiling Invoices" - expect(page).to have_content "Please wait until the PDF is ready " \ - "before closing this modal." - - perform_enqueued_jobs(only: BulkInvoiceJob) - - expect(page).to have_content "Bulk Invoice created" - end - let(:order4_selector){ "#order_#{order4.id} input[name='bulk_ids[]']" } let(:order5_selector){ "#order_#{order5.id} input[name='bulk_ids[]']" } @@ -1158,4 +1131,30 @@ describe ' expect(find("input.datepicker").value).to be_empty end end + def extract_pdf_content + # Extract last part of invoice URL + link = page.find(class: "button", text: "VIEW FILE") + filename = link[:href].match %r{/invoices/.*} + + # Load invoice temp file directly instead of downloading + reader = PDF::Reader.new("tmp/#{filename}.pdf") + reader.pages.map(&:text) + end + + def print_all_invoices + page.find("span.icon-reorder", text: "ACTIONS").click + within ".ofn-drop-down .menu" do + expect { + page.find("span", text: "Print Invoices").click # Prints invoices in bulk + }.to enqueue_job(BulkInvoiceJob).exactly(:once) + end + + expect(page).to have_content "Compiling Invoices" + expect(page).to have_content "Please wait until the PDF is ready " \ + "before closing this modal." + + perform_enqueued_jobs(only: BulkInvoiceJob) + + expect(page).to have_content "Bulk Invoice created" + end end