From 997169b974d66fc4e99120c041006ab944ac3456 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 18 Nov 2018 18:34:16 +0000 Subject: [PATCH 1/4] Fix checkbox values on orders page --- .../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 338ec21f0b..12a02a626a 100644 --- a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee +++ b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee @@ -25,8 +25,8 @@ angular.module("admin.orders").controller "ordersCtrl", ($scope, RequestMonitor, 'q[email_cont]': $scope['q']['email_cont'], 'q[bill_address_firstname_start]': $scope['q']['bill_address_firstname_start'], 'q[bill_address_lastname_start]': $scope['q']['bill_address_lastname_start'], - 'q[completed_at_not_null]': $scope['q']['completed_at_not_null'], - 'q[inventory_units_shipment_id_null]': $scope['q']['inventory_units_shipment_id_null'], + 'q[completed_at_not_null]': $scope['q']['completed_at_not_null'] || null, + 'q[inventory_units_shipment_id_null]': $scope['q']['inventory_units_shipment_id_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'], From d48774e3a2aa12df90d3292626647330d40ce966 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 21 Nov 2018 19:28:22 +0000 Subject: [PATCH 2/4] Add comment --- .../admin/orders/controllers/orders_controller.js.coffee | 1 + 1 file changed, 1 insertion(+) 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 12a02a626a..ad5bfff97d 100644 --- a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee +++ b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee @@ -25,6 +25,7 @@ angular.module("admin.orders").controller "ordersCtrl", ($scope, RequestMonitor, 'q[email_cont]': $scope['q']['email_cont'], 'q[bill_address_firstname_start]': $scope['q']['bill_address_firstname_start'], '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[inventory_units_shipment_id_null]': $scope['q']['inventory_units_shipment_id_null'] || null, 'q[distributor_id_in]': $scope['q']['distributor_id_in'], From e711c5ed03980a00ba5a817efb7e77cda7ca1c6c Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 10 Dec 2018 20:04:10 +0000 Subject: [PATCH 3/4] Add spec for search filters --- .../controllers/api/orders_controller_spec.rb | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/spec/controllers/api/orders_controller_spec.rb b/spec/controllers/api/orders_controller_spec.rb index 9bcdbeb7ad..760094570d 100644 --- a/spec/controllers/api/orders_controller_spec.rb +++ b/spec/controllers/api/orders_controller_spec.rb @@ -24,6 +24,8 @@ module Api create(:order, order_cycle: order_cycle, state: 'complete', completed_at: Time.zone.now, distributor: distributor, billing_address: create(:address) ) end + let!(:order4) { create(:completed_order_with_fees) } + let!(:order5) { create(:order, state: 'cart', completed_at: nil) } let!(:line_item1) do create(:line_item, order: order1, product: create(:product, supplier: supplier)) @@ -119,6 +121,24 @@ module Api end end + context 'using search filters' do + before do + allow(controller).to receive(:spree_current_user) { admin_user } + end + + it 'can show only completed orders' do + get :index, format: :json, q: { completed_at_not_null: true, s: 'created_at desc' } + + expect(json_response['orders']).to eq serialized_orders([order4, order3, order2, order1]) + end + + it 'can show only unfulfilled orders' do + get :index, format: :json, q: { inventory_units_shipment_id_null: true, s: 'created_at desc' } + + expect(json_response['orders']).to eq serialized_orders([order3, order2, order1]) + end + end + context 'with pagination' do before do allow(controller).to receive(:spree_current_user) { distributor.owner } @@ -128,7 +148,7 @@ module Api get :index, per_page: 15, page: 1 pagination_data = { - 'results' => 2, + 'results' => 3, 'pages' => 1, 'page' => 1, 'per_page' => 15 @@ -141,6 +161,16 @@ module Api private + def serialized_orders(orders) + serialized_orders = ActiveModel::ArraySerializer.new( + orders, + each_serializer: Api::Admin::OrderSerializer, + root: false + ) + + JSON.parse(serialized_orders.to_json) + end + def returns_orders(response) keys = response['orders'].first.keys.map(&:to_sym) expect(order_attributes.all?{ |attr| keys.include? attr }).to be_truthy From 0c5ac99e0f2cb4db5f682d1579c4423b1845511c Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 10 Dec 2018 20:08:06 +0000 Subject: [PATCH 4/4] Fix multiple results with 'inventory_items_shipment_id_null' ransack query The q['inventory_items_shipment_id_null'] search element was generating duplicates where there were multiple line items on an order that were ready to be shipped, with id = null --- app/services/search_orders.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/search_orders.rb b/app/services/search_orders.rb index 127a53625e..c1120ffb19 100644 --- a/app/services/search_orders.rb +++ b/app/services/search_orders.rb @@ -26,11 +26,11 @@ class SearchOrders @search = OpenFoodNetwork::Permissions.new(current_user).editable_orders.ransack(params[:q]) return paginated_results if using_pagination? - @search.result + @search.result(distinct: true) end def paginated_results - @search.result + @search.result(distinct: true) .page(params[:page]) .per(params[:per_page]) end