From 2d7498b77bdcbf16b11eb287998adc821c2448af Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 8 Mar 2019 14:23:18 +1100 Subject: [PATCH 01/13] Hide elements before Angular is loaded The "Loading orders" spinner is still visible from the beginning so that it can be used as indicator for when the page is loaded. Before, the "No orders found" message was visible between page load and Angular initilisation. --- app/assets/stylesheets/admin/angular.css.scss | 4 ++++ app/views/spree/admin/orders/bulk_management.html.haml | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 app/assets/stylesheets/admin/angular.css.scss diff --git a/app/assets/stylesheets/admin/angular.css.scss b/app/assets/stylesheets/admin/angular.css.scss new file mode 100644 index 0000000000..bbb1d61c40 --- /dev/null +++ b/app/assets/stylesheets/admin/angular.css.scss @@ -0,0 +1,4 @@ +// https://docs.angularjs.org/api/ng/directive/ngCloak +[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { + display: none !important; +} diff --git a/app/views/spree/admin/orders/bulk_management.html.haml b/app/views/spree/admin/orders/bulk_management.html.haml index 950ec2a45a..2edf04c837 100644 --- a/app/views/spree/admin/orders/bulk_management.html.haml +++ b/app/views/spree/admin/orders/bulk_management.html.haml @@ -49,7 +49,7 @@ %hr.divider.sixteen.columns.alpha.omega{ ng: { show: 'unitsVariantSelected()' } } - %div.sixteen.columns.alpha.omega#group_buy_calculation{ ng: { show: 'unitsVariantSelected()' } } + %div.sixteen.columns.alpha.omega#group_buy_calculation{ ng: { show: 'unitsVariantSelected()', cloak: true } } %div.shared_resource{ :class => "four columns alpha" } %span{ :class => 'three columns alpha' } %input{ type: 'checkbox', :id => 'shared_resource', 'ng-model' => 'sharedResource'} @@ -106,11 +106,11 @@ %h1 = t("admin.orders.bulk_management.loading") - %div{ :class => "sixteen columns alpha", 'ng-show' => '!RequestMonitor.loading && filteredLineItems.length == 0'} + %div{ class: "sixteen columns alpha", ng: {show: '!RequestMonitor.loading && filteredLineItems.length == 0', cloak: true}} %h1#no_results = t("admin.orders.bulk_management.no_results") - .margin-bottom-50{ 'ng-hide' => 'RequestMonitor.loading || filteredLineItems.length == 0' } + .margin-bottom-50{ ng: {hide: 'RequestMonitor.loading || filteredLineItems.length == 0', cloak: true } } %form{ name: 'bulk_order_form' } %table.index#listing_orders.bulk{ :class => "sixteen columns alpha", ng: { show: "initialized" } } %thead @@ -157,7 +157,7 @@ = t("admin.orders.bulk_management.ask") %input{ :type => 'checkbox', 'ng-model' => "confirmDelete" } - %tr.line_item{ 'ng-repeat' => "line_item in filteredLineItems = ( lineItems | filter:quickSearch | selectFilter:supplierFilter:distributorFilter:orderCycleFilter | variantFilter:selectedUnitsProduct:selectedUnitsVariant:sharedResource | orderBy:sorting.predicate:sorting.reverse )", 'ng-class-even' => "'even'", 'ng-class-odd' => "'odd'", ng: { attr: { id: "li_{{line_item.id}}" } } } + %tr.line_item{ ng: {repeat: "line_item in filteredLineItems = ( lineItems | filter:quickSearch | selectFilter:supplierFilter:distributorFilter:orderCycleFilter | variantFilter:selectedUnitsProduct:selectedUnitsVariant:sharedResource | orderBy:sorting.predicate:sorting.reverse )", 'class-even' => "'even'", 'class-odd' => "'odd'", attr: { id: "li_{{line_item.id}}" } } } %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 }} From 37d37a6057c607c2d5c9ef8153a4f9f3c311e7c1 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 8 Mar 2019 14:46:39 +1100 Subject: [PATCH 02/13] Speed up initial spec log in --- spec/features/admin/bulk_order_management_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/features/admin/bulk_order_management_spec.rb b/spec/features/admin/bulk_order_management_spec.rb index aaa2429d5a..df68c00bfd 100644 --- a/spec/features/admin/bulk_order_management_spec.rb +++ b/spec/features/admin/bulk_order_management_spec.rb @@ -10,7 +10,7 @@ feature %q{ context "listing orders" do before :each do - login_to_admin_section + quick_login_as_admin end it "displays a message when number of line items is zero" do @@ -123,7 +123,7 @@ feature %q{ context "altering line item properties" do before :each do - admin_user = quick_login_as_admin + quick_login_as_admin end context "tracking changes" do @@ -179,7 +179,7 @@ feature %q{ context "using page controls" do before :each do - admin_user = quick_login_as_admin + quick_login_as_admin end let!(:p1) { create(:product_with_option_types, group_buy: true, group_buy_unit_size: 5000, variant_unit: "weight", variants: [create(:variant, unit_value: 1000)] ) } From 52fd7b102e64e649617a14395318fba7083aab5a Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 8 Mar 2019 14:46:58 +1100 Subject: [PATCH 03/13] Unify visiting bulk order management DRYing the code allows for easier refactor and more consistency. --- .../admin/bulk_order_management_spec.rb | 58 +++++++++---------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/spec/features/admin/bulk_order_management_spec.rb b/spec/features/admin/bulk_order_management_spec.rb index df68c00bfd..b5a628ccdf 100644 --- a/spec/features/admin/bulk_order_management_spec.rb +++ b/spec/features/admin/bulk_order_management_spec.rb @@ -14,7 +14,7 @@ feature %q{ end it "displays a message when number of line items is zero" do - visit '/admin/orders/bulk_management' + visit_bulk_order_management expect(page).to have_text 'No orders found.' end @@ -27,7 +27,7 @@ feature %q{ let!(:li3) { create(:line_item, order: o3 ) } before :each do - visit '/admin/orders/bulk_management' + visit_bulk_order_management end it "displays a list of line items" do @@ -44,8 +44,7 @@ feature %q{ let!(:li2) { create(:line_item, order: o2, product: create(:product_with_option_types) ) } before :each do - visit '/admin/orders/bulk_management' - wait_until { request_monitor_finished 'LineItemsCtrl' } + visit_bulk_order_management end it "displays a column for user's full name" do @@ -92,8 +91,7 @@ feature %q{ let!(:li2) { create(:line_item, order: o2) } before do - visit spree.admin_bulk_order_management_path - wait_until { request_monitor_finished 'LineItemsCtrl' } + visit_bulk_order_management end it "sorts by customer name when the customer name header is clicked" do @@ -131,7 +129,7 @@ feature %q{ let!(:li1) { create(:line_item, order: o1, :quantity => 5 ) } before :each do - visit '/admin/orders/bulk_management' + visit_bulk_order_management end it "adds the class 'ng-dirty' to input elements when value is altered" do @@ -147,7 +145,7 @@ feature %q{ before :each do li1.variant.update_attributes(on_hand: 1, on_demand: false) - visit '/admin/orders/bulk_management' + visit_bulk_order_management end context "when acceptable data is sent to the server" do @@ -191,7 +189,7 @@ feature %q{ context "modifying the weight/volume of a line item" do it "price is altered" do - visit '/admin/orders/bulk_management' + visit_bulk_order_management toggle_columns "Weight/Volume", "Price" within "tr#li_#{li1.id}" do expect(page).to have_field "price", with: "50.00" @@ -208,7 +206,7 @@ feature %q{ context "modifying the quantity of a line item" do it "price is altered" do - visit '/admin/orders/bulk_management' + visit_bulk_order_management toggle_columns "Price" within "tr#li_#{li1.id}" do expect(page).to have_field "price", with: "#{format("%.2f",li1.price * 5)}" @@ -220,7 +218,7 @@ feature %q{ context "modifying the quantity of a line item" do it "weight/volume is altered" do - visit '/admin/orders/bulk_management' + visit_bulk_order_management toggle_columns "Weight/Volume" within "tr#li_#{li1.id}" do expect(page).to have_field "final_weight_volume", with: "#{li1.final_weight_volume.round}" @@ -232,7 +230,7 @@ feature %q{ context "using column display toggle" do it "shows a column display toggle button, which shows a list of columns when clicked" do - visit '/admin/orders/bulk_management' + visit_bulk_order_management expect(page).to have_selector "th", :text => "NAME" expect(page).to have_selector "th", text: I18n.t("admin.orders.bulk_management.order_date").upcase @@ -261,8 +259,7 @@ feature %q{ let!(:li2) { create(:line_item, order: o1, product: create(:product, supplier: s2) ) } before :each do - visit '/admin/orders/bulk_management' - wait_until { request_monitor_finished 'LineItemsCtrl' } + visit_bulk_order_management end it "displays a select box for producers, which filters line items by the selected supplier" do @@ -300,8 +297,7 @@ feature %q{ let!(:li2) { create(:line_item, order: o2 ) } before :each do - visit '/admin/orders/bulk_management' - wait_until { request_monitor_finished 'LineItemsCtrl' } + visit_bulk_order_management end it "displays a select box for distributors, which filters line items by the selected distributor" do @@ -340,8 +336,7 @@ feature %q{ let!(:li2) { create(:line_item, order: o2 ) } before do - visit '/admin/orders/bulk_management' - wait_until { request_monitor_finished 'LineItemsCtrl' } + visit_bulk_order_management end it "displays a select box for order cycles, which filters line items by the selected order cycle" do @@ -381,8 +376,7 @@ feature %q{ let!(:li2) { create(:line_item, order: o2, product: p2 ) } before :each do - visit '/admin/orders/bulk_management' - wait_until { request_monitor_finished 'LineItemsCtrl' } + visit_bulk_order_management end it "allows filters to be used in combination" do @@ -432,8 +426,7 @@ feature %q{ let!(:li3) { create(:line_item, order: o3 ) } before :each do - visit '/admin/orders/bulk_management' - wait_until { request_monitor_finished 'LineItemsCtrl' } + visit_bulk_order_management end it "displays a quick search input" do @@ -462,8 +455,7 @@ feature %q{ let!(:li4) { create(:line_item, order: o4, :quantity => 4 ) } before :each do - visit '/admin/orders/bulk_management' - wait_until { request_monitor_finished 'LineItemsCtrl' } + visit_bulk_order_management end it "displays date fields for filtering orders, with default values set" do @@ -535,8 +527,7 @@ feature %q{ let!(:li2) { create(:line_item, order: o2 ) } before :each do - visit '/admin/orders/bulk_management' - wait_until { request_monitor_finished 'LineItemsCtrl' } + visit_bulk_order_management end it "displays a checkbox for each line item in the list" do @@ -608,7 +599,7 @@ feature %q{ let!(:li2) { create(:line_item, order: o2 ) } before :each do - visit '/admin/orders/bulk_management' + visit_bulk_order_management end it "shows an edit button for line_items, which takes the user to the standard edit page for the order" do @@ -642,7 +633,7 @@ feature %q{ let!(:li2) { create(:line_item, order: o2 ) } before :each do - visit '/admin/orders/bulk_management' + visit_bulk_order_management end it "removes a line item when the relevant delete button is clicked" do @@ -652,7 +643,7 @@ feature %q{ end expect(page).to have_no_selector "a.delete-line-item", :count => 2 expect(page).to have_selector "a.delete-line-item", :count => 1 - visit '/admin/orders/bulk_management' + visit_bulk_order_management expect(page).to have_selector "a.delete-line-item", :count => 1 end end @@ -670,7 +661,7 @@ feature %q{ let!(:li4) { create(:line_item, order: o2, variant: v3, quantity: 1, max_quantity: 3 ) } before :each do - visit '/admin/orders/bulk_management' + visit_bulk_order_management within "tr#li_#{li3.id}" do find("a", text: li3.product.name + ": " + li3.variant.options_text).click end @@ -746,13 +737,18 @@ feature %q{ end it "shows only line item from orders that I distribute, and not those that I supply" do - visit '/admin/orders/bulk_management' + visit_bulk_order_management expect(page).to have_selector "tr#li_#{line_item_distributed.id}", :visible => true expect(page).to have_no_selector "tr#li_#{line_item_not_distributed.id}", :visible => true end end + def visit_bulk_order_management + visit spree.admin_bulk_order_management_path + wait_until { request_monitor_finished 'LineItemsCtrl' } + end + def select_date(date) # Wait for datepicker to open and be associated to the datepicker trigger. expect(page).to have_selector("#ui-datepicker-div") From e00a3ee263bbb364fddea1ed4e1498e9178e859d Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 8 Mar 2019 17:24:31 +1100 Subject: [PATCH 04/13] Use clearer and more reliable waiting in spec --- spec/features/admin/bulk_order_management_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/features/admin/bulk_order_management_spec.rb b/spec/features/admin/bulk_order_management_spec.rb index b5a628ccdf..dedbbcf3cc 100644 --- a/spec/features/admin/bulk_order_management_spec.rb +++ b/spec/features/admin/bulk_order_management_spec.rb @@ -746,7 +746,7 @@ feature %q{ def visit_bulk_order_management visit spree.admin_bulk_order_management_path - wait_until { request_monitor_finished 'LineItemsCtrl' } + expect(page).to have_no_text 'Loading orders' end def select_date(date) From 4574a770d307808daa9dcce398566377713a5600 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 8 Mar 2019 17:36:25 +1100 Subject: [PATCH 05/13] Synchronise dereferencing and initilising This seems to make the spec 4 times more reliable. Still failing from time to time. --- .../line_items/controllers/line_items_controller.js.coffee | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee b/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee index d0806aaa6d..b159d5091e 100644 --- a/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee +++ b/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee @@ -45,11 +45,9 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout, RequestMonitor.load $scope.orderCycles = OrderCycles.index(ams_prefix: "basic", as: "distributor", "q[orders_close_at_gt]": "#{moment().subtract(90,'days').format()}") RequestMonitor.load $scope.suppliers = Enterprises.index(action: "visible", ams_prefix: "basic", "q[is_primary_producer_eq]": "true") - RequestMonitor.load $q.all([$scope.orders.$promise, $scope.distributors.$promise, $scope.orderCycles.$promise]).then -> + RequestMonitor.load $q.all([$scope.orders.$promise, $scope.distributors.$promise, $scope.orderCycles.$promise, $scope.suppliers.$promise, $scope.lineItems.$promise]).then -> Dereferencer.dereferenceAttr $scope.orders, "distributor", Enterprises.byID Dereferencer.dereferenceAttr $scope.orders, "order_cycle", OrderCycles.byID - - RequestMonitor.load $q.all([$scope.orders.$promise, $scope.suppliers.$promise, $scope.lineItems.$promise]).then -> Dereferencer.dereferenceAttr $scope.lineItems, "supplier", Enterprises.byID Dereferencer.dereferenceAttr $scope.lineItems, "order", Orders.byID $scope.bulk_order_form.$setPristine() From 30c1a8d9248b8ae9d6318efd7a9ade3cb9d5879f Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 12 Mar 2019 08:59:59 +1100 Subject: [PATCH 06/13] Move ng-cloak CSS to components --- .../admin/{angular.css.scss => components/ng-cloak.css.scss} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/assets/stylesheets/admin/{angular.css.scss => components/ng-cloak.css.scss} (100%) diff --git a/app/assets/stylesheets/admin/angular.css.scss b/app/assets/stylesheets/admin/components/ng-cloak.css.scss similarity index 100% rename from app/assets/stylesheets/admin/angular.css.scss rename to app/assets/stylesheets/admin/components/ng-cloak.css.scss From 9e33ef8140292a5cc478c29e2e8004744b3a29d3 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 12 Mar 2019 09:09:52 +1100 Subject: [PATCH 07/13] Style ng-cloak directive --- app/assets/stylesheets/admin/components/ng-cloak.css.scss | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/admin/components/ng-cloak.css.scss b/app/assets/stylesheets/admin/components/ng-cloak.css.scss index bbb1d61c40..23a9e04777 100644 --- a/app/assets/stylesheets/admin/components/ng-cloak.css.scss +++ b/app/assets/stylesheets/admin/components/ng-cloak.css.scss @@ -1,4 +1,9 @@ // https://docs.angularjs.org/api/ng/directive/ngCloak -[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { +[ng\:cloak], +[ng-cloak], +[data-ng-cloak], +[x-ng-cloak], +.ng-cloak, +.x-ng-cloak { display: none !important; } From 6f875e83eca636a96e7dee9243a8f3081f7d112e Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 12 Mar 2019 09:10:39 +1100 Subject: [PATCH 08/13] Remove unconventional and unused ng:cloak selector --- app/assets/stylesheets/admin/components/ng-cloak.css.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/app/assets/stylesheets/admin/components/ng-cloak.css.scss b/app/assets/stylesheets/admin/components/ng-cloak.css.scss index 23a9e04777..09d7b72b4f 100644 --- a/app/assets/stylesheets/admin/components/ng-cloak.css.scss +++ b/app/assets/stylesheets/admin/components/ng-cloak.css.scss @@ -1,5 +1,4 @@ // https://docs.angularjs.org/api/ng/directive/ngCloak -[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], From 0c6a5d730b7b34977162df5d398d4a00762f350f Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 12 Mar 2019 09:12:10 +1100 Subject: [PATCH 09/13] Add spaces around HAML brackets --- app/views/spree/admin/orders/bulk_management.html.haml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/spree/admin/orders/bulk_management.html.haml b/app/views/spree/admin/orders/bulk_management.html.haml index 2edf04c837..1d2b5ed70d 100644 --- a/app/views/spree/admin/orders/bulk_management.html.haml +++ b/app/views/spree/admin/orders/bulk_management.html.haml @@ -106,11 +106,11 @@ %h1 = t("admin.orders.bulk_management.loading") - %div{ class: "sixteen columns alpha", ng: {show: '!RequestMonitor.loading && filteredLineItems.length == 0', cloak: true}} + %div{ class: "sixteen columns alpha", ng: { show: '!RequestMonitor.loading && filteredLineItems.length == 0', cloak: true } } %h1#no_results = t("admin.orders.bulk_management.no_results") - .margin-bottom-50{ ng: {hide: 'RequestMonitor.loading || filteredLineItems.length == 0', cloak: true } } + .margin-bottom-50{ ng: { hide: 'RequestMonitor.loading || filteredLineItems.length == 0', cloak: true } } %form{ name: 'bulk_order_form' } %table.index#listing_orders.bulk{ :class => "sixteen columns alpha", ng: { show: "initialized" } } %thead @@ -157,7 +157,7 @@ = t("admin.orders.bulk_management.ask") %input{ :type => 'checkbox', 'ng-model' => "confirmDelete" } - %tr.line_item{ ng: {repeat: "line_item in filteredLineItems = ( lineItems | filter:quickSearch | selectFilter:supplierFilter:distributorFilter:orderCycleFilter | variantFilter:selectedUnitsProduct:selectedUnitsVariant:sharedResource | orderBy:sorting.predicate:sorting.reverse )", 'class-even' => "'even'", 'class-odd' => "'odd'", attr: { id: "li_{{line_item.id}}" } } } + %tr.line_item{ ng: { repeat: "line_item in filteredLineItems = ( lineItems | filter:quickSearch | selectFilter:supplierFilter:distributorFilter:orderCycleFilter | variantFilter:selectedUnitsProduct:selectedUnitsVariant:sharedResource | orderBy:sorting.predicate:sorting.reverse )", 'class-even' => "'even'", 'class-odd' => "'odd'", attr: { id: "li_{{line_item.id}}" } } } %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 }} From af9e80e55d95694f55bcc2aa56cd6ce80955ef9a Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 12 Mar 2019 09:46:27 +1100 Subject: [PATCH 10/13] Load data after all callbacks are installed --- .../line_items/controllers/line_items_controller.js.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee b/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee index b159d5091e..b5e5922f8f 100644 --- a/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee +++ b/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee @@ -57,8 +57,6 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout, $timeout -> $scope.resetSelectFilters() - $scope.refreshData() - $scope.$watch 'bulk_order_form.$dirty', (newVal, oldVal) -> if newVal == true StatusMessage.display 'notice', t('js.unsaved_changes') @@ -152,3 +150,5 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout, if lineItem.quantity > 0 lineItem.final_weight_volume = LineItems.pristineByID[lineItem.id].final_weight_volume * lineItem.quantity / LineItems.pristineByID[lineItem.id].quantity $scope.weightAdjustedPrice(lineItem) + + $scope.refreshData() From 49a6b5224d5b252cb34ddb697dd68fae0095cbb6 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 12 Mar 2019 09:46:50 +1100 Subject: [PATCH 11/13] Remove duplicate expectations from spec --- spec/features/admin/bulk_order_management_spec.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/spec/features/admin/bulk_order_management_spec.rb b/spec/features/admin/bulk_order_management_spec.rb index dedbbcf3cc..2776bb8de2 100644 --- a/spec/features/admin/bulk_order_management_spec.rb +++ b/spec/features/admin/bulk_order_management_spec.rb @@ -315,10 +315,8 @@ feature %q{ end it "displays all line items when 'All' is selected from distributor filter" do - expect(page).to have_selector "tr#li_#{li1.id}" expect(page).to have_selector "tr#li_#{li2.id}" select2_select d1.name, from: "distributor_filter" - expect(page).to have_selector "tr#li_#{li1.id}" expect(page).to have_no_selector "tr#li_#{li2.id}" select2_select "All", from: "distributor_filter" expect(page).to have_selector "tr#li_#{li1.id}" From 7270a9e8e8e9222083a2c1665f26e885dcfdfc1e Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 12 Mar 2019 16:37:43 +1100 Subject: [PATCH 12/13] DRY date calculation in BOM js This also minimises the risk of values changing in the meantime. --- .../controllers/line_items_controller.js.coffee | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee b/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee index b5e5922f8f..6107760307 100644 --- a/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee +++ b/app/assets/javascripts/admin/line_items/controllers/line_items_controller.js.coffee @@ -26,18 +26,21 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout, $scope.startDate = moment(OrderCycles.byID[$scope.orderCycleFilter].orders_open_at).format('YYYY-MM-DD') $scope.endDate = moment(OrderCycles.byID[$scope.orderCycleFilter].orders_close_at).startOf('day').format('YYYY-MM-DD') + formatted_start_date = moment($scope.startDate).format() + formatted_end_date = moment($scope.endDate).add(1,'day').format() + RequestMonitor.load $scope.orders = Orders.index( "q[state_not_eq]": "canceled", "q[completed_at_not_null]": "true", - "q[completed_at_gteq]": "#{moment($scope.startDate).format()}", - "q[completed_at_lt]": "#{moment($scope.endDate).add(1,'day').format()}" + "q[completed_at_gteq]": formatted_start_date, + "q[completed_at_lt]": formatted_end_date ) RequestMonitor.load $scope.lineItems = LineItems.index( "q[order][state_not_eq]": "canceled", "q[order][completed_at_not_null]": "true", - "q[order][completed_at_gteq]": "#{moment($scope.startDate).format()}", - "q[order][completed_at_lt]": "#{moment($scope.endDate).add(1,'day').format()}" + "q[order][completed_at_gteq]": formatted_start_date, + "q[order][completed_at_lt]": formatted_end_date ) unless $scope.initialized From d129665d439671d82eeba89f7cb8c80e4eb0920a Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 12 Mar 2019 17:10:13 +1100 Subject: [PATCH 13/13] Wait for orders being loaded in bulk order manage The bulk order management page tried to wait for orders being loaded. But instead of receiving a request object with an a promise to wait for the page received a simple array without promise. As a result, the page didn't wait for orders being loaded. When loading of orders took longer than loading of line items they or at least not all of them were enriched with distributors and order cycles and the line items were missing some orders. That lead to random spec failures. --- .../javascripts/admin/resources/services/orders.js.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/admin/resources/services/orders.js.coffee b/app/assets/javascripts/admin/resources/services/orders.js.coffee index 5eef10eecb..3d266aa48d 100644 --- a/app/assets/javascripts/admin/resources/services/orders.js.coffee +++ b/app/assets/javascripts/admin/resources/services/orders.js.coffee @@ -9,7 +9,7 @@ angular.module("admin.resources").factory 'Orders', ($q, OrderResource, RequestM request = OrderResource.index params, (data) => @load(data) (callback || angular.noop)(data) - RequestMonitor.load(request.$promise) + @all.$promise = request.$promise @all load: (data) ->