Skip to content

Commit

Permalink
Associate order with the user when they return.
Browse files Browse the repository at this point in the history
  • Loading branch information
schof committed Oct 30, 2008
1 parent 7548b59 commit b53f60b
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 12 deletions.
2 changes: 1 addition & 1 deletion app/controllers/paypal_payments_controller.rb
Expand Up @@ -75,7 +75,7 @@ def successful
redirect_to order_url(@order) and return
else
flash[:notice] = "Please create an account or login so we can associate this order with an account"
session[:return_to] = order_url(@order)
session[:return_to] = "#{order_url(@order)}?payer_id=#{@order.paypal_payment.payer_id}"
redirect_to signup_path
end
end
Expand Down
12 changes: 7 additions & 5 deletions pp_website_standard_extension.rb
Expand Up @@ -33,13 +33,15 @@ def add_pp_standard_txns

# Add a filter to the OrdersController so that if user is reaching us from an email link we can
# associate the order with the user (once they log in)
Admin::OrdersController.class_eval do
OrdersController.class_eval do
before_filter :associate_order, :only => :show
private
def associate_order
puts ">>>>>>> associating order"
return unless params[:payer_id]
# TODO - do stuff
def associate_order
return unless payer_id = params[:payer_id]
orders = Order.find(:all, :include => :paypal_payment, :conditions => ['paypal_payments.payer_id = ? AND orders.user_id is null', payer_id])
orders.each do |order|
order.update_attribute("user", current_user)
end
end
end

Expand Down
15 changes: 9 additions & 6 deletions spec/controllers/orders_controller_spec.rb
Expand Up @@ -4,18 +4,21 @@
fixtures :users

before(:each) do
@order = Order.create(:id => 102, :number => "SAMP-1002", :state => "paid")
Order.stub!(:find).with(any_args).and_return(@order)
@paypal_payment = PaypalPayment.create(:payer_id => "FOOFAH")
@order = Order.create(:id => 102)
# note state is protected attribute so it needs to be set this way
@order.state = "paid"
@order.save
@paypal_payment = PaypalPayment.create(:payer_id => "FOOFAH", :order => @order)
PaypalPayment.stub!(:find).with(any_args).and_return([@paypal_payment])
end

describe "show" do
it "should associate the order with the user (once authenticated)" do
puts ">>>>> order.number: #{@order.number}"
@user = login(:pp_standard)
post :show, :order_id => @order.id, :payer_id => "FOOFAH"
#@order.user.should == users(:pp_standard)
get :show, :order_id => @order.id, :payer_id => "FOOFAH"
# check database and make sure the user was set
order = Order.find @order.id
order.user.should == @user
end

end
Expand Down

0 comments on commit b53f60b

Please sign in to comment.