Update Campaign creation to use jbuilder

This commit is contained in:
Eric 2020-05-21 13:52:24 -05:00
parent 6156e67d46
commit 26be1858d3
5 changed files with 45 additions and 19 deletions

View file

@ -60,7 +60,13 @@ class CampaignsController < ApplicationController
end end
def create def create
render json: CreateCampaign.create(params, current_nonprofit) @campaign = CreateCampaign.create(params, current_nonprofit)
if (@campaign.errors.empty?)
render 'campaigns/create', campaign: @campaign
else
render json: { errors: @campaign.errors.messages }.as_json
end
end end
def update def update

View file

@ -0,0 +1,25 @@
# frozen_string_literal: true
# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
json.extract! campaign, :id, :name, #basics
:nonprofit_id, :profile_id, :parent_campaign_id # references
:reason_for_supporting, :default_reason_for_supporting,
:published, :deleted
json.url campaign_url(nonprofit)
if campaign.main_image.attached?
json.main_image do
json.full url_for(campaign.main_image)
json.normal url_for(campaign.main_image_by_size(:normal))
json.thumb url_for(campaign.main_image_by_size(:thumb))
end
end
if campaign.background_image.attached?
json.background_image do
json.full url_for(campaign.background_image)
json.normal url_for(campaign.background_image_by_size(:normal))
end
end

View file

@ -12,11 +12,7 @@ module CreateCampaign
if !params[:campaign][:parent_campaign_id] if !params[:campaign][:parent_campaign_id]
campaign = nonprofit.campaigns.create params[:campaign] campaign = nonprofit.campaigns.create params[:campaign]
return campaign
return { errors: campaign.errors.messages }.as_json unless campaign.errors.empty?
return campaign.as_json
# json_saved campaign, 'Campaign created! Well done.'
else else
profile_id = params[:campaign][:profile_id] profile_id = params[:campaign][:profile_id]
Profile.find(profile_id).update params[:profile] Profile.find(profile_id).update params[:profile]

View file

@ -39,8 +39,6 @@ module CreatePeerToPeerCampaign
AWS::S3::Errors::NoSuchKey AWS::S3::Errors::NoSuchKey
end end
return { errors: campaign.errors.messages }.as_json unless campaign.errors.empty? campaign
campaign.as_json['campaign']
end end
end end

View file

@ -9,12 +9,12 @@ describe CreatePeerToPeerCampaign do
let!(:parent_campaign) { force_create(:campaign, name: 'Parent campaign', nonprofit: force_create(:nm_justice)) } let!(:parent_campaign) { force_create(:campaign, name: 'Parent campaign', nonprofit: force_create(:nm_justice)) }
context 'on success' do context 'on success' do
it 'returns a hash' do it 'returns a campaign' do
campaign_params = { name: 'Child campaign', parent_campaign_id: parent_campaign.id, goal_amount_dollars: '1000' } campaign_params = { name: 'Child campaign', parent_campaign_id: parent_campaign.id, goal_amount_dollars: '1000' }
Timecop.freeze(2020, 4, 5) do Timecop.freeze(2020, 4, 5) do
result = CreatePeerToPeerCampaign.create(campaign_params, profile.id) result = CreatePeerToPeerCampaign.create(campaign_params, profile.id)
expect(result).to be_kind_of Hash expect(result).to be_kind_of Campaign
end end
end end
@ -23,9 +23,10 @@ describe CreatePeerToPeerCampaign do
Timecop.freeze(2020, 4, 5) do Timecop.freeze(2020, 4, 5) do
result = CreatePeerToPeerCampaign.create(campaign_params, profile.id) result = CreatePeerToPeerCampaign.create(campaign_params, profile.id)
expect(result).not_to include 'errors' expect(result).to be_kind_of Campaign
expect(result['parent_campaign_id']).to eq parent_campaign.id expect(result.errors.empty?).to be true
expect(result['created_at']).to eq 'Sun, 05 Apr 2020 00:00:00 UTC +00:00' expect(result.parent_campaign_id).to eq parent_campaign.id
expect(result.created_at).to eq 'Sun, 05 Apr 2020 00:00:00 UTC +00:00'
end end
end end
@ -34,8 +35,8 @@ describe CreatePeerToPeerCampaign do
Timecop.freeze(2020, 4, 5) do Timecop.freeze(2020, 4, 5) do
result = CreatePeerToPeerCampaign.create(campaign_params, profile.id) result = CreatePeerToPeerCampaign.create(campaign_params, profile.id)
expect(result).not_to include 'errors' expect(result.errors.empty?).to be true
expect(result['slug']).to eq 'child-campaign_000' expect(result.slug).to eq 'child-campaign_000'
end end
end end
@ -63,9 +64,9 @@ describe CreatePeerToPeerCampaign do
Timecop.freeze(2020, 4, 5) do Timecop.freeze(2020, 4, 5) do
result = CreatePeerToPeerCampaign.create(campaign_params, profile.id) result = CreatePeerToPeerCampaign.create(campaign_params, profile.id)
expect(result).to be_kind_of Hash expect(result).to be_kind_of Campaign
expect(result).to include 'errors' expect(result.errors.empty?).to be false
expect(result['errors']['goal_amount']).to match ["can't be blank", 'is not a number'] expect(result.errors['goal_amount']).to match ["can't be blank", 'is not a number']
end end
end end