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.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +150 -60
  4. data/Rakefile +0 -3
  5. data/active_admin/effective_orders.rb +14 -9
  6. data/app/assets/javascripts/effective_orders.js +2 -0
  7. data/app/assets/javascripts/effective_orders/{stripe_charges.js.coffee → providers/stripe_charges.js.coffee} +1 -1
  8. data/app/assets/javascripts/effective_orders/{stripe_subscriptions.js.coffee → providers/stripe_subscriptions.js.coffee} +1 -1
  9. data/app/assets/stylesheets/effective_orders/_order.scss +9 -3
  10. data/app/controllers/admin/orders_controller.rb +87 -3
  11. data/app/controllers/concerns/acts_as_active_admin_controller.rb +2 -1
  12. data/app/controllers/effective/carts_controller.rb +4 -2
  13. data/app/controllers/effective/orders_controller.rb +101 -60
  14. data/app/controllers/effective/providers/app_checkout.rb +10 -2
  15. data/app/controllers/effective/providers/ccbill.rb +34 -0
  16. data/app/controllers/effective/providers/cheque.rb +30 -0
  17. data/app/controllers/effective/providers/moneris.rb +7 -7
  18. data/app/controllers/effective/providers/paypal.rb +7 -5
  19. data/app/controllers/effective/providers/pretend.rb +22 -0
  20. data/app/controllers/effective/providers/stripe.rb +26 -24
  21. data/app/controllers/effective/webhooks_controller.rb +1 -1
  22. data/app/helpers/effective_carts_helper.rb +59 -29
  23. data/app/helpers/effective_ccbill_helper.rb +25 -0
  24. data/app/helpers/effective_orders_helper.rb +50 -41
  25. data/app/helpers/effective_paypal_helper.rb +11 -11
  26. data/app/mailers/effective/orders_mailer.rb +95 -20
  27. data/app/models/concerns/acts_as_purchasable.rb +14 -22
  28. data/app/models/effective/cart.rb +9 -15
  29. data/app/models/effective/cart_item.rb +15 -13
  30. data/app/models/effective/customer.rb +9 -9
  31. data/app/models/effective/datatables/order_items.rb +14 -8
  32. data/app/models/effective/datatables/orders.rb +56 -69
  33. data/app/models/effective/order.rb +250 -139
  34. data/app/models/effective/order_item.rb +23 -16
  35. data/app/models/effective/product.rb +23 -0
  36. data/app/models/effective/providers/ccbill_postback.rb +85 -0
  37. data/app/models/effective/{stripe_charge.rb → providers/stripe_charge.rb} +1 -1
  38. data/app/models/effective/subscription.rb +16 -12
  39. data/app/models/effective/tax_rate_calculator.rb +45 -0
  40. data/app/views/admin/customers/index.html.haml +2 -5
  41. data/app/views/admin/order_items/index.html.haml +2 -5
  42. data/app/views/admin/orders/_actions.html.haml +2 -0
  43. data/app/views/admin/orders/_form.html.haml +28 -0
  44. data/app/views/admin/orders/_order_item_fields.html.haml +9 -0
  45. data/app/views/admin/orders/index.html.haml +9 -5
  46. data/app/views/admin/orders/new.html.haml +3 -0
  47. data/app/views/effective/carts/_cart.html.haml +3 -12
  48. data/app/views/effective/carts/_cart_actions.html.haml +4 -0
  49. data/app/views/effective/carts/show.html.haml +10 -12
  50. data/app/views/effective/orders/_checkout_step1.html.haml +46 -0
  51. data/app/views/effective/orders/_checkout_step2.html.haml +33 -0
  52. data/app/views/effective/orders/_order.html.haml +2 -0
  53. data/app/views/effective/orders/_order_actions.html.haml +10 -5
  54. data/app/views/effective/orders/_order_footer.html.haml +1 -0
  55. data/app/views/effective/orders/_order_items.html.haml +11 -9
  56. data/app/views/effective/orders/_order_note.html.haml +8 -0
  57. data/app/views/effective/orders/_order_note_fields.html.haml +5 -0
  58. data/app/views/effective/orders/_order_shipping.html.haml +4 -4
  59. data/app/views/effective/orders/_order_user_fields.html.haml +1 -0
  60. data/app/views/effective/orders/_orders_table.html.haml +27 -0
  61. data/app/views/effective/orders/ccbill/_form.html.haml +24 -0
  62. data/app/views/effective/orders/checkout_step1.html.haml +3 -0
  63. data/app/views/effective/orders/checkout_step2.html.haml +3 -0
  64. data/app/views/effective/orders/cheque/_form.html.haml +2 -0
  65. data/app/views/effective/orders/cheque/pay_by_cheque.html.haml +9 -0
  66. data/app/views/effective/orders/declined.html.haml +4 -2
  67. data/app/views/effective/orders/my_purchases.html.haml +1 -1
  68. data/app/views/effective/orders/my_sales.html.haml +1 -1
  69. data/app/views/effective/orders/purchased.html.haml +3 -2
  70. data/app/views/effective/orders/show.html.haml +1 -1
  71. data/app/views/effective/orders/stripe/_form.html.haml +5 -5
  72. data/app/views/effective/orders_mailer/order_error.html.haml +11 -0
  73. data/app/views/effective/orders_mailer/payment_request_to_buyer.html.haml +13 -0
  74. data/app/views/effective/orders_mailer/pending_order_invoice_to_buyer.html.haml +13 -0
  75. data/app/views/layouts/effective_orders_mailer_layout.html.haml +7 -7
  76. data/config/routes.rb +39 -24
  77. data/db/migrate/01_create_effective_orders.rb.erb +20 -1
  78. data/db/upgrade/03_upgrade_effective_orders_from1x.rb.erb +95 -0
  79. data/lib/effective_orders.rb +67 -9
  80. data/lib/effective_orders/app_checkout_service.rb +1 -2
  81. data/lib/effective_orders/engine.rb +46 -14
  82. data/lib/effective_orders/version.rb +1 -1
  83. data/lib/generators/effective_orders/install_generator.rb +1 -0
  84. data/lib/generators/effective_orders/upgrade_from03x_generator.rb +1 -0
  85. data/lib/generators/effective_orders/upgrade_from1x_generator.rb +31 -0
  86. data/lib/generators/templates/effective_orders.rb +131 -66
  87. data/lib/generators/templates/effective_orders_mailer_preview.rb +28 -13
  88. data/spec/controllers/admin/orders_controller_spec.rb +242 -0
  89. data/spec/controllers/ccbill_orders_controller_spec.rb +103 -0
  90. data/spec/controllers/moneris_orders_controller_spec.rb +23 -23
  91. data/spec/controllers/orders_controller_spec.rb +167 -79
  92. data/spec/controllers/stripe_orders_controller_spec.rb +7 -7
  93. data/spec/dummy/app/models/product.rb +0 -8
  94. data/spec/dummy/app/models/product_with_float_price.rb +0 -8
  95. data/spec/dummy/app/models/user.rb +2 -19
  96. data/spec/dummy/config/application.rb +2 -1
  97. data/spec/dummy/config/environments/test.rb +1 -0
  98. data/spec/dummy/config/initializers/effective_orders.rb +109 -64
  99. data/spec/dummy/db/schema.rb +15 -2
  100. data/spec/dummy/db/test.sqlite3 +0 -0
  101. data/spec/dummy/log/test.log +0 -258
  102. data/spec/models/acts_as_purchasable_spec.rb +8 -6
  103. data/spec/models/factories_spec.rb +7 -1
  104. data/spec/models/order_item_spec.rb +1 -1
  105. data/spec/models/order_spec.rb +165 -46
  106. data/spec/models/stripe_charge_spec.rb +5 -5
  107. data/spec/spec_helper.rb +2 -0
  108. data/spec/support/factories.rb +49 -33
  109. metadata +47 -64
  110. data/app/views/effective/orders/_checkout_step_1.html.haml +0 -43
  111. data/app/views/effective/orders/_checkout_step_2.html.haml +0 -25
  112. data/app/views/effective/orders/_my_purchases.html.haml +0 -17
  113. data/app/views/effective/orders/checkout.html.haml +0 -3
  114. data/app/views/effective/orders/new.html.haml +0 -4
  115. data/spec/dummy/log/development.log +0 -82
