diff --git a/app/assets/javascripts/admin/index_utils/services/sort_options.js.coffee b/app/assets/javascripts/admin/index_utils/services/sort_options.js.coffee index b020bda768..cff29e04cf 100644 --- a/app/assets/javascripts/admin/index_utils/services/sort_options.js.coffee +++ b/app/assets/javascripts/admin/index_utils/services/sort_options.js.coffee @@ -11,5 +11,6 @@ angular.module("admin.indexUtils").factory 'SortOptions', -> sortingExpr toggle: (predicate) -> - @reverse = (@predicate == predicate) && !@reverse + # predicate is a string or an array of strings + @reverse = (JSON.stringify(@predicate) == JSON.stringify(predicate)) && !@reverse @predicate = predicate diff --git a/app/models/concerns/address_display.rb b/app/models/concerns/address_display.rb index 602fbae7c6..558e4542fe 100644 --- a/app/models/concerns/address_display.rb +++ b/app/models/concerns/address_display.rb @@ -4,4 +4,8 @@ module AddressDisplay def full_name_reverse [lastname, firstname].reject(&:blank?).join(" ") end + + def full_name_for_sorting + [last_name, first_name].reject(&:blank?).join(", ") + end end diff --git a/app/serializers/api/admin/order_serializer.rb b/app/serializers/api/admin/order_serializer.rb index 49df02bf89..db3a72f0b5 100644 --- a/app/serializers/api/admin/order_serializer.rb +++ b/app/serializers/api/admin/order_serializer.rb @@ -3,8 +3,10 @@ module Api module Admin class OrderSerializer < ActiveModel::Serializer - attributes :id, :number, :user_id, :full_name, :email, :phone, :completed_at, - :completed_at_utc_iso8601, :display_total, + include AddressDisplay + + attributes :id, :number, :user_id, :full_name, :full_name_for_sorting, :email, :phone, + :completed_at, :completed_at_utc_iso8601, :display_total, :edit_path, :state, :payment_state, :shipment_state, :payments_path, :ready_to_ship, :ready_to_capture, :created_at, :distributor_name, :special_instructions, :display_outstanding_balance, @@ -17,6 +19,14 @@ module Api object.billing_address.nil? ? "" : ( object.billing_address.full_name || "" ) end + def first_name + object.billing_address&.first_name || "" + end + + def last_name + object.billing_address&.last_name || "" + end + def distributor_name object.distributor&.name end diff --git a/app/views/spree/admin/orders/bulk_management.html.haml b/app/views/spree/admin/orders/bulk_management.html.haml index 3ca93cfc81..26ac228897 100644 --- a/app/views/spree/admin/orders/bulk_management.html.haml +++ b/app/views/spree/admin/orders/bulk_management.html.haml @@ -133,7 +133,7 @@ %a{ :href => '', 'ng-click' => "sorting.toggle('order.number')" } = t("admin.orders.bulk_management.order_no") %th.full_name{ 'ng-show' => 'columns.full_name.visible' } - %a{ :href => '', 'ng-click' => "sorting.toggle('order.full_name')" } + %a{ :href => '', 'ng-click' => "sorting.toggle('order.full_name_for_sorting')" } = t("admin.name") %th.email{ 'ng-show' => 'columns.email.visible' } %a{ :href => '', 'ng-click' => "sorting.toggle('order.email')" } @@ -170,7 +170,7 @@ %td.bulk %input{ :type => "checkbox", :name => 'bulk', 'ng-model' => 'line_item.checked', 'ignore-dirty' => true } %td.order_no{ 'ng-show' => 'columns.order_no.visible' } {{ line_item.order.number }} - %td.full_name{ 'ng-show' => 'columns.full_name.visible' } {{ line_item.order.full_name }} + %td.full_name{ 'ng-show' => 'columns.full_name.visible' } {{ line_item.order.full_name_for_sorting }} %td.email{ 'ng-show' => 'columns.email.visible' } {{ line_item.order.email }} %td.phone{ 'ng-show' => 'columns.phone.visible' } {{ line_item.order.phone }} %td.date{ 'ng-show' => 'columns.order_date.visible' } {{ line_item.order.completed_at }} diff --git a/spec/system/admin/bulk_order_management_spec.rb b/spec/system/admin/bulk_order_management_spec.rb index b7a5ef3a6e..5e3b26ceac 100644 --- a/spec/system/admin/bulk_order_management_spec.rb +++ b/spec/system/admin/bulk_order_management_spec.rb @@ -228,7 +228,7 @@ describe ' it "displays a column for user's full name" do expect(page).to have_selector "th.full_name", text: "NAME" - expect(page).to have_selector "td.full_name", text: o1.bill_address.full_name + expect(page).to have_selector "td.full_name", text: "#{o1.bill_address.last_name}, #{o1.bill_address.first_name}" expect(page).to have_selector "td.full_name", text: "" end @@ -266,46 +266,69 @@ describe ' end describe "sorting of line items" do - let!(:o1) { - create(:order_with_distributor, state: 'complete', shipment_state: 'ready', - completed_at: Time.zone.now) - } - let!(:o2) { - create(:order_with_distributor, state: 'complete', shipment_state: 'ready', - completed_at: Time.zone.now) - } + let!(:o1) do + create( + :order_with_distributor, + bill_address: create(:address, first_name: 'Bob', last_name: 'Taylor'), + state: 'complete', + shipment_state: 'ready', + completed_at: Time.zone.now + ) + end + + let!(:o2) do + create( + :order_with_distributor, + bill_address: create(:address, first_name: 'Mary', last_name: 'Smith'), + state: 'complete', + shipment_state: 'ready', + completed_at: Time.zone.now + ) + end + + let!(:o3) do + create( + :order_with_distributor, + bill_address: create(:address, first_name: 'Bill', last_name: 'Taylor'), + state: 'complete', + shipment_state: 'ready', + completed_at: Time.zone.now + ) + end + let!(:li1) { create(:line_item_with_shipment, order: o1) } let!(:li2) { create(:line_item_with_shipment, order: o2) } + let!(:li3) { create(:line_item_with_shipment, order: o3) } before :each do visit_bulk_order_management end - it "sorts by customer name when the customer name header is clicked" do - customer_names = [o1.name, o2.name].sort - + it "sorts by customer last name when the customer name header is clicked" do within "#listing_orders thead" do click_on "Name" end expect(page).to have_selector("#listing_orders .line_item:nth-child(1) .full_name", - text: customer_names[0]) + text: "Smith, Mary") expect(page).to have_selector("#listing_orders .line_item:nth-child(2) .full_name", - text: customer_names[1]) + text: "Taylor, Bill") + expect(page).to have_selector("#listing_orders .line_item:nth-child(3) .full_name", + text: "Taylor, Bob") end - it "sorts by customer name in reverse when the customer name header is clicked twice" do - customer_names = [o1.name, o2.name].sort.reverse - + it "sorts by customer last name in reverse when the customer name header is clicked twice" do within "#listing_orders thead" do click_on "Name" click_on "Name" end expect(page).to have_selector("#listing_orders .line_item:nth-child(1) .full_name", - text: customer_names[1]) + text: "Taylor, Bob") expect(page).to have_selector("#listing_orders .line_item:nth-child(2) .full_name", - text: customer_names[0]) + text: "Taylor, Bill") + expect(page).to have_selector("#listing_orders .line_item:nth-child(3) .full_name", + text: "Smith, Mary") end end end diff --git a/spec/system/admin/orders_spec.rb b/spec/system/admin/orders_spec.rb index 2a56862802..307248e926 100644 --- a/spec/system/admin/orders_spec.rb +++ b/spec/system/admin/orders_spec.rb @@ -92,307 +92,306 @@ distributors: [distributor4, distributor5]) } bill_address_id: billing_address5.id) } - context "logging as superadmin and visiting the orders page" do + describe "filters" do before do - order2.select_shipping_method(shipping_method.id) - order4.select_shipping_method(shipping_method2.id) login_as_admin_and_visit spree.admin_orders_path end - context "fiters" do - it "order cycles appear in descending order by close date on orders page" do - open_select2('#s2id_q_order_cycle_id_in') + it "order cycles appear in descending order by close date on orders page" do + open_select2('#s2id_q_order_cycle_id_in') - expect(find('#q_order_cycle_id_in', - visible: :all)[:innerHTML]).to have_content(/.*Four.*Three.*Two.*Five/m) + expect(find('#q_order_cycle_id_in', + visible: :all)[:innerHTML]).to have_content(/.*Four.*Three.*Two.*Five/m) + end + + it "filter by multiple order cycles" do + select2_select 'Two', from: 'q_order_cycle_id_in' + select2_select 'Three', from: 'q_order_cycle_id_in' + + page.find('.filter-actions .button.icon-search').click + + # Order 2 and 3 should show, but not 4 + expect(page).to have_content order2.number + expect(page).to have_content order3.number + expect(page).to_not have_content order4.number + end + + it "filter by distributors" do + select2_select distributor2.name.to_s, from: 'q_distributor_id_in' + select2_select distributor4.name.to_s, from: 'q_distributor_id_in' + + page.find('.filter-actions .button.icon-search').click + + # Order 2 and 4 should show, but not 3 + expect(page).to have_content order2.number + expect(page).to_not have_content order3.number + expect(page).to have_content order4.number + end + + it "filter by complete date" do + find("input.datepicker").click + select_dates_from_daterangepicker(order3.completed_at.yesterday, + order4.completed_at.tomorrow) + + page.find('.filter-actions .button.icon-search').click + + # Order 3 and 4 should show, but not 2 + expect(page).to_not have_content order2.number + expect(page).to have_content order3.number + expect(page).to have_content order4.number + end + + it "filter by email" do + fill_in "Email", with: customer3.email + + page.find('.filter-actions .button.icon-search').click + + # Order 3 should show, but not 2 and 4 + expect(page).to_not have_content order2.number + expect(page).to have_content order3.number + expect(page).to_not have_content order4.number + end + + it "filter by customer first and last names" do + # NOTE: this field refers to the name given in billing addresses and not to customer name + # filtering by first name + fill_in "First name begins with", with: billing_address2.firstname + page.find('.filter-actions .button.icon-search').click + # Order 3 should show, but not 2 and 4 + expect(page).to have_content order2.number + expect(page).to_not have_content order3.number + expect(page).to_not have_content order4.number + + find("a#clear_filters_button").click + # filtering by last name + + fill_in "Last name begins with", with: billing_address4.lastname + page.find('.filter-actions .button.icon-search').click + # Order 4 should show, but not 2 and 3 + expect(page).to_not have_content order2.number + expect(page).to_not have_content order3.number + expect(page).to have_content order4.number + end + + it "filter by shipping methods" do + order2.select_shipping_method(shipping_method.id) + order4.select_shipping_method(shipping_method2.id) + + select2_select "Pick-up at the farm", from: 'q_shipping_method_id' + page.find('.filter-actions .button.icon-search').click + # Order 2 should show, but not 3 and 5 + expect(page).to have_content order2.number + expect(page).to_not have_content order3.number + expect(page).to_not have_content order4.number + + find("a#clear_filters_button").click + + select2_select "Signed, sealed, delivered", from: 'q_shipping_method_id' + page.find('.filter-actions .button.icon-search').click + # Order 4 should show, but not 2 and 3 + expect(page).to_not have_content order2.number + expect(page).to_not have_content order3.number + expect(page).to have_content order4.number + end + + it "filter by invoice number" do + fill_in "Invoice number:", with: order2.number + + page.find('.filter-actions .button.icon-search').click + + # Order 2 should show, but not 3 and 4 + expect(page).to have_content order2.number + expect(page).to_not have_content order3.number + expect(page).to_not have_content order4.number + end + + it "filter by order state" do + order.update(state: "payment") + + uncheck 'Only show complete orders' + page.find('.filter-actions .button.icon-search').click + + expect(page).to have_content order.number + expect(page).to have_content order2.number + expect(page).to have_content order3.number + expect(page).to have_content order4.number + expect(page).to have_content order5.number + + select2_select "payment", from: 'q_state_eq' + + page.find('.filter-actions .button.icon-search').click + + # Order 2 should show, but not 3 and 4 + expect(page).to have_content order.number + expect(page).to_not have_content order2.number + expect(page).to_not have_content order3.number + expect(page).to_not have_content order4.number + expect(page).to_not have_content order5.number + end + end + + describe "ordering" do + context "orders with different completion dates" do + before do + order2.update!(completed_at: Time.zone.now - 2.weeks) + order3.update!(completed_at: Time.zone.now - 3.weeks) + order4.update!(completed_at: Time.zone.now - 4.weeks) + order5.update!(completed_at: Time.zone.now - 5.weeks) + login_as_admin_and_visit spree.admin_orders_path end - - it "filter by multiple order cycles" do - select2_select 'Two', from: 'q_order_cycle_id_in' - select2_select 'Three', from: 'q_order_cycle_id_in' - - page.find('.filter-actions .button.icon-search').click - - # Order 2 and 3 should show, but not 4 - expect(page).to have_content order2.number - expect(page).to have_content order3.number - expect(page).to_not have_content order4.number - end - - it "filter by distributors" do - select2_select distributor2.name.to_s, from: 'q_distributor_id_in' - select2_select distributor4.name.to_s, from: 'q_distributor_id_in' - - page.find('.filter-actions .button.icon-search').click - - # Order 2 and 4 should show, but not 3 - expect(page).to have_content order2.number - expect(page).to_not have_content order3.number - expect(page).to have_content order4.number - end - - it "filter by complete date" do - find("input.datepicker").click - select_dates_from_daterangepicker(order3.completed_at.yesterday, - order4.completed_at.tomorrow) - - page.find('.filter-actions .button.icon-search').click - - # Order 3 and 4 should show, but not 2 - expect(page).to_not have_content order2.number - expect(page).to have_content order3.number - expect(page).to have_content order4.number - end - - it "filter by email" do - fill_in "Email", with: customer3.email - - page.find('.filter-actions .button.icon-search').click - - # Order 3 should show, but not 2 and 4 - expect(page).to_not have_content order2.number - expect(page).to have_content order3.number - expect(page).to_not have_content order4.number - end - - it "filter by customer first and last names" do - # NOTE: this field refers to the name given in billing addresses and not to customer name - # filtering by first name - fill_in "First name begins with", with: billing_address2.firstname - page.find('.filter-actions .button.icon-search').click - # Order 3 should show, but not 2 and 4 - expect(page).to have_content order2.number - expect(page).to_not have_content order3.number - expect(page).to_not have_content order4.number - - find("a#clear_filters_button").click - # filtering by last name - - fill_in "Last name begins with", with: billing_address4.lastname - page.find('.filter-actions .button.icon-search').click - # Order 4 should show, but not 2 and 3 - expect(page).to_not have_content order2.number - expect(page).to_not have_content order3.number - expect(page).to have_content order4.number - end - - it "filter by shipping methods" do - select2_select "Pick-up at the farm", from: 'q_shipping_method_id' - page.find('.filter-actions .button.icon-search').click - # Order 2 should show, but not 3 and 5 - expect(page).to have_content order2.number - expect(page).to_not have_content order3.number - expect(page).to_not have_content order4.number - - find("a#clear_filters_button").click - - select2_select "Signed, sealed, delivered", from: 'q_shipping_method_id' - page.find('.filter-actions .button.icon-search').click - # Order 4 should show, but not 2 and 3 - expect(page).to_not have_content order2.number - expect(page).to_not have_content order3.number - expect(page).to have_content order4.number - end - - it "filter by invoice number" do - fill_in "Invoice number:", with: order2.number - - page.find('.filter-actions .button.icon-search').click - - # Order 2 should show, but not 3 and 4 - expect(page).to have_content order2.number - expect(page).to_not have_content order3.number - expect(page).to_not have_content order4.number - end - - it "filter by order state" do - order.update(state: "payment") - - uncheck 'Only show complete orders' - page.find('.filter-actions .button.icon-search').click - - expect(page).to have_content order.number - expect(page).to have_content order2.number - expect(page).to have_content order3.number - expect(page).to have_content order4.number - expect(page).to have_content order5.number - - select2_select "payment", from: 'q_state_eq' - - page.find('.filter-actions .button.icon-search').click - - # Order 2 should show, but not 3 and 4 - expect(page).to have_content order.number - expect(page).to_not have_content order2.number - expect(page).to_not have_content order3.number - expect(page).to_not have_content order4.number - expect(page).to_not have_content order5.number + it "orders by completion date" do + find("a", text: 'COMPLETED AT').click # sets ascending ordering + expect(page).to have_content( + /#{order5.number}.*#{order4.number}.*#{order3.number}.*#{order2.number}/m + ) + find("a", text: 'COMPLETED AT').click # sets descending ordering + expect(page).to have_content( + /#{order2.number}.*#{order3.number}.*#{order4.number}.*#{order5.number}/m + ) end end - context "ordering" do - context "orders with different completion dates" do - before do - order2.update!(completed_at: Time.zone.now - 2.weeks) - order3.update!(completed_at: Time.zone.now - 3.weeks) - order4.update!(completed_at: Time.zone.now - 4.weeks) - order5.update!(completed_at: Time.zone.now - 5.weeks) - login_as_admin_and_visit spree.admin_orders_path - end - it "orders by completion date" do - find("a", text: 'COMPLETED AT').click # sets ascending ordering - expect(page).to have_content( - /#{order5.number}.*#{order4.number}.*#{order3.number}.*#{order2.number}/m - ) - find("a", text: 'COMPLETED AT').click # sets descending ordering - expect(page).to have_content( - /#{order2.number}.*#{order3.number}.*#{order4.number}.*#{order5.number}/m - ) - end + context "orders with different order numbers" do + before do + order2.update!(number: "R555555555") + order3.update!(number: "R444444444") + order4.update!(number: "R333333333") + order5.update!(number: "R222222222") + login_as_admin_and_visit spree.admin_orders_path end - context "orders with different order numbers" do - before do - order2.update!(number: "R555555555") - order3.update!(number: "R444444444") - order4.update!(number: "R333333333") - order5.update!(number: "R222222222") - login_as_admin_and_visit spree.admin_orders_path - end + it "orders by order number" do + find("a", text: 'NUMBER').click # sets ascending ordering + expect(page).to have_content( + /#{order5.number}.*#{order4.number}.*#{order3.number}.*#{order2.number}/m + ) + find("a", text: 'NUMBER').click # sets descending ordering + expect(page).to have_content( + /#{order2.number}.*#{order3.number}.*#{order4.number}.*#{order5.number}/m + ) + end + end - it "orders by order number" do - find("a", text: 'NUMBER').click # sets ascending ordering - expect(page).to have_content( - /#{order5.number}.*#{order4.number}.*#{order3.number}.*#{order2.number}/m - ) - find("a", text: 'NUMBER').click # sets descending ordering - expect(page).to have_content( - /#{order2.number}.*#{order3.number}.*#{order4.number}.*#{order5.number}/m - ) - end + context "orders with different states" do + before do + order2.update!(state: "payment") + order3.update!(state: "complete") + order4.update!(state: "cart") + order5.cancel + login_as_admin_and_visit spree.admin_orders_path + uncheck 'Only show complete orders' + page.find('.filter-actions .button.icon-search').click end - context "orders with different states" do - before do - order2.update!(state: "payment") - order3.update!(state: "complete") - order4.update!(state: "cart") - order5.cancel - login_as_admin_and_visit spree.admin_orders_path - uncheck 'Only show complete orders' - page.find('.filter-actions .button.icon-search').click - end + it "orders by order state" do + find("a", text: 'STATE').click # sets ascending ordering + expect(page).to have_content( + /#{order5.number}.*#{order4.number}.*#{order3.number}.*#{order2.number}/m + ) + find("a", text: 'STATE').click # sets descending ordering + expect(page).to have_content( + /#{order2.number}.*#{order3.number}.*#{order4.number}.*#{order5.number}/m + ) + end + end - it "orders by order state" do - find("a", text: 'STATE').click # sets ascending ordering - expect(page).to have_content( - /#{order5.number}.*#{order4.number}.*#{order3.number}.*#{order2.number}/m - ) - find("a", text: 'STATE').click # sets descending ordering - expect(page).to have_content( - /#{order2.number}.*#{order3.number}.*#{order4.number}.*#{order5.number}/m - ) - end + context "orders with different payment states" do + before do + Spree::Payment.where(order_id: order2.id).first.update!(amount: 50.0) + Spree::Payment.where(order_id: order3.id).first.update!(amount: 100.0) + Spree::Payment.where(order_id: order4.id).first.update!(amount: 10.0) + login_as_admin_and_visit spree.admin_orders_path end - context "orders with different payment states" do - before do - Spree::Payment.where(order_id: order2.id).first.update!(amount: 50.0) - Spree::Payment.where(order_id: order3.id).first.update!(amount: 100.0) - Spree::Payment.where(order_id: order4.id).first.update!(amount: 10.0) - login_as_admin_and_visit spree.admin_orders_path - end + it "orders by payment state" do + find("a", text: 'PAYMENT STATE').click # sets ascending ordering + expect(page).to have_content(/#{order4.number}.*#{order3.number}.*#{order2.number}/m) + find("a", text: 'PAYMENT STATE').click # sets descending ordering + expect(page).to have_content(/#{order2.number}.*#{order3.number}.*#{order4.number}/m) + end + end - it "orders by payment state" do - find("a", text: 'PAYMENT STATE').click # sets ascending ordering - expect(page).to have_content(/#{order4.number}.*#{order3.number}.*#{order2.number}/m) - find("a", text: 'PAYMENT STATE').click # sets descending ordering - expect(page).to have_content(/#{order2.number}.*#{order3.number}.*#{order4.number}/m) - end + context "orders with different shipment states" do + before do + Spree::Payment.where(order_id: order2.id).first.update!(amount: 50.0) + Spree::Payment.where(order_id: order3.id).first.update!(amount: 100.0) + Spree::Payment.where(order_id: order4.id).first.update!(amount: 10.0) + order2.ship + login_as_admin_and_visit spree.admin_orders_path end - context "orders with different shipment states" do - before do - Spree::Payment.where(order_id: order2.id).first.update!(amount: 50.0) - Spree::Payment.where(order_id: order3.id).first.update!(amount: 100.0) - Spree::Payment.where(order_id: order4.id).first.update!(amount: 10.0) - order2.ship - login_as_admin_and_visit spree.admin_orders_path - end + it "orders by shipment state" do + find("a", text: 'SHIPMENT STATE').click # sets ascending ordering + expect(page).to have_content(/#{order4.number}.*#{order3.number}.*#{order2.number}/m) + find("a", text: 'SHIPMENT STATE').click # sets descending ordering + expect(page).to have_content(/#{order2.number}.*#{order3.number}.*#{order4.number}/m) + end + end - it "orders by shipment state" do - find("a", text: 'SHIPMENT STATE').click # sets ascending ordering - expect(page).to have_content(/#{order4.number}.*#{order3.number}.*#{order2.number}/m) - find("a", text: 'SHIPMENT STATE').click # sets descending ordering - expect(page).to have_content(/#{order2.number}.*#{order3.number}.*#{order4.number}/m) - end + context "orders from different customers" do + before do + order2.update!(email: "jkl@jkl.com") + order3.update!(email: "ghi@ghi.com") + order4.update!(email: "def@def.com") + order5.update!(email: "abc@abc.com") + login_as_admin_and_visit spree.admin_orders_path end - context "orders from different customers" do - before do - order2.update!(email: "jkl@jkl.com") - order3.update!(email: "ghi@ghi.com") - order4.update!(email: "def@def.com") - order5.update!(email: "abc@abc.com") - login_as_admin_and_visit spree.admin_orders_path - end + it "orders by customer email" do + find("a", text: 'EMAIL').click # sets ascending ordering + expect(page).to have_content( + /#{order5.number}.*#{order4.number}.*#{order3.number}.*#{order2.number}/m + ) + find("a", text: 'EMAIL').click # sets descending ordering + expect(page).to have_content( + /#{order2.number}.*#{order3.number}.*#{order4.number}.*#{order5.number}/m + ) + end + end - it "orders by customer email" do - find("a", text: 'EMAIL').click # sets ascending ordering - expect(page).to have_content( - /#{order5.number}.*#{order4.number}.*#{order3.number}.*#{order2.number}/m - ) - find("a", text: 'EMAIL').click # sets descending ordering - expect(page).to have_content( - /#{order2.number}.*#{order3.number}.*#{order4.number}.*#{order5.number}/m - ) - end + context "orders with different billing addresses" do + before do + billing_address2.update!(lastname: "Mad Hatter") + billing_address3.update!(lastname: "Duchess") + billing_address4.update!(lastname: "Cheshire Cat") + billing_address5.update!(lastname: "Alice") + login_as_admin_and_visit spree.admin_orders_path end - context "orders with different billing addresses" do - before do - billing_address2.update!(lastname: "Mad Hatter") - billing_address3.update!(lastname: "Duchess") - billing_address4.update!(lastname: "Cheshire Cat") - billing_address5.update!(lastname: "Alice") - login_as_admin_and_visit spree.admin_orders_path - end + it "orders by last name" do + find("a", text: 'NAME').click # sets ascending ordering + expect(page).to have_content( + /#{order5.number}.*#{order4.number}.*#{order3.number}.*#{order2.number}/m + ) + find("a", text: 'NAME').click # sets descending ordering + expect(page).to have_content( + /#{order2.number}.*#{order3.number}.*#{order4.number}.*#{order5.number}/m + ) + end + end - it "orders by last name" do - find("a", text: 'NAME').click # sets ascending ordering - expect(page).to have_content( - /#{order5.number}.*#{order4.number}.*#{order3.number}.*#{order2.number}/m - ) - find("a", text: 'NAME').click # sets descending ordering - expect(page).to have_content( - /#{order2.number}.*#{order3.number}.*#{order4.number}.*#{order5.number}/m - ) - end + context "orders with different order totals" do + before do + Spree::LineItem.where(order_id: order2.id).first.update!(quantity: 5) + Spree::LineItem.where(order_id: order3.id).first.update!(quantity: 4) + Spree::LineItem.where(order_id: order4.id).first.update!(quantity: 3) + Spree::LineItem.where(order_id: order5.id).first.update!(quantity: 2) + order2.save + order3.save + order4.save + order5.save + login_as_admin_and_visit spree.admin_orders_path end - context "orders with different order totals" do - before do - Spree::LineItem.where(order_id: order2.id).first.update!(quantity: 5) - Spree::LineItem.where(order_id: order3.id).first.update!(quantity: 4) - Spree::LineItem.where(order_id: order4.id).first.update!(quantity: 3) - Spree::LineItem.where(order_id: order5.id).first.update!(quantity: 2) - order2.save - order3.save - order4.save - order5.save - login_as_admin_and_visit spree.admin_orders_path - end - - it "orders by order total" do - find("a", text: 'TOTAL').click # sets ascending ordering - expect(page).to have_content( - /#{order5.number}.*#{order4.number}.*#{order3.number}.*#{order2.number}/m - ) - find("a", text: 'TOTAL').click # sets descending ordering - expect(page).to have_content( - /#{order2.number}.*#{order3.number}.*#{order4.number}.*#{order5.number}/m - ) - end + it "orders by order total" do + find("a", text: 'TOTAL').click # sets ascending ordering + expect(page).to have_content( + /#{order5.number}.*#{order4.number}.*#{order3.number}.*#{order2.number}/m + ) + find("a", text: 'TOTAL').click # sets descending ordering + expect(page).to have_content( + /#{order2.number}.*#{order3.number}.*#{order4.number}.*#{order5.number}/m + ) end end end