diff --git a/app/controllers/discourse_donations/charges_controller.rb b/app/controllers/discourse_donations/charges_controller.rb index 27433f9..fc3e1cf 100644 --- a/app/controllers/discourse_donations/charges_controller.rb +++ b/app/controllers/discourse_donations/charges_controller.rb @@ -1,4 +1,5 @@ require_dependency 'discourse' +require_relative '../../jobs/award_group' module DiscourseDonations class ChargesController < ActionController::Base @@ -16,7 +17,7 @@ module DiscourseDonations response['rewards'] = [] - if reward_user?(payment) + if reward_current_user?(payment) reward = DiscourseDonations::Rewards.new(current_user) if reward.add_to_group(group_name) response['rewards'] << { type: :group, name: group_name } @@ -24,6 +25,10 @@ module DiscourseDonations if reward.grant_badge(badge_name) response['rewards'] << { type: :badge, name: badge_name } end + else + if group_name.present? + Jobs.enqueue_in(1.minute, :award_group, email: email) + end end render :json => response @@ -31,8 +36,8 @@ module DiscourseDonations private - def reward_user?(payment) - payment.present? && payment.successful? + def reward_current_user?(payment) + current_user.present? && payment.present? && payment.successful? end def group_name diff --git a/app/jobs/award_group.rb b/app/jobs/award_group.rb new file mode 100644 index 0000000..0996eff --- /dev/null +++ b/app/jobs/award_group.rb @@ -0,0 +1,9 @@ +# Discourse forces the namespace at top level :( + +module Jobs + class AwardGroup + def perform(args) + puts '======================The Job was performed===========================' + end + end +end diff --git a/app/services/discourse_donations/rewards.rb b/app/services/discourse_donations/rewards.rb index a901dd3..b50e3bf 100644 --- a/app/services/discourse_donations/rewards.rb +++ b/app/services/discourse_donations/rewards.rb @@ -1,5 +1,4 @@ - module DiscourseDonations class Rewards attr_reader :user diff --git a/spec/controllers/discourse_donations/charges_controller_spec.rb b/spec/controllers/discourse_donations/charges_controller_spec.rb index 809513c..2ba0d01 100644 --- a/spec/controllers/discourse_donations/charges_controller_spec.rb +++ b/spec/controllers/discourse_donations/charges_controller_spec.rb @@ -40,21 +40,21 @@ module DiscourseDonations Fabricate(:badge, name: badge_name) end - shared_examples 'it has no rewards' do - it 'rewards are empty' do - stripe.expects(:create).returns({ outcome: { seller_message: 'bummer' } }) - post :create - expect(response_rewards).to be_empty - end - end describe 'new user' do let(:params) { { email: 'new-user@example.com' } } - it_behaves_like 'it has no rewards' + it 'has no rewards' do + post :create + expect(response_rewards).to be_empty + end - it 'awards a group' - it 'awards a badge' + it 'enqueues add to group' do + Jobs.expects(:enqueue_in).with(1.minute, :award_group, email: params[:email]) + post :create, params + end + + it 'enqueues awarding a badge' end describe 'logged in user' do @@ -62,7 +62,11 @@ module DiscourseDonations log_in :coding_horror end - it_behaves_like 'it has no rewards' + it 'has no rewards' do + stripe.expects(:create).returns({ outcome: { seller_message: 'bummer' } }) + post :create + expect(response_rewards).to be_empty + end it 'awards a group' do post :create