solidus_frontend 1.2.3 → 1.3.0.beta1
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.
Potentially problematic release.
This version of solidus_frontend might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +3 -3
- data/Rakefile +1 -1
- data/app/assets/javascripts/spree/frontend/checkout/address.js.coffee +0 -2
- data/app/assets/stylesheets/spree/frontend.css +1 -2
- data/app/assets/stylesheets/spree/frontend/_skeleton.scss +242 -0
- data/app/assets/stylesheets/spree/frontend/screen.css.scss +1 -0
- data/app/controllers/spree/checkout_controller.rb +93 -93
- data/app/controllers/spree/content_controller.rb +1 -1
- data/app/controllers/spree/orders_controller.rb +15 -16
- data/app/controllers/spree/products_controller.rb +19 -18
- data/app/controllers/spree/store_controller.rb +27 -27
- data/app/controllers/spree/taxons_controller.rb +1 -2
- data/app/models/spree/frontend_configuration.rb +1 -1
- data/app/views/spree/address/_form.html.erb +18 -12
- data/app/views/spree/orders/show.html.erb +2 -2
- data/app/views/spree/products/_cart_form.html.erb +5 -5
- data/app/views/spree/products/show.html.erb +1 -1
- data/app/views/spree/shared/_google_analytics.html.erb +1 -1
- data/app/views/spree/shared/_order_details.html.erb +12 -11
- data/app/views/spree/shared/_products.html.erb +2 -2
- data/config/initializers/assets.rb +8 -1
- data/config/initializers/canonical_rails.rb +1 -2
- data/config/routes.rb +17 -18
- data/lib/spree/frontend.rb +1 -0
- data/lib/spree/frontend/engine.rb +1 -9
- data/lib/spree/frontend/middleware/seo_assist.rb +3 -4
- data/lib/tasks/rake_util.rb +3 -6
- data/lib/tasks/taxon.rake +3 -3
- data/script/rails +0 -1
- data/solidus_frontend.gemspec +1 -0
- data/spec/controllers/controller_extension_spec.rb +15 -15
- data/spec/controllers/controller_helpers_spec.rb +1 -2
- data/spec/controllers/spree/checkout_controller_spec.rb +67 -115
- data/spec/controllers/spree/content_controller_spec.rb +1 -1
- data/spec/controllers/spree/current_order_tracking_spec.rb +7 -6
- data/spec/controllers/spree/home_controller_spec.rb +3 -3
- data/spec/controllers/spree/orders_controller_ability_spec.rb +17 -16
- data/spec/controllers/spree/orders_controller_spec.rb +9 -8
- data/spec/controllers/spree/orders_controller_transitions_spec.rb +5 -5
- data/spec/controllers/spree/products_controller_spec.rb +10 -11
- data/spec/controllers/spree/taxons_controller_spec.rb +5 -5
- data/spec/features/address_spec.rb +15 -15
- data/spec/features/automatic_promotion_adjustments_spec.rb +18 -18
- data/spec/features/caching/products_spec.rb +2 -2
- data/spec/features/caching/taxons_spec.rb +2 -2
- data/spec/features/cart_spec.rb +8 -6
- data/spec/features/checkout_spec.rb +49 -51
- data/spec/features/checkout_unshippable_spec.rb +4 -5
- data/spec/features/coupon_code_spec.rb +28 -30
- data/spec/features/currency_spec.rb +3 -3
- data/spec/features/free_shipping_promotions_spec.rb +17 -17
- data/spec/features/locale_spec.rb +33 -24
- data/spec/features/order_spec.rb +4 -4
- data/spec/features/products_spec.rb +12 -12
- data/spec/features/promotion_code_invalidation_spec.rb +1 -0
- data/spec/features/quantity_promotions_spec.rb +1 -1
- data/spec/features/taxons_spec.rb +16 -16
- data/spec/features/template_rendering_spec.rb +1 -2
- data/spec/helpers/base_helper_spec.rb +2 -2
- data/spec/spec_helper.rb +5 -5
- data/spec/support/shared_contexts/checkout_setup.rb +1 -0
- data/spec/support/shared_contexts/custom_products.rb +18 -17
- data/spec/support/shared_contexts/product_prototypes.rb +3 -5
- data/spec/views/spree/checkout/_summary_spec.rb +2 -2
- metadata +24 -9
@@ -1,25 +1,26 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe 'current order tracking', :
|
3
|
+
describe 'current order tracking', type: :controller do
|
4
|
+
let!(:store) { create(:store) }
|
4
5
|
let(:user) { create(:user) }
|
5
6
|
|
6
7
|
controller(Spree::StoreController) do
|
7
8
|
def index
|
8
|
-
render :
|
9
|
+
render nothing: true
|
9
10
|
end
|
10
11
|
end
|
11
12
|
|
12
13
|
let(:order) { FactoryGirl.create(:order) }
|
13
14
|
|
14
15
|
it 'automatically tracks who the order was created by & IP address' do
|
15
|
-
allow(controller).to receive_messages(:
|
16
|
+
allow(controller).to receive_messages(try_spree_current_user: user)
|
16
17
|
get :index
|
17
18
|
expect(controller.current_order(create_order_if_necessary: true).created_by).to eq controller.try_spree_current_user
|
18
19
|
expect(controller.current_order.last_ip_address).to eq "0.0.0.0"
|
19
20
|
end
|
20
21
|
|
21
22
|
context "current order creation" do
|
22
|
-
before { allow(controller).to receive_messages(:
|
23
|
+
before { allow(controller).to receive_messages(try_spree_current_user: user) }
|
23
24
|
|
24
25
|
it "doesn't create a new order out of the blue" do
|
25
26
|
expect {
|
@@ -29,10 +30,10 @@ describe 'current order tracking', :type => :controller do
|
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
32
|
-
describe Spree::OrdersController, :
|
33
|
+
describe Spree::OrdersController, type: :controller do
|
33
34
|
let(:user) { create(:user) }
|
34
35
|
|
35
|
-
before { allow(controller).to receive_messages(:
|
36
|
+
before { allow(controller).to receive_messages(try_spree_current_user: user) }
|
36
37
|
|
37
38
|
describe Spree::OrdersController do
|
38
39
|
it "doesn't create a new order out of the blue" do
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Spree::HomeController, :
|
3
|
+
describe Spree::HomeController, type: :controller do
|
4
4
|
it "provides current user to the searcher class" do
|
5
|
-
user = mock_model(Spree.user_class, :
|
6
|
-
allow(controller).to receive_messages :
|
5
|
+
user = mock_model(Spree.user_class, last_incomplete_spree_order: nil, spree_api_key: 'fake')
|
6
|
+
allow(controller).to receive_messages try_spree_current_user: user
|
7
7
|
expect_any_instance_of(Spree::Config.searcher_class).to receive(:current_user=).with(user)
|
8
8
|
spree_get :index
|
9
9
|
expect(response.status).to eq(200)
|
@@ -1,9 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
module Spree
|
4
|
-
describe OrdersController, :
|
4
|
+
describe OrdersController, type: :controller do
|
5
5
|
ORDER_TOKEN = 'ORDER_TOKEN'
|
6
6
|
|
7
|
+
let!(:store) { create(:store) }
|
7
8
|
let(:user) { create(:user) }
|
8
9
|
let(:guest_user) { create(:user) }
|
9
10
|
let(:order) { Spree::Order.create }
|
@@ -17,29 +18,29 @@ module Spree
|
|
17
18
|
let(:specified_order) { create(:order) }
|
18
19
|
|
19
20
|
before do
|
20
|
-
allow(controller).to receive_messages :
|
21
|
-
allow(controller).to receive_messages :
|
21
|
+
allow(controller).to receive_messages current_order: order
|
22
|
+
allow(controller).to receive_messages spree_current_user: user
|
22
23
|
end
|
23
24
|
|
24
25
|
context '#populate' do
|
25
26
|
it 'should check if user is authorized for :edit' do
|
26
27
|
expect(controller).to receive(:authorize!).with(:edit, order, token)
|
27
|
-
spree_post :populate, :
|
28
|
+
spree_post :populate, token: token
|
28
29
|
end
|
29
30
|
it "should check against the specified order" do
|
30
31
|
expect(controller).to receive(:authorize!).with(:edit, specified_order, token)
|
31
|
-
spree_post :populate, :
|
32
|
+
spree_post :populate, id: specified_order.number, token: token
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
35
36
|
context '#edit' do
|
36
37
|
it 'should check if user is authorized for :edit' do
|
37
38
|
expect(controller).to receive(:authorize!).with(:edit, order, token)
|
38
|
-
spree_get :edit, :
|
39
|
+
spree_get :edit, token: token
|
39
40
|
end
|
40
41
|
it "should check against the specified order" do
|
41
42
|
expect(controller).to receive(:authorize!).with(:edit, specified_order, token)
|
42
|
-
spree_get :edit, :
|
43
|
+
spree_get :edit, id: specified_order.number, token: token
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
@@ -47,54 +48,54 @@ module Spree
|
|
47
48
|
it 'should check if user is authorized for :edit' do
|
48
49
|
allow(order).to receive :update_attributes
|
49
50
|
expect(controller).to receive(:authorize!).with(:edit, order, token)
|
50
|
-
spree_post :update, :
|
51
|
+
spree_post :update, order: { email: "foo@bar.com" }, token: token
|
51
52
|
end
|
52
53
|
it "should check against the specified order" do
|
53
54
|
allow(order).to receive :update_attributes
|
54
55
|
expect(controller).to receive(:authorize!).with(:edit, specified_order, token)
|
55
|
-
spree_post :update, :
|
56
|
+
spree_post :update, order: { email: "foo@bar.com" }, id: specified_order.number, token: token
|
56
57
|
end
|
57
58
|
end
|
58
59
|
|
59
60
|
context '#empty' do
|
60
61
|
it 'should check if user is authorized for :edit' do
|
61
62
|
expect(controller).to receive(:authorize!).with(:edit, order, token)
|
62
|
-
spree_post :empty, :
|
63
|
+
spree_post :empty, token: token
|
63
64
|
end
|
64
65
|
it "should check against the specified order" do
|
65
66
|
expect(controller).to receive(:authorize!).with(:edit, specified_order, token)
|
66
|
-
spree_post :empty, :
|
67
|
+
spree_post :empty, id: specified_order.number, token: token
|
67
68
|
end
|
68
69
|
end
|
69
70
|
|
70
71
|
context "#show" do
|
71
72
|
it "should check against the specified order" do
|
72
73
|
expect(controller).to receive(:authorize!).with(:edit, specified_order, token)
|
73
|
-
spree_get :show, :
|
74
|
+
spree_get :show, id: specified_order.number, token: token
|
74
75
|
end
|
75
76
|
end
|
76
77
|
end
|
77
78
|
|
78
79
|
context 'when no authenticated user' do
|
79
|
-
let(:order) { create(:order, :
|
80
|
+
let(:order) { create(:order, number: 'R123') }
|
80
81
|
|
81
82
|
context '#show' do
|
82
83
|
context 'when token parameter present' do
|
83
84
|
it 'always ooverride existing token when passing a new one' do
|
84
85
|
cookies.signed[:guest_token] = "soo wrong"
|
85
|
-
spree_get :show, { :
|
86
|
+
spree_get :show, { id: 'R123', token: order.guest_token }
|
86
87
|
expect(cookies.signed[:guest_token]).to eq(order.guest_token)
|
87
88
|
end
|
88
89
|
|
89
90
|
it 'should store as guest_token in session' do
|
90
|
-
spree_get :show, {:
|
91
|
+
spree_get :show, { id: 'R123', token: order.guest_token }
|
91
92
|
expect(cookies.signed[:guest_token]).to eq(order.guest_token)
|
92
93
|
end
|
93
94
|
end
|
94
95
|
|
95
96
|
context 'when no token present' do
|
96
97
|
it 'should respond with 404' do
|
97
|
-
spree_get :show, {:
|
98
|
+
spree_get :show, { id: 'R123' }
|
98
99
|
expect(response.code).to eq('404')
|
99
100
|
end
|
100
101
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Spree::OrdersController, :
|
3
|
+
describe Spree::OrdersController, type: :controller do
|
4
|
+
let!(:store) { create(:store) }
|
4
5
|
let(:user) { create(:user) }
|
5
6
|
|
6
7
|
context "Order model mock" do
|
@@ -10,7 +11,7 @@ describe Spree::OrdersController, :type => :controller do
|
|
10
11
|
let(:variant) { create(:variant) }
|
11
12
|
|
12
13
|
before do
|
13
|
-
allow(controller).to receive_messages(:
|
14
|
+
allow(controller).to receive_messages(try_spree_current_user: user)
|
14
15
|
end
|
15
16
|
|
16
17
|
context "#populate" do
|
@@ -75,13 +76,13 @@ describe Spree::OrdersController, :type => :controller do
|
|
75
76
|
it "should render the edit view (on failure)" do
|
76
77
|
# email validation is only after address state
|
77
78
|
order.update_column(:state, "delivery")
|
78
|
-
spree_put :update, { :
|
79
|
+
spree_put :update, { order: { email: "" } }, { order_id: order.id }
|
79
80
|
expect(response).to render_template :edit
|
80
81
|
end
|
81
82
|
|
82
83
|
it "should redirect to cart path (on success)" do
|
83
84
|
allow(order).to receive(:update_attributes).and_return true
|
84
|
-
spree_put :update, {}, {:
|
85
|
+
spree_put :update, {}, { order_id: 1 }
|
85
86
|
expect(response).to redirect_to(spree.cart_path)
|
86
87
|
end
|
87
88
|
end
|
@@ -108,7 +109,7 @@ describe Spree::OrdersController, :type => :controller do
|
|
108
109
|
end
|
109
110
|
|
110
111
|
it "cannot update a blank order" do
|
111
|
-
spree_put :update, :
|
112
|
+
spree_put :update, order: { email: "foo" }
|
112
113
|
expect(flash[:error]).to eq(Spree.t(:order_not_found))
|
113
114
|
expect(response).to redirect_to(spree.root_path)
|
114
115
|
end
|
@@ -116,18 +117,18 @@ describe Spree::OrdersController, :type => :controller do
|
|
116
117
|
end
|
117
118
|
|
118
119
|
context "line items quantity is 0" do
|
119
|
-
let(:order) { Spree::Order.create }
|
120
|
+
let(:order) { Spree::Order.create(store: store) }
|
120
121
|
let(:variant) { create(:variant) }
|
121
122
|
let!(:line_item) { order.contents.add(variant, 1) }
|
122
123
|
|
123
124
|
before do
|
124
125
|
allow(controller).to receive(:check_authorization)
|
125
|
-
allow(controller).to receive_messages(:
|
126
|
+
allow(controller).to receive_messages(current_order: order)
|
126
127
|
end
|
127
128
|
|
128
129
|
it "removes line items on update" do
|
129
130
|
expect(order.line_items.count).to eq 1
|
130
|
-
spree_put :update, :
|
131
|
+
spree_put :update, order: { line_items_attributes: { "0" => { id: line_item.id, quantity: 0 } } }
|
131
132
|
expect(order.reload.line_items.count).to eq 0
|
132
133
|
end
|
133
134
|
end
|
@@ -5,17 +5,17 @@ Spree::Order.class_eval do
|
|
5
5
|
end
|
6
6
|
|
7
7
|
module Spree
|
8
|
-
describe OrdersController, :
|
8
|
+
describe OrdersController, type: :controller do
|
9
9
|
# Regression test for https://github.com/spree/spree/issues/2004
|
10
10
|
context "with a transition callback on first state" do
|
11
11
|
let(:order) { Spree::Order.new }
|
12
12
|
|
13
13
|
before do
|
14
|
-
allow(controller).to receive_messages :
|
14
|
+
allow(controller).to receive_messages current_order: order
|
15
15
|
expect(controller).to receive(:authorize!).at_least(:once).and_return(true)
|
16
16
|
|
17
|
-
first_state,
|
18
|
-
Spree::Order.state_machine.after_transition :
|
17
|
+
first_state, = Spree::Order.checkout_steps.first
|
18
|
+
Spree::Order.state_machine.after_transition to: first_state do |order|
|
19
19
|
order.did_transition = true
|
20
20
|
end
|
21
21
|
end
|
@@ -23,7 +23,7 @@ module Spree
|
|
23
23
|
it "correctly calls the transition callback" do
|
24
24
|
expect(order.did_transition).to be_nil
|
25
25
|
order.line_items << FactoryGirl.create(:line_item)
|
26
|
-
spree_put :update, { :
|
26
|
+
spree_put :update, { checkout: "checkout" }, { order_id: 1 }
|
27
27
|
expect(order.did_transition).to be true
|
28
28
|
end
|
29
29
|
end
|
@@ -1,23 +1,23 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Spree::ProductsController, :
|
4
|
-
let!(:product) { create(:product, :
|
3
|
+
describe Spree::ProductsController, type: :controller do
|
4
|
+
let!(:product) { create(:product, available_on: 1.year.from_now) }
|
5
5
|
|
6
6
|
# Regression test for https://github.com/spree/spree/issues/1390
|
7
7
|
it "allows admins to view non-active products" do
|
8
|
-
allow(controller).to receive_messages :
|
9
|
-
spree_get :show, :
|
8
|
+
allow(controller).to receive_messages spree_current_user: mock_model(Spree.user_class, has_spree_role?: true, last_incomplete_spree_order: nil, spree_api_key: 'fake')
|
9
|
+
spree_get :show, id: product.to_param
|
10
10
|
expect(response.status).to eq(200)
|
11
11
|
end
|
12
12
|
|
13
13
|
it "cannot view non-active products" do
|
14
|
-
spree_get :show, :
|
14
|
+
spree_get :show, id: product.to_param
|
15
15
|
expect(response.status).to eq(404)
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should provide the current user to the searcher class" do
|
19
|
-
user = mock_model(Spree.user_class, :
|
20
|
-
allow(controller).to receive_messages :
|
19
|
+
user = mock_model(Spree.user_class, last_incomplete_spree_order: nil, spree_api_key: 'fake')
|
20
|
+
allow(controller).to receive_messages spree_current_user: user
|
21
21
|
expect_any_instance_of(Spree::Config.searcher_class).to receive(:current_user=).with(user)
|
22
22
|
spree_get :index
|
23
23
|
expect(response.status).to eq(200)
|
@@ -25,12 +25,11 @@ describe Spree::ProductsController, :type => :controller do
|
|
25
25
|
|
26
26
|
# Regression test for https://github.com/spree/spree/issues/2249
|
27
27
|
it "doesn't error when given an invalid referer" do
|
28
|
-
current_user = mock_model(Spree.user_class,
|
29
|
-
allow(controller).to receive_messages :
|
28
|
+
current_user = mock_model(Spree.user_class, has_spree_role?: true, last_incomplete_spree_order: nil, generate_spree_api_key!: nil)
|
29
|
+
allow(controller).to receive_messages spree_current_user: current_user
|
30
30
|
request.env['HTTP_REFERER'] = "not|a$url"
|
31
31
|
|
32
32
|
# Previously a URI::InvalidURIError exception was being thrown
|
33
|
-
spree_get :show, :
|
33
|
+
spree_get :show, id: product.to_param
|
34
34
|
end
|
35
|
-
|
36
35
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Spree::TaxonsController, :
|
3
|
+
describe Spree::TaxonsController, type: :controller do
|
4
4
|
it "should provide the current user to the searcher class" do
|
5
|
-
taxon = create(:taxon, :
|
6
|
-
user = mock_model(Spree.user_class, :
|
7
|
-
allow(controller).to receive_messages :
|
5
|
+
taxon = create(:taxon, permalink: "test")
|
6
|
+
user = mock_model(Spree.user_class, last_incomplete_spree_order: nil, spree_api_key: 'fake')
|
7
|
+
allow(controller).to receive_messages spree_current_user: user
|
8
8
|
expect_any_instance_of(Spree::Config.searcher_class).to receive(:current_user=).with(user)
|
9
|
-
spree_get :show, :
|
9
|
+
spree_get :show, id: taxon.permalink
|
10
10
|
expect(response.status).to eq(200)
|
11
11
|
end
|
12
12
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe "Address", type: :feature, inaccessible: true do
|
4
|
-
let!(:product) { create(:product, :
|
5
|
-
let!(:order) { create(:order_with_totals, :
|
4
|
+
let!(:product) { create(:product, name: "RoR Mug") }
|
5
|
+
let!(:order) { create(:order_with_totals, state: 'cart') }
|
6
6
|
|
7
7
|
stub_authorization!
|
8
8
|
|
@@ -18,43 +18,43 @@ describe "Address", type: :feature, inaccessible: true do
|
|
18
18
|
@state_name_css = "##{address}_state_name"
|
19
19
|
end
|
20
20
|
|
21
|
-
context "country requires state", :
|
22
|
-
let!(:canada) { create(:country, :
|
23
|
-
let!(:uk) { create(:country, :
|
21
|
+
context "country requires state", js: true, focus: true do
|
22
|
+
let!(:canada) { create(:country, name: "Canada", states_required: true, iso: "CA") }
|
23
|
+
let!(:uk) { create(:country, name: "United Kingdom", states_required: true, iso: "GB") }
|
24
24
|
|
25
|
-
before { Spree::Config[:
|
25
|
+
before { Spree::Config[:default_country_iso] = uk.iso }
|
26
26
|
|
27
27
|
context "but has no state" do
|
28
28
|
it "shows the state input field" do
|
29
29
|
click_button "Checkout"
|
30
30
|
|
31
|
-
select canada.name, :
|
31
|
+
select canada.name, from: @country_css
|
32
32
|
expect(page).to have_no_css(@state_select_css)
|
33
33
|
expect(page).to have_css("#{@state_name_css}.required")
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
context "and has state" do
|
38
|
-
before { create(:state, :
|
38
|
+
before { create(:state, name: "Ontario", country: canada) }
|
39
39
|
|
40
40
|
it "shows the state collection selection" do
|
41
41
|
click_button "Checkout"
|
42
42
|
|
43
|
-
select canada.name, :
|
43
|
+
select canada.name, from: @country_css
|
44
44
|
expect(page).to have_no_css(@state_name_css)
|
45
45
|
expect(page).to have_css("#{@state_select_css}.required")
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
context "user changes to country without states required" do
|
50
|
-
let!(:france) { create(:country, :
|
50
|
+
let!(:france) { create(:country, name: "France", states_required: false, iso: "FR") }
|
51
51
|
|
52
52
|
it "clears the state name" do
|
53
53
|
click_button "Checkout"
|
54
|
-
select canada.name, :
|
54
|
+
select canada.name, from: @country_css
|
55
55
|
page.find(@state_name_css).set("Toscana")
|
56
56
|
|
57
|
-
select france.name, :
|
57
|
+
select france.name, from: @country_css
|
58
58
|
|
59
59
|
expect(page).to have_no_css(@state_name_css)
|
60
60
|
expect(page).to have_no_css(@state_select_css)
|
@@ -62,13 +62,13 @@ describe "Address", type: :feature, inaccessible: true do
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
context "country does not require state", :
|
66
|
-
let!(:france) { create(:country, :
|
65
|
+
context "country does not require state", js: true do
|
66
|
+
let!(:france) { create(:country, name: "France", states_required: false, iso: "FR") }
|
67
67
|
|
68
68
|
it "shows a disabled state input field" do
|
69
69
|
click_button "Checkout"
|
70
70
|
|
71
|
-
select france.name, :
|
71
|
+
select france.name, from: @country_css
|
72
72
|
expect(page).to have_no_css(@state_name_css)
|
73
73
|
expect(page).to have_css("#{@state_select_css}[disabled]", visible: false)
|
74
74
|
end
|
@@ -1,34 +1,34 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe "Automatic promotions", :
|
4
|
-
let!(:
|
5
|
-
let!(:
|
3
|
+
describe "Automatic promotions", type: :feature, js: true do
|
4
|
+
let!(:store) { create(:store) }
|
5
|
+
let!(:country) { create(:country, name: "United States of America", states_required: true) }
|
6
|
+
let!(:state) { create(:state, name: "Alabama", country: country) }
|
6
7
|
let!(:zone) { create(:zone) }
|
7
8
|
let!(:shipping_method) { create(:shipping_method) }
|
8
9
|
let!(:payment_method) { create(:check_payment_method) }
|
9
|
-
let!(:product) { create(:product, :
|
10
|
+
let!(:product) { create(:product, name: "RoR Mug", price: 20) }
|
10
11
|
|
11
12
|
let!(:promotion) do
|
12
13
|
promotion = Spree::Promotion.create!(name: "$10 off when you spend more than $100", apply_automatically: true)
|
13
14
|
|
14
|
-
|
15
|
-
|
15
|
+
calculator = Spree::Calculator::FlatRate.new
|
16
|
+
calculator.preferred_amount = 10
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
18
|
+
rule = Spree::Promotion::Rules::ItemTotal.create
|
19
|
+
rule.preferred_amount = 100
|
20
|
+
rule.save
|
20
21
|
|
21
|
-
|
22
|
+
promotion.rules << rule
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
action = Spree::Promotion::Actions::CreateAdjustment.create
|
25
|
+
action.calculator = calculator
|
26
|
+
action.save
|
26
27
|
|
27
|
-
|
28
|
+
promotion.actions << action
|
28
29
|
end
|
29
30
|
|
30
31
|
context "on the cart page" do
|
31
|
-
|
32
32
|
before do
|
33
33
|
visit spree.root_path
|
34
34
|
click_link product.name
|
@@ -36,12 +36,12 @@ describe "Automatic promotions", :type => :feature, :js => true do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it "automatically applies the promotion once the order crosses the threshold" do
|
39
|
-
fill_in "order_line_items_attributes_0_quantity", :
|
39
|
+
fill_in "order_line_items_attributes_0_quantity", with: 10
|
40
40
|
click_button "Update"
|
41
41
|
expect(page).to have_content("Promotion ($10 off when you spend more than $100) -$10.00")
|
42
|
-
fill_in "order_line_items_attributes_0_quantity", :
|
42
|
+
fill_in "order_line_items_attributes_0_quantity", with: 1
|
43
43
|
click_button "Update"
|
44
44
|
expect(page).not_to have_content("Promotion ($10 off when you spend more than $100) -$10.00")
|
45
45
|
end
|
46
46
|
end
|
47
|
-
end
|
47
|
+
end
|