require_relative './environment.rb' require 'rack/test' describe 'tipping' do include Rack::Test::Methods def app Sinatra::Application end before do EmailWorker.jobs.clear @site = Fabricate :site end it 'adds a tip' do @actioning_site = Fabricate :site custom = Base64.strict_encode64({site_id: @site.id, actioning_site_id: (@actioning_site ? @actioning_site.id : nil)}.to_json) paypal_hash = paypal_tip_webhook_hash( site: @site, actioning_site: @actioning_site, custom: custom, memo: 'I like your site', payer_email: @actioning_site.email, receiver_email: @site.email ) post '/webhooks/paypal/tipping_notify', paypal_hash @site.tips.length.must_equal 1 tip = @site.tips.first tip.site.id.must_equal @site.id tip.actioning_site.id.must_equal @actioning_site.id tip.currency.must_equal 'USD' tip.amount_string.must_equal '$5.00' tip.fee_string.must_equal '$0.45' tip.message.must_equal 'I like your site' tip.paypal_payer_email.must_equal @actioning_site.email tip.paypal_receiver_email.must_equal @site.email tip.paypal_txn_id.must_equal 'TXID' tip.created_at.must_equal Time.parse("2017-02-03 21:39:51 -0800") EmailWorker.jobs.length.must_equal 2 end it 'adds a tip even if there is no actioning site id' do @actioning_site = Fabricate :site custom = Base64.strict_encode64({site_id: @site.id, actioning_site_id: nil}.to_json) payer_email = 'notloggedintipper@dfdsfdsfdsfdsfsdf.com' paypal_hash = paypal_tip_webhook_hash( site: @site, custom: custom, memo: 'I like your site', payer_email: payer_email, receiver_email: @site.email ) post '/webhooks/paypal/tipping_notify', paypal_hash @site.tips.length.must_equal 1 @site.tips.first.actioning_site_id.must_be_nil end end def paypal_tip_webhook_hash(opts={}) { :transaction_subject=>"customvarlol", :payment_date=>"21:39:51 Feb 03, 2017 PST", :txn_type=>"web_accept", :last_name=>"Drake", :residence_country=>"US", :item_name=>"Site Donation for JUICED UP TEST MACHINE!!!", :payment_gross=>"5.00", :mc_currency=>"USD", :business=>"admin@neocities.org", :payment_type=>"instant", :protection_eligibility=>"Ineligible", :verify_sign=>"AQEgFLG-gYJRPNwVRAb4gD.Dx6t9AmFm1mbPa6iYv5jJAKHYWjLwCX9z", :payer_status=>"verified", :payer_email=>"kyle@kyledrake.net", :txn_id=>"TXID", :quantity=>"0", :receiver_email=>"admin@neocities.org", :first_name=>"Kyle", :payer_id=>"PAYERID", :receiver_id=>"RECEIVERID", :item_number=>"", :payment_status=>"Completed", :payment_fee=>"0.45", :mc_fee=>"0.45", :mc_gross=>"5.00", :custom=>"", :charset=>"windows-1252", :notify_version=>"3.8", :ipn_track_id=>"IPNTRACKID" }.merge(opts) end