spree_frontend 3.0.1 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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