@@ -0,0 +1,103 @@
1
+ require 'spec_helper'
2
+
3
+ # We're testing the effective/providers/ccbill.rb file, which is included into the OrdersController at runtime
4
+
5
+ describe Effective::OrdersController, type: :controller do
6
+ routes { EffectiveOrders::Engine.routes }
7
+
8
+ let(:order) { FactoryGirl.create(:order) }
9
+
10
+ let(:ccbill_params) do
11
+ {
12
+ "customer_fname"=>"Nathan",
13
+ "customer_lname"=>"Feaver",
14
+ "email"=>"nathan@agilestyle.com",
15
+ "username"=>"",
16
+ "password"=>"[FILTERED]",
17
+ "productDesc"=>"Cool Stuff",
18
+ "price"=>"#{ccbill_formatted_price(order.total)} for 365 days",
19
+ "subscription_id"=>"0216026202000000347",
20
+ "denialId"=>"",
21
+ "clientAccnum"=>"999999",
22
+ "clientSubacc"=>"0000",
23
+ "address1"=>"123 Easy St",
24
+ "city"=>"Edmonton",
25
+ "state"=>"AB",
26
+ "country"=>"CA",
27
+ "phone_number"=>"",
28
+ "zipcode"=>"A1B 2C3",
29
+ "start_date"=>"2016-01-26 13:55:44",
30
+ "referer"=>"",
31
+ "ccbill_referer"=>"",
32
+ "affiliate"=>"",
33
+ "reservationId"=>"",
34
+ "referringUrl"=>"http://localhost:3000/orders/833-7014-992",
35
+ "reasonForDecline"=>"",
36
+ "reasonForDeclineCode"=>"",
37
+ "formName"=>"211cc",
38
+ "cardType"=>"VISA",
39
+ "responseDigest"=>"43492c3db3f97944bab31a0f15d486cb",
40
+ "commit"=>"Checkout with CCBill",
41
+ "authenticity_token"=>"96wvM13VjhtNwgCyRZfO03Gn4x2ntgl7GBSn3U51OdwlGLxe2YYNdCHETtGjm8WwikQfRF79/aHF2zmldwsFCA==",
42
+ "order_id"=>order.to_param,
43
+ "utf8"=>"✓",
44
+ "typeId"=>"0",
45
+ "initialPrice"=>"10.5",
46
+ "initialPeriod"=>"365",
47
+ "recurringPrice"=>"0",
48
+ "recurringPeriod"=>"0",
49
+ "rebills"=>"0",
50
+ "initialFormattedPrice"=>ccbill_formatted_price(order.total),
51
+ "recurringFormattedPrice"=>"$0.00",
52
+ "ip_address"=>"00.00.000.00"
53
+ }
54
+ end
55
+
56
+ let(:ccbill_declined_params) do
57
+ ccbill_params.merge(
58
+ "denialId"=>"",
59
+ "reasonForDecline"=>"Transaction Denied by Bank",
60
+ "reasonForDeclineCode"=>"24",
61
+ )
62
+ end
63
+
64
+ def ccbill_formatted_price(price)
65
+ price_in_dollars = price.to_s.insert(-3, '.')
66
+ "$#{price_in_dollars}"
67
+ end
68
+
69
+ describe 'ccbill_postback' do
70
+ before do
71
+ sign_in order.user
72
+ allow_any_instance_of(Effective::Providers::CcbillPostback).to receive(:verified?).and_return(true)
73
+ end
74
+
75
+ describe 'invalid parameters' do
76
+ it 'raises RecordNotFound when passed an unknown order id' do
77
+ expect {
78
+ post :ccbill_postback, ccbill_params.tap { |x| x[:order_id] = 999 }
79
+ }.to raise_error(ActiveRecord::RecordNotFound)
80
+ end
81
+ end
82
+
83
+ describe 'declined purchase params' do
84
+ it 'marks an order declined when params[:result] indicate decline' do
85
+ expect(subject).to receive(:order_declined).and_call_original
86
+
87
+ post :ccbill_postback, ccbill_declined_params
88
+
89
+ expect(assigns(:order)).to be_declined
90
+ end
91
+ end
92
+
93
+ describe 'approved purchase' do
94
+ it 'marks the order as purchased' do
95
+ expect(subject).to receive(:order_purchased).and_call_original
96
+
97
+ post :ccbill_postback, ccbill_params
98
+
99
+ expect(assigns(:order)).to be_purchased
100
+ end
101
+ end
102
+ end
103
+ end
@@ -8,23 +8,23 @@ describe Effective::OrdersController, type: :controller do
8
8
  let(:order) { FactoryGirl.create(:order) }
