From 5fdb86ae4361cb8fdb416f68cca36ecd7c78d161 Mon Sep 17 00:00:00 2001 From: luisramos0 Date: Sun, 3 Nov 2019 13:28:47 +0000 Subject: [PATCH] Make simple create redirect to OC list but normal create to jump to incoming settings --- .../order_cycles/services/order_cycle.js.coffee | 5 ++++- app/controllers/admin/order_cycles_controller.rb | 2 +- app/views/admin/order_cycles/new.html.haml | 4 +++- .../admin/order_cycles_controller_spec.rb | 12 +++++++++++- .../services/order_cycle_spec.js.coffee | 15 +++++++++++++-- 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/admin/order_cycles/services/order_cycle.js.coffee b/app/assets/javascripts/admin/order_cycles/services/order_cycle.js.coffee index a10d599c9e..58493d0214 100644 --- a/app/assets/javascripts/admin/order_cycles/services/order_cycle.js.coffee +++ b/app/assets/javascripts/admin/order_cycles/services/order_cycle.js.coffee @@ -150,7 +150,10 @@ angular.module('admin.orderCycles').factory 'OrderCycle', ($resource, $window, S create: (destination) -> oc = new OrderCycleResource({order_cycle: this.dataForSubmit()}) oc.$create (data) -> - $window.location = destination + if destination? && destination.length != 0 + $window.location = destination + else if data.edit_path? + $window.location = data.edit_path , (response) -> if response.data.errors? StatusMessage.display('failure', response.data.errors[0]) diff --git a/app/controllers/admin/order_cycles_controller.rb b/app/controllers/admin/order_cycles_controller.rb index 23740b16ff..a414a5b819 100644 --- a/app/controllers/admin/order_cycles_controller.rb +++ b/app/controllers/admin/order_cycles_controller.rb @@ -43,7 +43,7 @@ module Admin if @order_cycle_form.save flash[:notice] = I18n.t(:order_cycles_create_notice) - render json: { success: true } + render json: { success: true, edit_path: main_app.admin_order_cycle_incoming_path(@order_cycle) } else render json: { errors: @order_cycle.errors.full_messages }, status: :unprocessable_entity end diff --git a/app/views/admin/order_cycles/new.html.haml b/app/views/admin/order_cycles/new.html.haml index 6a67f4fc14..b6c4a43700 100644 --- a/app/views/admin/order_cycles/new.html.haml +++ b/app/views/admin/order_cycles/new.html.haml @@ -7,7 +7,9 @@ = form_for [main_app, :admin, @order_cycle], :url => '', :html => {:class => 'ng order_cycle', 'ng-app' => 'admin.orderCycles', 'ng-controller' => ng_controller, name: 'order_cycle_form'} do |f| %save-bar{ dirty: "order_cycle_form.$dirty", persist: "true" } - %input.red{ type: "button", value: t('.create'), ng: { click: "submit($event, '#{main_app.admin_order_cycles_path}')", disabled: "!order_cycle_form.$dirty || order_cycle_form.$invalid" } } + - if order_cycles_simple_form + - custom_redirect_path = main_app.admin_order_cycles_path + %input.red{ type: "button", value: t('.create'), ng: { click: "submit($event, '#{custom_redirect_path}')", disabled: "!order_cycle_form.$dirty || order_cycle_form.$invalid" } } %input{ type: "button", ng: { value: "order_cycle_form.$dirty ? '#{t('.cancel')}' : '#{t('.back_to_list')}'", click: "cancel('#{main_app.admin_order_cycles_path}')" } } - if order_cycles_simple_form diff --git a/spec/controllers/admin/order_cycles_controller_spec.rb b/spec/controllers/admin/order_cycles_controller_spec.rb index 4df355f595..67169a1047 100644 --- a/spec/controllers/admin/order_cycles_controller_spec.rb +++ b/spec/controllers/admin/order_cycles_controller_spec.rb @@ -111,10 +111,20 @@ module Admin context "when creation is successful" do before { allow(form_mock).to receive(:save) { true } } - it "returns success: true" do + # mock build_resource so that we can control the edit_path + OrderCyclesController.class_eval do + def build_resource + order_cycle = OrderCycle.new + order_cycle.id = 1 + order_cycle + end + end + + it "returns success: true and a valid edit path" do spree_post :create, params json_response = JSON.parse(response.body) expect(json_response['success']).to be true + expect(json_response['edit_path']).to eq "/admin/order_cycles/1/incoming" end end diff --git a/spec/javascripts/unit/admin/order_cycles/services/order_cycle_spec.js.coffee b/spec/javascripts/unit/admin/order_cycles/services/order_cycle_spec.js.coffee index 18f07406d8..4570f8d545 100644 --- a/spec/javascripts/unit/admin/order_cycles/services/order_cycle_spec.js.coffee +++ b/spec/javascripts/unit/admin/order_cycles/services/order_cycle_spec.js.coffee @@ -348,17 +348,28 @@ describe 'OrderCycle service', -> beforeEach -> spyOn(OrderCycle, 'confirmNoDistributors').and.returnValue true - it 'redirects to the destination page on success', -> + it 'redirects to the given destination on success', -> OrderCycle.order_cycle = 'this is the order cycle' spyOn(OrderCycle, 'dataForSubmit').and.returnValue('this is the submit data') $httpBackend.expectPOST('/admin/order_cycles.json', { order_cycle: 'this is the submit data' - }).respond {success: true} + }).respond {success: true, edit_path: "/edit/path"} OrderCycle.create('/destination/page') $httpBackend.flush() expect($window.location).toEqual('/destination/page') + it 'redirects to the edit_path on success if no destination is given', -> + OrderCycle.order_cycle = 'this is the order cycle' + spyOn(OrderCycle, 'dataForSubmit').and.returnValue('this is the submit data') + $httpBackend.expectPOST('/admin/order_cycles.json', { + order_cycle: 'this is the submit data' + }).respond {success: true, edit_path: "/edit/path"} + + OrderCycle.create() + $httpBackend.flush() + expect($window.location).toEqual('/edit/path') + it 'does not redirect on error', -> OrderCycle.order_cycle = 'this is the order cycle' spyOn(OrderCycle, 'dataForSubmit').and.returnValue('this is the submit data')