spree_frontend 3.0.1 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 28b43e53de5b7242b077f72115ae7c95c169a01b
4
- data.tar.gz: 956b54568f09eb563564df2e77f1db0ef00b763d
3
+ metadata.gz: 56c38cf8ac7763562f329b9adc3fc02a6447bfc7
4
+ data.tar.gz: bb96d44f57de9e6aa5f5332a8890eb7c1c9c19cd
5
5
  SHA512:
6
- metadata.gz: 5a39e7d2b31e5c664e70ea8d06839d851238ab9bfddb3f40ec9adcb7529f595e701b76e2a487223e591aaeda443feef72b4156acf9b05987b3c2ecd79db71cb2
7
- data.tar.gz: 094be18bbca59c0ef858ea25af82722a26f61ca2699af172c4298b0f404eb9a05137822e1822d14d9dca0da5716316fa9eb78d914c4b055b4deec66bddf11a45
6
+ metadata.gz: 75d2017697863f14073f5f1a355caa6045eb96658191470e166772c9fb759eaf58606d9eb5c3280ec44bd5cb6be07dc81794a03170bc4955154dc7f84bea159e
7
+ data.tar.gz: 9fdea3dfa42e6715cbb26ad22c3260f0651470ca3eeaeac8a9c2f5625a46188c0df5d4e1d48064a8c11b9ed88da9978a015b5df187cf28a918fd12043af761de
@@ -5,8 +5,8 @@ module Spree
5
5
  # is waranted.
6
6
  class CheckoutController < Spree::StoreController
7
7
  before_action :load_order_with_lock
8
- before_filter :ensure_valid_state_lock_version, only: [:update]
9
- before_filter :set_state_if_present
8
+ before_action :ensure_valid_state_lock_version, only: [:update]
9
+ before_action :set_state_if_present
10
10
 
11
11
  before_action :ensure_order_not_completed
12
12
  before_action :ensure_checkout_allowed
@@ -154,6 +154,13 @@ module Spree
154
154
  @differentiator.missing.each do |variant, quantity|
155
155
  @order.contents.remove(variant, quantity)
156
156
  end
157
+
158
+ # @order.contents.remove did transitively call reload in the past.
159
+ # Hiding the fact that the machine advanced already to "payment" state.
160
+ #
161
+ # As an intermediary step to optimize reloads out of high volume code path
162
+ # the reload was lifted here and will be removed by later passes.
163
+ @order.reload
157
164
  end
158
165
 
159
166
  if try_spree_current_user && try_spree_current_user.respond_to?(:payment_sources)
@@ -18,9 +18,11 @@ module Spree
18
18
  @variants = @product.variants_including_master.active(current_currency).includes([:option_values, :images])
19
19
  @product_properties = @product.product_properties.includes(:property)
20
20
  @taxon = Spree::Taxon.find(params[:taxon_id]) if params[:taxon_id]
21
+ redirect_if_legacy_path
21
22
  end
22
23
 
23
24
  private
25
+
24
26
  def accurate_title
25
27
  if @product
26
28
  @product.meta_title.blank? ? @product.name : @product.meta_title
@@ -41,5 +43,14 @@ module Spree
41
43
  def load_taxon
42
44
  @taxon = Spree::Taxon.find(params[:taxon]) if params[:taxon].present?
43
45
  end
46
+
47
+ def redirect_if_legacy_path
48
+ # If an old id or a numeric id was used to find the record,
49
+ # we should do a 301 redirect that uses the current friendly id.
50
+ if params[:id] != @product.friendly_id
51
+ params.merge!(id: @product.friendly_id)
52
+ return redirect_to url_for(params), status: :moved_permanently
53
+ end
54
+ end
44
55
  end
45
56
  end
@@ -1,6 +1,6 @@
1
1
  <% @body_id = 'product-details' %>
2
2
 
3
- <% cache [I18n.locale, current_currency, @product] do %>
3
+ <% cache [I18n.locale, current_currency, @product, @product.possible_promotions] do %>
4
4
  <div data-hook="product_show" itemscope itemtype="https://schema.org/Product">
5
5
  <div class="col-md-4" data-hook="product_left_part">