9
9
  let(:moneris_params) do
10
10
  {
11
- :response_order_id => "#{order.to_param}",
12
- :date_stamp => '2014-10-27',
13
- :time_stamp => '17:42:31',
14
- :bank_transaction_id =>'660110910011137660',
15
- :charge_total => "#{'%.2f' % order.total}",
16
- :bank_approval_code => '497365',
17
- :response_code => '027',
18
- :iso_code => '01',
19
- :message => 'APPROVED * =',
20
- :trans_name => 'purchase',
21
- :cardholder => 'Matt',
22
- :f4l4 => '4242***4242',
23
- :card =>'V',
24
- :expiry_date => '1904',
25
- :result => '1',
26
- :rvar_authenticity_token => 'nJQf5RKL9SES4uiQIaj4aMNNdIQayEeauOL44iSppD4=',
27
- :transactionKey => 'C3kYLXwyMDDFD1ArgxiHFph3wIy1Jx'
11
+ response_order_id: "#{order.to_param}",
12
+ date_stamp: '2014-10-27',
13
+ time_stamp: '17:42:31',
14
+ bank_transaction_id:'660110910011137660',
15
+ charge_total: "#{'%.2f' % order.total}",
16
+ bank_approval_code: '497365',
17
+ response_code: '027',
18
+ iso_code: '01',
19
+ message: 'APPROVED * =',
20
+ trans_name: 'purchase',
21
+ cardholder: 'Matt',
22
+ f4l4: '4242***4242',
23
+ card:'V',
24
+ expiry_date: '1904',
25
+ result: '1',
26
+ rvar_authenticity_token: 'nJQf5RKL9SES4uiQIaj4aMNNdIQayEeauOL44iSppD4=',
27
+ transactionKey: 'C3kYLXwyMDDFD1ArgxiHFph3wIy1Jx'
28
28
  }
