2018-03-25 16:15:39 +00:00
|
|
|
# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
|
2018-03-25 17:30:42 +00:00
|
|
|
require 'rails_helper'
|
|
|
|
|
|
|
|
describe DeleteCampaignGiftOption do
|
|
|
|
before(:each){
|
|
|
|
##stub out the mailing stuff used by campaign creation
|
|
|
|
cm = double(CampaignMailer)
|
|
|
|
allow(cm).to receive(:creation_followup)
|
|
|
|
nam = double(NonprofitAdminMailer)
|
|
|
|
allow(nam).to receive(:supporter_fundraiser)
|
|
|
|
allow(CampaignMailer).to receive(:delay).and_return(cm)
|
|
|
|
allow(NonprofitAdminMailer).to receive(:delay).and_return(nam)
|
|
|
|
|
|
|
|
}
|
|
|
|
describe '.delete' do
|
|
|
|
let(:profile) {force_create(:profile, :user => force_create(:user))}
|
|
|
|
let(:campaign) { force_create(:campaign, :profile => profile)}
|
|
|
|
let(:campaign_gift_option) { force_create(:campaign_gift_option, :campaign => campaign)}
|
|
|
|
let(:campaign_gift) { force_create(:campaign_gift, :campaign_gift_option => campaign_gift_option)}
|
|
|
|
describe 'param validation' do
|
|
|
|
|
|
|
|
it 'does basic validation' do
|
|
|
|
expect{ DeleteCampaignGiftOption.delete(nil,
|
|
|
|
nil)}
|
|
|
|
.to(raise_error{|error|
|
|
|
|
expect(error).to be_a ParamValidation::ValidationError
|
|
|
|
expect_validation_errors(error.data, [
|
|
|
|
{
|
|
|
|
:key => :campaign,
|
|
|
|
:name => :required
|
|
|
|
},
|
|
|
|
{
|
|
|
|
:key => :campaign,
|
|
|
|
:name => :is_a
|
|
|
|
},
|
|
|
|
{
|
|
|
|
:key => :campaign_gift_option_id,
|
|
|
|
:name => :required
|
|
|
|
},
|
|
|
|
{
|
|
|
|
:key => :campaign_gift_option_id,
|
|
|
|
:name => :is_integer
|
|
|
|
}
|
|
|
|
])
|
|
|
|
})
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'does cgo verification' do
|
|
|
|
expect { DeleteCampaignGiftOption.delete(campaign, 5555)}.to(raise_error{|error|
|
|
|
|
expect(error).to be_a ParamValidation::ValidationError
|
|
|
|
expect_validation_errors(error.data, [{:key => :campaign_gift_option_id}])
|
|
|
|
})
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'cgo deletion is rejected because a gift has already been sold' do
|
|
|
|
campaign_gift_option
|
|
|
|
campaign_gift
|
|
|
|
expect { DeleteCampaignGiftOption.delete(campaign, campaign_gift_option.id)}.to(raise_error{|error|
|
|
|
|
expect(error).to be_a ParamValidation::ValidationError
|
|
|
|
expect_validation_errors(error.data, [{:key => :campaign_gift_option_id}])
|
|
|
|
expect(error.message).to eq("#{campaign_gift_option.id} already has campaign gifts. It can't be deleted for safety reasons.")
|
|
|
|
|
|
|
|
expect(CampaignGiftOption.any?).to eq true
|
|
|
|
})
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'cgo deletion succeeds' do
|
|
|
|
Timecop.freeze(2020,10,12) do
|
|
|
|
campaign_gift_option
|
|
|
|
result = DeleteCampaignGiftOption.delete(campaign, campaign_gift_option.id)
|
|
|
|
expect(result).to be_a CampaignGiftOption
|
|
|
|
expect(result.attributes).to eq (campaign_gift_option.attributes)
|
|
|
|
expect(CampaignGiftOption.any?).to eq false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|