6
6
  <div data-hook="product_left_part_wrap">
@@ -5,7 +5,12 @@
5
5
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
6
6
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
7
7
 
8
- ga('create', '<%= tracker.analytics_id %>', 'auto');
8
+ <% if user_analytics_id = try_spree_current_user.try(:analytics_id) %>
9
+ ga('create', { 'trackingId': '<%= tracker.analytics_id %>', 'cookieDomain': 'auto', 'userId': '<%= user_analytics_id %>' });
10
+ <% else %>
11
+ ga('create', '<%= tracker.analytics_id %>', 'auto');
12
+ <% end %>
13
+
9
14
  ga('require', 'displayfeatures');
10
15
  <%= yield :google_analytics %>
11
16
  ga('send', 'pageview');
@@ -92,9 +92,9 @@
92
92
  </tfoot>
93
93
 
94
94
  <% if order.line_item_adjustments.exists? %>
95
- <% if order.all_adjustments.promotion.eligible.exists? %>
95
+ <% if order.line_item_adjustments.promotion.eligible.exists? %>
96
96
  <tfoot id="price-adjustments" data-hook="order_details_price_adjustments">
97
- <% order.all_adjustments.promotion.eligible.group_by(&:label).each do |label, adjustments| %>
97
+ <% order.line_item_adjustments.promotion.eligible.group_by(&:label).each do |label, adjustments| %>
98
98
  <tr class="total">
99
99
  <td colspan="4"><%= Spree.t(:promotion) %>: <strong><%= label %></strong></td>
100
100
  <td class="total"><span><%= Spree::Money.new(adjustments.sum(&:amount), currency: order.currency) %></span></td>
@@ -2,7 +2,7 @@
2
2
 
3
3
  <nav id="taxonomies" class="sidebar-item" data-hook>
4
4
  <% @taxonomies.each do |taxonomy| %>
5
- <% cache [I18n.locale, taxonomy, max_level] do %>
5
+ <% cache [I18n.locale, taxonomy, max_level, @taxon] do %>
6
6
  <h4 class='taxonomy-root'><%= Spree.t(:shop_by_taxonomy, :taxonomy => taxonomy.name) %></h4>
7
7
  <%= taxons_tree(taxonomy.root, @taxon, max_level) %>
8
8
  <% end %>
@@ -327,14 +327,14 @@ describe Spree::CheckoutController, :type => :controller do
327
327
 
328
328
  context "when the order is invalid" do
329
329
  before do
330
- allow(order).to receive_messages :update_attributes => true, :next => nil
331
- order.errors.add :base, 'Base error'
332
- order.errors.add :adjustments, 'error'
330
+ allow(order).to receive_messages(update_from_params: true, next: nil)
331
+ order.errors.add(:base, 'Base error')
332
+ order.errors.add(:adjustments, 'error')
333
333
  end
334
334
 
335
335
  it "due to the order having errors" do
336
336
  spree_put :update, state: order.state, :order => {}
337
- expect(flash[:error]).to eq("Base error\nAdjustments error")
337
+ expect(flash[:error]).to eql("Base error\nAdjustments error")
338
338
  expect(response).to redirect_to(spree.checkout_state_path('address'))
339
339
  end
340
340
  end
@@ -420,6 +420,6 @@ describe Spree::CheckoutController, :type => :controller do
420
420
 
421
421
  expect {
422
422
  spree_post :update, { :state => "payment" }
423
- }.to change { order.line_items }
423
+ }.to change { order.reload.line_items.length }
424
424
  end
425
425
  end
@@ -22,7 +22,7 @@ describe Spree::CheckoutController, type: :controller do
22
22
  before do
23
23
  # Using a let block won't acknowledge the currency setting
24
24
  # Therefore we just do it like this...
25
- order = OrderWalkthrough.up_to(:address)
25
+ order = OrderWalkthrough.up_to(:delivery)
26
26
  allow(controller).to receive_messages current_order: order
27
27
  end
28
28
 
@@ -34,7 +34,7 @@ describe Spree::OrdersController, :type => :controller do
34
34
  end
35
35
 
36
36
  it "shows an error when population fails" do
