solidus_backend 1.0.2 → 1.0.3
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 +4 -4
- data/CHANGELOG.md +1 -0
- data/Gemfile +6 -0
- data/Rakefile +15 -0
- data/script/rails +9 -0
- data/solidus_backend.gemspec +28 -0
- data/spec/controllers/spree/admin/base_controller_spec.rb +24 -0
- data/spec/controllers/spree/admin/cancellations_controller_spec.rb +77 -0
- data/spec/controllers/spree/admin/customer_returns_controller_spec.rb +234 -0
- data/spec/controllers/spree/admin/general_settings_controller_spec.rb +41 -0
- data/spec/controllers/spree/admin/missing_products_controller_spec.rb +18 -0
- data/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +80 -0
- data/spec/controllers/spree/admin/orders_controller_spec.rb +472 -0
- data/spec/controllers/spree/admin/payment_methods_controller_spec.rb +49 -0
- data/spec/controllers/spree/admin/payments_controller_spec.rb +175 -0
- data/spec/controllers/spree/admin/products_controller_spec.rb +45 -0
- data/spec/controllers/spree/admin/promotion_actions_controller_spec.rb +21 -0
- data/spec/controllers/spree/admin/promotion_codes_controller_spec.rb +18 -0
- data/spec/controllers/spree/admin/promotion_rules_controller_spec.rb +21 -0
- data/spec/controllers/spree/admin/promotions_controller_spec.rb +122 -0
- data/spec/controllers/spree/admin/refunds_controller_spec.rb +32 -0
- data/spec/controllers/spree/admin/reimbursements_controller_spec.rb +75 -0
- data/spec/controllers/spree/admin/reports_controller_spec.rb +134 -0
- data/spec/controllers/spree/admin/resource_controller_spec.rb +166 -0
- data/spec/controllers/spree/admin/return_authorizations_controller_spec.rb +226 -0
- data/spec/controllers/spree/admin/return_items_controller_spec.rb +27 -0
- data/spec/controllers/spree/admin/root_controller_spec.rb +41 -0
- data/spec/controllers/spree/admin/search_controller_spec.rb +104 -0
- data/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +14 -0
- data/spec/controllers/spree/admin/stock_items_controller_spec.rb +50 -0
- data/spec/controllers/spree/admin/stock_locations_controller_spec.rb +41 -0
- data/spec/controllers/spree/admin/stock_transfers_controller_spec.rb +331 -0
- data/spec/controllers/spree/admin/store_credits_controller_spec.rb +309 -0
- data/spec/controllers/spree/admin/users_controller_spec.rb +236 -0
- data/spec/controllers/spree/admin/variants_controller_spec.rb +32 -0
- data/spec/features/admin/configuration/analytics_tracker_spec.rb +54 -0
- data/spec/features/admin/configuration/countries_spec.rb +22 -0
- data/spec/features/admin/configuration/general_settings_spec.rb +45 -0
- data/spec/features/admin/configuration/payment_methods_spec.rb +125 -0
- data/spec/features/admin/configuration/shipping_methods_spec.rb +64 -0
- data/spec/features/admin/configuration/states_spec.rb +64 -0
- data/spec/features/admin/configuration/stock_locations_spec.rb +50 -0
- data/spec/features/admin/configuration/tax_categories_spec.rb +56 -0
- data/spec/features/admin/configuration/tax_rates_spec.rb +30 -0
- data/spec/features/admin/configuration/taxonomies_spec.rb +52 -0
- data/spec/features/admin/configuration/zones_spec.rb +39 -0
- data/spec/features/admin/homepage_spec.rb +78 -0
- data/spec/features/admin/locale_spec.rb +30 -0
- data/spec/features/admin/orders/adjustments_promotions_spec.rb +53 -0
- data/spec/features/admin/orders/adjustments_spec.rb +126 -0
- data/spec/features/admin/orders/cancelling_and_resuming_spec.rb +48 -0
- data/spec/features/admin/orders/cancelling_inventory_spec.rb +48 -0
- data/spec/features/admin/orders/customer_details_spec.rb +163 -0
- data/spec/features/admin/orders/line_items_spec.rb +50 -0
- data/spec/features/admin/orders/listing_spec.rb +130 -0
- data/spec/features/admin/orders/log_entries_spec.rb +55 -0
- data/spec/features/admin/orders/new_order_spec.rb +185 -0
- data/spec/features/admin/orders/order_details_spec.rb +533 -0
- data/spec/features/admin/orders/payments_spec.rb +228 -0
- data/spec/features/admin/orders/risk_analysis_spec.rb +47 -0
- data/spec/features/admin/orders/shipments_spec.rb +65 -0
- data/spec/features/admin/payments/store_credits_spec.rb +21 -0
- data/spec/features/admin/products/edit/images_spec.rb +87 -0
- data/spec/features/admin/products/edit/products_spec.rb +66 -0
- data/spec/features/admin/products/edit/taxons_spec.rb +43 -0
- data/spec/features/admin/products/edit/variants_spec.rb +61 -0
- data/spec/features/admin/products/option_types_spec.rb +114 -0
- data/spec/features/admin/products/products_spec.rb +392 -0
- data/spec/features/admin/products/properties_spec.rb +139 -0
- data/spec/features/admin/products/prototypes_spec.rb +110 -0
- data/spec/features/admin/products/stock_management_spec.rb +82 -0
- data/spec/features/admin/products/variant_spec.rb +51 -0
- data/spec/features/admin/promotion_adjustments_spec.rb +220 -0
- data/spec/features/admin/promotions/tiered_calculator_spec.rb +69 -0
- data/spec/features/admin/reports_spec.rb +61 -0
- data/spec/features/admin/stock_transfer_spec.rb +86 -0
- data/spec/features/admin/store_credits_spec.rb +82 -0
- data/spec/features/admin/taxons_spec.rb +31 -0
- data/spec/features/admin/users_spec.rb +270 -0
- data/spec/helpers/admin/base_helper_spec.rb +24 -0
- data/spec/helpers/admin/navigation_helper_spec.rb +73 -0
- data/spec/helpers/admin/reimbursements_helper_spec.rb +34 -0
- data/spec/helpers/admin/stock_movements_helper_spec.rb +29 -0
- data/spec/helpers/admin/store_credit_events_helper_spec.rb +95 -0
- data/spec/helpers/promotion_rules_helper_spec.rb +12 -0
- data/spec/spec_helper.rb +108 -0
- data/spec/support/appear_before_matcher.rb +8 -0
- data/spec/support/ror_ringer.jpeg +0 -0
- data/spec/test_views/spree/admin/widgets/edit.html.erb +1 -0
- data/spec/test_views/spree/admin/widgets/new.html.erb +1 -0
- metadata +95 -6
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Spree
|
|
4
|
+
class GatewayWithPassword < PaymentMethod
|
|
5
|
+
preference :password, :string, :default => "password"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
describe Admin::PaymentMethodsController, :type => :controller do
|
|
9
|
+
stub_authorization!
|
|
10
|
+
|
|
11
|
+
let(:payment_method) { GatewayWithPassword.create!(:name => "Bogus", :preferred_password => "haxme") }
|
|
12
|
+
|
|
13
|
+
# regression test for #2094
|
|
14
|
+
it "does not clear password on update" do
|
|
15
|
+
expect(payment_method.preferred_password).to eq("haxme")
|
|
16
|
+
spree_put :update, :id => payment_method.id, :payment_method => { :type => payment_method.class.to_s, :preferred_password => "" }
|
|
17
|
+
expect(response).to redirect_to(spree.edit_admin_payment_method_path(payment_method))
|
|
18
|
+
|
|
19
|
+
payment_method.reload
|
|
20
|
+
expect(payment_method.preferred_password).to eq("haxme")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context "tries to save invalid payment" do
|
|
24
|
+
it "doesn't break, responds nicely" do
|
|
25
|
+
expect {
|
|
26
|
+
spree_post :create, :payment_method => { :name => "", :type => "Spree::Gateway::Bogus" }
|
|
27
|
+
}.not_to raise_error
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "can create a payment method of a valid type" do
|
|
32
|
+
expect {
|
|
33
|
+
spree_post :create, :payment_method => { :name => "Test Method", :type => "Spree::Gateway::Bogus" }
|
|
34
|
+
}.to change(Spree::PaymentMethod, :count).by(1)
|
|
35
|
+
|
|
36
|
+
expect(response).to be_redirect
|
|
37
|
+
expect(response).to redirect_to spree.edit_admin_payment_method_path(assigns(:payment_method))
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "can not create a payment method of an invalid type" do
|
|
41
|
+
expect {
|
|
42
|
+
spree_post :create, :payment_method => { :name => "Invalid Payment Method", :type => "Spree::InvalidType" }
|
|
43
|
+
}.to change(Spree::PaymentMethod, :count).by(0)
|
|
44
|
+
|
|
45
|
+
expect(response).to be_redirect
|
|
46
|
+
expect(response).to redirect_to spree.new_admin_payment_method_path
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Spree
|
|
4
|
+
module Admin
|
|
5
|
+
describe PaymentsController, :type => :controller do
|
|
6
|
+
before do
|
|
7
|
+
allow(controller).to receive_messages :spree_current_user => user
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
let(:user) { create(:admin_user) }
|
|
11
|
+
let(:order) { create(:order) }
|
|
12
|
+
|
|
13
|
+
context "with a valid credit card" do
|
|
14
|
+
let(:order) { create(:order_with_line_items, :state => "payment") }
|
|
15
|
+
let(:payment_method) { create(:credit_card_payment_method, :display_on => "back_end") }
|
|
16
|
+
let(:attributes) do
|
|
17
|
+
{
|
|
18
|
+
:order_id => order.number,
|
|
19
|
+
:card => "new",
|
|
20
|
+
:payment => {
|
|
21
|
+
:amount => order.total,
|
|
22
|
+
:payment_method_id => payment_method.id.to_s,
|
|
23
|
+
:source_attributes => {
|
|
24
|
+
:name => "Test User",
|
|
25
|
+
:number => "4111 1111 1111 1111",
|
|
26
|
+
:expiry => "09 / #{Time.now.year + 1}",
|
|
27
|
+
:verification_value => "123"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
before do
|
|
34
|
+
spree_post :create, attributes
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should process payment correctly" do
|
|
38
|
+
expect(order.payments.count).to eq(1)
|
|
39
|
+
expect(order.payments.last.state).to eq 'checkout'
|
|
40
|
+
expect(response).to redirect_to(spree.admin_order_payments_path(order))
|
|
41
|
+
expect(order.reload.state).to eq('confirm')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context 'with credit card address fields' do
|
|
45
|
+
let(:address) { build(:address) }
|
|
46
|
+
|
|
47
|
+
let(:attributes) do
|
|
48
|
+
attrs = super()
|
|
49
|
+
attrs[:payment][:source_attributes][:address_attributes] = address_attributes
|
|
50
|
+
attrs
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
let(:address_attributes) do
|
|
54
|
+
{
|
|
55
|
+
'firstname' => address.firstname,
|
|
56
|
+
'lastname' => address.lastname,
|
|
57
|
+
'address1' => address.address1,
|
|
58
|
+
'city' => address.city,
|
|
59
|
+
'country_id' => address.country_id,
|
|
60
|
+
'state_id' => address.state_id,
|
|
61
|
+
'zipcode' => address.zipcode,
|
|
62
|
+
'phone' => address.phone,
|
|
63
|
+
}
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it 'associates the address' do
|
|
67
|
+
expect(order.payments.count).to eq(1)
|
|
68
|
+
credit_card = order.payments.last.source
|
|
69
|
+
expect(credit_card.address.attributes).to include(address_attributes)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Regression test for #3233
|
|
75
|
+
context "with a backend payment method" do
|
|
76
|
+
before do
|
|
77
|
+
@payment_method = create(:check_payment_method, :display_on => "back_end")
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "loads backend payment methods" do
|
|
81
|
+
spree_get :new, :order_id => order.number
|
|
82
|
+
expect(response.status).to eq(200)
|
|
83
|
+
expect(assigns[:payment_methods]).to include(@payment_method)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
context "order has billing address" do
|
|
88
|
+
before do
|
|
89
|
+
order.bill_address = create(:address)
|
|
90
|
+
order.save!
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
context "order does not have payments" do
|
|
94
|
+
it "redirect to new payments page" do
|
|
95
|
+
spree_get :index, { amount: 100, order_id: order.number }
|
|
96
|
+
expect(response).to redirect_to(spree.new_admin_order_payment_path(order))
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
context "order has payments" do
|
|
101
|
+
before do
|
|
102
|
+
order.payments << create(:payment, amount: order.total, order: order, state: 'completed')
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it "shows the payments page" do
|
|
106
|
+
spree_get :index, { amount: 100, order_id: order.number }
|
|
107
|
+
expect(response.code).to eq "200"
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
context "order does not have a billing address" do
|
|
114
|
+
before do
|
|
115
|
+
order.bill_address = nil
|
|
116
|
+
order.save
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "should redirect to the customer details page" do
|
|
120
|
+
spree_get :index, { amount: 100, order_id: order.number }
|
|
121
|
+
expect(response).to redirect_to(spree.edit_admin_order_customer_path(order))
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
describe 'fire' do
|
|
126
|
+
describe 'authorization' do
|
|
127
|
+
let(:payment) { create(:payment, state: 'checkout') }
|
|
128
|
+
let(:order) { payment.order }
|
|
129
|
+
|
|
130
|
+
context 'the user is authorized' do
|
|
131
|
+
class CaptureAllowedAbility
|
|
132
|
+
include CanCan::Ability
|
|
133
|
+
|
|
134
|
+
def initialize(user)
|
|
135
|
+
can :capture, Spree::Payment
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
before do
|
|
140
|
+
Spree::Ability.register_ability(CaptureAllowedAbility)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it 'allows the action' do
|
|
144
|
+
expect {
|
|
145
|
+
spree_post(:fire, id: payment.to_param, e: 'capture', order_id: order.to_param)
|
|
146
|
+
}.to change { payment.reload.state }.from('checkout').to('completed')
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
context 'the user is not authorized' do
|
|
151
|
+
class CaptureNotAllowedAbility
|
|
152
|
+
include CanCan::Ability
|
|
153
|
+
|
|
154
|
+
def initialize(user)
|
|
155
|
+
cannot :capture, Spree::Payment
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
before do
|
|
160
|
+
Spree::Ability.register_ability(CaptureNotAllowedAbility)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
it 'does not allow the action' do
|
|
164
|
+
expect {
|
|
165
|
+
spree_post(:fire, id: payment.to_param, e: 'capture', order_id: order.to_param)
|
|
166
|
+
}.to_not change { payment.reload.state }
|
|
167
|
+
expect(flash[:error]).to eq('Authorization Failure')
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spree::Admin::ProductsController, :type => :controller do
|
|
4
|
+
stub_authorization!
|
|
5
|
+
|
|
6
|
+
context "#index" do
|
|
7
|
+
let(:ability_user) { stub_model(Spree::LegacyUser, :has_spree_role? => true) }
|
|
8
|
+
|
|
9
|
+
# Regression test for #1259
|
|
10
|
+
it "can find a product by SKU" do
|
|
11
|
+
product = create(:product, :sku => "ABC123")
|
|
12
|
+
spree_get :index, :q => { :sku_start => "ABC123" }
|
|
13
|
+
expect(assigns[:collection]).not_to be_empty
|
|
14
|
+
expect(assigns[:collection]).to include(product)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# regression test for #1370
|
|
19
|
+
context "adding properties to a product" do
|
|
20
|
+
let!(:product) { create(:product) }
|
|
21
|
+
specify do
|
|
22
|
+
spree_put :update, :id => product.to_param, :product => { :product_properties_attributes => { "1" => { :property_name => "Foo", :value => "bar" } } }
|
|
23
|
+
expect(flash[:success]).to eq("Product #{product.name.inspect} has been successfully updated!")
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# regression test for #801
|
|
30
|
+
context "destroying a product" do
|
|
31
|
+
let(:product) do
|
|
32
|
+
product = create(:product)
|
|
33
|
+
create(:variant, :product => product)
|
|
34
|
+
product
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "deletes all the variants (including master) for the product" do
|
|
38
|
+
spree_delete :destroy, :id => product
|
|
39
|
+
expect(product.reload.deleted_at).not_to be_nil
|
|
40
|
+
product.variants_including_master.each do |variant|
|
|
41
|
+
expect(variant.reload.deleted_at).not_to be_nil
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spree::Admin::PromotionActionsController, :type => :controller do
|
|
4
|
+
stub_authorization!
|
|
5
|
+
|
|
6
|
+
let!(:promotion) { create(:promotion) }
|
|
7
|
+
|
|
8
|
+
it "can create a promotion action of a valid type" do
|
|
9
|
+
spree_post :create, :promotion_id => promotion.id, :action_type => "Spree::Promotion::Actions::CreateAdjustment"
|
|
10
|
+
expect(response).to be_redirect
|
|
11
|
+
expect(response).to redirect_to spree.edit_admin_promotion_path(promotion)
|
|
12
|
+
expect(promotion.actions.count).to eq(1)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "can not create a promotion action of an invalid type" do
|
|
16
|
+
spree_post :create, :promotion_id => promotion.id, :action_type => "Spree::InvalidType"
|
|
17
|
+
expect(response).to be_redirect
|
|
18
|
+
expect(response).to redirect_to spree.edit_admin_promotion_path(promotion)
|
|
19
|
+
expect(promotion.rules.count).to eq(0)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spree::Admin::PromotionCodesController do
|
|
4
|
+
stub_authorization!
|
|
5
|
+
render_views
|
|
6
|
+
|
|
7
|
+
let!(:promotion) { create(:promotion) }
|
|
8
|
+
let!(:code1) { create(:promotion_code, promotion: promotion) }
|
|
9
|
+
let!(:code2) { create(:promotion_code, promotion: promotion) }
|
|
10
|
+
let!(:code3) { create(:promotion_code, promotion: promotion) }
|
|
11
|
+
|
|
12
|
+
it "can create a promotion rule of a valid type" do
|
|
13
|
+
spree_get :index, promotion_id: promotion.id, format: 'csv'
|
|
14
|
+
expect(response).to be_success
|
|
15
|
+
parsed = CSV.parse(response.body, headers: true)
|
|
16
|
+
expect(parsed.entries.map(&:to_h)).to eq([{"Code" => code1.value}, {"Code" => code2.value}, {"Code" => code3.value}])
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spree::Admin::PromotionRulesController, :type => :controller do
|
|
4
|
+
stub_authorization!
|
|
5
|
+
|
|
6
|
+
let!(:promotion) { create(:promotion) }
|
|
7
|
+
|
|
8
|
+
it "can create a promotion rule of a valid type" do
|
|
9
|
+
spree_post :create, :promotion_id => promotion.id, :promotion_rule => { :type => "Spree::Promotion::Rules::Product" }
|
|
10
|
+
expect(response).to be_redirect
|
|
11
|
+
expect(response).to redirect_to spree.edit_admin_promotion_path(promotion)
|
|
12
|
+
expect(promotion.rules.count).to eq(1)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "can not create a promotion rule of an invalid type" do
|
|
16
|
+
spree_post :create, :promotion_id => promotion.id, :promotion_rule => { :type => "Spree::InvalidType" }
|
|
17
|
+
expect(response).to be_redirect
|
|
18
|
+
expect(response).to redirect_to spree.edit_admin_promotion_path(promotion)
|
|
19
|
+
expect(promotion.rules.count).to eq(0)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spree::Admin::PromotionsController, :type => :controller do
|
|
4
|
+
stub_authorization!
|
|
5
|
+
|
|
6
|
+
let!(:promotion1) { create(:promotion, name: "name1", code: "code1", path: "path1") }
|
|
7
|
+
let!(:promotion2) { create(:promotion, name: "name2", code: "code2", path: "path2") }
|
|
8
|
+
let!(:category) { create :promotion_category }
|
|
9
|
+
|
|
10
|
+
describe "#index" do
|
|
11
|
+
|
|
12
|
+
it "succeeds" do
|
|
13
|
+
spree_get :index
|
|
14
|
+
expect(assigns[:promotions]).to match_array [promotion2, promotion1]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "assigns promotion categories" do
|
|
18
|
+
spree_get :index
|
|
19
|
+
expect(assigns[:promotion_categories]).to match_array [category]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context "search" do
|
|
23
|
+
it "pages results" do
|
|
24
|
+
spree_get :index, per_page: '1'
|
|
25
|
+
expect(assigns[:promotions]).to eq [promotion2]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "filters by name" do
|
|
29
|
+
spree_get :index, q: {name_cont: promotion1.name}
|
|
30
|
+
expect(assigns[:promotions]).to eq [promotion1]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "filters by code" do
|
|
34
|
+
spree_get :index, q: {codes_value_cont: promotion1.codes.first.value }
|
|
35
|
+
expect(assigns[:promotions]).to eq [promotion1]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "filters by path" do
|
|
39
|
+
spree_get :index, q: {path_cont: promotion1.path}
|
|
40
|
+
expect(assigns[:promotions]).to eq [promotion1]
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe "#create" do
|
|
46
|
+
subject { spree_post :create, params }
|
|
47
|
+
let(:params) { {promotion: {name: 'some promo'}} }
|
|
48
|
+
|
|
49
|
+
context "it succeeds" do
|
|
50
|
+
it "creates a promotion" do
|
|
51
|
+
expect { subject }.to change { Spree::Promotion.count }.by(1)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "sets the flash message" do
|
|
55
|
+
subject
|
|
56
|
+
expect(flash[:success]).to eq "Promotion has been successfully created!"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "redirects to promotion edit" do
|
|
60
|
+
subject
|
|
61
|
+
expect(response).to redirect_to "http://test.host/admin/promotions/#{assigns(:promotion).id}/edit"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
context "with one promo codes" do
|
|
65
|
+
let(:params) do
|
|
66
|
+
super().merge(promotion_builder: { base_code: 'abc', number_of_codes: 1 })
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "succeeds and creates one code" do
|
|
70
|
+
expect {
|
|
71
|
+
expect {
|
|
72
|
+
subject
|
|
73
|
+
}.to change { Spree::Promotion.count }.by(1)
|
|
74
|
+
}.to change { Spree::PromotionCode.count }.by(1)
|
|
75
|
+
|
|
76
|
+
expect(assigns(:promotion).codes.first.value).to eq ('abc')
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
context "with multiple promo codes" do
|
|
81
|
+
let(:params) do
|
|
82
|
+
super().merge(promotion_builder: { base_code: 'abc', number_of_codes: 2 })
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "succeeds and creates multiple codes" do
|
|
86
|
+
expect {
|
|
87
|
+
expect {
|
|
88
|
+
subject
|
|
89
|
+
}.to change { Spree::Promotion.count }.by(1)
|
|
90
|
+
}.to change { Spree::PromotionCode.count }.by(2)
|
|
91
|
+
|
|
92
|
+
codes = assigns(:promotion).codes.map(&:value).sort
|
|
93
|
+
expect(codes.length).to be 2
|
|
94
|
+
expect(codes[0]).to match(/abc_[a-z]{6}/)
|
|
95
|
+
expect(codes[1]).to match(/abc_[a-z]{6}/)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
context "it fails" do
|
|
101
|
+
let(:params) { {} }
|
|
102
|
+
|
|
103
|
+
it "does not create a promotion" do
|
|
104
|
+
expect {
|
|
105
|
+
subject
|
|
106
|
+
}.not_to change { Spree::Promotion.count }
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "sets the flash error" do
|
|
110
|
+
subject
|
|
111
|
+
expect(flash[:error]).to eq "Name can't be blank"
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "renders new" do
|
|
115
|
+
subject
|
|
116
|
+
expect(response).to render_template :new
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
end
|