effective_orders 1.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 (146) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +856 -0
  4. data/Rakefile +24 -0
  5. data/app/assets/images/effective_orders/stripe_connect.png +0 -0
  6. data/app/assets/javascripts/effective_orders/shipping_address_toggle.js.coffee +30 -0
  7. data/app/assets/javascripts/effective_orders/stripe_charges.js.coffee +26 -0
  8. data/app/assets/javascripts/effective_orders/stripe_subscriptions.js.coffee +28 -0
  9. data/app/assets/javascripts/effective_orders.js +2 -0
  10. data/app/assets/stylesheets/effective_orders/_order.scss +30 -0
  11. data/app/assets/stylesheets/effective_orders.css.scss +1 -0
  12. data/app/controllers/admin/customers_controller.rb +15 -0
  13. data/app/controllers/admin/orders_controller.rb +22 -0
  14. data/app/controllers/effective/carts_controller.rb +70 -0
  15. data/app/controllers/effective/orders_controller.rb +191 -0
  16. data/app/controllers/effective/providers/moneris.rb +94 -0
  17. data/app/controllers/effective/providers/paypal.rb +29 -0
  18. data/app/controllers/effective/providers/stripe.rb +125 -0
  19. data/app/controllers/effective/providers/stripe_connect.rb +47 -0
  20. data/app/controllers/effective/subscriptions_controller.rb +123 -0
  21. data/app/controllers/effective/webhooks_controller.rb +86 -0
  22. data/app/helpers/effective_carts_helper.rb +90 -0
  23. data/app/helpers/effective_orders_helper.rb +108 -0
  24. data/app/helpers/effective_paypal_helper.rb +37 -0
  25. data/app/helpers/effective_stripe_helper.rb +63 -0
  26. data/app/mailers/effective/orders_mailer.rb +64 -0
  27. data/app/models/concerns/acts_as_purchasable.rb +134 -0
  28. data/app/models/effective/access_denied.rb +17 -0
  29. data/app/models/effective/cart.rb +65 -0
  30. data/app/models/effective/cart_item.rb +40 -0
  31. data/app/models/effective/customer.rb +61 -0
  32. data/app/models/effective/datatables/customers.rb +45 -0
  33. data/app/models/effective/datatables/orders.rb +53 -0
  34. data/app/models/effective/order.rb +247 -0
  35. data/app/models/effective/order_item.rb +69 -0
  36. data/app/models/effective/stripe_charge.rb +35 -0
  37. data/app/models/effective/subscription.rb +95 -0
  38. data/app/models/inputs/price_field.rb +63 -0
  39. data/app/models/inputs/price_form_input.rb +7 -0
  40. data/app/models/inputs/price_formtastic_input.rb +9 -0
  41. data/app/models/inputs/price_input.rb +19 -0
  42. data/app/models/inputs/price_simple_form_input.rb +8 -0
  43. data/app/models/validators/effective/sold_out_validator.rb +7 -0
  44. data/app/views/active_admin/effective_orders/orders/_show.html.haml +70 -0
  45. data/app/views/admin/customers/_actions.html.haml +2 -0
  46. data/app/views/admin/customers/index.html.haml +10 -0
  47. data/app/views/admin/orders/index.html.haml +7 -0
  48. data/app/views/admin/orders/show.html.haml +11 -0
  49. data/app/views/effective/carts/_cart.html.haml +33 -0
  50. data/app/views/effective/carts/show.html.haml +18 -0
  51. data/app/views/effective/orders/_checkout_step_1.html.haml +39 -0
  52. data/app/views/effective/orders/_checkout_step_2.html.haml +18 -0
  53. data/app/views/effective/orders/_my_purchases.html.haml +15 -0
  54. data/app/views/effective/orders/_order.html.haml +4 -0
  55. data/app/views/effective/orders/_order_header.html.haml +21 -0
  56. data/app/views/effective/orders/_order_items.html.haml +39 -0
  57. data/app/views/effective/orders/_order_payment_details.html.haml +11 -0
  58. data/app/views/effective/orders/_order_shipping.html.haml +19 -0
  59. data/app/views/effective/orders/_order_user_fields.html.haml +10 -0
  60. data/app/views/effective/orders/checkout.html.haml +3 -0
  61. data/app/views/effective/orders/declined.html.haml +10 -0
  62. data/app/views/effective/orders/moneris/_form.html.haml +34 -0
  63. data/app/views/effective/orders/my_purchases.html.haml +6 -0
  64. data/app/views/effective/orders/my_sales.html.haml +28 -0
  65. data/app/views/effective/orders/new.html.haml +4 -0
  66. data/app/views/effective/orders/paypal/_form.html.haml +5 -0
  67. data/app/views/effective/orders/purchased.html.haml +10 -0
  68. data/app/views/effective/orders/show.html.haml +17 -0
  69. data/app/views/effective/orders/stripe/_form.html.haml +8 -0
  70. data/app/views/effective/orders/stripe/_subscription_fields.html.haml +7 -0
  71. data/app/views/effective/orders_mailer/order_receipt_to_admin.html.haml +8 -0
  72. data/app/views/effective/orders_mailer/order_receipt_to_buyer.html.haml +8 -0
  73. data/app/views/effective/orders_mailer/order_receipt_to_seller.html.haml +30 -0
  74. data/app/views/effective/subscriptions/index.html.haml +16 -0
  75. data/app/views/effective/subscriptions/new.html.haml +10 -0
  76. data/app/views/effective/subscriptions/show.html.haml +49 -0
  77. data/config/routes.rb +57 -0
  78. data/db/migrate/01_create_effective_orders.rb.erb +91 -0
  79. data/db/upgrade/02_upgrade_effective_orders_from03x.rb.erb +29 -0
  80. data/db/upgrade/upgrade_price_column_on_table.rb.erb +17 -0
  81. data/lib/effective_orders/engine.rb +52 -0
  82. data/lib/effective_orders/version.rb +3 -0
  83. data/lib/effective_orders.rb +76 -0
  84. data/lib/generators/effective_orders/install_generator.rb +38 -0
  85. data/lib/generators/effective_orders/upgrade_from03x_generator.rb +34 -0
  86. data/lib/generators/effective_orders/upgrade_price_column_generator.rb +34 -0
  87. data/lib/generators/templates/README +1 -0
  88. data/lib/generators/templates/effective_orders.rb +210 -0
  89. data/spec/controllers/carts_controller_spec.rb +143 -0
  90. data/spec/controllers/moneris_orders_controller_spec.rb +245 -0
  91. data/spec/controllers/orders_controller_spec.rb +418 -0
  92. data/spec/controllers/stripe_orders_controller_spec.rb +127 -0
  93. data/spec/controllers/webhooks_controller_spec.rb +79 -0
  94. data/spec/dummy/README.rdoc +8 -0
  95. data/spec/dummy/Rakefile +6 -0
  96. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  97. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  98. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  99. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  100. data/spec/dummy/app/models/product.rb +17 -0
  101. data/spec/dummy/app/models/product_with_float_price.rb +17 -0
  102. data/spec/dummy/app/models/user.rb +28 -0
  103. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  104. data/spec/dummy/bin/bundle +3 -0
  105. data/spec/dummy/bin/rails +4 -0
  106. data/spec/dummy/bin/rake +4 -0
  107. data/spec/dummy/config/application.rb +31 -0
  108. data/spec/dummy/config/boot.rb +5 -0
  109. data/spec/dummy/config/database.yml +25 -0
  110. data/spec/dummy/config/environment.rb +5 -0
  111. data/spec/dummy/config/environments/development.rb +37 -0
  112. data/spec/dummy/config/environments/production.rb +83 -0
  113. data/spec/dummy/config/environments/test.rb +39 -0
  114. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  115. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  116. data/spec/dummy/config/initializers/devise.rb +254 -0
  117. data/spec/dummy/config/initializers/effective_addresses.rb +15 -0
  118. data/spec/dummy/config/initializers/effective_orders.rb +22 -0
  119. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  120. data/spec/dummy/config/initializers/inflections.rb +16 -0
  121. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  122. data/spec/dummy/config/initializers/session_store.rb +3 -0
  123. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  124. data/spec/dummy/config/locales/en.yml +23 -0
  125. data/spec/dummy/config/routes.rb +3 -0
  126. data/spec/dummy/config/secrets.yml +22 -0
  127. data/spec/dummy/config.ru +4 -0
  128. data/spec/dummy/db/schema.rb +142 -0
  129. data/spec/dummy/db/test.sqlite3 +0 -0
  130. data/spec/dummy/log/development.log +487 -0
  131. data/spec/dummy/log/test.log +347 -0
  132. data/spec/dummy/public/404.html +67 -0
  133. data/spec/dummy/public/422.html +67 -0
  134. data/spec/dummy/public/500.html +66 -0
  135. data/spec/dummy/public/favicon.ico +0 -0
  136. data/spec/helpers/effective_orders_helper_spec.rb +21 -0
  137. data/spec/models/acts_as_purchasable_spec.rb +107 -0
  138. data/spec/models/customer_spec.rb +71 -0
  139. data/spec/models/factories_spec.rb +13 -0
  140. data/spec/models/order_item_spec.rb +35 -0
  141. data/spec/models/order_spec.rb +323 -0
  142. data/spec/models/stripe_charge_spec.rb +39 -0
  143. data/spec/models/subscription_spec.rb +103 -0
  144. data/spec/spec_helper.rb +44 -0
  145. data/spec/support/factories.rb +118 -0
  146. metadata +387 -0
