From 055961b6c22242aa513e9c713ae5054ec30d1d8d Mon Sep 17 00:00:00 2001 From: jaspreet21anand Date: Tue, 8 Mar 2016 17:08:49 +0530 Subject: [PATCH 1/2] assign default store when creating order from admin/api No default store were assigned when we created order from admin end or from api this rose exception in emails where url creation helpers based on stores where used this issue was raised in spree_digital where we used to provide links for downloading in emails https://github.com/spree-contrib/spree_digital/issues/92 --- backend/app/controllers/spree/admin/orders_controller.rb | 3 ++- core/lib/spree/core/controller_helpers/strong_parameters.rb | 3 ++- core/lib/spree/core/importer/order.rb | 1 + core/lib/spree/permitted_attributes.rb | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/backend/app/controllers/spree/admin/orders_controller.rb b/backend/app/controllers/spree/admin/orders_controller.rb index 1c7392db8ca..54ec9b33dcc 100644 --- a/backend/app/controllers/spree/admin/orders_controller.rb +++ b/backend/app/controllers/spree/admin/orders_controller.rb @@ -128,7 +128,8 @@ def close_adjustments private def order_params params[:created_by_id] = try_spree_current_user.try(:id) - params.permit(:created_by_id, :user_id) + params[:store_id] ||= current_store.id + params.permit(:created_by_id, :user_id, :store_id) end def load_order diff --git a/core/lib/spree/core/controller_helpers/strong_parameters.rb b/core/lib/spree/core/controller_helpers/strong_parameters.rb index 78e75798556..4feb885bb97 100644 --- a/core/lib/spree/core/controller_helpers/strong_parameters.rb +++ b/core/lib/spree/core/controller_helpers/strong_parameters.rb @@ -27,7 +27,8 @@ def permitted_checkout_attributes def permitted_order_attributes permitted_checkout_attributes + [ - line_items_attributes: permitted_line_item_attributes + line_items_attributes: permitted_line_item_attributes, + store_attributes: permitted_store_attributes ] end diff --git a/core/lib/spree/core/importer/order.rb b/core/lib/spree/core/importer/order.rb index 6d383799a5b..637a2700988 100644 --- a/core/lib/spree/core/importer/order.rb +++ b/core/lib/spree/core/importer/order.rb @@ -12,6 +12,7 @@ def self.import(user, params) create_params = params.slice :currency order = Spree::Order.create! create_params + order.update(store: Spree::Store.default) unless order.store order.associate_user!(user) shipments_attrs = params.delete(:shipments_attributes) diff --git a/core/lib/spree/permitted_attributes.rb b/core/lib/spree/permitted_attributes.rb index 818e41e15da..69880dd3bb5 100644 --- a/core/lib/spree/permitted_attributes.rb +++ b/core/lib/spree/permitted_attributes.rb @@ -90,7 +90,7 @@ module PermittedAttributes @@stock_movement_attributes = [ :quantity, :stock_item, :stock_item_id, :originator, :action] - @@store_attributes = [:name, :url, :seo_title, :meta_keywords, + @@store_attributes = [:id, :name, :url, :seo_title, :meta_keywords, :meta_description, :default_currency, :mail_from_address] @@store_credit_attributes = [:amount, :category_id, :memo] From c4bd56555e18b2f3749905687940e6e83792cc7a Mon Sep 17 00:00:00 2001 From: jaspreet21anand Date: Wed, 9 Mar 2016 14:57:37 +0530 Subject: [PATCH 2/2] add specs for assigning default store to order when creating from admin end or api --- .../spree/api/v1/orders_controller_spec.rb | 17 +++++++++++++++++ .../spree/admin/orders_controller_spec.rb | 14 +++++++++++++- core/lib/spree/core/importer/order.rb | 2 +- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/api/spec/controllers/spree/api/v1/orders_controller_spec.rb b/api/spec/controllers/spree/api/v1/orders_controller_spec.rb index ff90f03da8d..4ca069f8864 100755 --- a/api/spec/controllers/spree/api/v1/orders_controller_spec.rb +++ b/api/spec/controllers/spree/api/v1/orders_controller_spec.rb @@ -23,6 +23,19 @@ module Spree user end + shared_examples_for 'action in which order has default store assigned' do + it 'default store should be assigned' do + Spree::Store.create!( + name: "Jaspreet's store", code: 'jaspreet21anand', + url: 'vinsol.com', mail_from_address: 'jaspreet21anand@gmail.com', + default: true + ) + expect { api_post :create }.not_to raise_error + order = Order.last + expect(order.store).to eq(Spree::Store.default) + end + end + before do stub_authentication! end @@ -245,6 +258,8 @@ module Spree expect(json_response["user_id"]).to eq(current_api_user.id) end + it_should_behave_like 'action in which order has default store assigned' + it "assigns email when creating a new order" do api_post :create, :order => { :email => "guest@spreecommerce.com" } expect(json_response['email']).not_to eq controller.current_api_user @@ -669,6 +684,8 @@ def clean_address(address) expect(json_response["state"]).to eq("cart") end + it_should_behave_like 'action in which order has default store assigned' + it "can arbitrarily set the line items price" do api_post :create, order: { line_items: [{ price: 33.0, variant_id: variant.to_param, quantity: 5 }] diff --git a/backend/spec/controllers/spree/admin/orders_controller_spec.rb b/backend/spec/controllers/spree/admin/orders_controller_spec.rb index 870c27bbf65..cc24e6e0fa4 100644 --- a/backend/spec/controllers/spree/admin/orders_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/orders_controller_spec.rb @@ -76,10 +76,22 @@ def initialize(user) # Test for #3346 context "#new" do - it "a new order has the current user assigned as a creator" do + before do + Spree::Store.create!( + name: "Jaspreet's store", code: 'jaspreet21anand', + url: 'vinsol.com', mail_from_address: 'jaspreet21anand@gmail.com', + default: true + ) spree_get :new + end + + it "a new order has the current user assigned as a creator" do expect(assigns[:order].created_by).to eq(controller.try_spree_current_user) end + + it "a new order has default store assigned when no param for store is present" do + expect(assigns[:order].store).to eq(Spree::Store.default) + end end # Regression test for #3684 diff --git a/core/lib/spree/core/importer/order.rb b/core/lib/spree/core/importer/order.rb index 637a2700988..47ce053c140 100644 --- a/core/lib/spree/core/importer/order.rb +++ b/core/lib/spree/core/importer/order.rb @@ -12,7 +12,7 @@ def self.import(user, params) create_params = params.slice :currency order = Spree::Order.create! create_params - order.update(store: Spree::Store.default) unless order.store + order.update!(store: Spree::Store.default) unless order.store order.associate_user!(user) shipments_attrs = params.delete(:shipments_attributes)