effective_orders 1.8.1 → 2.0.0
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/MIT-LICENSE +1 -1
- data/README.md +150 -60
- data/Rakefile +0 -3
- data/active_admin/effective_orders.rb +14 -9
- data/app/assets/javascripts/effective_orders.js +2 -0
- data/app/assets/javascripts/effective_orders/{stripe_charges.js.coffee → providers/stripe_charges.js.coffee} +1 -1
- data/app/assets/javascripts/effective_orders/{stripe_subscriptions.js.coffee → providers/stripe_subscriptions.js.coffee} +1 -1
- data/app/assets/stylesheets/effective_orders/_order.scss +9 -3
- data/app/controllers/admin/orders_controller.rb +87 -3
- data/app/controllers/concerns/acts_as_active_admin_controller.rb +2 -1
- data/app/controllers/effective/carts_controller.rb +4 -2
- data/app/controllers/effective/orders_controller.rb +101 -60
- data/app/controllers/effective/providers/app_checkout.rb +10 -2
- data/app/controllers/effective/providers/ccbill.rb +34 -0
- data/app/controllers/effective/providers/cheque.rb +30 -0
- data/app/controllers/effective/providers/moneris.rb +7 -7
- data/app/controllers/effective/providers/paypal.rb +7 -5
- data/app/controllers/effective/providers/pretend.rb +22 -0
- data/app/controllers/effective/providers/stripe.rb +26 -24
- data/app/controllers/effective/webhooks_controller.rb +1 -1
- data/app/helpers/effective_carts_helper.rb +59 -29
- data/app/helpers/effective_ccbill_helper.rb +25 -0
- data/app/helpers/effective_orders_helper.rb +50 -41
- data/app/helpers/effective_paypal_helper.rb +11 -11
- data/app/mailers/effective/orders_mailer.rb +95 -20
- data/app/models/concerns/acts_as_purchasable.rb +14 -22
- data/app/models/effective/cart.rb +9 -15
- data/app/models/effective/cart_item.rb +15 -13
- data/app/models/effective/customer.rb +9 -9
- data/app/models/effective/datatables/order_items.rb +14 -8
- data/app/models/effective/datatables/orders.rb +56 -69
- data/app/models/effective/order.rb +250 -139
- data/app/models/effective/order_item.rb +23 -16
- data/app/models/effective/product.rb +23 -0
- data/app/models/effective/providers/ccbill_postback.rb +85 -0
- data/app/models/effective/{stripe_charge.rb → providers/stripe_charge.rb} +1 -1
- data/app/models/effective/subscription.rb +16 -12
- data/app/models/effective/tax_rate_calculator.rb +45 -0
- data/app/views/admin/customers/index.html.haml +2 -5
- data/app/views/admin/order_items/index.html.haml +2 -5
- data/app/views/admin/orders/_actions.html.haml +2 -0
- data/app/views/admin/orders/_form.html.haml +28 -0
- data/app/views/admin/orders/_order_item_fields.html.haml +9 -0
- data/app/views/admin/orders/index.html.haml +9 -5
- data/app/views/admin/orders/new.html.haml +3 -0
- data/app/views/effective/carts/_cart.html.haml +3 -12
- data/app/views/effective/carts/_cart_actions.html.haml +4 -0
- data/app/views/effective/carts/show.html.haml +10 -12
- data/app/views/effective/orders/_checkout_step1.html.haml +46 -0
- data/app/views/effective/orders/_checkout_step2.html.haml +33 -0
- data/app/views/effective/orders/_order.html.haml +2 -0
- data/app/views/effective/orders/_order_actions.html.haml +10 -5
- data/app/views/effective/orders/_order_footer.html.haml +1 -0
- data/app/views/effective/orders/_order_items.html.haml +11 -9
- data/app/views/effective/orders/_order_note.html.haml +8 -0
- data/app/views/effective/orders/_order_note_fields.html.haml +5 -0
- data/app/views/effective/orders/_order_shipping.html.haml +4 -4
- data/app/views/effective/orders/_order_user_fields.html.haml +1 -0
- data/app/views/effective/orders/_orders_table.html.haml +27 -0
- data/app/views/effective/orders/ccbill/_form.html.haml +24 -0
- data/app/views/effective/orders/checkout_step1.html.haml +3 -0
- data/app/views/effective/orders/checkout_step2.html.haml +3 -0
- data/app/views/effective/orders/cheque/_form.html.haml +2 -0
- data/app/views/effective/orders/cheque/pay_by_cheque.html.haml +9 -0
- data/app/views/effective/orders/declined.html.haml +4 -2
- data/app/views/effective/orders/my_purchases.html.haml +1 -1
- data/app/views/effective/orders/my_sales.html.haml +1 -1
- data/app/views/effective/orders/purchased.html.haml +3 -2
- data/app/views/effective/orders/show.html.haml +1 -1
- data/app/views/effective/orders/stripe/_form.html.haml +5 -5
- data/app/views/effective/orders_mailer/order_error.html.haml +11 -0
- data/app/views/effective/orders_mailer/payment_request_to_buyer.html.haml +13 -0
- data/app/views/effective/orders_mailer/pending_order_invoice_to_buyer.html.haml +13 -0
- data/app/views/layouts/effective_orders_mailer_layout.html.haml +7 -7
- data/config/routes.rb +39 -24
- data/db/migrate/01_create_effective_orders.rb.erb +20 -1
- data/db/upgrade/03_upgrade_effective_orders_from1x.rb.erb +95 -0
- data/lib/effective_orders.rb +67 -9
- data/lib/effective_orders/app_checkout_service.rb +1 -2
- data/lib/effective_orders/engine.rb +46 -14
- data/lib/effective_orders/version.rb +1 -1
- data/lib/generators/effective_orders/install_generator.rb +1 -0
- data/lib/generators/effective_orders/upgrade_from03x_generator.rb +1 -0
- data/lib/generators/effective_orders/upgrade_from1x_generator.rb +31 -0
- data/lib/generators/templates/effective_orders.rb +131 -66
- data/lib/generators/templates/effective_orders_mailer_preview.rb +28 -13
- data/spec/controllers/admin/orders_controller_spec.rb +242 -0
- data/spec/controllers/ccbill_orders_controller_spec.rb +103 -0
- data/spec/controllers/moneris_orders_controller_spec.rb +23 -23
- data/spec/controllers/orders_controller_spec.rb +167 -79
- data/spec/controllers/stripe_orders_controller_spec.rb +7 -7
- data/spec/dummy/app/models/product.rb +0 -8
- data/spec/dummy/app/models/product_with_float_price.rb +0 -8
- data/spec/dummy/app/models/user.rb +2 -19
- data/spec/dummy/config/application.rb +2 -1
- data/spec/dummy/config/environments/test.rb +1 -0
- data/spec/dummy/config/initializers/effective_orders.rb +109 -64
- data/spec/dummy/db/schema.rb +15 -2
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/test.log +0 -258
- data/spec/models/acts_as_purchasable_spec.rb +8 -6
- data/spec/models/factories_spec.rb +7 -1
- data/spec/models/order_item_spec.rb +1 -1
- data/spec/models/order_spec.rb +165 -46
- data/spec/models/stripe_charge_spec.rb +5 -5
- data/spec/spec_helper.rb +2 -0
- data/spec/support/factories.rb +49 -33
- metadata +47 -64
- data/app/views/effective/orders/_checkout_step_1.html.haml +0 -43
- data/app/views/effective/orders/_checkout_step_2.html.haml +0 -25
- data/app/views/effective/orders/_my_purchases.html.haml +0 -17
- data/app/views/effective/orders/checkout.html.haml +0 -3
- data/app/views/effective/orders/new.html.haml +0 -4
- data/spec/dummy/log/development.log +0 -82
@@ -9,13 +9,13 @@ describe Product do
|
|
9
9
|
|
10
10
|
describe 'assumptions' do
|
11
11
|
it 'should be effectively purchasable' do
|
12
|
-
product.
|
12
|
+
product.kind_of?(ActsAsPurchasable).should eq true
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
describe 'purchased' do
|
17
17
|
it 'is purchased? when in a purchased Order' do
|
18
|
-
order.purchase!
|
18
|
+
order.purchase!
|
19
19
|
|
20
20
|
product.purchased?.should eq true
|
21
21
|
product.purchased_orders.include?(order).should eq true
|
@@ -36,7 +36,7 @@ describe Product do
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
order.purchase!
|
39
|
+
order.purchase!
|
40
40
|
|
41
41
|
instance_order.purchased?.should eq true
|
42
42
|
instance_product.purchased?.should eq true
|
@@ -44,7 +44,7 @@ describe Product do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'is returned by the purchased scopes' do
|
47
|
-
order.purchase!
|
47
|
+
order.purchase!
|
48
48
|
|
49
49
|
Product.purchased.to_a.include?(product).should eq true
|
50
50
|
Product.purchased_by(order.user).to_a.include?(product).should eq true
|
@@ -60,7 +60,8 @@ describe Product do
|
|
60
60
|
product_with_float_price.price = 20.00
|
61
61
|
product_with_float_price.tax_exempt = true
|
62
62
|
|
63
|
-
order = Effective::Order.new(product_with_float_price, user)
|
63
|
+
order = Effective::Order.new(product_with_float_price, user: user)
|
64
|
+
order.billing_address = FactoryGirl.create(:address, state_code: 'AB')
|
64
65
|
|
65
66
|
order.subtotal.should eq 2000
|
66
67
|
order.tax.should eq 0
|
@@ -71,7 +72,8 @@ describe Product do
|
|
71
72
|
product_with_float_price.price = 20.00
|
72
73
|
product_with_float_price.tax_exempt = false
|
73
74
|
|
74
|
-
order = Effective::Order.new(product_with_float_price, user)
|
75
|
+
order = Effective::Order.new(product_with_float_price, user: user)
|
76
|
+
order.billing_address = FactoryGirl.create(:address, state_code: 'AB')
|
75
77
|
|
76
78
|
order.subtotal.should eq 2000
|
77
79
|
order.tax.should eq 100
|
@@ -8,7 +8,13 @@ describe 'Factories' do
|
|
8
8
|
after { StripeMock.stop }
|
9
9
|
|
10
10
|
it 'should have all valid factories' do
|
11
|
-
factories.each
|
11
|
+
factories.each do |factory|
|
12
|
+
obj = FactoryGirl.create(factory)
|
13
|
+
|
14
|
+
puts "Invalid factory #{factory}: #{obj.errors.inspect}" unless obj.valid?
|
15
|
+
|
16
|
+
obj.valid?.should eq true
|
17
|
+
end
|
12
18
|
end
|
13
19
|
|
14
20
|
it 'should have created an Order with a billing_address and shipping_address' do
|
@@ -19,7 +19,7 @@ describe Effective::OrderItem do
|
|
19
19
|
|
20
20
|
describe 'scopes' do
|
21
21
|
it 'is included in the Sold scope when order is purchased' do
|
22
|
-
order.purchase!
|
22
|
+
order.purchase!
|
23
23
|
(order.order_items.size > 0).should eq true
|
24
24
|
|
25
25
|
sold_items = Effective::OrderItem.sold.to_a
|
data/spec/models/order_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Effective::Order do
|
3
|
+
describe Effective::Order, type: :model do
|
4
4
|
let(:cart) { FactoryGirl.create(:cart) }
|
5
5
|
let(:order) { FactoryGirl.create(:order) }
|
6
6
|
let(:user) { FactoryGirl.create(:user) }
|
@@ -8,9 +8,8 @@ describe Effective::Order do
|
|
8
8
|
let(:product2) { FactoryGirl.create(:product) }
|
9
9
|
|
10
10
|
it 'calculates dollars based on its order items' do
|
11
|
-
order.total.should eq order.order_items.collect(&:total).sum
|
12
11
|
order.subtotal.should eq order.order_items.collect(&:subtotal).sum
|
13
|
-
order.
|
12
|
+
order.total.should eq (order.order_items.collect(&:subtotal).sum + order.tax.to_i)
|
14
13
|
order.num_items.should eq order.order_items.collect(&:quantity).sum
|
15
14
|
end
|
16
15
|
|
@@ -26,9 +25,7 @@ describe Effective::Order do
|
|
26
25
|
end
|
27
26
|
|
28
27
|
order.order_items.length.should eq cart.cart_items.length
|
29
|
-
order.total.should eq cart.total
|
30
28
|
order.subtotal.should eq cart.subtotal
|
31
|
-
order.tax.should eq cart.tax
|
32
29
|
end
|
33
30
|
|
34
31
|
it 'creates appropriate OrderItems when initialized with an array of purchasables' do
|
@@ -36,7 +33,6 @@ describe Effective::Order do
|
|
36
33
|
order.order_items.size.should eq 2
|
37
34
|
|
38
35
|
order.subtotal.should eq (product.price + product2.price)
|
39
|
-
order.total.should eq ((product.price + product2.price) * 1.05)
|
40
36
|
end
|
41
37
|
|
42
38
|
it 'creates appropriate OrderItems when initialized with a single purchasable' do
|
@@ -58,24 +54,22 @@ describe Effective::Order do
|
|
58
54
|
|
59
55
|
describe 'minimum zero math' do
|
60
56
|
it 'has a minimum order total of 0' do
|
61
|
-
order.
|
57
|
+
order.subtotal = nil
|
58
|
+
order.total = nil
|
62
59
|
|
60
|
+
order.order_items.each { |oi| oi.price = -1000; oi.tax_exempt = true; }
|
63
61
|
order.order_items.collect(&:total).sum.should eq -3000
|
62
|
+
|
64
63
|
order.total.should eq 0
|
65
64
|
end
|
66
65
|
|
67
66
|
it 'has no minimum subtotal' do
|
68
|
-
order.
|
67
|
+
order.subtotal = nil
|
69
68
|
|
69
|
+
order.order_items.each { |oi| oi.price = -1000; oi.tax_exempt = true; }
|
70
70
|
order.order_items.collect(&:subtotal).sum.should eq -3000
|
71
|
-
order.subtotal.should eq -3000
|
72
|
-
end
|
73
71
|
|
74
|
-
|
75
|
-
order.order_items.each { |order_item| allow(order_item).to receive(:tax).and_return(-1000) }
|
76
|
-
|
77
|
-
order.order_items.collect(&:tax).sum.should eq -3000
|
78
|
-
order.tax.should eq 0
|
72
|
+
order.subtotal.should eq -3000
|
79
73
|
end
|
80
74
|
end
|
81
75
|
|
@@ -89,8 +83,8 @@ describe Effective::Order do
|
|
89
83
|
it 'assigns addresses from the user' do
|
90
84
|
order = Effective::Order.new()
|
91
85
|
|
92
|
-
user.billing_address = FactoryGirl.create(:address, :
|
93
|
-
user.shipping_address = FactoryGirl.create(:address, :
|
86
|
+
user.billing_address = FactoryGirl.create(:address, category: :billing)
|
87
|
+
user.shipping_address = FactoryGirl.create(:address, category: :shipping)
|
94
88
|
|
95
89
|
order.user = user
|
96
90
|
|
@@ -103,6 +97,10 @@ describe Effective::Order do
|
|
103
97
|
end
|
104
98
|
|
105
99
|
describe 'validations' do
|
100
|
+
it 'should validate inclusion of purchase state' do
|
101
|
+
expect(subject).to validate_inclusion_of(:purchase_state).in_array([nil, EffectiveOrders::PURCHASED, EffectiveOrders::DECLINED, EffectiveOrders::PENDING])
|
102
|
+
end
|
103
|
+
|
106
104
|
it 'should be invalid without a user or order_items' do
|
107
105
|
order = Effective::Order.new()
|
108
106
|
order.valid?.should eq false
|
@@ -126,8 +124,7 @@ describe Effective::Order do
|
|
126
124
|
end
|
127
125
|
|
128
126
|
it 'should be invalid when less than the minimum charge' do
|
129
|
-
|
130
|
-
|
127
|
+
order.order_items.each { |oi| oi.price = 1 }
|
131
128
|
order.valid?.should eq false
|
132
129
|
|
133
130
|
order.errors[:total].present?.should eq true
|
@@ -150,9 +147,125 @@ describe Effective::Order do
|
|
150
147
|
end
|
151
148
|
end
|
152
149
|
|
150
|
+
describe 'tax and tax rate' do
|
151
|
+
it 'is invalid with no tax rate' do
|
152
|
+
order = Effective::Order.new()
|
153
|
+
order.tax_rate.should eq nil
|
154
|
+
order.valid?.should eq false
|
155
|
+
order.errors[:tax_rate].present?.should eq true
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'is valid with no tax rate when skip_buyer_validations = true' do
|
159
|
+
order = Effective::Order.new()
|
160
|
+
order.skip_buyer_validations = true
|
161
|
+
order.tax_rate.should eq nil
|
162
|
+
order.errors[:tax_rate].present?.should eq false
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'sets a tax rate when billing_address is present' do
|
166
|
+
order = FactoryGirl.create(:order)
|
167
|
+
order.billing_address.present?.should eq true
|
168
|
+
order.valid?.should eq true
|
169
|
+
order.errors[:tax_rate].blank?.should eq true
|
170
|
+
end
|
171
|
+
|
172
|
+
it 'updates the tax rate on valid? when billing_address changes' do
|
173
|
+
order = FactoryGirl.create(:order)
|
174
|
+
|
175
|
+
order.billing_address = FactoryGirl.create(:address, state_code: 'AB') # 5.0% tax
|
176
|
+
order.valid?.should eq true
|
177
|
+
order.tax_rate.should eq 5.0
|
178
|
+
order.tax.should eq (order.subtotal * 0.05)
|
179
|
+
order.total.should eq (order.subtotal + order.tax)
|
180
|
+
total_one = order.total
|
181
|
+
|
182
|
+
order.billing_address = FactoryGirl.create(:address, state_code: 'ON') # 13.0% tax
|
183
|
+
order.valid?.should eq true
|
184
|
+
order.tax_rate.should eq 13.0
|
185
|
+
order.tax.should eq (order.subtotal * 0.13)
|
186
|
+
order.total.should eq (order.subtotal + order.tax)
|
187
|
+
total_two = order.total
|
188
|
+
|
189
|
+
total_one.should_not eq total_two
|
190
|
+
end
|
191
|
+
|
192
|
+
end
|
193
|
+
|
194
|
+
describe 'create_as_pending' do
|
195
|
+
it 'sets the pending state' do
|
196
|
+
order = FactoryGirl.build(:order)
|
197
|
+
order.order_items << FactoryGirl.build(:order_item, order: order)
|
198
|
+
|
199
|
+
order.create_as_pending.should eq true
|
200
|
+
order.pending?.should eq true
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'disregards invalid addresses' do
|
204
|
+
order = FactoryGirl.build(:order)
|
205
|
+
order.order_items << FactoryGirl.build(:order_item, order: order)
|
206
|
+
|
207
|
+
order.billing_address = Effective::Address.new(address1: 'invalid')
|
208
|
+
order.shipping_address = Effective::Address.new(address1: 'invalid')
|
209
|
+
|
210
|
+
success = order.create_as_pending
|
211
|
+
|
212
|
+
success.should eq true
|
213
|
+
end
|
214
|
+
|
215
|
+
it 'sends a request for payment when send_payment_request_to_buyer is true' do
|
216
|
+
Effective::OrdersMailer.deliveries.clear
|
217
|
+
|
218
|
+
order = FactoryGirl.build(:order)
|
219
|
+
order.order_items << FactoryGirl.build(:order_item, order: order)
|
220
|
+
|
221
|
+
order.send_payment_request_to_buyer = true
|
222
|
+
|
223
|
+
order.create_as_pending.should eq true
|
224
|
+
order.send_payment_request_to_buyer?.should eq true
|
225
|
+
|
226
|
+
Effective::OrdersMailer.deliveries.length.should eq 1
|
227
|
+
end
|
228
|
+
|
229
|
+
it 'does not send a request for payment when send_payment_request_to_buyer is false' do
|
230
|
+
Effective::OrdersMailer.deliveries.clear
|
231
|
+
|
232
|
+
order = FactoryGirl.build(:order)
|
233
|
+
order.order_items << FactoryGirl.build(:order_item, order: order)
|
234
|
+
|
235
|
+
order.create_as_pending.should eq true
|
236
|
+
|
237
|
+
Effective::OrdersMailer.deliveries.length.should eq 0
|
238
|
+
end
|
239
|
+
|
240
|
+
end
|
241
|
+
|
242
|
+
describe 'save as pending' do
|
243
|
+
let(:order) { FactoryGirl.build(:order, billing_address: FactoryGirl.build(:address), shipping_address: FactoryGirl.build(:address)) }
|
244
|
+
|
245
|
+
it 'sets the pending state' do
|
246
|
+
order.order_items << FactoryGirl.build(:order_item, order: order)
|
247
|
+
|
248
|
+
order.purchase_state = EffectiveOrders::PENDING
|
249
|
+
|
250
|
+
order.save.should eq true
|
251
|
+
order.pending?.should eq true
|
252
|
+
end
|
253
|
+
|
254
|
+
it 'does not accept invalid addresses' do
|
255
|
+
order.order_items << FactoryGirl.build(:order_item, order: order)
|
256
|
+
|
257
|
+
order.billing_address = Effective::Address.new(address1: 'invalid')
|
258
|
+
order.shipping_address = Effective::Address.new(address1: 'invalid')
|
259
|
+
|
260
|
+
order.purchase_state = EffectiveOrders::PENDING
|
261
|
+
|
262
|
+
order.save.should eq false
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
153
266
|
describe 'purchase!' do
|
154
267
|
it 'assigns the purchase_state, purchase_at and payment' do
|
155
|
-
order.purchase!('by a test').should eq true
|
268
|
+
order.purchase!(details: 'by a test').should eq true
|
156
269
|
|
157
270
|
order.purchase_state.should eq EffectiveOrders::PURCHASED
|
158
271
|
order.purchased_at.kind_of?(Time).should eq true
|
@@ -161,62 +274,62 @@ describe Effective::Order do
|
|
161
274
|
|
162
275
|
it 'sends purchased callback to all order_items' do
|
163
276
|
order.order_items.each { |oi| oi.purchasable.should_receive(:purchased!).with(order, oi) }
|
164
|
-
order.purchase!('by a test')
|
277
|
+
order.purchase!(details: 'by a test')
|
165
278
|
end
|
166
279
|
|
167
280
|
it 'returns true when purchased twice' do
|
168
|
-
order.purchase!('first time by a test')
|
169
|
-
order.purchase!('second time by a test').should eq false
|
281
|
+
order.purchase!(details: 'first time by a test')
|
282
|
+
order.purchase!(details: 'second time by a test').should eq false
|
170
283
|
end
|
171
284
|
|
172
285
|
it 'sends emails to the admin, buyer and seller' do
|
173
286
|
Effective::OrdersMailer.deliveries.clear
|
174
287
|
|
175
|
-
order.purchase!('by a test')
|
288
|
+
order.purchase!(details: 'by a test')
|
176
289
|
|
177
290
|
Effective::OrdersMailer.deliveries.length.should eq 2
|
178
291
|
|
179
292
|
Effective::OrdersMailer.deliveries[0].to.first.should eq 'admin@example.com'
|
180
|
-
Effective::OrdersMailer.deliveries[0].subject.include?("Order ##{order.to_param}
|
293
|
+
Effective::OrdersMailer.deliveries[0].subject.include?("Order Receipt: ##{order.to_param}").should eq true
|
181
294
|
|
182
295
|
Effective::OrdersMailer.deliveries[1].to.first.should eq order.user.email
|
183
|
-
Effective::OrdersMailer.deliveries[1].subject.include?("Order ##{order.to_param}
|
296
|
+
Effective::OrdersMailer.deliveries[1].subject.include?("Order Receipt: ##{order.to_param}").should eq true
|
184
297
|
end
|
185
298
|
|
186
|
-
it 'does not send email if passed :
|
299
|
+
it 'does not send email if passed email: false' do
|
187
300
|
Effective::OrdersMailer.deliveries.clear
|
188
301
|
|
189
|
-
order.purchase!('by a test', :
|
302
|
+
order.purchase!(details: 'by a test', email: false)
|
190
303
|
|
191
304
|
Effective::OrdersMailer.deliveries.length.should eq 0
|
192
305
|
end
|
193
306
|
|
194
307
|
it 'is included with the purchased scope' do
|
195
|
-
order.purchase!('by a test')
|
308
|
+
order.purchase!(details: 'by a test')
|
196
309
|
Effective::Order.purchased.to_a.include?(order).should eq true
|
197
310
|
Effective::Order.purchased_by(order.user).to_a.include?(order).should eq true
|
198
311
|
end
|
199
312
|
|
200
313
|
it 'is not included with the declined scope' do
|
201
|
-
order.purchase!('by a test')
|
314
|
+
order.purchase!(details: 'by a test')
|
202
315
|
Effective::Order.declined.to_a.include?(order).should eq false
|
203
316
|
end
|
204
317
|
|
205
318
|
it 'should return false when the Order is invalid' do
|
206
319
|
allow(order).to receive(:valid?).and_return(false)
|
207
|
-
expect { order.purchase!('by a test') }.to raise_exception(Exception)
|
320
|
+
expect { order.purchase!(details: 'by a test') }.to raise_exception(Exception)
|
208
321
|
end
|
209
322
|
|
210
|
-
it 'should return true when the Order is invalid and :
|
323
|
+
it 'should return true when the Order is invalid and validate: false is passed' do
|
211
324
|
allow(order).to receive(:valid?).and_return(false)
|
212
|
-
order.purchase!('by a test', :
|
325
|
+
order.purchase!(details: 'by a test', validate: false).should eq true
|
213
326
|
end
|
214
327
|
|
215
328
|
end
|
216
329
|
|
217
330
|
describe 'purchased?' do
|
218
331
|
it 'returns true when a purchased order' do
|
219
|
-
order.purchase!('by a test')
|
332
|
+
order.purchase!(details: 'by a test')
|
220
333
|
order.purchased?.should eq true
|
221
334
|
end
|
222
335
|
|
@@ -225,14 +338,14 @@ describe Effective::Order do
|
|
225
338
|
end
|
226
339
|
|
227
340
|
it 'returns false when declined' do
|
228
|
-
order.decline!('by a test')
|
341
|
+
order.decline!(details: 'by a test')
|
229
342
|
order.purchased?.should eq false
|
230
343
|
end
|
231
344
|
end
|
232
345
|
|
233
346
|
describe 'decline!' do
|
234
347
|
it 'assigns the purchase_state' do
|
235
|
-
order.decline!('by a test').should eq true
|
348
|
+
order.decline!(details: 'by a test').should eq true
|
236
349
|
|
237
350
|
order.purchase_state.should eq EffectiveOrders::DECLINED
|
238
351
|
order.payment[:details].should eq 'by a test'
|
@@ -241,26 +354,26 @@ describe Effective::Order do
|
|
241
354
|
|
242
355
|
it 'sends declined callback to all order_items' do
|
243
356
|
order.order_items.each { |oi| oi.purchasable.should_receive(:declined!).with(order, oi) }
|
244
|
-
order.decline!('by a test')
|
357
|
+
order.decline!(details: 'by a test')
|
245
358
|
end
|
246
359
|
|
247
360
|
it 'returns false when declined twice' do
|
248
|
-
order.decline!('first time')
|
249
|
-
order.decline!('second time').should eq false
|
361
|
+
order.decline!(details: 'first time')
|
362
|
+
order.decline!(details: 'second time').should eq false
|
250
363
|
end
|
251
364
|
|
252
365
|
it 'returns false when declined twice' do
|
253
|
-
order.decline!('first time')
|
254
|
-
order.decline!('second time').should eq false
|
366
|
+
order.decline!(details: 'first time')
|
367
|
+
order.decline!(details: 'second time').should eq false
|
255
368
|
end
|
256
369
|
|
257
370
|
it 'is included with the declined scope' do
|
258
|
-
order.decline!('by a test')
|
371
|
+
order.decline!(details: 'by a test')
|
259
372
|
Effective::Order.declined.to_a.include?(order).should eq true
|
260
373
|
end
|
261
374
|
|
262
375
|
it 'is not included with the purchased scope' do
|
263
|
-
order.decline!('by a test')
|
376
|
+
order.decline!(details: 'by a test')
|
264
377
|
Effective::Order.purchased.to_a.include?(order).should eq false
|
265
378
|
Effective::Order.purchased_by(order.user).to_a.include?(order).should eq false
|
266
379
|
end
|
@@ -268,7 +381,7 @@ describe Effective::Order do
|
|
268
381
|
|
269
382
|
describe 'declined?' do
|
270
383
|
it 'returns true when a declined order' do
|
271
|
-
order.decline!('by a test')
|
384
|
+
order.decline!(details: 'by a test')
|
272
385
|
order.declined?.should eq true
|
273
386
|
end
|
274
387
|
|
@@ -277,7 +390,7 @@ describe Effective::Order do
|
|
277
390
|
end
|
278
391
|
|
279
392
|
it 'returns false when purchased' do
|
280
|
-
order.purchase!('by a test')
|
393
|
+
order.purchase!(details: 'by a test')
|
281
394
|
order.declined?.should eq false
|
282
395
|
end
|
283
396
|
end
|
@@ -322,5 +435,11 @@ describe Effective::Order do
|
|
322
435
|
end
|
323
436
|
end
|
324
437
|
|
325
|
-
|
438
|
+
describe '#pending?' do
|
439
|
+
it 'should return true for pending orders only' do
|
440
|
+
expect(FactoryGirl.create(:purchased_order).pending?).to be_falsey
|
441
|
+
expect(FactoryGirl.create(:declined_order).pending?).to be_falsey
|
442
|
+
expect(FactoryGirl.create(:pending_order).pending?).to be_truthy
|
443
|
+
end
|
444
|
+
end
|
326
445
|
end
|