@@ -0,0 +1,143 @@
1
+ require 'spec_helper'
2
+
3
+ describe Effective::CartsController do
4
+ routes { EffectiveOrders::Engine.routes }
5
+
6
+ let(:user) { FactoryGirl.create(:user) }
7
+ let(:cart) { FactoryGirl.create(:cart) }
8
+ let(:product) { FactoryGirl.create(:product) }
9
+
10
+ describe 'First time user - not logged in' do
11
+ it 'creates a new cart and set the session[:cart]' do
12
+ get :show
13
+ assigns(:cart).id.should eq session[:cart]
14
+ assigns(:cart).size.should eq 0
15
+ end
16
+
17
+ it 'allows me to add_to_cart' do
18
+ get :add_to_cart, :purchasable_type => product.class, :purchasable_id => product.id
19
+ assigns(:cart).size.should eq 1
20
+ assigns(:cart).find(product).present?.should eq true
21
+ end
22
+
23
+ it 'allow me to remove_from_cart' do
24
+ get :add_to_cart, :purchasable_type => product.class, :purchasable_id => product.id
25
+ assigns(:cart).size.should eq 1
26
+ assigns(:cart).find(product).present?.should eq true
27
+
28
+ delete :remove_from_cart, :id => assigns(:cart).cart_items.first.id
29
+ assigns(:cart).reload.size.should eq 0
30
+ assigns(:cart).find(product).present?.should eq false
31
+ end
32
+
33
+ it 'allow me to destroy the cart' do
34
+ get :add_to_cart, :purchasable_type => product.class, :purchasable_id => product.id
35
+ assigns(:cart).size.should eq 1
36
+
37
+ delete :destroy
38
+ response.should redirect_to('/cart')
39
+
40
+ # This redirects me, and reassigns the @cart
41
+ assigns(:cart).size.should eq 0
42
+ end
43
+ end
44
+
45
+ describe 'Logging in' do
46
+ describe 'with no previous cart' do
47
+ it 'assigns a new cart and unsets session[:cart]' do
48
+ session[:cart] = 12
49
+ sign_in user
50
+
51
+ get :show
52
+
53
+ assigns(:cart).user.should eq user
54
+ assigns(:cart).size.should eq 0
55
+
56
+ session[:cart].should eq nil
57
+ end
58
+ end
59
+
60
+ describe 'with an existing cart' do
61
+ it 'assigns me the existing cart' do
62
+ sign_in cart.user
63
+ get :show
64
+ assigns(:cart).should eq cart
65
+ assigns(:cart).size.should eq 3 # As per our factory
66
+ session[:cart].should eq nil
67
+ end
68
+ end
69
+
70
+ describe 'with no existing user cart, and a session cart full of items' do
71
+ it 'copies the session cart items into the user cart' do
72
+ get :show
73
+ assigns(:cart).id.should eq session[:cart]
74
+ assigns(:cart).size.should eq 0
75
+
76
+ get :add_to_cart, :purchasable_type => product.class, :purchasable_id => product.id
77
+ assigns(:cart).size.should eq 1
78
+ assigns(:cart).find(product).present?.should eq true
79
+
80
+ sign_in user
81
+ controller.instance_variable_set(:@cart, nil) # This is what happens in a real RailsController. zzz.
82
+
83
+ get :show
84
+
85
+ assigns(:cart).user.should eq user
86
+ assigns(:cart).size.should eq 1
87
+ assigns(:cart).find(product).present?.should eq true
88
+ end
89
+ end
90
+
91
+ describe 'with an existing user cart, and a session cart full of items' do
92
+ it 'merges the session cart into the user cart and destroy the session cart' do
93
+ get :show
94
+ session_cart = session[:cart]
95
+
96
+ assigns(:cart).id.should eq session[:cart]
97
+ assigns(:cart).size.should eq 0
98
+
99
+ get :add_to_cart, :purchasable_type => product.class, :purchasable_id => product.id
100
+ assigns(:cart).size.should eq 1
101
+ assigns(:cart).find(product).present?.should eq true
102
+
103
+ sign_in cart.user
104
+ controller.instance_variable_set(:@cart, nil) # This is what happens in a real RailsController. zzz.
105
+
106
+ get :show
107
+ assigns(:cart).user.should eq cart.user
108
+ assigns(:cart).size.should eq 4 # the 3 from my factory, and 1 more we just created
109
+ assigns(:cart).find(product).present?.should eq true
110
+
111
+ Effective::Cart.where(:id => session_cart).should eq []
112
+ end
113
+ end
114
+ end
115
+
116
+ describe '#add_to_cart' do
117
+ before(:each) do
118
+ sign_in cart.user
119
+ end
120
+
121
+ it 'provides a useful error when passed an unknown purchasable_id' do
122
+ get :add_to_cart, :purchasable_type => product.class, :purchasable_id => 'asdf'
123
+
124
+ assigns(:purchasable).should eq nil
125
+ flash[:danger].include?('Unable to add item').should eq true
126
+ end
127
+
128
+ it 'provides a useful error when passed an unknown purchasable_type' do
129
+ get :add_to_cart, :purchasable_type => 'Something', :purchasable_id => product.id
130
+
131
+ assigns(:purchasable).should eq nil
132
+ flash[:danger].include?('Unable to add item').should eq true
133
+ end
134
+ end
135
+
136
+ describe '#remove_from_cart' do
137
+ it 'throws ActiveRecord::RecordNotFound when passed an invalid ID' do
138
+ expect { delete :remove_from_cart, :id => 12345 }.to raise_error(ActiveRecord::RecordNotFound)
139
+ assigns(:cart_item).should eq nil
140
+ end
141
+ end
142
+
143
+ end
@@ -0,0 +1,245 @@
1
+ require 'spec_helper'
2
+
3
+ # We're testing the effective/providers/moneris.rb file, which is included into the OrdersController at runtime
4
+
5
+ describe Effective::OrdersController do
6
+ routes { EffectiveOrders::Engine.routes }
7
+
8
+ let(:order) { FactoryGirl.create(:order) }
9
+ let(:moneris_params) do
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'
28
+ }
29
+ end
30
+
31
+ describe 'moneris_postback' do
32
+ before do
33
+ subject.stub(:send_moneris_verify_request).and_return('') # Dont actually make Moneris requests
34
+ sign_in order.user
35
+ end
36
+
37
+ describe 'invalid parameters' do
38
+ it 'raises RecordNotFound when passed an unknown order id' do
39
+ expect {
40
+ post :moneris_postback, moneris_params.tap { |x| x[:response_order_id] = 999 }
41
+ }.to raise_error(ActiveRecord::RecordNotFound)
42
+ end
43
+ end
44
+
45
+ describe 'declined purchase params' do
46
+ it 'marks an order declined when params[:result] indicate decline' do
47
+ subject.should_not_receive(:send_moneris_verify_request)
48
+ subject.should_not_receive(:parse_moneris_response)
49
+
50
+ post :moneris_postback, moneris_params.tap { |x| x[:result] = 'null' }
51
+
52
+ response.should redirect_to "/orders/#{order.to_param}/declined"
53
+ assigns(:order).declined?.should eq true
54
+ end
55
+
56
+ it 'marks an order declined when params[:transactionKey] is blank' do
57
+ post :moneris_postback, moneris_params.tap { |x| x.delete(:transactionKey) }
58
+
59
+ response.should redirect_to "/orders/#{order.to_param}/declined"
60
+ assigns(:order).declined?.should eq true
61
+ end
62
+ end
63
+
64
+ describe 'successful purchase params' do
65
+ it 'sends a moneris verify request when passed successful purchase params' do
66
+ subject.should_receive(:send_moneris_verify_request)
67
+ subject.should_receive(:parse_moneris_response)
68
+
69
+ post :moneris_postback, moneris_params
70
+ end
71
+ end
72
+
73
+ describe 'transaction verification step' do
74
+ it 'marks the order as purchased when response code is valid' do
75
+ subject.stub(:parse_moneris_response).and_return({:response_code => 1}) # success
76
+
77
+ post :moneris_postback, moneris_params
78
+
79
+ response.should redirect_to "/orders/#{order.to_param}/purchased"
80
+ assigns(:order).purchased?.should eq true
81
+ end
82
+
83
+ it 'marks order declined when response_code = null' do
84
+ subject.stub(:parse_moneris_response).and_return({:response_code => 'null'}) # failure
85
+
86
+ post :moneris_postback, moneris_params
87
+
88
+ response.should redirect_to "/orders/#{order.to_param}/declined"
89
+ assigns(:order).purchased?.should eq false
90
+ assigns(:order).declined?.should eq true
91
+ end
92
+
93
+ it 'marks order declined when response_code blank' do
94
+ subject.stub(:parse_moneris_response).and_return({}) # failure
95
+
96
+ post :moneris_postback, moneris_params
97
+
98
+ response.should redirect_to "/orders/#{order.to_param}/declined"
99
+ assigns(:order).purchased?.should eq false
100
+ assigns(:order).declined?.should eq true
101
+ end
102
+
103
+ it 'marks order declined when response_code = 0' do
104
+ subject.stub(:parse_moneris_response).and_return({:response_code => 0}) # failure
105
+ post :moneris_postback, moneris_params
106
+ response.should redirect_to "/orders/#{order.to_param}/declined"
107
+ assigns(:order).purchased?.should eq false
108
+ end
109
+
110
+ it 'marks order declined when response_code = 50' do
111
+ subject.stub(:parse_moneris_response).and_return({:response_code => 50}) # failure
112
+ post :moneris_postback, moneris_params
113
+ response.should redirect_to "/orders/#{order.to_param}/declined"
114
+ assigns(:order).purchased?.should eq false
115
+ end
116
+ end
117
+
118
+ describe 'redirect urls' do
119
+ it 'redirects to the purchased_redirect_url on purchase' do
120
+ subject.stub(:parse_moneris_response).and_return({:response_code => 1}) # success
121
+ post :moneris_postback, moneris_params.tap { |x| x[:rvar_purchased_redirect_url] = '/something' }
122
+ response.should redirect_to '/something'
123
+ end
124
+
125
+ it 'redirects to the declined_redirect_url on decline' do
126
+ subject.stub(:parse_moneris_response).and_return({:response_code => 'null'}) # nope
127
+ post :moneris_postback, moneris_params.tap { |x| x[:rvar_declined_redirect_url] = '/something' }
128
+ response.should redirect_to '/something'
129
+ end
130
+ end
131
+
132
+ end
133
+ end
134
+
135
+
136
+ # describe '#stripe_charge' do
137
+ # before do
138
+ # sign_in order.user
139
+ # end
140
+
141
+ # describe 'invalid parameters' do
142
+ # it 'raises RecordNotFound when passed an unknown order id' do
143
+ # expect {
144
+ # post :stripe_charge, stripe_charge_params.tap { |x| x[:effective_stripe_charge]['effective_order_id'] = 999 }
145
+ # }.to raise_error(ActiveRecord::RecordNotFound)
146
+ # end
147
+
148
+ # it 'renders the :create action on validation failure' do
149
+ # subject.should_not_receive(:process_stripe_charge)
150
+
151
+ # post :stripe_charge, stripe_charge_params.tap { |x| x[:effective_stripe_charge]['token'] = nil }
152
+
153
+ # flash[:danger].downcase.include?('token').should eq true
154
+ # assigns(:stripe_charge).errors[:token].present?.should eq true
155
+
156
+ # assigns(:order).purchased?.should eq false
157
+ # response.should render_template(:checkout)
158
+ # end
159
+ # end
160
+
161
+ # describe 'valid parameters' do
162
+ # it 'redirects to order_purchase_path on success' do
163
+ # post :stripe_charge, stripe_charge_params
164
+ # assigns(:order).purchased?.should eq true
165
+ # response.should redirect_to "/orders/#{assigns(:order).to_param}/purchased"
166
+ # end
167
+
168
+ # it 'assigns the @stripe_charge, @order and @buyer properly' do
169
+ # post :stripe_charge, stripe_charge_params
170
+
171
+ # assigns(:stripe_charge).valid?.should eq true
172
+ # assigns(:stripe_charge).order.should eq order
173
+ # assigns(:order).should eq order
174
+ # assigns(:buyer).should eq buyer
175
+ # end
176
+
177
+ # it 'calls process_stripe_charge when the stripe_charge form object is valid' do
178
+ # subject.should_receive(:process_stripe_charge)
179
+ # post :stripe_charge, stripe_charge_params
180
+ # end
181
+
182
+ # it 'assigns the buyer a new card based on the passed token' do
183
+ # Effective::Customer.any_instance.should_receive(:update_card!).with(token)
184
+ # post :stripe_charge, stripe_charge_params
185
+ # end
186
+
187
+ # it 'stores the Stripe::Charge info in the order.payment' do
188
+ # post :stripe_charge, stripe_charge_params
189
+ # assigns(:order).payment[:charge]['object'].should eq 'charge'
190
+ # assigns(:order).payment[:charge]['amount'].should eq (order.total*100).to_i
191
+ # assigns(:order).payment[:charge]['customer'].should eq buyer.stripe_customer_id
192
+ # end
193
+ # end
194
+
195
+ # describe 'stripe charge errors' do
196
+ # it 'rollsback the entire transaction when Stripe::Charge fails' do
197
+ # StripeMock.prepare_card_error(:card_declined)
198
+
199
+ # post :stripe_charge, stripe_charge_params
200
+
201
+ # assigns(:order).purchased?.should eq false
202
+ # assigns(:stripe_charge).errors[:base].first.downcase.include?('unable to process order with stripe').should eq true
203
+ # assigns(:stripe_charge).errors[:base].first.downcase.include?('the card was declined').should eq true
204
+ # response.should render_template(:checkout)
205
+ # end
206
+ # end
207
+ # end
208
+
209
+ # describe '#stripe_charge with a subscription' do
210
+ # let(:order) { FactoryGirl.create(:order_with_subscription) }
211
+ # let(:buyer) { Effective::Customer.for_user(order.user) }
212
+ # let(:subscription) { order.order_items[1].purchasable }
213
+ # let(:token) { 'tok_123456789' }
214
+ # let(:stripe_charge_params) do
215
+ # {:effective_stripe_charge => {'effective_order_id' => order.to_param, 'token' => token}}
216
+ # end
217
+
218
+ # before do
219
+ # sign_in order.user
220
+ # end
221
+
222
+ # it 'redirects to order_purchase_path on success' do
223
+ # post :stripe_charge, stripe_charge_params
224
+ # assigns(:order).purchased?.should eq true
225
+ # response.should redirect_to "/orders/#{assigns(:order).to_param}/purchased"
226
+ # end
227
+
228
+ # it 'makes a Stripe::Charge for only the non-Subscription OrderItems' do
229
+ # post :stripe_charge, stripe_charge_params
230
+ # assigns(:order).payment[:charge]['object'].should eq 'charge'
231
+ # assigns(:order).payment[:charge]['amount'].should eq (order.order_items.first.total * 100).to_i
232
+ # end
233
+
234
+ # it 'makes a Stripe::Subscription for the Subscriptions' do
235
+ # post :stripe_charge, stripe_charge_params
236
+
237
+ # assigns(:order).payment[:subscriptions]["#{subscription.stripe_plan_id}"]['object'].should eq 'subscription'
238
+ # assigns(:order).payment[:subscriptions]["#{subscription.stripe_plan_id}"]['plan'].should eq subscription.stripe_plan_id
239
+ # subscription.reload.stripe_subscription_id.present?.should eq true
240
+ # subscription.reload.stripe_coupon_id.present?.should eq true
241
+
242
+ # Effective::Subscription.find(subscription.id).purchased?.should eq true
243
+ # end
244
+ # end
245
+ #end