37
- request.env["HTTP_REFERER"] = spree.root_path
37
+ request.env["HTTP_REFERER"] = '/dummy_redirect'
38
38
  allow_any_instance_of(Spree::LineItem).to(
39
39
  receive(:valid?).and_return(false)
40
40
  )
@@ -45,19 +45,19 @@ describe Spree::OrdersController, :type => :controller do
45
45
 
46
46
  spree_post :populate, variant_id: variant.id, quantity: 5
47
47
 
48
- expect(response).to redirect_to(spree.root_path)
48
+ expect(response).to redirect_to('/dummy_redirect')
49
49
  expect(flash[:error]).to eq("Order population failed")
50
50
  end
51
51
 
52
52
  it "shows an error when quantity is invalid" do
53
- request.env["HTTP_REFERER"] = spree.root_path
53
+ request.env["HTTP_REFERER"] = '/dummy_redirect'
54
54
 
55
55
  spree_post(
56
56
  :populate,
57
57
  variant_id: variant.id, quantity: -1
58
58
  )
59
59
 
60
- expect(response).to redirect_to(spree.root_path)
60
+ expect(response).to redirect_to('/dummy_redirect')
61
61
  expect(flash[:error]).to eq(
62
62
  Spree.t(:please_enter_reasonable_quantity)
63
63
  )
@@ -2,6 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Spree::ProductsController, :type => :controller do
4
4
  let!(:product) { create(:product, :available_on => 1.year.from_now) }
5
+ let(:taxon) { create(:taxon) }
5
6
 
6
7
  # Regression test for #1390
7
8
  it "allows admins to view non-active products" do
@@ -33,4 +34,34 @@ describe Spree::ProductsController, :type => :controller do
33
34
  expect { spree_get :show, :id => product.to_param }.not_to raise_error
34
35
  end
35
36
 
37
+ context 'with history slugs present' do
38
+ let!(:product) { create(:product, available_on: 1.day.ago) }
39
+
40
+ it 'will redirect with a 301 with legacy url used' do
41
+ legacy_params = product.to_param
42
+ product.name = product.name + " Brand New"
43
+ product.slug = nil
44
+ product.save!
45
+ spree_get :show, id: legacy_params
46
+ expect(response.status).to eq(301)
47
+ end
48
+
49
+ it 'will redirect with a 301 with id used' do
50
+ product.name = product.name + " Brand New"
51
+ product.slug = nil
52
+ product.save!
53
+ spree_get :show, id: product.id
54
+ expect(response.status).to eq(301)
55
+ end
56
+
57
+ it "will keep url params on legacy url redirect" do
58
+ legacy_params = product.to_param
59
+ product.name = product.name + " Brand New"
60
+ product.slug = nil
61
+ product.save!
62
+ spree_get :show, id: legacy_params, taxon_id: taxon.id
63
+ expect(response.status).to eq(301)
64
+ expect(response.header["Location"]).to include("taxon_id=#{taxon.id}")
65
+ end
66
+ end
36
67
  end
@@ -34,8 +34,9 @@ describe "Cart", type: :feature, inaccessible: true do
34
34
  visit spree.root_path
35
35
  click_link "RoR Mug"
36
36
  click_button "add-to-cart-button"
37
+ line_item = Spree::LineItem.first!
37
38
  within("#line_items") do
38
- click_link "delete_line_item_1"
39
+ click_link "delete_line_item_#{line_item.id}"
39
40
  end
40
41
 
41
42
  expect(page).to_not have_content("Line items quantity must be an integer")
@@ -77,6 +78,7 @@ describe "Cart", type: :feature, inaccessible: true do
77
78
  expect(page).to have_content(product.name)
78
79
  end
79
80
  end
81
+
80
82
  it "should have a surrounding element with data-hook='cart_container'" do
81
83
  visit spree.cart_path
82
84
  expect(page).to have_selector("div[data-hook='cart_container']")
@@ -96,7 +96,7 @@ describe "Checkout", type: :feature, inaccessible: true, js: true do
96
96
  # Regression test for #2694 and #4117
97
97
  context "doesn't allow bad credit card numbers" do
98
98
  before(:each) do