29
29
  end
30
30
 
@@ -72,7 +72,7 @@ describe Effective::OrdersController, type: :controller do
72
72
 
73
73
  describe 'transaction verification step' do
74
74
  it 'marks the order as purchased when response code is valid' do
75
- allow(subject).to receive(:parse_moneris_response).and_return({:response_code => 1}) # success
75
+ allow(subject).to receive(:parse_moneris_response).and_return({response_code: 1}) # success
76
76
 
77
77
  post :moneris_postback, moneris_params
78
78
 
@@ -81,7 +81,7 @@ describe Effective::OrdersController, type: :controller do
81
81
  end
82
82
 
83
83
  it 'marks order declined when response_code = null' do
84
- allow(subject).to receive(:parse_moneris_response).and_return({:response_code => 'null'}) # failure
84
+ allow(subject).to receive(:parse_moneris_response).and_return({response_code: 'null'}) # failure
85
85
 
86
86
  post :moneris_postback, moneris_params
87
87
 
@@ -101,14 +101,14 @@ describe Effective::OrdersController, type: :controller do
101
101
  end
102
102
 
103
103
  it 'marks order declined when response_code = 0' do
104
- allow(subject).to receive(:parse_moneris_response).and_return({:response_code => 0}) # failure
104
+ allow(subject).to receive(:parse_moneris_response).and_return({response_code: 0}) # failure
105
105
  post :moneris_postback, moneris_params
106
106
  response.should redirect_to "/orders/#{order.to_param}/declined"
107
107
  assigns(:order).purchased?.should eq false
108
108
  end
109
109
 
110
110
  it 'marks order declined when response_code = 50' do
111
- allow(subject).to receive(:parse_moneris_response).and_return({:response_code => 50}) # failure
111
+ allow(subject).to receive(:parse_moneris_response).and_return({response_code: 50}) # failure
112
112
  post :moneris_postback, moneris_params
113
113
  response.should redirect_to "/orders/#{order.to_param}/declined"
114
114
  assigns(:order).purchased?.should eq false
@@ -117,13 +117,13 @@ describe Effective::OrdersController, type: :controller do
117
117
 
118
118
  describe 'redirect urls' do
119
119
  it 'redirects to the purchased_redirect_url on purchase' do
120
- allow(subject).to receive(:parse_moneris_response).and_return({:response_code => 1}) # success
120
+ allow(subject).to receive(:parse_moneris_response).and_return({response_code: 1}) # success
121
121
  post :moneris_postback, moneris_params.tap { |x| x[:rvar_purchased_redirect_url] = '/something' }
122
122
  response.should redirect_to '/something'
123
123
  end
124
124
 
125
125
  it 'redirects to the declined_redirect_url on decline' do
126
- allow(subject).to receive(:parse_moneris_response).and_return({:response_code => 'null'}) # failure
126
+ allow(subject).to receive(:parse_moneris_response).and_return({response_code: 'null'}) # failure
127
127
  post :moneris_postback, moneris_params.tap { |x| x[:rvar_declined_redirect_url] = '/something' }
128
128
  response.should redirect_to '/something'
129
129
  end
@@ -17,9 +17,9 @@ describe Effective::OrdersController, type: :controller do
17
17
 
18
18
  let(:valid_order_attributes) do
