neocities/tests/webhook_tests.rb
2022-08-10 14:31:36 -05:00

100 lines
2.9 KiB
Ruby

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