From 6279f07f177e5dcb3152bba51efb622001f95cea Mon Sep 17 00:00:00 2001 From: Ryan Bigg Date: Thu, 15 May 2014 16:26:33 +1000 Subject: [PATCH 001/238] Bump to 2.2.3.beta --- SPREE_VERSION | 2 +- cmd/lib/spree_cmd/extension.rb | 2 +- core/lib/spree/core/version.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SPREE_VERSION b/SPREE_VERSION index b1b25a5ffae..fd4bf9bdd26 100644 --- a/SPREE_VERSION +++ b/SPREE_VERSION @@ -1 +1 @@ -2.2.2 +2.2.3.beta \ No newline at end of file diff --git a/cmd/lib/spree_cmd/extension.rb b/cmd/lib/spree_cmd/extension.rb index 74ac6cef8f6..6181d71a5bf 100644 --- a/cmd/lib/spree_cmd/extension.rb +++ b/cmd/lib/spree_cmd/extension.rb @@ -50,7 +50,7 @@ def class_name end def spree_version - '2.2.2' + '2.2.3.beta' end def use_prefix(prefix) diff --git a/core/lib/spree/core/version.rb b/core/lib/spree/core/version.rb index fe04d2a42a0..87dc3eae0aa 100644 --- a/core/lib/spree/core/version.rb +++ b/core/lib/spree/core/version.rb @@ -1,5 +1,5 @@ module Spree def self.version - "2.2.2" + "2.2.3.beta" end end From 7b4e359b4f1a284471ef2913e25c9b6f5e94c48a Mon Sep 17 00:00:00 2001 From: Washington Luiz Date: Mon, 19 May 2014 14:29:30 -0400 Subject: [PATCH 002/238] Set CreditCard#confirmation_value when reusing cards Allow gateways to double check that value when reusing the card --- core/app/models/spree/order/checkout.rb | 2 ++ core/spec/models/spree/order/checkout_spec.rb | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/core/app/models/spree/order/checkout.rb b/core/app/models/spree/order/checkout.rb index 938045e5795..7c444008a61 100644 --- a/core/app/models/spree/order/checkout.rb +++ b/core/app/models/spree/order/checkout.rb @@ -237,6 +237,8 @@ def update_from_params(params, permitted_params) raise Core::GatewayError.new Spree.t(:invalid_credit_card) end + credit_card.verification_value = params[:cvc_confirm] if params[:cvc_confirm].present? + attributes[:payments_attributes].first[:source] = credit_card attributes[:payments_attributes].first[:payment_method_id] = credit_card.payment_method_id attributes[:payments_attributes].first.delete :source_attributes diff --git a/core/spec/models/spree/order/checkout_spec.rb b/core/spec/models/spree/order/checkout_spec.rb index dc39baaccf6..a3f411baa13 100644 --- a/core/spec/models/spree/order/checkout_spec.rb +++ b/core/spec/models/spree/order/checkout_spec.rb @@ -571,6 +571,7 @@ class SubclassedOrder < Spree::Order describe 'update_from_params' do let(:permitted_params) { {} } let(:params) { {} } + it 'calls update_atributes without order params' do order.should_receive(:update_attributes).with({}) order.update_from_params( params, permitted_params) @@ -593,6 +594,7 @@ class SubclassedOrder < Spree::Order ActionController::Parameters.new( order: { payments_attributes: [{payment_method_id: 1}] }, existing_card: credit_card.id, + cvc_confirm: "737", payment_source: { "1" => { name: "Luis Braga", number: "4111 1111 1111 1111", @@ -605,6 +607,12 @@ class SubclassedOrder < Spree::Order before { order.user_id = 3 } + it "sets confirmation value when its available via :cvc_confirm" do + Spree::CreditCard.stub find: credit_card + expect(credit_card).to receive(:verification_value=) + order.update_from_params(params, permitted_params) + end + it "sets existing card as source for new payment" do expect { order.update_from_params(params, permitted_params) From f568c901ee409b5264c104720292974b487e194e Mon Sep 17 00:00:00 2001 From: BGuimberteau Date: Tue, 13 May 2014 09:29:22 +0200 Subject: [PATCH 003/238] Add I18n.locale for views cache [Fixes spree/spree#4673] [Fixes spree/spree#4678] Conflicts: api/app/views/spree/api/shipments/small.v1.rabl frontend/spec/features/caching/products_spec.rb --- api/app/views/spree/api/addresses/show.v1.rabl | 2 +- .../views/spree/api/adjustments/show.v1.rabl | 4 ++-- .../views/spree/api/credit_cards/show.v1.rabl | 4 ++-- .../views/spree/api/line_items/show.v1.rabl | 2 +- api/app/views/spree/api/orders/order.v1.rabl | 2 +- api/app/views/spree/api/products/show.v1.rabl | 2 +- api/app/views/spree/api/shipments/show.v1.rabl | 2 +- api/app/views/spree/api/variants/big.v1.rabl | 2 +- api/app/views/spree/api/variants/show.v1.rabl | 2 +- api/app/views/spree/api/variants/small.v1.rabl | 2 +- core/app/helpers/spree/products_helper.rb | 2 +- core/app/helpers/spree/store_helper.rb | 2 +- core/spec/helpers/products_helper_spec.rb | 4 ++-- .../app/views/spree/products/show.html.erb | 2 +- .../app/views/spree/shared/_products.html.erb | 2 +- .../views/spree/shared/_taxonomies.html.erb | 2 +- frontend/app/views/spree/taxons/show.html.erb | 2 +- .../spec/features/caching/products_spec.rb | 18 +++++++++--------- frontend/spec/features/caching/taxons_spec.rb | 6 +++--- 19 files changed, 32 insertions(+), 32 deletions(-) diff --git a/api/app/views/spree/api/addresses/show.v1.rabl b/api/app/views/spree/api/addresses/show.v1.rabl index bdb0914182e..a42326223f5 100644 --- a/api/app/views/spree/api/addresses/show.v1.rabl +++ b/api/app/views/spree/api/addresses/show.v1.rabl @@ -1,5 +1,5 @@ object @address -cache @address +cache [I18n.locale, @address] attributes *address_attributes child(:country) do |address| diff --git a/api/app/views/spree/api/adjustments/show.v1.rabl b/api/app/views/spree/api/adjustments/show.v1.rabl index fe3810baed2..da02813e63f 100644 --- a/api/app/views/spree/api/adjustments/show.v1.rabl +++ b/api/app/views/spree/api/adjustments/show.v1.rabl @@ -1,4 +1,4 @@ object @adjustment -cache @adjustment +cache [I18n.locale, @adjustment] attributes *adjustment_attributes -node(:display_amount) { |a| a.display_amount.to_s } \ No newline at end of file +node(:display_amount) { |a| a.display_amount.to_s } diff --git a/api/app/views/spree/api/credit_cards/show.v1.rabl b/api/app/views/spree/api/credit_cards/show.v1.rabl index 7aefc289076..fe1f00dc39a 100644 --- a/api/app/views/spree/api/credit_cards/show.v1.rabl +++ b/api/app/views/spree/api/credit_cards/show.v1.rabl @@ -1,3 +1,3 @@ object @credit_card -cache @credit_card -attributes *creditcard_attributes \ No newline at end of file +cache [I18n.locale, @credit_card] +attributes *creditcard_attributes diff --git a/api/app/views/spree/api/line_items/show.v1.rabl b/api/app/views/spree/api/line_items/show.v1.rabl index ac742293b61..7d661244798 100644 --- a/api/app/views/spree/api/line_items/show.v1.rabl +++ b/api/app/views/spree/api/line_items/show.v1.rabl @@ -1,5 +1,5 @@ object @line_item -cache @line_item +cache [I18n.locale, @line_item] attributes *line_item_attributes node(:single_display_amount) { |li| li.single_display_amount.to_s } node(:display_amount) { |li| li.display_amount.to_s } diff --git a/api/app/views/spree/api/orders/order.v1.rabl b/api/app/views/spree/api/orders/order.v1.rabl index c67a2f6d0df..5501cff7203 100644 --- a/api/app/views/spree/api/orders/order.v1.rabl +++ b/api/app/views/spree/api/orders/order.v1.rabl @@ -1,4 +1,4 @@ -cache @order +cache [I18n.locale, @order] attributes *order_attributes node(:display_item_total) { |o| o.display_item_total.to_s } node(:total_quantity) { |o| o.line_items.sum(:quantity) } diff --git a/api/app/views/spree/api/products/show.v1.rabl b/api/app/views/spree/api/products/show.v1.rabl index b45f8b66327..223183dca08 100644 --- a/api/app/views/spree/api/products/show.v1.rabl +++ b/api/app/views/spree/api/products/show.v1.rabl @@ -1,5 +1,5 @@ object @product -cache [current_currency, root_object] +cache [I18n.locale, current_currency, root_object] attributes *product_attributes node(:display_price) { |p| p.display_price.to_s } node(:has_variants) { |p| p.has_variants? } diff --git a/api/app/views/spree/api/shipments/show.v1.rabl b/api/app/views/spree/api/shipments/show.v1.rabl index 4320ed6db05..803bd2d8ab8 100644 --- a/api/app/views/spree/api/shipments/show.v1.rabl +++ b/api/app/views/spree/api/shipments/show.v1.rabl @@ -1,5 +1,5 @@ object @shipment -cache @shipment +cache [I18n.locale, @shipment] attributes *shipment_attributes node(:order_id) { |shipment| shipment.order.number } node(:stock_location_name) { |shipment| shipment.stock_location.name } diff --git a/api/app/views/spree/api/variants/big.v1.rabl b/api/app/views/spree/api/variants/big.v1.rabl index 5422cf329a1..dc5efaba97a 100644 --- a/api/app/views/spree/api/variants/big.v1.rabl +++ b/api/app/views/spree/api/variants/big.v1.rabl @@ -1,7 +1,7 @@ object @variant attributes *variant_attributes -cache ['big_variant', root_object] +cache [I18n.locale, 'big_variant', root_object] extends "spree/api/variants/small" diff --git a/api/app/views/spree/api/variants/show.v1.rabl b/api/app/views/spree/api/variants/show.v1.rabl index 40b286a805f..7e51886a7a9 100644 --- a/api/app/views/spree/api/variants/show.v1.rabl +++ b/api/app/views/spree/api/variants/show.v1.rabl @@ -1,3 +1,3 @@ object @variant -cache ['show', root_object] +cache [I18n.locale, 'show', root_object] extends "spree/api/variants/big" diff --git a/api/app/views/spree/api/variants/small.v1.rabl b/api/app/views/spree/api/variants/small.v1.rabl index e8afa214608..2573603b48f 100644 --- a/api/app/views/spree/api/variants/small.v1.rabl +++ b/api/app/views/spree/api/variants/small.v1.rabl @@ -1,5 +1,5 @@ attributes *variant_attributes -cache ['small_variant', root_object] +cache [I18n.locale, 'small_variant', root_object] node(:display_price) { |p| p.display_price.to_s } node(:options_text) { |v| v.options_text } diff --git a/core/app/helpers/spree/products_helper.rb b/core/app/helpers/spree/products_helper.rb index 8425e17bc2a..6847bde680c 100644 --- a/core/app/helpers/spree/products_helper.rb +++ b/core/app/helpers/spree/products_helper.rb @@ -55,7 +55,7 @@ def line_item_description_text description_text def cache_key_for_products count = @products.count max_updated_at = (@products.maximum(:updated_at) || Date.today).to_s(:number) - "#{current_currency}/spree/products/all-#{params[:page]}-#{max_updated_at}-#{count}" + "#{I18n.locale}/#{current_currency}/spree/products/all-#{params[:page]}-#{max_updated_at}-#{count}" end end end diff --git a/core/app/helpers/spree/store_helper.rb b/core/app/helpers/spree/store_helper.rb index cdb978a550a..631c9a0fce3 100644 --- a/core/app/helpers/spree/store_helper.rb +++ b/core/app/helpers/spree/store_helper.rb @@ -10,7 +10,7 @@ def store_menu? def cache_key_for_taxons max_updated_at = @taxons.maximum(:updated_at).to_i parts = [@taxon.try(:id), max_updated_at].compact.join("-") - "taxons/#{parts}" + "#{I18n.locale}/taxons/#{parts}" end end end diff --git a/core/spec/helpers/products_helper_spec.rb b/core/spec/helpers/products_helper_spec.rb index 9fa94db54b0..b3022233ce4 100644 --- a/core/spec/helpers/products_helper_spec.rb +++ b/core/spec/helpers/products_helper_spec.rb @@ -196,7 +196,7 @@ module Spree @products.stub(:maximum).with(:updated_at) { updated_at } end - it { should == 'USD/spree/products/all-10-20111213-5' } + it { should == 'en/USD/spree/products/all-10-20111213-5' } end context 'when there is no considered maximum updated date' do @@ -207,7 +207,7 @@ module Spree Date.stub(:today) { today } end - it { should == 'USD/spree/products/all-10-20131211-1234567' } + it { should == 'en/USD/spree/products/all-10-20131211-1234567' } end end end diff --git a/frontend/app/views/spree/products/show.html.erb b/frontend/app/views/spree/products/show.html.erb index 02cd9986138..56f39968004 100644 --- a/frontend/app/views/spree/products/show.html.erb +++ b/frontend/app/views/spree/products/show.html.erb @@ -1,4 +1,4 @@ -<% cache [current_currency, @product] do %> +<% cache [I18n.locale, current_currency, @product] do %>
<% @body_id = 'product-details' %> diff --git a/frontend/app/views/spree/shared/_products.html.erb b/frontend/app/views/spree/shared/_products.html.erb index acf960e0c11..b754be73818 100644 --- a/frontend/app/views/spree/shared/_products.html.erb +++ b/frontend/app/views/spree/shared/_products.html.erb @@ -20,7 +20,7 @@ <% products.each do |product| %> <% url = product_url(product, :taxon_id => @taxon.try(:id)) %>
  • "classes") %>" data-hook="products_list_item" itemscope itemtype="http://schema.org/Product"> - <% cache(@taxon.present? ? [current_currency, @taxon, product] : [current_currency, product]) do %> + <% cache(@taxon.present? ? [I18n.locale, current_currency, @taxon, product] : [I18n.locale, current_currency, product]) do %>
    <%= link_to small_image(product, :itemprop => "image"), url, :itemprop => 'url' %>
    diff --git a/frontend/app/views/spree/shared/_taxonomies.html.erb b/frontend/app/views/spree/shared/_taxonomies.html.erb index 86a33320757..71e95e2a195 100644 --- a/frontend/app/views/spree/shared/_taxonomies.html.erb +++ b/frontend/app/views/spree/shared/_taxonomies.html.erb @@ -1,7 +1,7 @@ <% max_level = Spree::Config[:max_level_in_taxons_menu] || 1 %>
  • From 20910c52d384ef16c3da98508c6a7e92bb5cb6f1 Mon Sep 17 00:00:00 2001 From: Andrew Thal Date: Mon, 27 Oct 2014 13:35:15 -0400 Subject: [PATCH 195/238] Make email field in admin orders#index link to the customer's account page fixes spree/spree#5539 Conflicts: backend/app/views/spree/admin/orders/index.html.erb --- backend/app/views/spree/admin/orders/index.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/app/views/spree/admin/orders/index.html.erb b/backend/app/views/spree/admin/orders/index.html.erb index 84099fbdcec..8dda10b45eb 100644 --- a/backend/app/views/spree/admin/orders/index.html.erb +++ b/backend/app/views/spree/admin/orders/index.html.erb @@ -135,7 +135,7 @@ <% if order.user %> <%= link_to order.email, edit_admin_user_path(order.user) %> <% else %> - <%= order.email %> + <%= mail_to order.email %> <% end %> <%= order.display_total.to_html %> From 35de32bd5cc14f42bd1389923e1e6736bbe7bf77 Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Tue, 28 Oct 2014 17:41:26 -0400 Subject: [PATCH 196/238] Fix optimistic lock to not revert incremented version. Conflicts: frontend/spec/controllers/spree/checkout_controller_spec.rb frontend/spec/controllers/spree/checkout_controller_with_views_spec.rb --- core/lib/spree/permitted_attributes.rb | 3 +- .../controllers/spree/checkout_controller.rb | 3 +- .../spree/checkout_controller_spec.rb | 92 +++++++++---------- .../checkout_controller_with_views_spec.rb | 6 +- frontend/spec/features/checkout_spec.rb | 30 ++++-- 5 files changed, 73 insertions(+), 61 deletions(-) diff --git a/core/lib/spree/permitted_attributes.rb b/core/lib/spree/permitted_attributes.rb index ba494010c3c..de4a4066575 100644 --- a/core/lib/spree/permitted_attributes.rb +++ b/core/lib/spree/permitted_attributes.rb @@ -36,8 +36,7 @@ module PermittedAttributes ] @@checkout_attributes = [ - :coupon_code, :email, :shipping_method_id, :special_instructions, - :state_lock_version, :use_billing + :coupon_code, :email, :shipping_method_id, :special_instructions, :use_billing ] @@customer_return_attributes = [:stock_location_id, return_items_attributes: [:id, :inventory_unit_id, :return_authorization_id, :returned, :pre_tax_amount, :reception_status_event, :acceptance_status, :exchange_variant_id, :resellable]] diff --git a/frontend/app/controllers/spree/checkout_controller.rb b/frontend/app/controllers/spree/checkout_controller.rb index b7513e154a3..a428f2a6de1 100644 --- a/frontend/app/controllers/spree/checkout_controller.rb +++ b/frontend/app/controllers/spree/checkout_controller.rb @@ -85,7 +85,7 @@ def load_order def ensure_valid_state_lock_version if params[:order] && params[:order][:state_lock_version] @order.with_lock do - unless @order.state_lock_version == params[:order][:state_lock_version].to_i + unless @order.state_lock_version == params[:order].delete(:state_lock_version).to_i flash[:error] = Spree.t(:order_already_updated) redirect_to checkout_state_path(@order.state) and return end @@ -95,7 +95,6 @@ def ensure_valid_state_lock_version end def set_state_if_present - if params[:state] redirect_to checkout_state_path(@order.state) if @order.can_go_to_state?(params[:state]) && !skip_state_validation? @order.state = params[:state] diff --git a/frontend/spec/controllers/spree/checkout_controller_spec.rb b/frontend/spec/controllers/spree/checkout_controller_spec.rb index ed2406a100c..f0d15a676ce 100644 --- a/frontend/spec/controllers/spree/checkout_controller_spec.rb +++ b/frontend/spec/controllers/spree/checkout_controller_spec.rb @@ -11,9 +11,9 @@ end before do - controller.stub :try_spree_current_user => user - controller.stub :spree_current_user => user - controller.stub :current_order => order + allow(controller).to receive_messages try_spree_current_user: user + allow(controller).to receive_messages spree_current_user: user + allow(controller).to receive_messages current_order: order end context "#edit" do @@ -197,6 +197,49 @@ def spree_post_address session[:order_id].should be_nil end end + + # Regression test for #4190 + context "state_lock_version" do + let(:post_params) { + { + state: "address", + order: { + bill_address_attributes: order.bill_address.attributes.except("created_at", "updated_at"), + state_lock_version: 0, + use_billing: true + } + } + } + + context "correct" do + it "should properly update and increment version" do + spree_post :update, post_params + expect(order.state_lock_version).to eq 1 + end + end + + context "incorrect" do + before do + order.update_columns(state_lock_version: 1, state: "address") + end + + it "order should receieve ensure_valid_order_version callback" do + expect_any_instance_of(described_class).to receive(:ensure_valid_state_lock_version) + spree_post :update, post_params + end + + it "order should receieve with_lock message" do + expect(order).to receive(:with_lock) + spree_post :update, post_params + end + + it "redirects back to current state" do + spree_post :update, post_params + expect(response).to redirect_to spree.checkout_state_path('address') + expect(flash[:error]).to eq "The order has already been updated." + end + end + end end context "save unsuccessful" do @@ -220,49 +263,6 @@ def spree_post_address end end - # Regression test for #4190 - context "state_lock_version" do - let(:post_params) { - { - state: "address", - order: { - bill_address_attributes: order.bill_address.attributes.except("created_at", "updated_at"), - state_lock_version: 0, - use_billing: true - } - } - } - - context "correct" do - it "should properly update and increment version" do - spree_post :update, post_params - expect(order.state_lock_version).to eq 1 - end - end - - context "incorrect" do - before do - order.update_columns(state_lock_version: 1, state: "address") - end - - it "order should receieve ensure_valid_order_version callback" do - expect_any_instance_of(described_class).to receive(:ensure_valid_state_lock_version) - spree_post :update, post_params - end - - it "order should receieve with_lock message" do - expect(order).to receive(:with_lock) - spree_post :update, post_params - end - - it "redirects back to current state" do - spree_post :update, post_params - expect(response).to redirect_to spree.checkout_state_path('address') - expect(flash[:error]).to eq "The order has already been updated." - end - end - end - context "when current_order is nil" do before { controller.stub :current_order => nil } diff --git a/frontend/spec/controllers/spree/checkout_controller_with_views_spec.rb b/frontend/spec/controllers/spree/checkout_controller_with_views_spec.rb index 3343d84091c..0058698ebc2 100644 --- a/frontend/spec/controllers/spree/checkout_controller_with_views_spec.rb +++ b/frontend/spec/controllers/spree/checkout_controller_with_views_spec.rb @@ -3,13 +3,13 @@ # This spec is useful for when we just want to make sure a view is rendering correctly # Walking through the entire checkout process is rather tedious, don't you think? -describe Spree::CheckoutController do +describe Spree::CheckoutController, type: :controller do render_views let(:token) { 'some_token' } let(:user) { create(:user) } before do - controller.stub :try_spree_current_user => user + allow(controller).to receive_messages try_spree_current_user: user end # Regression test for #3246 @@ -23,7 +23,7 @@ # Using a let block won't acknowledge the currency setting # Therefore we just do it like this... order = OrderWalkthrough.up_to(:address) - controller.stub :current_order => order + allow(controller).to receive_messages current_order: order end it "displays rate cost in correct currency" do diff --git a/frontend/spec/features/checkout_spec.rb b/frontend/spec/features/checkout_spec.rb index 096422f5047..f4dca526daf 100644 --- a/frontend/spec/features/checkout_spec.rb +++ b/frontend/spec/features/checkout_spec.rb @@ -80,6 +80,20 @@ end end end + + # Regression test for #4190 + it "updates state_lock_version on form submission", js: true do + add_mug_to_cart + click_button "Checkout" + + expect(find('input#order_state_lock_version', visible: false).value).to eq "0" + + fill_in "order_email", with: "test@example.com" + fill_in_address + click_button "Save and Continue" + + expect(find('input#order_state_lock_version', visible: false).value).to eq "1" + end end # Regression test for #2694 and #4117 @@ -432,14 +446,14 @@ def fill_in_address address = "order_bill_address_attributes" - fill_in "#{address}_firstname", :with => "Ryan" - fill_in "#{address}_lastname", :with => "Bigg" - fill_in "#{address}_address1", :with => "143 Swan Street" - fill_in "#{address}_city", :with => "Richmond" - select "United States of America", :from => "#{address}_country_id" - select "Alabama", :from => "#{address}_state_id" - fill_in "#{address}_zipcode", :with => "12345" - fill_in "#{address}_phone", :with => "(555) 555-5555" + fill_in "#{address}_firstname", with: "Ryan" + fill_in "#{address}_lastname", with: "Bigg" + fill_in "#{address}_address1", with: "143 Swan Street" + fill_in "#{address}_city", with: "Richmond" + select "United States of America", from: "#{address}_country_id" + select "Alabama", from: "#{address}_state_id" + fill_in "#{address}_zipcode", with: "12345" + fill_in "#{address}_phone", with: "(555) 555-5555" end def add_mug_to_cart From a10395408f222669c23794b6b2fdcfe05c508f7d Mon Sep 17 00:00:00 2001 From: Kento Date: Mon, 3 Nov 2014 21:34:55 +0900 Subject: [PATCH 197/238] Fix pagination in /api/taxons/products fixes spree/spree#5554 --- api/app/controllers/spree/api/taxons_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/app/controllers/spree/api/taxons_controller.rb b/api/app/controllers/spree/api/taxons_controller.rb index 72253489b16..02e03678df8 100644 --- a/api/app/controllers/spree/api/taxons_controller.rb +++ b/api/app/controllers/spree/api/taxons_controller.rb @@ -65,7 +65,7 @@ def products # Products#index does not do the sorting. taxon = Spree::Taxon.find(params[:id]) @products = taxon.products.ransack(params[:q]).result - @products = @products.page(params[:page]).per(500 || params[:per_page]) + @products = @products.page(params[:page]).per(params[:per_page] || 500) render "spree/api/products/index" end From 6d240972675a759652e6c03ef27e05a9cdaecf24 Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Wed, 5 Nov 2014 15:08:34 -0500 Subject: [PATCH 198/238] Allow tax categories to be destroyed with proper callback order. Fixes spree/spree#5548 Fixes spree/spree#5549 Conflicts: core/app/models/spree/tax_rate.rb --- core/app/models/spree/tax_rate.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/app/models/spree/tax_rate.rb b/core/app/models/spree/tax_rate.rb index e7d0fdc7e4d..2e4d81ba14d 100644 --- a/core/app/models/spree/tax_rate.rb +++ b/core/app/models/spree/tax_rate.rb @@ -11,8 +11,13 @@ def validate(record) module Spree class TaxRate < ActiveRecord::Base acts_as_paranoid + + # Need to deal with adjustments before calculator is destroyed. + before_destroy :deals_with_adjustments_for_deleted_source + include Spree::Core::CalculatedAdjustments include Spree::Core::AdjustmentSource + belongs_to :zone, class_name: "Spree::Zone", inverse_of: :tax_rates belongs_to :tax_category, class_name: "Spree::TaxCategory", inverse_of: :tax_rates @@ -22,8 +27,6 @@ class TaxRate < ActiveRecord::Base validates :tax_category_id, presence: true validates_with DefaultTaxZoneValidator - before_destroy :deals_with_adjustments_for_deleted_source - scope :by_zone, ->(zone) { where(zone_id: zone) } # Gets the array of TaxRates appropriate for the specified order From bc786645cce06b80eb8fc87df211fb4926efd2d2 Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Thu, 6 Nov 2014 22:54:37 -0500 Subject: [PATCH 199/238] Make conditional read nicer. --- backend/app/controllers/spree/admin/orders_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/app/controllers/spree/admin/orders_controller.rb b/backend/app/controllers/spree/admin/orders_controller.rb index 03ef7125298..0522688b2f2 100644 --- a/backend/app/controllers/spree/admin/orders_controller.rb +++ b/backend/app/controllers/spree/admin/orders_controller.rb @@ -23,11 +23,11 @@ def index params[:q].delete(:inventory_units_shipment_id_null) if params[:q][:inventory_units_shipment_id_null] == "0" - if !params[:q][:created_at_gt].blank? + if params[:q][:created_at_gt].present? params[:q][:created_at_gt] = Time.zone.parse(params[:q][:created_at_gt]).beginning_of_day rescue "" end - if !params[:q][:created_at_lt].blank? + if params[:q][:created_at_lt].present? params[:q][:created_at_lt] = Time.zone.parse(params[:q][:created_at_lt]).end_of_day rescue "" end From 350171ecceb14f9d0596a33740809357824b262f Mon Sep 17 00:00:00 2001 From: Martin Tomov Date: Mon, 10 Nov 2014 15:58:31 +0000 Subject: [PATCH 200/238] Fix Asset position for different viewables. fixes spree/spree#5590 --- core/app/models/spree/asset.rb | 2 +- core/spec/models/spree/asset_spec.rb | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/core/app/models/spree/asset.rb b/core/app/models/spree/asset.rb index 4e0f7d81f0f..fde8ac65394 100644 --- a/core/app/models/spree/asset.rb +++ b/core/app/models/spree/asset.rb @@ -1,6 +1,6 @@ module Spree class Asset < ActiveRecord::Base belongs_to :viewable, polymorphic: true, touch: true - acts_as_list scope: :viewable + acts_as_list scope: [:viewable_id, :viewable_type] end end diff --git a/core/spec/models/spree/asset_spec.rb b/core/spec/models/spree/asset_spec.rb index e7f70ad4a56..2bce70519e4 100644 --- a/core/spec/models/spree/asset_spec.rb +++ b/core/spec/models/spree/asset_spec.rb @@ -13,4 +13,15 @@ end.to change { product.reload.updated_at } end end + + describe "#acts_as_list scope" do + it "should start from first position for different viewables" do + asset1 = Spree::Asset.create(viewable_type: 'Spree::Image', viewable_id: 1) + asset2 = Spree::Asset.create(viewable_type: 'Spree::LineItem', viewable_id: 1) + + expect(asset1.position).to eq 1 + expect(asset2.position).to eq 1 + end + end + end From 54394596366397b1ecac6fe4cb58ec21da00737c Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Thu, 13 Nov 2014 19:10:27 -0500 Subject: [PATCH 201/238] Test latest 2.1.5 Conflicts: .travis.yml --- .travis.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6bc226849b8..6a3bf10a083 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,6 +19,4 @@ script: - bundle exec rake test_app - bundle exec rake spec rvm: - - 1.9.3 - - 2.0.0 - - 2.1.0 + - 2.1.5 From 278eab42b6c2ce8c56d06e15052354f221d684ad Mon Sep 17 00:00:00 2001 From: Ian Young Date: Fri, 14 Nov 2014 13:39:50 -0800 Subject: [PATCH 202/238] Give spec correct title. fixes spree/spree#5614 --- core/spec/models/spree/order_updater_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/spec/models/spree/order_updater_spec.rb b/core/spec/models/spree/order_updater_spec.rb index 7d455b5fad4..9c2db34f0ab 100644 --- a/core/spec/models/spree/order_updater_spec.rb +++ b/core/spec/models/spree/order_updater_spec.rb @@ -135,7 +135,7 @@ module Spree end context "order total is greater than payment total" do - it "is credit_owed" do + it "is balance_due" do order.payment_total = 1 order.total = 2 From b234e72eee66753cb29f5726a23b9ffb413d03b8 Mon Sep 17 00:00:00 2001 From: Peter Berkenbosch Date: Mon, 15 Sep 2014 09:41:57 +0200 Subject: [PATCH 203/238] set the order#payment_state to the correct state when order is canceled Fixes spree/spree#5278 Closes spree/spree#5279 Closes spree/spree#5388 return the new payment state in the update_payment_state, and add some spacing in the spec. remove the stub to make sure this is not always returning "pending" *doh* Conflicts: core/app/models/spree/order.rb core/spec/models/spree/order/state_machine_spec.rb --- core/app/models/spree/order.rb | 3 +-- core/spec/models/spree/order/state_machine_spec.rb | 7 +++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/core/app/models/spree/order.rb b/core/app/models/spree/order.rb index 1b37a9f346a..e89efe3fabe 100644 --- a/core/app/models/spree/order.rb +++ b/core/app/models/spree/order.rb @@ -580,9 +580,8 @@ def ensure_available_shipping_rates def after_cancel shipments.each { |shipment| shipment.cancel! } payments.completed.each { |payment| payment.cancel! } - send_cancel_email - self.update_column(:payment_state, 'void') unless shipped? + self.update! end def send_cancel_email diff --git a/core/spec/models/spree/order/state_machine_spec.rb b/core/spec/models/spree/order/state_machine_spec.rb index 184d71f9341..e7ac4b43d35 100644 --- a/core/spec/models/spree/order/state_machine_spec.rb +++ b/core/spec/models/spree/order/state_machine_spec.rb @@ -142,6 +142,9 @@ end context "resets payment state" do + + let(:payment) { create(:payment) } + before do # TODO: This is ugly :( # Stubs methods that cause unwanted side effects in this test @@ -150,6 +153,10 @@ order.stub :has_available_shipment order.stub :restock_items! shipment.stub(:cancel!) + payment.stub(:cancel!) + order.stub_chain(:payments, :valid, :size).and_return(1) + order.stub_chain(:payments, :completed).and_return([payment]) + order.stub_chain(:payments, :last).and_return(payment) end context "without shipped items" do From 038fd8b976f2c57a44dfed7c02972eabb20934fd Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Sun, 16 Nov 2014 02:52:59 -0500 Subject: [PATCH 204/238] Fix specs and update syntax. Conflicts: core/spec/models/spree/order/state_machine_spec.rb --- .../models/spree/order/state_machine_spec.rb | 114 ++++++++++-------- 1 file changed, 64 insertions(+), 50 deletions(-) diff --git a/core/spec/models/spree/order/state_machine_spec.rb b/core/spec/models/spree/order/state_machine_spec.rb index e7ac4b43d35..2be59129881 100644 --- a/core/spec/models/spree/order/state_machine_spec.rb +++ b/core/spec/models/spree/order/state_machine_spec.rb @@ -1,12 +1,12 @@ require 'spec_helper' -describe Spree::Order do +describe Spree::Order, :type => :model do let(:order) { Spree::Order.new } before do # Ensure state machine has been re-defined correctly Spree::Order.define_state_machine! # We don't care about this validation here - order.stub(:require_email) + allow(order).to receive(:require_email) end context "#next!" do @@ -14,9 +14,9 @@ before do order.state = "confirm" order.run_callbacks(:create) - order.stub :payment_required? => true - order.stub :process_payments! => true - order.stub :has_available_shipment + allow(order).to receive_messages :payment_required? => true + allow(order).to receive_messages :process_payments! => true + allow(order).to receive :has_available_shipment end context "when payment processing succeeds" do @@ -31,45 +31,44 @@ end context "when credit card processing fails" do - before { order.stub :process_payments! => false } + before { allow(order).to receive_messages :process_payments! => false } it "should not complete the order" do order.next - order.state.should == "confirm" + expect(order.state).to eq("confirm") end end - end context "when payment processing fails" do - before { order.stub :process_payments! => false } + before { allow(order).to receive_messages :process_payments! => false } it "cannot transition to complete" do order.next - order.state.should == "confirm" + expect(order.state).to eq("confirm") end end end context "when current state is delivery" do before do - order.stub :payment_required? => true - order.stub :apply_free_shipping_promotions + allow(order).to receive_messages :payment_required? => true + allow(order).to receive :apply_free_shipping_promotions order.state = "delivery" end it "adjusts tax rates when transitioning to delivery" do # Once for the line items - Spree::TaxRate.should_receive(:adjust).once - order.stub :set_shipments_cost + expect(Spree::TaxRate).to receive(:adjust).once + allow(order).to receive :set_shipments_cost order.next! end it "adjusts tax rates twice if there are any shipments" do # Once for the line items, once for the shipments order.shipments.build - Spree::TaxRate.should_receive(:adjust).twice - order.stub :set_shipments_cost + expect(Spree::TaxRate).to receive(:adjust).twice + allow(order).to receive :set_shipments_cost order.next! end end @@ -79,17 +78,17 @@ %w(pending backorder ready).each do |shipment_state| it "should be true if shipment_state is #{shipment_state}" do - order.stub :completed? => true + allow(order).to receive_messages :completed? => true order.shipment_state = shipment_state - order.can_cancel?.should be true + expect(order.can_cancel?).to be true end end (Spree::Shipment.state_machine.states.keys - %w(pending backorder ready)).each do |shipment_state| it "should be false if shipment_state is #{shipment_state}" do - order.stub :completed? => true + allow(order).to receive_messages :completed? => true order.shipment_state = shipment_state - order.can_cancel?.should be false + expect(order.can_cancel?).to be false end end @@ -101,27 +100,41 @@ stub_model(Spree::InventoryUnit, :variant => variant) ]} let!(:shipment) do shipment = stub_model(Spree::Shipment) - shipment.stub :inventory_units => inventory_units, :order => order - order.stub :shipments => [shipment] + allow(shipment).to receive_messages :inventory_units => inventory_units, :order => order + allow(order).to receive_messages :shipments => [shipment] shipment end before do - order.stub :line_items => [stub_model(Spree::LineItem, :variant => variant, :quantity => 2)] - order.line_items.stub :find_by_variant_id => order.line_items.first - order.stub :completed? => true - order.stub :allow_cancel? => true + 2.times do + create(:line_item, :order => order, price: 10) + end + + allow(order.line_items).to receive_messages :find_by_variant_id => order.line_items.first + + allow(order).to receive_messages :completed? => true + allow(order).to receive_messages :allow_cancel? => true + + shipments = [shipment] + allow(order).to receive_messages :shipments => shipments + allow(shipments).to receive_messages :states => [] + allow(shipments).to receive_messages :ready => [] + allow(shipments).to receive_messages :pending => [] + allow(shipments).to receive_messages :shipped => [] + + allow_any_instance_of(Spree::OrderUpdater).to receive(:update_adjustment_total) { 10 } end it "should send a cancel email" do + # Stub methods that cause side-effects in this test - shipment.stub(:cancel!) - order.stub :has_available_shipment - order.stub :restock_items! + allow(shipment).to receive(:cancel!) + allow(order).to receive :has_available_shipment + allow(order).to receive :restock_items! mail_message = double "Mail::Message" order_id = nil - Spree::OrderMailer.should_receive(:cancel_email) { |*args| + expect(Spree::OrderMailer).to receive(:cancel_email) { |*args| order_id = args[0] mail_message } @@ -132,12 +145,12 @@ context "restocking inventory" do before do - shipment.stub(:ensure_correct_adjustment) - shipment.stub(:update_order) - Spree::OrderMailer.stub(:cancel_email).and_return(mail_message = double) - mail_message.stub :deliver + allow(shipment).to receive(:ensure_correct_adjustment) + allow(shipment).to receive(:update_order) + allow(Spree::OrderMailer).to receive(:cancel_email).and_return(mail_message = double) + allow(mail_message).to receive :deliver - order.stub :has_available_shipment + allow(order).to receive :has_available_shipment end end @@ -148,15 +161,15 @@ before do # TODO: This is ugly :( # Stubs methods that cause unwanted side effects in this test - Spree::OrderMailer.stub(:cancel_email).and_return(mail_message = double) - mail_message.stub :deliver - order.stub :has_available_shipment - order.stub :restock_items! - shipment.stub(:cancel!) - payment.stub(:cancel!) - order.stub_chain(:payments, :valid, :size).and_return(1) - order.stub_chain(:payments, :completed).and_return([payment]) - order.stub_chain(:payments, :last).and_return(payment) + allow(Spree::OrderMailer).to receive(:cancel_email).and_return(mail_message = double) + allow(mail_message).to receive :deliver + allow(order).to receive :has_available_shipment + allow(order).to receive :restock_items! + allow(shipment).to receive(:cancel!) + allow(payment).to receive(:cancel!) + allow(order).to receive_message_chain(:payments, :valid, :size).and_return(1) + allow(order).to receive_message_chain(:payments, :completed).and_return([payment]) + allow(order).to receive_message_chain(:payments, :last).and_return(payment) end context "without shipped items" do @@ -169,7 +182,9 @@ context "with shipped items" do before do - order.stub :shipment_state => 'partial' + allow(order).to receive_messages :shipment_state => 'partial' + allow(order).to receive_messages :outstanding_balance? => false + allow(order).to receive_messages :payment_state => "paid" end it "should not alter the payment state" do @@ -190,16 +205,15 @@ end end - # Another regression test for #729 context "#resume" do before do - order.stub :email => "user@spreecommerce.com" - order.stub :state => "canceled" - order.stub :allow_resume? => true + allow(order).to receive_messages :email => "user@spreecommerce.com" + allow(order).to receive_messages :state => "canceled" + allow(order).to receive_messages :allow_resume? => true # Stubs method that cause unwanted side effects in this test - order.stub :has_available_shipment + allow(order).to receive :has_available_shipment end end end From 7cfd8570aaad3cc067b6052f84dfc65af3281e8f Mon Sep 17 00:00:00 2001 From: Tiago Amaro Date: Sun, 16 Nov 2014 21:03:26 -0200 Subject: [PATCH 205/238] [backend] Hiding option values handle if object is not persisted [backend] @option_type.option_values is always set. No need to verify it emptiness [backend] Hiding the handle of option values if object is not persisted --- .../admin/option_types/_option_value_fields.html.erb | 12 +++++++----- .../app/views/spree/admin/option_types/edit.html.erb | 11 ++--------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/backend/app/views/spree/admin/option_types/_option_value_fields.html.erb b/backend/app/views/spree/admin/option_types/_option_value_fields.html.erb index 473c0552bcf..2ebfaaf0a2e 100644 --- a/backend/app/views/spree/admin/option_types/_option_value_fields.html.erb +++ b/backend/app/views/spree/admin/option_types/_option_value_fields.html.erb @@ -1,9 +1,11 @@ - - - <%= f.hidden_field :id %> - - <%= f.text_field :name %> + <% if f.object.persisted? %> + + + <%= f.hidden_field :id %> + + <% end %> + <%= f.text_field :name %> <%= f.text_field :presentation %> <%= link_to_remove_fields Spree.t(:remove), f, :no_text => true %> diff --git a/backend/app/views/spree/admin/option_types/edit.html.erb b/backend/app/views/spree/admin/option_types/edit.html.erb index fcf55e81f12..b6ad6b700fd 100644 --- a/backend/app/views/spree/admin/option_types/edit.html.erb +++ b/backend/app/views/spree/admin/option_types/edit.html.erb @@ -32,15 +32,8 @@ - <% if @option_type.option_values.empty? %> - - <%= Spree.t(:none) %> - - - <% else %> - <%= f.fields_for :option_values do |option_value_form| %> - <%= render :partial => 'option_value_fields', :locals => { :f => option_value_form } %> - <% end %> + <%= f.fields_for :option_values, @option_values do |option_value_form| %> + <%= render :partial => 'option_value_fields', :locals => { :f => option_value_form } %> <% end %> From 978c7c1de2573cc03d36170fc7e0f25c536bb2c5 Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Wed, 19 Nov 2014 13:47:39 -0500 Subject: [PATCH 206/238] Bump rails. --- core/spree_core.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/spree_core.gemspec b/core/spree_core.gemspec index b38806c887e..07912ec3eb9 100644 --- a/core/spree_core.gemspec +++ b/core/spree_core.gemspec @@ -33,7 +33,7 @@ Gem::Specification.new do |s| s.add_dependency 'monetize' s.add_dependency 'paperclip', '~> 3.4.1' s.add_dependency 'paranoia', '~> 2.0' - s.add_dependency 'rails', '~> 4.0.8' + s.add_dependency 'rails', '~> 4.0.12' s.add_dependency 'ransack', '~> 1.1.0' s.add_dependency 'state_machine', '1.2.0' s.add_dependency 'stringex', '~> 1.5.1' From 2a1fea2812d40856ddc090053bc177b84040373b Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Thu, 20 Nov 2014 12:08:07 -0500 Subject: [PATCH 207/238] Bump version --- README.md | 4 ++-- SPREE_VERSION | 2 +- cmd/lib/spree_cmd/extension.rb | 2 +- core/lib/spree/core/version.rb | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7e7eca79b79..5404f28a58f 100755 --- a/README.md +++ b/README.md @@ -34,9 +34,9 @@ The fastest way to get started is by using the spree command line tool available in the spree gem which will add Spree to an existing Rails application. ```shell -gem install rails -v 4.0.10 +gem install rails -v 4.0.12 gem install spree -rails _4.0.10_ new my_store +rails _4.0.12_ new my_store spree install my_store ``` diff --git a/SPREE_VERSION b/SPREE_VERSION index d014fd1ab57..5bc1cc43d4e 100644 --- a/SPREE_VERSION +++ b/SPREE_VERSION @@ -1 +1 @@ -2.2.7.beta +2.2.7 diff --git a/cmd/lib/spree_cmd/extension.rb b/cmd/lib/spree_cmd/extension.rb index 81d2dc286cd..2c6f5cfc0c9 100644 --- a/cmd/lib/spree_cmd/extension.rb +++ b/cmd/lib/spree_cmd/extension.rb @@ -50,7 +50,7 @@ def class_name end def spree_version - '2.2.7.beta' + '2.2.7' end def use_prefix(prefix) diff --git a/core/lib/spree/core/version.rb b/core/lib/spree/core/version.rb index 64c8ead09c6..4f47c5ca139 100644 --- a/core/lib/spree/core/version.rb +++ b/core/lib/spree/core/version.rb @@ -1,5 +1,5 @@ module Spree def self.version - "2.2.7.beta" + "2.2.7" end end From c465c61ebc87137d99f0b8ff5e0a511190f609bf Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Thu, 20 Nov 2014 12:35:28 -0500 Subject: [PATCH 208/238] Bump to beta --- SPREE_VERSION | 2 +- cmd/lib/spree_cmd/extension.rb | 2 +- core/lib/spree/core/version.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SPREE_VERSION b/SPREE_VERSION index 5bc1cc43d4e..8ae231f9f9d 100644 --- a/SPREE_VERSION +++ b/SPREE_VERSION @@ -1 +1 @@ -2.2.7 +2.2.8.beta diff --git a/cmd/lib/spree_cmd/extension.rb b/cmd/lib/spree_cmd/extension.rb index 2c6f5cfc0c9..7c0ac066c2c 100644 --- a/cmd/lib/spree_cmd/extension.rb +++ b/cmd/lib/spree_cmd/extension.rb @@ -50,7 +50,7 @@ def class_name end def spree_version - '2.2.7' + '2.2.8.beta' end def use_prefix(prefix) diff --git a/core/lib/spree/core/version.rb b/core/lib/spree/core/version.rb index 4f47c5ca139..50bbd0f775c 100644 --- a/core/lib/spree/core/version.rb +++ b/core/lib/spree/core/version.rb @@ -1,5 +1,5 @@ module Spree def self.version - "2.2.7" + "2.2.8.beta" end end From 52542bb8e87aeb15351ea94c1b6c73801ad286ef Mon Sep 17 00:00:00 2001 From: Richard Hart Date: Wed, 26 Nov 2014 16:07:02 +0000 Subject: [PATCH 209/238] Added gif to valid icon types Fixes spree/spree#5682 --- core/app/models/spree/taxon.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/app/models/spree/taxon.rb b/core/app/models/spree/taxon.rb index f186a458e3d..5cd5939aec9 100644 --- a/core/app/models/spree/taxon.rb +++ b/core/app/models/spree/taxon.rb @@ -20,7 +20,7 @@ class Taxon < ActiveRecord::Base default_url: '/assets/default_taxon.png' validates_attachment :icon, - content_type: { content_type: ["image/jpg", "image/jpeg", "image/png"] } + content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] } include Spree::Core::ProductFilters # for detailed defs of filters From e5ab60d42522ad407410c61d8116b36ef6cdc334 Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Fri, 5 Dec 2014 10:33:09 -0500 Subject: [PATCH 210/238] Bump version --- SPREE_VERSION | 2 +- cmd/lib/spree_cmd/extension.rb | 2 +- core/lib/spree/core/version.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SPREE_VERSION b/SPREE_VERSION index 8ae231f9f9d..23a63f524e2 100644 --- a/SPREE_VERSION +++ b/SPREE_VERSION @@ -1 +1 @@ -2.2.8.beta +2.2.8 diff --git a/cmd/lib/spree_cmd/extension.rb b/cmd/lib/spree_cmd/extension.rb index 7c0ac066c2c..34ac8250de9 100644 --- a/cmd/lib/spree_cmd/extension.rb +++ b/cmd/lib/spree_cmd/extension.rb @@ -50,7 +50,7 @@ def class_name end def spree_version - '2.2.8.beta' + '2.2.8' end def use_prefix(prefix) diff --git a/core/lib/spree/core/version.rb b/core/lib/spree/core/version.rb index 50bbd0f775c..df9cb2be786 100644 --- a/core/lib/spree/core/version.rb +++ b/core/lib/spree/core/version.rb @@ -1,5 +1,5 @@ module Spree def self.version - "2.2.8.beta" + "2.2.8" end end From e8c1833cc0a5ead859a4dbbb20fc9b8c02f09b6a Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Fri, 5 Dec 2014 10:55:35 -0500 Subject: [PATCH 211/238] Bump to next beta. --- SPREE_VERSION | 2 +- cmd/lib/spree_cmd/extension.rb | 2 +- core/lib/spree/core/version.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SPREE_VERSION b/SPREE_VERSION index 23a63f524e2..c6d3db8c49b 100644 --- a/SPREE_VERSION +++ b/SPREE_VERSION @@ -1 +1 @@ -2.2.8 +2.2.9.beta diff --git a/cmd/lib/spree_cmd/extension.rb b/cmd/lib/spree_cmd/extension.rb index 34ac8250de9..2139be7bfbe 100644 --- a/cmd/lib/spree_cmd/extension.rb +++ b/cmd/lib/spree_cmd/extension.rb @@ -50,7 +50,7 @@ def class_name end def spree_version - '2.2.8' + '2.2.9.beta' end def use_prefix(prefix) diff --git a/core/lib/spree/core/version.rb b/core/lib/spree/core/version.rb index df9cb2be786..fca69a03e79 100644 --- a/core/lib/spree/core/version.rb +++ b/core/lib/spree/core/version.rb @@ -1,5 +1,5 @@ module Spree def self.version - "2.2.8" + "2.2.9.beta" end end From 6248ef0996505eb3b2ce227caaca4ac6b9c2313d Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Fri, 5 Dec 2014 12:15:39 -0500 Subject: [PATCH 212/238] Update i18n. Conflicts: core/spree_core.gemspec --- core/spree_core.gemspec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/spree_core.gemspec b/core/spree_core.gemspec index 07912ec3eb9..872f3d89206 100644 --- a/core/spree_core.gemspec +++ b/core/spree_core.gemspec @@ -27,7 +27,8 @@ Gem::Specification.new do |s| s.add_dependency 'font-awesome-rails', '~> 4.0' s.add_dependency 'friendly_id', '~> 5.0.4' s.add_dependency 'highline', '~> 1.6.18' # Necessary for the install generator - s.add_dependency 'i18n', '0.6.9' # Lockdown to 0.6.9 since 0.6.10 breaks build https://github.com/svenfuchs/i18n/issues/259 + s.add_dependency 'httparty', '~> 0.11' # For checking alerts. + s.add_dependency 'i18n', '~> 0.6.11' s.add_dependency 'json', '~> 1.7' s.add_dependency 'kaminari', '~> 0.15.0' s.add_dependency 'monetize' From a5930310d87f3fa73d653b04cab3ca9c100dcc45 Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Fri, 5 Dec 2014 12:53:55 -0500 Subject: [PATCH 213/238] Revert "Update i18n." This reverts commit 5f6cb337d84f359e888942f15117bd72ae9ca1b0. --- core/spree_core.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/spree_core.gemspec b/core/spree_core.gemspec index 872f3d89206..e6c8f2a31c9 100644 --- a/core/spree_core.gemspec +++ b/core/spree_core.gemspec @@ -28,7 +28,7 @@ Gem::Specification.new do |s| s.add_dependency 'friendly_id', '~> 5.0.4' s.add_dependency 'highline', '~> 1.6.18' # Necessary for the install generator s.add_dependency 'httparty', '~> 0.11' # For checking alerts. - s.add_dependency 'i18n', '~> 0.6.11' + s.add_dependency 'i18n', '0.6.9' # Lockdown to 0.6.9 since 0.6.10 breaks build https://github.com/svenfuchs/i18n/issues/259 s.add_dependency 'json', '~> 1.7' s.add_dependency 'kaminari', '~> 0.15.0' s.add_dependency 'monetize' From 1ffdb798ecebcf8f07a52b5d50ea024bd946254d Mon Sep 17 00:00:00 2001 From: Paul Damer Date: Wed, 8 Oct 2014 11:34:39 -0400 Subject: [PATCH 214/238] fix handling of credit cards expiring in current month fixes spree/spree#5468 Conflicts: core/spec/models/spree/credit_card_spec.rb --- core/app/models/spree/credit_card.rb | 4 ++-- core/spec/models/spree/credit_card_spec.rb | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/core/app/models/spree/credit_card.rb b/core/app/models/spree/credit_card.rb index 68d143f9bf6..63570077a2a 100644 --- a/core/app/models/spree/credit_card.rb +++ b/core/app/models/spree/credit_card.rb @@ -137,8 +137,8 @@ def expiry_not_in_the_past if month.to_i < 1 || month.to_i > 12 errors.add(:base, :expiry_invalid) else - time = Time.zone.parse("#{year}-#{month}-1") - if time < Time.zone.now.to_time.beginning_of_month + current = Time.current + if year.to_i < current.year or (year.to_i == current.year and month.to_i < current.month) errors.add(:base, :card_expired) end end diff --git a/core/spec/models/spree/credit_card_spec.rb b/core/spec/models/spree/credit_card_spec.rb index 06495438604..45f8e4a594d 100644 --- a/core/spec/models/spree/credit_card_spec.rb +++ b/core/spec/models/spree/credit_card_spec.rb @@ -108,6 +108,27 @@ def stub_rails_env(environment) credit_card.errors[:base].should == ["Card has expired"] end + it "should not be expired expiring on the current month" do + credit_card.attributes = valid_credit_card_attributes + credit_card.month = Time.zone.now.month + credit_card.year = Time.zone.now.year + credit_card.should be_valid + end + + it "should handle TZ correctly" do + # The card is valid according to the system clock's local time + # (Time.now). + # However it has expired in rails's configured time zone (Time.current), + # which is the value we should be respecting. + time = Time.new(2014, 04, 30, 23, 0, 0, "-07:00") + Timecop.freeze(time) do + credit_card.month = 1.month.ago.month + credit_card.year = 1.month.ago.year + credit_card.should_not be_valid + credit_card.errors[:base].should == ["Card has expired"] + end + end + it "does not run expiration in the past validation if month is not set" do credit_card.month = nil credit_card.year = Time.now.year From d426f42e84ebd89209f74b98555ce6185fdaac2a Mon Sep 17 00:00:00 2001 From: Washington Luiz Date: Fri, 19 Dec 2014 22:10:06 -0300 Subject: [PATCH 215/238] Filter params on api/checkouts_controller#update Huge thanks to Jordan Brough for reporting the issue and providing a failing spec Conflicts: api/app/controllers/spree/api/checkouts_controller.rb --- .../spree/api/checkouts_controller.rb | 29 ++++++++++++++----- .../spree/api/checkouts_controller_spec.rb | 18 +++++++++++- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/api/app/controllers/spree/api/checkouts_controller.rb b/api/app/controllers/spree/api/checkouts_controller.rb index 79d75af40bb..db73cf0b7d6 100644 --- a/api/app/controllers/spree/api/checkouts_controller.rb +++ b/api/app/controllers/spree/api/checkouts_controller.rb @@ -43,9 +43,27 @@ def load_order end def object_params - # For payment step, filter order parameters to produce the expected nested attributes for a single payment and its source, discarding attributes for payment methods other than the one selected - # respond_to check is necessary due to issue described in #2910 - object_params = nested_params + modify_payment_attributes params[:order] || {} + + protected_params = if params[:order] + params.require(:order).permit(permitted_checkout_attributes) + else + {} + end + + map_nested_attributes_keys Order, protected_params + end + + def user_id + params[:order][:user_id] if params[:order] + end + + # For payment step, filter order parameters to produce the expected + # nested attributes for a single payment and its source, discarding + # attributes for payment methods other than the one selected + # + # respond_to check is necessary due to issue described in #2910 + def modify_payment_attributes(object_params) if @order.has_checkout_step?('payment') && @order.payment? if object_params[:payments_attributes].is_a?(Hash) object_params[:payments_attributes] = [object_params[:payments_attributes]] @@ -57,11 +75,6 @@ def object_params object_params[:payments_attributes].first[:amount] = @order.total.to_s end end - object_params - end - - def user_id - params[:order][:user_id] if params[:order] end def nested_params diff --git a/api/spec/controllers/spree/api/checkouts_controller_spec.rb b/api/spec/controllers/spree/api/checkouts_controller_spec.rb index 39445764f45..a874fb92f5a 100644 --- a/api/spec/controllers/spree/api/checkouts_controller_spec.rb +++ b/api/spec/controllers/spree/api/checkouts_controller_spec.rb @@ -55,12 +55,28 @@ module Spree order end - before(:each) do Order.any_instance.stub(:confirmation_required? => true) Order.any_instance.stub(:payment_required? => true) end + it 'should not allow users to change the price of line items' do + line_item = order.line_items.first + price_was = line_item.price + api_put( + :update, + id: order.to_param, + order_token: order.token, + order: { + line_items: {0 => {id: line_item.id, price: '0.1', quantity: '3'}} + } + ) + response.status.should == 200 + line_item.reload + expect(line_item.price).to eq price_was + expect(line_item.price).to_not eq 0.1 + end + it "should transition a recently created order from cart to address" do order.state.should eq "cart" order.email.should_not be_nil From ab7b8260705974e2ebcb0511f0d8bbfa8bfb0452 Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Tue, 23 Dec 2014 09:33:08 -0500 Subject: [PATCH 216/238] Lockdown monetize to fix specs for now. Conflicts: core/spree_core.gemspec --- core/spree_core.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/spree_core.gemspec b/core/spree_core.gemspec index e6c8f2a31c9..57a26111742 100644 --- a/core/spree_core.gemspec +++ b/core/spree_core.gemspec @@ -31,7 +31,7 @@ Gem::Specification.new do |s| s.add_dependency 'i18n', '0.6.9' # Lockdown to 0.6.9 since 0.6.10 breaks build https://github.com/svenfuchs/i18n/issues/259 s.add_dependency 'json', '~> 1.7' s.add_dependency 'kaminari', '~> 0.15.0' - s.add_dependency 'monetize' + s.add_dependency 'monetize', '~> 1.0.0' # 1.1 outputs "\u20BD" instead of "руб" s.add_dependency 'paperclip', '~> 3.4.1' s.add_dependency 'paranoia', '~> 2.0' s.add_dependency 'rails', '~> 4.0.12' From 35f95a4c92969021a0509805168f830bf2ce559e Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Tue, 23 Dec 2014 09:42:59 -0500 Subject: [PATCH 217/238] Update ruble symbol. Conflicts: backend/spec/features/admin/products/products_spec.rb backend/spec/features/admin/products/variant_spec.rb core/spree_core.gemspec frontend/spec/features/products_spec.rb --- backend/spec/features/admin/products/products_spec.rb | 10 +++++----- backend/spec/features/admin/products/variant_spec.rb | 2 +- core/spree_core.gemspec | 2 +- frontend/spec/features/products_spec.rb | 8 ++++---- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/backend/spec/features/admin/products/products_spec.rb b/backend/spec/features/admin/products/products_spec.rb index 95f4e115a57..db2ccebd554 100644 --- a/backend/spec/features/admin/products/products_spec.rb +++ b/backend/spec/features/admin/products/products_spec.rb @@ -66,7 +66,7 @@ def build_option_type_with_values(name, values) context "uses руб as the currency symbol" do it "on the products listing page" do click_link "Products" - within_row(1) { page.should have_content("₽19.99") } + within_row(1) { expect(page).to have_content("₽19.99") } end end end @@ -260,7 +260,7 @@ def build_option_type_with_values(name, values) page.should have_content("successfully updated!") end end - + context "cloning a product", :js => true do it "should allow an admin to clone a product" do @@ -351,8 +351,8 @@ def build_option_type_with_values(name, values) end context 'with only product permissions' do - - before do + + before do Spree::Admin::BaseController.any_instance.stub(:spree_current_user).and_return(nil) end @@ -373,7 +373,7 @@ def build_option_type_with_values(name, values) page.should have_css('a.edit') page.should_not have_css('a.delete-resource') end - + it "should only display accessible links on edit" do visit spree.admin_product_path(product) diff --git a/backend/spec/features/admin/products/variant_spec.rb b/backend/spec/features/admin/products/variant_spec.rb index 33d940acaa7..aa64c16e57f 100644 --- a/backend/spec/features/admin/products/variant_spec.rb +++ b/backend/spec/features/admin/products/variant_spec.rb @@ -42,7 +42,7 @@ context "uses руб as the currency symbol" do it "on the products listing page" do visit spree.admin_product_variants_path(product) - within_row(1) { page.should have_content("₽19.99") } + within_row(1) { expect(page).to have_content("₽19.99") } end end end diff --git a/core/spree_core.gemspec b/core/spree_core.gemspec index 57a26111742..e6c8f2a31c9 100644 --- a/core/spree_core.gemspec +++ b/core/spree_core.gemspec @@ -31,7 +31,7 @@ Gem::Specification.new do |s| s.add_dependency 'i18n', '0.6.9' # Lockdown to 0.6.9 since 0.6.10 breaks build https://github.com/svenfuchs/i18n/issues/259 s.add_dependency 'json', '~> 1.7' s.add_dependency 'kaminari', '~> 0.15.0' - s.add_dependency 'monetize', '~> 1.0.0' # 1.1 outputs "\u20BD" instead of "руб" + s.add_dependency 'monetize' s.add_dependency 'paperclip', '~> 3.4.1' s.add_dependency 'paranoia', '~> 2.0' s.add_dependency 'rails', '~> 4.0.12' diff --git a/frontend/spec/features/products_spec.rb b/frontend/spec/features/products_spec.rb index e7d86b82527..763f3f1e4ba 100644 --- a/frontend/spec/features/products_spec.rb +++ b/frontend/spec/features/products_spec.rb @@ -33,7 +33,7 @@ visit spree.root_path within("#product_#{product.id}") do within(".price") do - page.should have_content("₽19.99") + expect(page).to have_content("₽19.99") end end end @@ -41,7 +41,7 @@ it "on product page" do visit spree.product_path(product) within(".price") do - page.should have_content("₽19.99") + expect(page).to have_content("₽19.99") end end @@ -50,7 +50,7 @@ click_button "Add To Cart" click_link "Home" within(".cart-info") do - page.should have_content("₽19.99") + expect(page).to have_content("₽19.99") end end @@ -59,7 +59,7 @@ click_button "Add To Cart" click_button "Checkout" within("tr[data-hook=item_total]") do - page.should have_content("₽19.99") + expect(page).to have_content("₽19.99") end end end From 8c354cdb17f0ad14d482fb2b05c4015400be9c4e Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Tue, 23 Dec 2014 10:11:08 -0500 Subject: [PATCH 218/238] Bump version. --- SPREE_VERSION | 2 +- cmd/lib/spree_cmd/extension.rb | 2 +- core/lib/spree/core/version.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SPREE_VERSION b/SPREE_VERSION index c6d3db8c49b..a6333e40060 100644 --- a/SPREE_VERSION +++ b/SPREE_VERSION @@ -1 +1 @@ -2.2.9.beta +2.2.9 diff --git a/cmd/lib/spree_cmd/extension.rb b/cmd/lib/spree_cmd/extension.rb index 2139be7bfbe..b0e587408a2 100644 --- a/cmd/lib/spree_cmd/extension.rb +++ b/cmd/lib/spree_cmd/extension.rb @@ -50,7 +50,7 @@ def class_name end def spree_version - '2.2.9.beta' + '2.2.9' end def use_prefix(prefix) diff --git a/core/lib/spree/core/version.rb b/core/lib/spree/core/version.rb index fca69a03e79..e86a93ef917 100644 --- a/core/lib/spree/core/version.rb +++ b/core/lib/spree/core/version.rb @@ -1,5 +1,5 @@ module Spree def self.version - "2.2.9.beta" + "2.2.9" end end From bcab12d60842abb7e17bebbab375274483d91eac Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Tue, 23 Dec 2014 10:20:14 -0500 Subject: [PATCH 219/238] Next beta. --- SPREE_VERSION | 2 +- cmd/lib/spree_cmd/extension.rb | 2 +- core/lib/spree/core/version.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SPREE_VERSION b/SPREE_VERSION index a6333e40060..258e43cb48f 100644 --- a/SPREE_VERSION +++ b/SPREE_VERSION @@ -1 +1 @@ -2.2.9 +2.2.10.beta diff --git a/cmd/lib/spree_cmd/extension.rb b/cmd/lib/spree_cmd/extension.rb index b0e587408a2..ca6232724de 100644 --- a/cmd/lib/spree_cmd/extension.rb +++ b/cmd/lib/spree_cmd/extension.rb @@ -50,7 +50,7 @@ def class_name end def spree_version - '2.2.9' + '2.2.10.beta' end def use_prefix(prefix) diff --git a/core/lib/spree/core/version.rb b/core/lib/spree/core/version.rb index e86a93ef917..85c1e890c4e 100644 --- a/core/lib/spree/core/version.rb +++ b/core/lib/spree/core/version.rb @@ -1,5 +1,5 @@ module Spree def self.version - "2.2.9" + "2.2.10.beta" end end From cce883973e503716e415ddb8fc37866cff830fc9 Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Tue, 23 Dec 2014 10:36:17 -0500 Subject: [PATCH 220/238] Require latest monetize. Conflicts: core/spree_core.gemspec --- core/spree_core.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/spree_core.gemspec b/core/spree_core.gemspec index e6c8f2a31c9..5cf2e465f57 100644 --- a/core/spree_core.gemspec +++ b/core/spree_core.gemspec @@ -31,7 +31,7 @@ Gem::Specification.new do |s| s.add_dependency 'i18n', '0.6.9' # Lockdown to 0.6.9 since 0.6.10 breaks build https://github.com/svenfuchs/i18n/issues/259 s.add_dependency 'json', '~> 1.7' s.add_dependency 'kaminari', '~> 0.15.0' - s.add_dependency 'monetize' + s.add_dependency 'monetize', '~> 1.1' s.add_dependency 'paperclip', '~> 3.4.1' s.add_dependency 'paranoia', '~> 2.0' s.add_dependency 'rails', '~> 4.0.12' From 77b8b2c56a4c4a6ec443093e7579f46b6da3b3de Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Thu, 1 Jan 2015 18:08:59 -0800 Subject: [PATCH 221/238] Fix payment sample card for 2015 Fixes spree/spree#5845 Conflicts: sample/db/samples/payments.rb --- sample/db/samples/payments.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sample/db/samples/payments.rb b/sample/db/samples/payments.rb index 84371a72ba6..74075ae718e 100644 --- a/sample/db/samples/payments.rb +++ b/sample/db/samples/payments.rb @@ -12,7 +12,7 @@ def self.current # reference it as such. Make it explicit here that this table has been renamed. Spree::CreditCard.table_name = 'spree_credit_cards' -creditcard = Spree::CreditCard.create(:cc_type => 'visa', :month => 12, :year => 2015, :last_digits => '1111', +creditcard = Spree::CreditCard.create(:cc_type => 'visa', :month => 12, :year => 2.years.from_now.year, :last_digits => '1111', :name => 'Sean Schofield', :gateway_customer_profile_id => 'BGS-1234') Spree::Order.all.each_with_index do |order, index| From e584d6d8eef50eb3ba13d5ce753af3dd96581c87 Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Fri, 2 Jan 2015 10:38:22 -0500 Subject: [PATCH 222/238] Fix expiration year. Conflicts: core/spec/models/spree/credit_card_spec.rb core/spec/models/spree/payment_spec.rb --- core/spec/models/spree/credit_card_spec.rb | 2 +- core/spec/models/spree/payment_spec.rb | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/spec/models/spree/credit_card_spec.rb b/core/spec/models/spree/credit_card_spec.rb index 45f8e4a594d..2ebbc57c046 100644 --- a/core/spec/models/spree/credit_card_spec.rb +++ b/core/spec/models/spree/credit_card_spec.rb @@ -4,7 +4,7 @@ let(:valid_credit_card_attributes) do { :number => '4111111111111111', :verification_value => '123', - :expiry => "12 / 15", + :expiry => "12 / #{Time.now.year + 1}", :name => "Spree Commerce" } end diff --git a/core/spec/models/spree/payment_spec.rb b/core/spec/models/spree/payment_spec.rb index 716d4088e9b..4c1e8d0652a 100644 --- a/core/spec/models/spree/payment_spec.rb +++ b/core/spec/models/spree/payment_spec.rb @@ -17,7 +17,7 @@ Spree::CreditCard.create!( number: "4111111111111111", month: "12", - year: "2015", + year: Time.now.year + 1, verification_value: "123", name: "Name" ) @@ -525,7 +525,7 @@ order.payments.create!(source_attributes: {number: "4111111111111115", month: "12", - year: "2014", + year: Time.now.year + 1, verification_value: "123", name: "Name" }, @@ -535,7 +535,7 @@ order.payments.count.should == 1 order.payments.create!(source_attributes: {number: "4111111111111111", month: "12", - year: "2014", + year: Time.now.year + 1, verification_value: "123", name: "Name" }, From cca244dbbaf17d17de41fb7fabbdd40ebf0b6a64 Mon Sep 17 00:00:00 2001 From: Irvin Fan Date: Tue, 30 Dec 2014 13:18:27 -0800 Subject: [PATCH 223/238] Do not trigger full order update when fulfilling a backordered order fixes spree/spree#5843 --- core/app/models/spree/inventory_unit.rb | 6 ++-- core/app/models/spree/order.rb | 6 ++++ core/spec/models/spree/inventory_unit_spec.rb | 34 ++++++++++++------- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/core/app/models/spree/inventory_unit.rb b/core/app/models/spree/inventory_unit.rb index 2f386bcde51..f7ffaf24cd9 100644 --- a/core/app/models/spree/inventory_unit.rb +++ b/core/app/models/spree/inventory_unit.rb @@ -26,7 +26,7 @@ class InventoryUnit < ActiveRecord::Base event :fill_backorder do transition to: :on_hand, from: :backordered end - after_transition on: :fill_backorder, do: :update_order + after_transition on: :fill_backorder, do: :fulfill_order event :ship do transition to: :shipped, if: :allow_ship? @@ -90,9 +90,9 @@ def allow_ship? Spree::Config[:allow_backorder_shipping] || self.on_hand? end - def update_order + def fulfill_order self.reload - order.update! + order.fulfill! end def percentage_of_line_item diff --git a/core/app/models/spree/order.rb b/core/app/models/spree/order.rb index e89efe3fabe..b237be5e789 100644 --- a/core/app/models/spree/order.rb +++ b/core/app/models/spree/order.rb @@ -328,6 +328,12 @@ def finalize! consider_risk end + def fulfill! + shipments.each { |shipment| shipment.update!(self) if shipment.persisted? } + updater.update_shipment_state + save! + end + def deliver_order_confirmation_email OrderMailer.confirm_email(self.id).deliver update_column(:confirmation_delivered, true) diff --git a/core/spec/models/spree/inventory_unit_spec.rb b/core/spec/models/spree/inventory_unit_spec.rb index 3aa4a309a3c..cfe8190ea45 100644 --- a/core/spec/models/spree/inventory_unit_spec.rb +++ b/core/spec/models/spree/inventory_unit_spec.rb @@ -6,30 +6,33 @@ context "#backordered_for_stock_item" do let(:order) do - order = create(:order) - order.state = 'complete' + order = create(:order, state: 'complete', ship_address: create(:ship_address)) order.completed_at = Time.now + create(:shipment, order: order, stock_location: stock_location) + order.shipments.reload + create(:line_item, order: order, variant: stock_item.variant) + order.line_items.reload order.tap(&:save!) end let(:shipment) do - shipment = Spree::Shipment.new - shipment.stock_location = stock_location - shipment.shipping_methods << create(:shipping_method) - shipment.order = order - # We don't care about this in this test - shipment.stub(:ensure_correct_adjustment) - shipment.tap(&:save!) + order.shipments.first + end + + let(:shipping_method) do + shipment.shipping_methods.first end let!(:unit) do - unit = shipment.inventory_units.build + unit = shipment.inventory_units.first unit.state = 'backordered' - unit.variant_id = stock_item.variant.id - unit.order_id = order.id unit.tap(&:save!) end + before do + stock_item.set_count_on_hand(-2) + end + # Regression for #3066 it "returns modifiable objects" do units = Spree::InventoryUnit.backordered_for_stock_item(stock_item) @@ -58,6 +61,13 @@ Spree::InventoryUnit.backordered_for_stock_item(stock_item).should_not include(other_variant_unit) end + it "does not change shipping cost when fulfilling the order" do + current_shipment_cost = shipment.cost + shipping_method.calculator.set_preference(:amount, current_shipment_cost + 5.0) + stock_item.set_count_on_hand(0) + expect(shipment.reload.cost).to eq(current_shipment_cost) + end + context "other shipments" do let(:other_order) do order = create(:order) From cdcd6ba0974fed2634ab2c70be0017f98ba3ef33 Mon Sep 17 00:00:00 2001 From: Allie Larson Date: Fri, 9 Jan 2015 16:42:15 -0500 Subject: [PATCH 224/238] Fix to payment_spec Added payment.save! to 3 failing tests that were looking for payment.log_entries to recieve :create!. Due to the parent not being saved, the method was not recieved and the test failed. Now fixed. Conflicts: core/spec/models/spree/payment_spec.rb --- core/spec/models/spree/payment_spec.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/core/spec/models/spree/payment_spec.rb b/core/spec/models/spree/payment_spec.rb index 4c1e8d0652a..7213bd2cf32 100644 --- a/core/spec/models/spree/payment_spec.rb +++ b/core/spec/models/spree/payment_spec.rb @@ -431,7 +431,6 @@ end end end - end context "when already processing" do From 98f1ae5ee745773d8cb7e77557c6a15d12fe277e Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Tue, 13 Jan 2015 07:20:07 -0500 Subject: [PATCH 225/238] Fix authorization check. Fixes spree/spree#5624 Conflicts: backend/app/views/spree/admin/orders/_shipment_manifest.html.erb --- .../views/spree/admin/orders/_shipment_manifest.html.erb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/app/views/spree/admin/orders/_shipment_manifest.html.erb b/backend/app/views/spree/admin/orders/_shipment_manifest.html.erb index b0ec8f10baa..63ed63dc2ff 100644 --- a/backend/app/views/spree/admin/orders/_shipment_manifest.html.erb +++ b/backend/app/views/spree/admin/orders/_shipment_manifest.html.erb @@ -23,7 +23,7 @@ <%= line_item_shipment_price(item.line_item, item.quantity) %> <% unless shipment.shipped? %> - <% if can? :update, item %> + <% if can?(:update, item.line_item) %> <%= link_to '', '#', :class => 'save-item fa fa-check no-text with-tip', :data => {'shipment-number' => shipment.number, 'variant-id' => item.variant.id, :action => 'save'}, :title => Spree.t('actions.save'), :style => 'display: none' %> <%= link_to '', '#', :class => 'cancel-item fa fa-cancel no-text with-tip', :data => {:action => 'cancel'}, :title => Spree.t('actions.cancel'), :style => 'display: none' %> <% if shipment.order.shipped_shipments.count == 0 %> @@ -31,7 +31,7 @@ <%= link_to '', '#', :class => 'delete-item fa fa-trash no-text with-tip', :data => { 'shipment-number' => shipment.number, 'variant-id' => item.variant.id, :action => 'remove'}, :title => Spree.t('delete') %> <% end %> <% end %> - - <% end %> + <% end %> + <% end %> From c1b01d48306925a95b480c60f2ae1c689008cd95 Mon Sep 17 00:00:00 2001 From: Alessandro Lepore Date: Wed, 14 Jan 2015 09:08:26 +0100 Subject: [PATCH 226/238] translate hardcoded strings on cc payment form fixes spree/spree#5884 --- core/config/locales/en.yml | 2 ++ frontend/app/views/spree/checkout/_payment.html.erb | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/core/config/locales/en.yml b/core/config/locales/en.yml index 1982b101e7f..e2ed3c68778 100644 --- a/core/config/locales/en.yml +++ b/core/config/locales/en.yml @@ -1342,7 +1342,9 @@ en: usage_limit: Usage Limit use_app_default: Use App Default use_billing_address: Use Billing Address + use_existing_cc: Use an existing card on file use_new_cc: Use a new card + use_new_cc_or_payment_method: Use a new card / payment method use_s3: Use Amazon S3 For Images user: User user_rule: diff --git a/frontend/app/views/spree/checkout/_payment.html.erb b/frontend/app/views/spree/checkout/_payment.html.erb index 60e7af0e5bf..afaf6541f87 100644 --- a/frontend/app/views/spree/checkout/_payment.html.erb +++ b/frontend/app/views/spree/checkout/_payment.html.erb @@ -5,10 +5,14 @@ <% if @payment_sources.present? %>
    <%= radio_button_tag 'use_existing_card', 'yes', true %> - +
    <%= radio_button_tag 'use_existing_card', 'no' %> - +
    From e5dd414794e825dd2a6857c31ed5d38c9596f872 Mon Sep 17 00:00:00 2001 From: Matt Dunbar Date: Mon, 26 Jan 2015 01:07:17 -0500 Subject: [PATCH 227/238] JS fix for admin resource destroy success message Out of the box you will never run into a situation where this text needs escaping, however, it is possible that a third party extension will set a success message with quotes (or in the situation I ran into, a missing translation can cause this). This will cleanly apply to 2-3-stable and 2-4-stable if desired, I haven't tested previous versions but can't imagine any issues. fixes spree/spree#5950 --- backend/app/views/spree/admin/shared/_destroy.js.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/app/views/spree/admin/shared/_destroy.js.erb b/backend/app/views/spree/admin/shared/_destroy.js.erb index 3c72f572023..f69af291600 100644 --- a/backend/app/views/spree/admin/shared/_destroy.js.erb +++ b/backend/app/views/spree/admin/shared/_destroy.js.erb @@ -1,6 +1,6 @@ <% success = flash.discard(:success) if success %> - show_flash('success', "<%= success %>") + show_flash('success', "<%= j success %>") <% end %> <%= render :partial => '/spree/admin/shared/update_order_state' if @order %> From 1365215655712aea7ee917fb5ae17c941654ff1f Mon Sep 17 00:00:00 2001 From: Jeff Dutil Date: Tue, 27 Jan 2015 08:53:45 -0500 Subject: [PATCH 228/238] Fix td element to be within conditional block. --- .../app/views/spree/admin/orders/_shipment_manifest.html.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/app/views/spree/admin/orders/_shipment_manifest.html.erb b/backend/app/views/spree/admin/orders/_shipment_manifest.html.erb index 63ed63dc2ff..a767c5285ca 100644 --- a/backend/app/views/spree/admin/orders/_shipment_manifest.html.erb +++ b/backend/app/views/spree/admin/orders/_shipment_manifest.html.erb @@ -31,7 +31,7 @@ <%= link_to '', '#', :class => 'delete-item fa fa-trash no-text with-tip', :data => { 'shipment-number' => shipment.number, 'variant-id' => item.variant.id, :action => 'remove'}, :title => Spree.t('delete') %> <% end %> <% end %> - <% end %> - + + <% end %> <% end %> From c83978fe610558a38e3bb4ac141de6cd9a6df39a Mon Sep 17 00:00:00 2001 From: Matt Dunbar Date: Sat, 31 Jan 2015 19:01:13 -0500 Subject: [PATCH 229/238] Adjustments upgrade migration should fail on save / destroy fail fixes spree/spree#5986 --- core/db/migrate/20130807024301_upgrade_adjustments.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/db/migrate/20130807024301_upgrade_adjustments.rb b/core/db/migrate/20130807024301_upgrade_adjustments.rb index 27651dc8182..266fd4181ec 100644 --- a/core/db/migrate/20130807024301_upgrade_adjustments.rb +++ b/core/db/migrate/20130807024301_upgrade_adjustments.rb @@ -9,13 +9,13 @@ def up # Account for possible invalid data next if adjustment.source.nil? adjustment.source.update_column(:cost, adjustment.amount) - adjustment.destroy + adjustment.destroy! end # Tax adjustments have their sources altered Spree::Adjustment.where(:originator_type => "Spree::TaxRate").find_each do |adjustment| adjustment.source = adjustment.originator - adjustment.save + adjustment.save! end # Promotion adjustments have their source altered also @@ -33,7 +33,7 @@ def up # Fail silently. This is primarily in instances where the calculator no longer exists end - adjustment.save + adjustment.save! end end end From f6ef5f78e8005d4e39c058e547f24bf29cafbc7b Mon Sep 17 00:00:00 2001 From: Matt Dunbar Date: Fri, 30 Jan 2015 17:10:29 -0500 Subject: [PATCH 230/238] Adjustments upgrade migration efficiency improvement. Fixes spree/spree#4970 Fixes spree/spree#5984 --- core/db/migrate/20130807024301_upgrade_adjustments.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/db/migrate/20130807024301_upgrade_adjustments.rb b/core/db/migrate/20130807024301_upgrade_adjustments.rb index 266fd4181ec..6a4a68e1bde 100644 --- a/core/db/migrate/20130807024301_upgrade_adjustments.rb +++ b/core/db/migrate/20130807024301_upgrade_adjustments.rb @@ -14,7 +14,8 @@ def up # Tax adjustments have their sources altered Spree::Adjustment.where(:originator_type => "Spree::TaxRate").find_each do |adjustment| - adjustment.source = adjustment.originator + adjustment.source_id = adjustment.originator_id + adjustment.source_type = "Spree::TaxRate" adjustment.save! end From 74f966e78c8d9009d9a3ab6263792d5a51c218fa Mon Sep 17 00:00:00 2001 From: Gregor MacDougall Date: Tue, 24 Feb 2015 14:20:06 -0500 Subject: [PATCH 231/238] Remove specs from checkout controller. These have been removed in earlier commits in this repository. --- .../spree/api/base_controller_spec.rb | 12 - .../spree/api/checkouts_controller_spec.rb | 230 ------------------ 2 files changed, 242 deletions(-) diff --git a/api/spec/controllers/spree/api/base_controller_spec.rb b/api/spec/controllers/spree/api/base_controller_spec.rb index 3433c33ea48..ee68b8f3ff3 100644 --- a/api/spec/controllers/spree/api/base_controller_spec.rb +++ b/api/spec/controllers/spree/api/base_controller_spec.rb @@ -101,18 +101,6 @@ def index end end - it "maps semantic keys to nested_attributes keys" do - klass = double(:nested_attributes_options => { :line_items => {}, - :bill_address => {} }) - attributes = { 'line_items' => { :id => 1 }, - 'bill_address' => { :id => 2 }, - 'name' => 'test order' } - - mapped = subject.map_nested_attributes_keys(klass, attributes) - mapped.has_key?('line_items_attributes').should be true - mapped.has_key?('name').should be true - end - it "lets a subclass override the product associations that are eager-loaded" do controller.respond_to?(:product_includes, true).should be end diff --git a/api/spec/controllers/spree/api/checkouts_controller_spec.rb b/api/spec/controllers/spree/api/checkouts_controller_spec.rb index a874fb92f5a..94eb2803eb3 100644 --- a/api/spec/controllers/spree/api/checkouts_controller_spec.rb +++ b/api/spec/controllers/spree/api/checkouts_controller_spec.rb @@ -21,236 +21,6 @@ module Spree Spree::Config[:track_inventory_levels] = true end - context "GET 'show'" do - let(:order) { create(:order) } - - it "redirects to Orders#show" do - api_get :show, :id => order.number - response.status.should == 301 - response.should redirect_to("/api/orders/#{order.number}") - end - end - - context "POST 'create'" do - it "creates a new order when no parameters are passed" do - api_post :create - - json_response['number'].should be_present - response.status.should == 201 - end - - 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 - expect(json_response['email']).to eq "guest@spreecommerce.com" - end - end - - context "PUT 'update'" do - let(:order) do - order = create(:order_with_line_items) - # Order should be in a pristine state - # Without doing this, the order may transition from 'cart' straight to 'delivery' - order.shipments.delete_all - order - end - - before(:each) do - Order.any_instance.stub(:confirmation_required? => true) - Order.any_instance.stub(:payment_required? => true) - end - - it 'should not allow users to change the price of line items' do - line_item = order.line_items.first - price_was = line_item.price - api_put( - :update, - id: order.to_param, - order_token: order.token, - order: { - line_items: {0 => {id: line_item.id, price: '0.1', quantity: '3'}} - } - ) - response.status.should == 200 - line_item.reload - expect(line_item.price).to eq price_was - expect(line_item.price).to_not eq 0.1 - end - - it "should transition a recently created order from cart to address" do - order.state.should eq "cart" - order.email.should_not be_nil - api_put :update, :id => order.to_param, :order_token => order.token - order.reload.state.should eq "address" - end - - it "should transition a recently created order from cart to address with order token in header" do - order.state.should eq "cart" - order.email.should_not be_nil - request.headers["X-Spree-Order-Token"] = order.token - api_put :update, :id => order.to_param - order.reload.state.should eq "address" - end - - it "can take line_items_attributes as a parameter" do - line_item = order.line_items.first - api_put :update, :id => order.to_param, :order_token => order.token, - :order => { :line_items_attributes => { 0 => { :id => line_item.id, :quantity => 1 } } } - response.status.should == 200 - order.reload.state.should eq "address" - end - - it "can take line_items as a parameter" do - line_item = order.line_items.first - api_put :update, :id => order.to_param, :order_token => order.token, - :order => { :line_items => { 0 => { :id => line_item.id, :quantity => 1 } } } - response.status.should == 200 - order.reload.state.should eq "address" - end - - it "will return an error if the order cannot transition" do - skip "not sure if this test is valid" - order.bill_address = nil - order.save - order.update_column(:state, "address") - api_put :update, :id => order.to_param, :order_token => order.token - # Order has not transitioned - response.status.should == 422 - end - - it "can update addresses and transition from address to delivery" do - order.update_column(:state, "address") - shipping_address = billing_address = { - :firstname => 'John', - :lastname => 'Doe', - :address1 => '7735 Old Georgetown Road', - :city => 'Bethesda', - :phone => '3014445002', - :zipcode => '20814', - :state_id => @state.id, - :country_id => @country.id - } - api_put :update, - :id => order.to_param, :order_token => order.token, - :order => { :bill_address_attributes => billing_address, :ship_address_attributes => shipping_address } - json_response['state'].should == 'delivery' - json_response['bill_address']['firstname'].should == 'John' - json_response['ship_address']['firstname'].should == 'John' - response.status.should == 200 - end - - it "can update shipping method and transition from delivery to payment" do - order.update_column(:state, "delivery") - shipment = create(:shipment, :order => order) - shipment.refresh_rates - shipping_rate = shipment.shipping_rates.where(:selected => false).first - api_put :update, :id => order.to_param, :order_token => order.token, - :order => { :shipments_attributes => { "0" => { :selected_shipping_rate_id => shipping_rate.id, :id => shipment.id } } } - response.status.should == 200 - # Find the correct shipment... - json_shipment = json_response['shipments'].detect { |s| s["id"] == shipment.id } - # Find the correct shipping rate for that shipment... - json_shipping_rate = json_shipment['shipping_rates'].detect { |sr| sr["id"] == shipping_rate.id } - # ... And finally ensure that it's selected - json_shipping_rate['selected'].should be true - # Order should automatically transfer to payment because all criteria are met - json_response['state'].should == 'payment' - end - - it "can update payment method and transition from payment to confirm" do - order.update_column(:state, "payment") - api_put :update, :id => order.to_param, :order_token => order.token, - :order => { :payments_attributes => [{ :payment_method_id => @payment_method.id }] } - json_response['state'].should == 'confirm' - json_response['payments'][0]['payment_method']['name'].should == @payment_method.name - json_response['payments'][0]['amount'].should == order.total.to_s - response.status.should == 200 - end - - it "can update payment method with source and transition from payment to confirm" do - order.update_column(:state, "payment") - source_attributes = { - "number" => "4111111111111111", - "month" => 1.month.from_now.month, - "year" => 1.month.from_now.year, - "verification_value" => "123", - "name" => "Spree Commerce" - } - - api_put :update, :id => order.to_param, :order_token => order.token, - :order => { :payments_attributes => [{ :payment_method_id => @payment_method.id.to_s }], - :payment_source => { @payment_method.id.to_s => source_attributes } } - json_response['payments'][0]['payment_method']['name'].should == @payment_method.name - json_response['payments'][0]['amount'].should == order.total.to_s - response.status.should == 200 - end - - it "returns errors when source is missing attributes" do - order.update_column(:state, "payment") - api_put :update, :id => order.to_param, :order_token => order.token, - :order => { :payments_attributes => [{ :payment_method_id => @payment_method.id.to_s }], - :payment_source => { @payment_method.id.to_s => { name: "Spree" } } } - - response.status.should == 422 - cc_errors = json_response['errors']['payments.Credit Card'] - cc_errors.should include("Number can't be blank") - cc_errors.should include("Month is not a number") - cc_errors.should include("Year is not a number") - cc_errors.should include("Verification Value can't be blank") - end - - it "can transition from confirm to complete" do - order.update_column(:state, "confirm") - Spree::Order.any_instance.stub(:payment_required? => false) - api_put :update, :id => order.to_param, :order_token => order.token - json_response['state'].should == 'complete' - response.status.should == 200 - end - - it "returns the order if the order is already complete" do - order.update_column(:state, "complete") - api_put :update, :id => order.to_param, :order_token => order.token - json_response['number'].should == order.number - response.status.should == 200 - end - - # Regression test for #3784 - it "can update the special instructions for an order" do - instructions = "Don't drop it. (Please)" - api_put :update, :id => order.to_param, :order_token => order.token, - :order => { :special_instructions => instructions } - expect(json_response['special_instructions']).to eql(instructions) - end - - context "as an admin" do - sign_in_as_admin! - it "can assign a user to the order" do - user = create(:user) - # Need to pass email as well so that validations succeed - api_put :update, :id => order.to_param, :order_token => order.token, - :order => { :user_id => user.id, :email => "guest@spreecommerce.com" } - response.status.should == 200 - json_response['user_id'].should == user.id - end - end - - it "can assign an email to the order" do - api_put :update, :id => order.to_param, :order_token => order.token, - :order => { :email => "guest@spreecommerce.com" } - json_response['email'].should == "guest@spreecommerce.com" - response.status.should == 200 - end - - it "can apply a coupon code to an order" do - skip "ensure that the order totals are properly updated, see frontend orders_controller or checkout_controller as example" - - order.update_column(:state, "payment") - PromotionHandler::Coupon.should_receive(:new).with(order).and_call_original - PromotionHandler::Coupon.any_instance.should_receive(:apply).and_return({:coupon_applied? => true}) - api_put :update, :id => order.to_param, :order_token => order.token, :order => { :coupon_code => "foobar" } - end - end - context "PUT 'next'" do let!(:order) { create(:order_with_line_items) } it "cannot transition to address without a line item" do From 150a93437304f19e3f03fbeb8701714077b50612 Mon Sep 17 00:00:00 2001 From: Gregor MacDougall Date: Tue, 24 Feb 2015 16:40:37 -0500 Subject: [PATCH 232/238] Revert "Allow payments with invalid sources to be invalidated" This reverts commit 6e03f01e41238c9b682c8f7a97aac66dc4966c81. This causes an infinite loop of validation during tests. --- core/app/models/spree/payment.rb | 2 +- core/spec/models/spree/payment_spec.rb | 14 -------------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/core/app/models/spree/payment.rb b/core/app/models/spree/payment.rb index bd17a94211e..b76ce4a3ccf 100644 --- a/core/app/models/spree/payment.rb +++ b/core/app/models/spree/payment.rb @@ -16,7 +16,7 @@ class Payment < ActiveRecord::Base has_many :capture_events, :class_name => 'Spree::PaymentCaptureEvent' has_many :refunds, inverse_of: :payment - before_validation :validate_source, unless: :invalid? + before_validation :validate_source before_create :set_unique_identifier after_save :create_payment_profile, if: :profiles_supported? diff --git a/core/spec/models/spree/payment_spec.rb b/core/spec/models/spree/payment_spec.rb index 7213bd2cf32..665a9e859df 100644 --- a/core/spec/models/spree/payment_spec.rb +++ b/core/spec/models/spree/payment_spec.rb @@ -113,20 +113,6 @@ payment.invalidate payment.state.should eq('invalid') end - - context "the payment's source is invalid" do - - before(:each) do - card.year = 2014 - payment.source = card - end - - it "transitions to invalid" do - payment.state = 'checkout' - payment.invalidate - payment.state.should eq ('invalid') - end - end end context "processing" do From b51fd37e685897f6604b208c1ef2e9958276f9d2 Mon Sep 17 00:00:00 2001 From: Gregor MacDougall Date: Tue, 24 Feb 2015 18:52:42 -0500 Subject: [PATCH 233/238] Revert "Make update_item_count get called inside updater#update" This reverts commit 237308532e70b386fa9c370fcaf5e1fc874555e2. Breaks an API test. Will review further. --- core/app/models/spree/order_contents.rb | 4 +++- core/app/models/spree/order_updater.rb | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/core/app/models/spree/order_contents.rb b/core/app/models/spree/order_contents.rb index f883a98b235..db29fa3db69 100644 --- a/core/app/models/spree/order_contents.rb +++ b/core/app/models/spree/order_contents.rb @@ -85,7 +85,8 @@ def merge(other_order, user: nil) associate_user(user) if order.user.nil? && user - reload_totals + order.updater.update_item_count + order.update! # So that the destroy doesn't take out line items which may have been re-assigned other_order.line_items.reload @@ -156,6 +157,7 @@ def order_updater end def reload_totals + order_updater.update_item_count order_updater.update order.reload end diff --git a/core/app/models/spree/order_updater.rb b/core/app/models/spree/order_updater.rb index caa8d011e03..3ce647644e4 100644 --- a/core/app/models/spree/order_updater.rb +++ b/core/app/models/spree/order_updater.rb @@ -15,6 +15,7 @@ def initialize(order) # object with callbacks (otherwise you will end up in an infinite recursion as the # associations try to save and then in turn try to call +update!+ again.) def update + update_totals if order.completed? update_payment_state update_shipments From 36b711032125d5be64f2ee7f2b267cbb4b05b769 Mon Sep 17 00:00:00 2001 From: Gregor MacDougall Date: Tue, 24 Feb 2015 19:24:30 -0500 Subject: [PATCH 234/238] update_attributes is now update_attributes! Fixes a failing test in orders controller --- api/spec/controllers/spree/api/orders_controller_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/spec/controllers/spree/api/orders_controller_spec.rb b/api/spec/controllers/spree/api/orders_controller_spec.rb index d8968ffccc4..24c2c8986fd 100755 --- a/api/spec/controllers/spree/api/orders_controller_spec.rb +++ b/api/spec/controllers/spree/api/orders_controller_spec.rb @@ -235,7 +235,7 @@ module Spree expect(Order).to receive(:create!) { order } allow(order).to receive(:contents) { double(associate_user: true, add: line_item) } - expect(line_item).to receive(:update_attributes).with("special" => true) + expect(line_item).to receive(:update_attributes!).with("special" => true) controller.stub(permitted_line_item_attributes: [:id, :variant_id, :quantity, :special]) api_post :create, :order => { From 2ed26f669dc8087fc5ebc230870051c3d4314348 Mon Sep 17 00:00:00 2001 From: Gregor MacDougall Date: Wed, 25 Feb 2015 10:08:40 -0500 Subject: [PATCH 235/238] Don't pass id in to the API endpoints for address. This then expects the order to be associated with this address, which then causes exceptions. --- api/spec/features/checkout_spec.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/api/spec/features/checkout_spec.rb b/api/spec/features/checkout_spec.rb index b1b2025eb9d..7d24a786321 100644 --- a/api/spec/features/checkout_spec.rb +++ b/api/spec/features/checkout_spec.rb @@ -62,7 +62,7 @@ def add_address(address, billing: true) # It seems we are missing an order-scoped address api endpoint since we need # to use update here. expect { - update_order(order_params: { order: { address_type => address.attributes } }) + update_order(order_params: { order: { address_type => address.attributes.except('id') } }) }.to change { @order.reload.public_send(address_type) }.to address end @@ -125,8 +125,8 @@ def assert_order_expectations create_order(order_params: { order: { - bill_address: bill_address.as_json, - ship_address: ship_address.as_json, + bill_address: bill_address.attributes.except('id').as_json, + ship_address: ship_address.attributes.except('id').as_json, line_items: { 0 => { variant_id: variant_1.id, quantity: 2 }, 1 => { variant_id: variant_2.id, quantity: 2 } @@ -157,8 +157,8 @@ def assert_order_expectations create_order update_order(order_params: { order: { - bill_address: bill_address.as_json, - ship_address: ship_address.as_json, + bill_address: bill_address.attributes.except('id').as_json, + ship_address: ship_address.attributes.except('id').as_json, line_items: { 0 => { variant_id: variant_1.id, quantity: 2 }, 1 => { variant_id: variant_2.id, quantity: 2 } From 92f77f913234deb9b849dfbbecc02526a1676c60 Mon Sep 17 00:00:00 2001 From: Gregor MacDougall Date: Wed, 25 Feb 2015 10:26:29 -0500 Subject: [PATCH 236/238] Remove check alerts spec. --- .../spree/admin/base_controller_spec.rb | 38 ------------------- 1 file changed, 38 deletions(-) diff --git a/backend/spec/controllers/spree/admin/base_controller_spec.rb b/backend/spec/controllers/spree/admin/base_controller_spec.rb index 4f227b5a6de..8aee94537db 100644 --- a/backend/spec/controllers/spree/admin/base_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/base_controller_spec.rb @@ -26,42 +26,4 @@ def index expect(response).to redirect_to '/root' end end - - describe "check alerts" do - stub_authorization! - - it "checks alerts with before_filter" do - controller.should_receive :check_alerts - process :index - end - - it "saves alerts into session" do - controller.stub(:should_check_alerts? => true) - Spree::Alert.should_receive(:current).and_return([{"id" => "1", "message" => "test alert", "severity" => 'release'}]) - process :index - session[:alerts].first["message"].should eq "test alert" - end - - describe "should_check_alerts?" do - before do - Rails.env.stub(:production? => true) - Spree::Config[:check_for_spree_alerts] = true - Spree::Config[:last_check_for_spree_alerts] = nil - end - - it "only checks alerts if production and preference is true" do - controller.send(:should_check_alerts?).should be true - end - - it "only checks for production" do - Rails.env.stub(:production? => false) - controller.send(:should_check_alerts?).should be false - end - - it "only checks if preference is true" do - Spree::Config[:check_for_spree_alerts] = false - controller.send(:should_check_alerts?).should be false - end - end - end end From d4c4fa4aac2318ddd4cf5672dc5c9c5c6bf58bd0 Mon Sep 17 00:00:00 2001 From: Jordan Brough Date: Mon, 11 Aug 2014 15:10:02 -0600 Subject: [PATCH 237/238] 2-2-dev fix for ReimbursementMailer Spree::Store isn't a part of stock Spree 2.2. peterberkenbosch says to make this change since we're going to overwrite this email in our app anyway. --- core/app/mailers/spree/reimbursement_mailer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/app/mailers/spree/reimbursement_mailer.rb b/core/app/mailers/spree/reimbursement_mailer.rb index c4fce321758..9a3bd04ffdc 100644 --- a/core/app/mailers/spree/reimbursement_mailer.rb +++ b/core/app/mailers/spree/reimbursement_mailer.rb @@ -3,7 +3,7 @@ class ReimbursementMailer < BaseMailer def reimbursement_email(reimbursement, resend = false) @reimbursement = reimbursement.respond_to?(:id) ? reimbursement : Spree::Reimbursement.find(reimbursement) subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '') - subject += "#{Spree::Store.current.name} #{Spree.t('reimbursement_mailer.reimbursement_email.subject')} ##{@reimbursement.order.number}" + subject += "#{Spree.t('reimbursement_mailer.reimbursement_email.subject')} ##{@reimbursement.order.number}" mail(to: @reimbursement.order.email, from: from_address, subject: subject) end end From d410bb2bc4bfe774e9e7801800e3e6ae334c13cf Mon Sep 17 00:00:00 2001 From: Gregor MacDougall Date: Wed, 25 Feb 2015 10:53:15 -0500 Subject: [PATCH 238/238] Add ensure_line_item_in_stock method. The checkout callback was added previously, but this one got missed. --- core/app/models/spree/order.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/app/models/spree/order.rb b/core/app/models/spree/order.rb index b237be5e789..12b1a73bcec 100644 --- a/core/app/models/spree/order.rb +++ b/core/app/models/spree/order.rb @@ -396,6 +396,12 @@ def insufficient_stock_lines line_items.select(&:insufficient_stock?) end + def ensure_line_items_are_in_stock + if insufficient_stock_lines.present? + errors.add(:base, Spree.t(:insufficient_stock_lines_present)) and return false + end + end + def has_step?(step) checkout_steps.include?(step) end