6772312ea7
The primary license of the project is changing to: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later with some specific files to be licensed under the one of two licenses: CC0-1.0 LGPL-3.0-or-later This commit is one of the many steps to relicense the entire codebase. Documentation granting permission for this relicensing (from all past contributors who hold copyrights) is on file with Software Freedom Conservancy, Inc.
101 lines
4.9 KiB
Ruby
101 lines
4.9 KiB
Ruby
# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
|
|
require 'rails_helper'
|
|
require 'timecop'
|
|
|
|
describe PayRecurringDonation do
|
|
|
|
before(:all) do
|
|
#@data = PsqlFixtures.init
|
|
# @result = @data['recurring_donation']
|
|
end
|
|
|
|
let(:today) {Time.current.to_date}
|
|
|
|
describe '.with_donation', :pending => true do
|
|
# describe 'create a valid charge and payment when due' do
|
|
#
|
|
# end
|
|
# it 'creates a new valid charge and payment when due' do
|
|
# h = Timecop.freeze(Time.parse("2020-02-02").utc) do
|
|
# VCR.use_cassette('PayRecurringDonation/h1') do
|
|
# PayRecurringDonation.with_stripe(@result['recurring_donation']['id'])
|
|
# end
|
|
# end
|
|
# expect(h['charge']['stripe_charge_id']).to be_present
|
|
# expect(h['charge']['card_id']).to eq(@data['donor']['card']['id'])
|
|
# expect(h['charge']['supporter_id']).to eq(@data['donor']['supporter']['id'])
|
|
# expect(h['charge']['amount']).to eq(@data['recurring_donation']['recurring_donation']['amount'])
|
|
# expect(h['charge']['donation_id']).to eq(@result['donation']['id'])
|
|
# expect(h['charge']['nonprofit_id']).to eq(@data['np']['id'])
|
|
# expect(h['charge']['status']).to eq('pending')
|
|
# expect(h['charge']['payment_id']).to eq(h['payment']['id'])
|
|
# expect(h['payment']['nonprofit_id']).to eq(@data['np']['id'])
|
|
# expect(h['payment']['date']).to eq(h['payment']['created_at'])
|
|
# expect(h['payment']['supporter_id']).to eq(@data['donor']['supporter']['id'])
|
|
# expect(h['payment']['donation_id']).to eq(@result['donation']['id'])
|
|
# expect(h['payment']['gross_amount']).to eq(@data['recurring_donation']['recurring_donation']['amount'])
|
|
# expect(h['payment']['kind']).to eq('RecurringDonation')
|
|
# # Wipe out data for other tests
|
|
# Psql.execute("DELETE FROM charges WHERE id = #{h['charge']['id']}")
|
|
# Psql.execute("DELETE FROM payments WHERE id = #{h['payment']['id']}")
|
|
# end
|
|
#
|
|
# it 'returns a failed charge without a payment when the card is declined, increments n_failures, and is still due' do
|
|
# Psql.execute("UPDATE donations SET card_id=#{@data['donor']['bad_card']['id']} WHERE id=#{@result['donation']['id']}")
|
|
# h = Timecop.freeze(Time.parse("2020-02-01").utc) do
|
|
# VCR.use_cassette('PayRecurringDonation/bad_card') do
|
|
# PayRecurringDonation.with_stripe(@result['recurring_donation']['id'])
|
|
# end
|
|
# end
|
|
# expect(h['charge']['status']).to eq 'failed'
|
|
# expect(h['recurring_donation']['n_failures']).to eq 1
|
|
# Timecop.freeze(Time.parse("2020-02-01").utc) do
|
|
# expect(QueryRecurringDonations.is_due?(h['recurring_donation']['id'])).to be true
|
|
# end
|
|
# Psql.execute("UPDATE donations SET card_id=#{@data['donor']['card']['id']} WHERE id=#{@result['donation']['id']}")
|
|
# end
|
|
#
|
|
# it 'returns false when not due' do
|
|
# Timecop.freeze(Time.parse("2020-01-01").utc) do
|
|
# expect(PayRecurringDonation.with_stripe(@result['recurring_donation']['id'])).to be false
|
|
# end
|
|
# end
|
|
|
|
end
|
|
|
|
describe '.pay_all_due_with_stripe', :pending => true do
|
|
|
|
# it 'queues a job to pay each due recurring donation' do
|
|
# Timecop.freeze(Time.parse("2020-02-01").utc) do
|
|
# VCR.use_cassette('PayRecurringDonation/pay_all_due_with_stripe') do
|
|
# PayRecurringDonation.pay_all_due_with_stripe
|
|
# end
|
|
# end
|
|
# jerbz = Psql.execute("SELECT * FROM delayed_jobs WHERE queue='rec-don-payments'")
|
|
# handlers = jerbz.map{|j| YAML.load(j['handler'])}
|
|
# expect(handlers.count).to eq(handlers.select{|h| h.method_name == :with_stripe}.count)
|
|
# expect(handlers.count).to eq(handlers.select{|h| h.object == PayRecurringDonation}.count)
|
|
# expect(handlers.map{|h| h.args}.flatten).to include(@result['recurring_donation']['id'])
|
|
# Psql.execute("DELETE FROM delayed_jobs WHERE queue='rec-don-payments'")
|
|
# end
|
|
end
|
|
|
|
describe '.ULTIMATE_VERIFICATION' do
|
|
it 'returns false' do
|
|
Timecop.freeze(Time.parse('2020-02-01').utc) do
|
|
expect(PayRecurringDonation.ULTIMATE_VERIFICATION('2020-02-02', true, true, false, 'run_dangerously')).to be_falsey
|
|
expect(PayRecurringDonation.ULTIMATE_VERIFICATION('2020-02-01', false, true, false, 'run_dangerously')).to be_falsey
|
|
expect(PayRecurringDonation.ULTIMATE_VERIFICATION('2020-02-01', true, false, false, 'run_dangerously')).to be_falsey
|
|
expect(PayRecurringDonation.ULTIMATE_VERIFICATION('2020-02-01', true, true, true, 'run_dangerously')).to be_falsey
|
|
expect(PayRecurringDonation.ULTIMATE_VERIFICATION('2020-02-01', true, true, false, 'rd')).to be_falsey
|
|
end
|
|
end
|
|
it 'returns true' do
|
|
Timecop.freeze(Time.parse('2020-02-01').utc) do
|
|
expect(PayRecurringDonation.ULTIMATE_VERIFICATION('2020-02-01', true, true, false, 'run dangerously')).to be_truthy
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
end
|