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/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/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/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..47ce053c140 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]