From 79df4868deda1958f9116d630a0a28ddaf4a5d7d Mon Sep 17 00:00:00 2001 From: David Cook Date: Fri, 8 May 2020 11:55:55 +1000 Subject: [PATCH 1/4] 5299: Unit and feature test for filtering by multiple order cycles --- spec/features/admin/orders_spec.rb | 30 +++++++++++++++++++ .../orders_controller_spec.js.coffee | 15 +++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/spec/features/admin/orders_spec.rb b/spec/features/admin/orders_spec.rb index 6713a7521f..bb0da0f5ee 100644 --- a/spec/features/admin/orders_spec.rb +++ b/spec/features/admin/orders_spec.rb @@ -38,6 +38,36 @@ feature ' visible: :all)[:innerHTML]).to have_content(/.*Four.*Three.*Two/m) end + scenario "filter by multiple order cycles" do + # Set up 3 orders and 3 order cycles + order_cycle_2 = create(:simple_order_cycle, name: 'Two') + order_cycle_3 = create(:simple_order_cycle, name: 'Three') + order_cycle_4 = create(:simple_order_cycle, name: 'Four') + + order_2 = create(:order_with_credit_payment, user: user, distributor: distributor, + order_cycle: order_cycle_2) + order_3 = create(:order_with_credit_payment, user: user, distributor: distributor, + order_cycle: order_cycle_3) + order_4 = create(:order_with_credit_payment, user: user, distributor: distributor, + order_cycle: order_cycle_4) + + quick_login_as_admin + visit 'admin/orders' + + # Select order cycle 2 and 3 + multi_select2_select 'Two', from: 'q_order_cycle_id_in' + multi_select2_select 'Three', from: 'q_order_cycle_id_in' + + # click link "Filter Results" + page.find('.filter-actions .button.icon-search').click + + # Order 2 and 3 should show, but not 4 + expect(page).to have_content order_2.number + expect(page).to have_content order_3.number + expect(page).to_not have_content order_4.number + + end + context "with a capturable order" do before do order.finalize! # ensure order has a payment to capture diff --git a/spec/javascripts/unit/admin/orders/controllers/orders_controller_spec.js.coffee b/spec/javascripts/unit/admin/orders/controllers/orders_controller_spec.js.coffee index 2e7cfee530..fe445a294b 100644 --- a/spec/javascripts/unit/admin/orders/controllers/orders_controller_spec.js.coffee +++ b/spec/javascripts/unit/admin/orders/controllers/orders_controller_spec.js.coffee @@ -5,6 +5,7 @@ describe "ordersCtrl", -> orders = [ { id: 8, order_cycle: { id: 4 }, distributor: { id: 5 }, number: "R123456" } { id: 9, order_cycle: { id: 5 }, distributor: { id: 7 }, number: "R213776" } + { id: 10, order_cycle: { id: 6 }, distributor: { id: 8 }, number: "R213777" } ] form = { q: { @@ -42,7 +43,7 @@ describe "ordersCtrl", -> expect($scope.page).toEqual 2 expect(Orders.index).toHaveBeenCalled() - describe "sorting products", -> + describe "sorting orders", -> it "sorts orders", -> spyOn $scope, "fetchResults" @@ -51,3 +52,15 @@ describe "ordersCtrl", -> expect($scope.sorting).toEqual 'number asc' expect($scope.fetchResults).toHaveBeenCalled() + + describe "filtering orders", -> + it "filters orders by all selected order cycles", -> + + $scope['q']['order_cycle_id_in'] = ['4', '5'] + + $scope.fetchResults() + + # Fetched with correct square brackets in field name for array value + expect(Orders.index).toHaveBeenCalledWith(jasmine.objectContaining({ + 'q[order_cycle_id_in][]': ['4', '5'] + })) From 8a2c65b6bbaf69f154e1c5af65c54dd1a0ba94c4 Mon Sep 17 00:00:00 2001 From: David Cook Date: Fri, 8 May 2020 12:05:11 +1000 Subject: [PATCH 2/4] Remove duplicate line --- .../admin/orders/controllers/orders_controller.js.coffee | 1 - 1 file changed, 1 deletion(-) diff --git a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee index e98fcccb2a..2df4d219bc 100644 --- a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee +++ b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee @@ -36,7 +36,6 @@ angular.module("admin.orders").controller "ordersCtrl", ($scope, $timeout, Reque 'q[completed_at_not_null]': $scope['q']['completed_at_not_null'] || null, 'q[distributor_id_in]': $scope['q']['distributor_id_in'], 'q[order_cycle_id_in]': $scope['q']['order_cycle_id_in'], - 'q[order_cycle_id_in]': $scope['q']['order_cycle_id_in'], 'q[s]': $scope.sorting || 'completed_at desc', per_page: $scope.per_page, page: page From f5629d59b0d7a0a4d59afd01bab569cafd81136e Mon Sep 17 00:00:00 2001 From: David Cook Date: Fri, 8 May 2020 12:06:14 +1000 Subject: [PATCH 3/4] 5299: Add trailing square brackets for array parameters (distributor and order_cycle) --- .../admin/orders/controllers/orders_controller.js.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee index 2df4d219bc..f6d4c964d6 100644 --- a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee +++ b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee @@ -34,8 +34,8 @@ angular.module("admin.orders").controller "ordersCtrl", ($scope, $timeout, Reque 'q[bill_address_lastname_start]': $scope['q']['bill_address_lastname_start'], # Set default checkbox values to null. See: https://github.com/openfoodfoundation/openfoodnetwork/pull/3076#issuecomment-440010498 'q[completed_at_not_null]': $scope['q']['completed_at_not_null'] || null, - 'q[distributor_id_in]': $scope['q']['distributor_id_in'], - 'q[order_cycle_id_in]': $scope['q']['order_cycle_id_in'], + 'q[distributor_id_in][]': $scope['q']['distributor_id_in'], + 'q[order_cycle_id_in][]': $scope['q']['order_cycle_id_in'], 'q[s]': $scope.sorting || 'completed_at desc', per_page: $scope.per_page, page: page From b4228e8cdd4039b100060644b23f245c5ff7c1b6 Mon Sep 17 00:00:00 2001 From: David Cook Date: Fri, 15 May 2020 15:11:26 +1000 Subject: [PATCH 4/4] 5299 Remove unnecessary comments --- spec/features/admin/orders_spec.rb | 3 --- .../admin/orders/controllers/orders_controller_spec.js.coffee | 1 - 2 files changed, 4 deletions(-) diff --git a/spec/features/admin/orders_spec.rb b/spec/features/admin/orders_spec.rb index bb0da0f5ee..d5d1313b22 100644 --- a/spec/features/admin/orders_spec.rb +++ b/spec/features/admin/orders_spec.rb @@ -39,7 +39,6 @@ feature ' end scenario "filter by multiple order cycles" do - # Set up 3 orders and 3 order cycles order_cycle_2 = create(:simple_order_cycle, name: 'Two') order_cycle_3 = create(:simple_order_cycle, name: 'Three') order_cycle_4 = create(:simple_order_cycle, name: 'Four') @@ -54,11 +53,9 @@ feature ' quick_login_as_admin visit 'admin/orders' - # Select order cycle 2 and 3 multi_select2_select 'Two', from: 'q_order_cycle_id_in' multi_select2_select 'Three', from: 'q_order_cycle_id_in' - # click link "Filter Results" page.find('.filter-actions .button.icon-search').click # Order 2 and 3 should show, but not 4 diff --git a/spec/javascripts/unit/admin/orders/controllers/orders_controller_spec.js.coffee b/spec/javascripts/unit/admin/orders/controllers/orders_controller_spec.js.coffee index fe445a294b..2fa1efbac3 100644 --- a/spec/javascripts/unit/admin/orders/controllers/orders_controller_spec.js.coffee +++ b/spec/javascripts/unit/admin/orders/controllers/orders_controller_spec.js.coffee @@ -55,7 +55,6 @@ describe "ordersCtrl", -> describe "filtering orders", -> it "filters orders by all selected order cycles", -> - $scope['q']['order_cycle_id_in'] = ['4', '5'] $scope.fetchResults()