19
19
  {
20
- :effective_order => {
21
- :billing_address => billing_atts, :save_billing_address => false,
22
- :shipping_address => shipping_atts, :save_shipping_address => false,
20
+ effective_order: {
21
+ billing_address: billing_atts, save_billing_address: false,
22
+ shipping_address: shipping_atts, save_shipping_address: false,
23
23
  }
24
24
  }
25
25
  end
@@ -90,11 +90,11 @@ describe Effective::OrdersController, type: :controller do
90
90
  end
91
91
 
92
92
  it 'assign appropriate User fields' do
93
- post :create, :effective_order => {
94
- :billing_address => billing_atts, :save_billing_address => false,
95
- :shipping_address => shipping_atts, :save_shipping_address => false,
96
- :shipping_address_same_as_billing => false,
97
- :user_attributes => {:first_name => 'First', :last_name => 'Last', :email => 'email@somwhere.com'}
93
+ post :create, effective_order: {
94
+ billing_address: billing_atts, save_billing_address: false,
95
+ shipping_address: shipping_atts, save_shipping_address: false,
96
+ shipping_address_same_as_billing: false,
97
+ user_attributes: {first_name: 'First', last_name: 'Last', email: 'email@somwhere.com'}
98
98
  }
99
99
 
100
100
  (assigns(:order).valid? && assigns(:order).persisted?).should eq true
@@ -105,10 +105,10 @@ describe Effective::OrdersController, type: :controller do
105
105
  end
106
106
 
107
107
  it 'assign addresses to the order and not the user' do
108
- post :create, :effective_order => {
109
- :billing_address => billing_atts, :save_billing_address => false,
110
- :shipping_address => shipping_atts, :save_shipping_address => false,
111
- :shipping_address_same_as_billing => false
108
+ post :create, effective_order: {
109
+ billing_address: billing_atts, save_billing_address: false,
110
+ shipping_address: shipping_atts, save_shipping_address: false,
111
+ shipping_address_same_as_billing: false
112
112
  }
113
113
 
114
114
  (assigns(:order).valid? && assigns(:order).persisted?).should eq true
@@ -121,10 +121,10 @@ describe Effective::OrdersController, type: :controller do
121
121
  end
122
122
 
123
123
  it 'assign addresses to the order and the user' do
124
- post :create, :effective_order => {
125
- :billing_address => billing_atts, :save_billing_address => true,
126
- :shipping_address => shipping_atts, :save_shipping_address => true,
127
- :shipping_address_same_as_billing => false
124
+ post :create, effective_order: {
125
+ billing_address: billing_atts, save_billing_address: true,
126
+ shipping_address: shipping_atts, save_shipping_address: true,
127
+ shipping_address_same_as_billing: false
128
128
  }
129
129
 
130
130
  (assigns(:order).valid? && assigns(:order).persisted?).should eq true
@@ -139,10 +139,10 @@ describe Effective::OrdersController, type: :controller do
139
139
  end
140
140
 
141
141
  it 'does not assign the billing_address to user if save_billing_address is false' do
142
- post :create, :effective_order => {
143
- :billing_address => billing_atts, :save_billing_address => false,
144
- :shipping_address => shipping_atts, :save_shipping_address => true,
145
- :shipping_address_same_as_billing => false
142
+ post :create, effective_order: {
143
+ billing_address: billing_atts, save_billing_address: false,
144
+ shipping_address: shipping_atts, save_shipping_address: true,
145
+ shipping_address_same_as_billing: false
146
146
  }
147
147
 
148
148
  (assigns(:order).valid? && assigns(:order).persisted?).should eq true
@@ -157,10 +157,10 @@ describe Effective::OrdersController, type: :controller do
157
157
  end
158
158
 
159
159
  it 'does not assign the shipping_address to user if save_shipping_address is false' do
160
- post :create, :effective_order => {
161
- :billing_address => billing_atts, :save_billing_address => true,
162
- :shipping_address => shipping_atts, :save_shipping_address => false,
163
- :shipping_address_same_as_billing => false
160
+ post :create, effective_order: {
161
+ billing_address: billing_atts, save_billing_address: true,
162
+ shipping_address: shipping_atts, save_shipping_address: false,
163
+ shipping_address_same_as_billing: false
164
164
  }
165
165
 
166
166
  (assigns(:order).valid? && assigns(:order).persisted?).should eq true
@@ -175,10 +175,10 @@ describe Effective::OrdersController, type: :controller do
175
175
  end
176
176
 
177
177
  it 'assign billing address to the order shipping_address when shipping_address_same_as_billing' do
178
- post :create, :effective_order => {
179
- :billing_address => billing_atts, :save_billing_address => true,
180
- :shipping_address => shipping_atts, :save_shipping_address => true,
181
- :shipping_address_same_as_billing => true
178
+ post :create, effective_order: {
179
+ billing_address: billing_atts, save_billing_address: true,
180
+ shipping_address: shipping_atts, save_shipping_address: true,
181
+ shipping_address_same_as_billing: true
182
182
  }
183
183
 
184
184
  (assigns(:order).valid? && assigns(:order).persisted?).should eq true
@@ -193,9 +193,9 @@ describe Effective::OrdersController, type: :controller do
193
193
  end
194
194
 
195
195
  it 'assign billing address to the order shipping_address when shipping_address_same_as_billing and no shipping provided' do
196
- post :create, :effective_order => {
197
- :billing_address => billing_atts, :save_billing_address => true,
198
- :shipping_address_same_as_billing => true
196
+ post :create, effective_order: {
197
+ billing_address: billing_atts, save_billing_address: true,
198
+ shipping_address_same_as_billing: true
199
199
  }
200
200
 
201
201
  (assigns(:order).valid? && assigns(:order).persisted?).should eq true
@@ -210,10 +210,10 @@ describe Effective::OrdersController, type: :controller do
210
210
  end
211
211
 
212
212
  it 'assign billing address to the order shipping_address but not the user when shipping_address_same_as_billing provided' do
213
- post :create, :effective_order => {
214
- :billing_address => billing_atts, :save_billing_address => false,
215
- :save_shipping_address => false,
216
- :shipping_address_same_as_billing => true
213
+ post :create, effective_order: {
214
+ billing_address: billing_atts, save_billing_address: false,
215
+ save_shipping_address: false,
216
+ shipping_address_same_as_billing: true
217
217
  }
218
218
 
219
219
  (assigns(:order).valid? && assigns(:order).persisted?).should eq true
@@ -228,61 +228,61 @@ describe Effective::OrdersController, type: :controller do
228
228
  end
229
229
 
230
230
  it 'is invalid when passed an invalid address' do
231
- post :create, :effective_order => {
232
- :billing_address => billing_atts, :save_billing_address => true,
233
- :shipping_address => shipping_atts.tap { |x| x[:address1] = nil }, :save_shipping_address => true,
234
- :shipping_address_same_as_billing => false
231
+ post :create, effective_order: {
232
+ billing_address: billing_atts, save_billing_address: true,
233
+ shipping_address: shipping_atts.tap { |x| x[:address1] = nil }, save_shipping_address: true,
234
+ shipping_address_same_as_billing: false
235
235
  }
236
236
 
237
237
  (assigns(:order).valid? && assigns(:order).persisted?).should eq false
238
238
  assigns(:order).errors[:shipping_address].present?.should eq true
239
239
 
240
- response.should render_template(:new)
240
+ response.should render_template(:checkout_step1)
241
241
  end
242
242
 
243
243
  it 'is invalid when passed an invalid order_item' do
244
244
  Effective::OrderItem.any_instance.stub(:valid?).and_return(false)
245
245
 
246
- post :create, :effective_order => {
247
- :billing_address => billing_atts, :save_billing_address => true,
248
- :shipping_address => shipping_atts, :save_shipping_address => true,
246
+ post :create, effective_order: {
247
+ billing_address: billing_atts, save_billing_address: true,
248
+ shipping_address: shipping_atts, save_shipping_address: true,
249
249
  }
250
250
 
251
251
  (assigns(:order).valid? && assigns(:order).persisted?).should eq false
252
- response.should render_template(:new)
252
+ response.should render_template(:checkout_step1)
253
253
  end
254
254
 
255
255
  it 'is invalid when passed an invalid user' do
256
256
  User.any_instance.stub(:valid?).and_return(false)
257
257
 
258
- post :create, :effective_order => {
259
- :billing_address => billing_atts, :save_billing_address => true,
260
- :shipping_address => shipping_atts, :save_shipping_address => true,
258
+ post :create, effective_order: {
259
+ billing_address: billing_atts, save_billing_address: true,
260
+ shipping_address: shipping_atts, save_shipping_address: true,
261
261
  }
262
262
 
263
263
  (assigns(:order).valid? && assigns(:order).persisted?).should eq false
264
- response.should render_template(:new)
264
+ response.should render_template(:checkout_step1)
265
265
  end
266
266
 
267
267
  it 'is invalid when passed an invalid purchasable' do
268
268
  Product.any_instance.stub(:valid?).and_return(false)
269
269
 
270
- post :create, :effective_order => {
271
- :billing_address => billing_atts, :save_billing_address => true,
272
- :shipping_address => shipping_atts, :save_shipping_address => true,
270
+ post :create, effective_order: {
271
+ billing_address: billing_atts, save_billing_address: true,
272
+ shipping_address: shipping_atts, save_shipping_address: true,
273
273
  }
274
274
 
275
275
  (assigns(:order).valid? && assigns(:order).persisted?).should eq false
276
- response.should render_template(:new)
276
+ response.should render_template(:checkout_step1)
277
277
  end
278
278
 
279
279
  it 'prevents the order from proceeding when missing a required address' do
280
- post :create, :effective_order => { :billing_address => billing_atts, :save_billing_address => true, :shipping_address_same_as_billing => false }
280
+ post :create, effective_order: { billing_address: billing_atts, save_billing_address: true, shipping_address_same_as_billing: false }
281
281
 
282
282
  (assigns(:order).valid? && assigns(:order).persisted?).should eq false
283
283
  assigns(:order).errors[:shipping_address].present?.should eq true
284
284
 
285
- response.should render_template(:new)
285
+ response.should render_template(:checkout_step1)
286
286
  end
287
287
  end
288
288
 
@@ -339,21 +339,20 @@ describe Effective::OrdersController, type: :controller do
339
339
  describe '#order_purchased (with a free order)' do
340
340
  before(:each) do
341
341
  sign_in cart.user
342
- cart.cart_items.each { |cart_item| cart_item.purchasable.update_attributes(:price => 0.0) }
342
+ cart.cart_items.each { |cart_item| cart_item.purchasable.update_attributes(price: 0.0) }
343
343
  end
344
344
 
345
345
  it 'creates a purchased order' do
346
346
  post :create, valid_order_attributes
347
347
  assigns(:order).purchased?.should eq true
348
- assigns(:order).payment[:details].should eq 'automatic purchase of free order.'
348
+ assigns(:order).payment[:details].should eq 'automatic purchase of free order'
349
349
  end
350
350
 
351
351
  it 'destroys the current user cart' do
352
352
  post :create, valid_order_attributes
353
353
 
354
354
  expect { Effective::Cart.find(cart.id) }.to raise_error(ActiveRecord::RecordNotFound)
355
- ci_ids = assigns(:cart).cart_items.collect(&:id)
356
- expect(Effective::CartItem.where(:id => ci_ids).count).to be 0
355
+ Effective::Cart.count.should eq 0
357
356
  end
358
357
 
359
358
  it 'redirects to the purchased page' do
@@ -363,28 +362,81 @@ describe Effective::OrdersController, type: :controller do
363
362
  end
364
363
 
365
364
  describe '#show' do
365
+ context 'when finding order' do
366
+ before { sign_in purchased_order.user }
366
367
 
367
- it 'finds the order by obfuscated ID' do
368
- sign_in purchased_order.user
369
- get :show, :id => purchased_order.to_param
370
- assigns(:order).id.should eq purchased_order.id
371
- end
368
+ it 'should find the order by obfuscated ID' do
369
+ get :show, id: purchased_order.to_param
372
370
 
373
- it 'does not find an order by regular ID' do
374
- sign_in purchased_order.user
375
- expect { get :show, :id => purchased_order.id }.to raise_error(ActiveRecord::RecordNotFound)
376
- end
371
+ expect(assigns(:order).id).to eq purchased_order.id
372
+ end
377
373
 
378
- it 'renders the show template for a purchased order' do
379
- sign_in purchased_order.user
380
- get :show, :id => purchased_order.to_param
381
- response.should render_template(:show)
374
+ it 'should not find an order by regular ID' do
375
+ expect { get :show, id: purchased_order.id }.to raise_error(ActiveRecord::RecordNotFound)
376
+ end
382
377
  end
383
378
 
384
- it 'renders the checkout template for a non-purchased order' do
385
- sign_in order.user
386
- get :show, :id => order.to_param
387
- response.should render_template(:checkout)
379
+ context 'when rendering template' do
380
+ let(:user) { FactoryGirl.create(:user) }
381
+
382
+ before { sign_in user }
383
+
384
+ context 'when not purchased order' do
385
+ let(:order) { FactoryGirl.create(:order, user: user) }
386
+
387
+ it 'should render checkout page successfully' do
388
+ get :show, id: order.to_param
389
+
390
+ expect(response).to be_successful
391
+ expect(response).to render_template :checkout_step2
392
+ expect(assigns(:order)).to eq order
393
+ expect(assigns(:page_title)).to eq 'Checkout'
394
+ end
395
+
396
+ it 'should render checkout page successfully' do
397
+ get :edit, id: order.to_param
398
+
399
+ expect(response).to be_successful
400
+ expect(response).to render_template :checkout_step1
401
+ expect(assigns(:order)).to eq order
402
+ expect(assigns(:page_title)).to eq 'Checkout'
403
+ end
404
+ end
405
+
406
+ context 'when pending order' do
407
+ let(:order) { FactoryGirl.create(:pending_order, user: user) }
408
+
409
+ it 'should render checkout page successfully' do
410
+ get :show, id: order.to_param
411
+
412
+ expect(response).to be_successful
413
+ expect(response).to render_template :checkout_step2
414
+ expect(assigns(:order)).to eq order
415
+ expect(assigns(:page_title)).to eq 'Checkout'
416
+ end
417
+
418
+ it 'should render checkout page successfully' do
419
+ get :edit, id: order.to_param
420
+
421
+ expect(response).to be_successful
422
+ expect(response).to render_template :checkout_step1
423
+ expect(assigns(:order)).to eq order
424
+ expect(assigns(:page_title)).to eq 'Checkout'
425
+ end
426
+ end
427
+
428
+ context 'when purchased order' do
429
+ let(:order) { FactoryGirl.create(:purchased_order, user: user) }
430
+
431
+ it 'should render order show page successfully' do
432
+ get :show, id: order.to_param
433
+
434
+ expect(response).to be_successful
435
+ expect(response).to render_template :show
436
+ expect(assigns(:order)).to eq order
437
+ expect(assigns(:page_title)).to eq 'Receipt'
438
+ end
439
+ end
388
440
  end
389
441
  end
390
442
 
@@ -394,12 +446,12 @@ describe Effective::OrdersController, type: :controller do
394
446
  end
395
447
 
396
448
  it 'finds the order by obfuscated ID' do
397
- get :purchased, :id => purchased_order.to_param
449
+ get :purchased, id: purchased_order.to_param
398
450
  assigns(:order).id.should eq purchased_order.id
399
451
  end
400
452
 
401
453
  it 'does not find an order by regular ID' do
402
- expect { get :purchased, :id => purchased_order.id }.to raise_error(ActiveRecord::RecordNotFound)
454
+ expect { get :purchased, id: purchased_order.id }.to raise_error(ActiveRecord::RecordNotFound)
403
455
  end
404
456
  end
405
457
 
@@ -409,13 +461,49 @@ describe Effective::OrdersController, type: :controller do
409
461
  end
410
462
 
411
463
  it 'finds the order by obfuscated ID' do
412
- get :declined, :id => purchased_order.to_param
464
+ get :declined, id: purchased_order.to_param
413
465
  assigns(:order).id.should eq purchased_order.id
414
466
  end
415
467
 
416
468
  it 'does not find an order by regular ID' do
417
- expect { get :declined, :id => purchased_order.id }.to raise_error(ActiveRecord::RecordNotFound)
469
+ expect { get :declined, id: purchased_order.id }.to raise_error(ActiveRecord::RecordNotFound)
418
470
  end
419
471
  end
420
472
 
473
+ describe 'POST #pay_by_cheque' do
474
+ let(:user) { FactoryGirl.create(:user) }
475
+ let(:order) { FactoryGirl.create(:order, user: user) }
476
+ let!(:cart) { FactoryGirl.create(:cart_with_items, user: user) }
477
+
478
+ before { sign_in user }
479
+
480
+ context 'when success' do
481
+ it 'should update order state, empty cart and redirect to order show page with success message' do
482
+ Effective::OrdersMailer.deliveries.clear
483
+
484
+ post :pay_by_cheque, id: order.to_param
485
+
486
+ expect(assigns(:order).pending?).to be_truthy
487
+ expect(Effective::Cart.first).to be_nil
488
+ flash[:success].present?.should eq true
489
+ response.should render_template(:pay_by_cheque)
490
+ Effective::OrdersMailer.deliveries.length.should eq 1
491
+ end
492
+ end
493
+
494
+ context 'when failed' do
495
+ before { Effective::Order.any_instance.stub(:save).and_return(false) }
496
+
497
+ it 'should not empty cart and redirect to order show page with danger message' do
498
+ Effective::OrdersMailer.deliveries.clear
499
+ post :pay_by_cheque, id: order.to_param
500
+
501
+ expect(response).to be_redirect
502
+ expect(response).to redirect_to EffectiveOrders::Engine.routes.url_helpers.order_path(order)
503
+ expect(Effective::Cart.first.empty?).to be_falsey
504
+ flash[:danger].present?.should eq true
505
+ Effective::OrdersMailer.deliveries.length.should eq 0
506
+ end
507
+ end
508
+ end
421
509
  end