99
- order = OrderWalkthrough.up_to(:delivery)
99
+ order = OrderWalkthrough.up_to(:payment)
100
100
  allow(order).to receive_messages confirmation_required?: true
101
101
  allow(order).to receive_messages(:available_payment_methods => [ create(:credit_card_payment_method) ])
102
102
 
@@ -109,7 +109,7 @@ describe "Checkout", type: :feature, inaccessible: true, js: true do
109
109
  end
110
110
 
111
111
  it "redirects to payment page", inaccessible: true, js: true do
112
- visit spree.checkout_state_path(:delivery)
112
+ visit spree.checkout_state_path(:payment)
113
113
  click_button "Save and Continue"
114
114
  choose "Credit Card"
115
115
  fill_in "Card Number", with: '123'
@@ -149,7 +149,7 @@ describe "Checkout", type: :feature, inaccessible: true, js: true do
149
149
  let!(:user) { create(:user) }
150
150
 
151
151
  let!(:order) do
152
- order = OrderWalkthrough.up_to(:delivery)
152
+ order = OrderWalkthrough.up_to(:payment)
153
153
  allow(order).to receive_messages confirmation_required?: true
154
154
 
155
155
  order.reload
@@ -198,7 +198,7 @@ describe "Checkout", type: :feature, inaccessible: true, js: true do
198
198
 
199
199
  before do
200
200
  Capybara.ignore_hidden_elements = false
201
- order = OrderWalkthrough.up_to(:delivery)
201
+ order = OrderWalkthrough.up_to(:payment)
202
202
  allow(order).to receive_messages(available_payment_methods: [check_payment,credit_cart_payment])
203
203
  order.user = create(:user)
204
204
  order.update!
@@ -231,7 +231,7 @@ describe "Checkout", type: :feature, inaccessible: true, js: true do
231
231
  end
232
232
 
233
233
  before do
234
- order = OrderWalkthrough.up_to(:delivery)
234
+ order = OrderWalkthrough.up_to(:payment)
235
235
  allow(order).to receive_messages(available_payment_methods: [bogus])
236
236
 
237
237
  allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order)
@@ -473,15 +473,14 @@ describe "Checkout", type: :feature, inaccessible: true, js: true do
473
473
 
474
474
  context "when order is completed" do
475
475
  let!(:user) { create(:user) }
476
- let!(:order) { OrderWalkthrough.up_to(:delivery) }
476
+ let!(:order) { OrderWalkthrough.up_to(:payment) }
477
477
 
478
478
  before(:each) do
479
479
  allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order)
480
480
  allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: user)
481
481
  allow_any_instance_of(Spree::OrdersController).to receive_messages(try_spree_current_user: user)
482
482
 
483
- visit spree.checkout_state_path(:delivery)
484
- click_button "Save and Continue"
483
+ visit spree.checkout_state_path(:payment)
485
484
  click_button "Save and Continue"
486
485
  end
487
486
 
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe "checkout with unshippable items", type: :feature, inaccessible: true do
4
4
  let!(:stock_location) { create(:stock_location) }
5
- let(:order) { OrderWalkthrough.up_to(:address) }
5
+ let(:order) { OrderWalkthrough.up_to(:delivery) }
6
6
 
7
7
  before do
8
8
  OrderWalkthrough.add_line_item!(order)
data/spec/spec_helper.rb CHANGED
@@ -74,6 +74,13 @@ RSpec.configure do |config|
74
74
  end
75
75
  end
76
76
 
77
+ # Ensure DB is clean, so that transaction isolated specs see
78
+ # pristine state.
79
+ config.before(:suite) do
80
+ DatabaseCleaner.strategy = :truncation
81
+ DatabaseCleaner.clean
82
+ end
83
+
77
84
  config.before(:each) do
78
85
  WebMock.disable!
79
86
  if RSpec.current_example.metadata[:js]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_frontend
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Schofield
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-05 00:00:00.000000000 Z
11
+ date: 2015-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree_api
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 3.0.1
19
+ version: 3.0.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 3.0.1
26
+ version: 3.0.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: spree_core
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 3.0.1
33
+ version: 3.0.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 3.0.1
40
+ version: 3.0.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bootstrap-sass
43
43
  requirement: !ruby/object:Gem::Requirement