From b2393cb2aaea63d5e450de28e067faf270eeb186 Mon Sep 17 00:00:00 2001 From: Rimian Perkins Date: Fri, 21 Apr 2017 10:26:43 +1000 Subject: [PATCH] add the current user to a group when the payment is successful --- .../discourse_donations/charges_controller.rb | 13 +++++++++++++ app/services/discourse_donations/rewards.rb | 14 ++++++++++++++ config/locales/server.en.yml | 4 ++-- config/settings.yml | 4 ++-- .../discourse_donations/rewards_spec.rb | 17 +++++++++++++++++ 5 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 app/services/discourse_donations/rewards.rb create mode 100644 spec/services/discourse_donations/rewards_spec.rb diff --git a/app/controllers/discourse_donations/charges_controller.rb b/app/controllers/discourse_donations/charges_controller.rb index c6e6962..8cb9f90 100644 --- a/app/controllers/discourse_donations/charges_controller.rb +++ b/app/controllers/discourse_donations/charges_controller.rb @@ -14,11 +14,24 @@ module DiscourseDonations response = {} end + if reward_user?(payment) + reward = DiscourseDonations::Rewards.new(current_user) + reward.add_to_group(SiteSetting.discourse_donations_reward_group) if add_to_group? + end + render :json => response end private + def reward_user?(payment) + payment.present? && payment.successful? && current_user.present? + end + + def add_to_group? + SiteSetting.discourse_donations_reward_group.present? + end + def secret_key SiteSetting.discourse_donations_secret_key end diff --git a/app/services/discourse_donations/rewards.rb b/app/services/discourse_donations/rewards.rb new file mode 100644 index 0000000..8e73448 --- /dev/null +++ b/app/services/discourse_donations/rewards.rb @@ -0,0 +1,14 @@ + + +module DiscourseDonations + class Rewards + def initialize(user) + @user = user + end + + def add_to_group(name) + group = ::Group.find_by_name(name) + group.add(@user) if group.present? + end + end +end diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 3ceec96..0209ebe 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -5,5 +5,5 @@ en: discourse_donations_public_key: Stripe Public Key discourse_donations_currency: Currency Code discourse_donations_hide_zip_code: Hide Zip Code - discourse_donations_grant_badge: Grant this badge to user when a payment is successful - discourse_donations_add_to_group: Add the user to this group when a payment is successful + discourse_donations_reward_badge: Grant this badge to user when a payment is successful + discourse_donations_reward_group: Add the user to this group when a payment is successful diff --git a/config/settings.yml b/config/settings.yml index 3bea51a..8051b6f 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -15,9 +15,9 @@ plugins: discourse_donations_hide_zip_code: default: true client: true - discourse_donations_grant_badge: + discourse_donations_reward_badge: client: false default: 'Donation' - discourse_donations_add_to_group: + discourse_donations_reward_group: client: false default: 'Donation' diff --git a/spec/services/discourse_donations/rewards_spec.rb b/spec/services/discourse_donations/rewards_spec.rb new file mode 100644 index 0000000..2155dc1 --- /dev/null +++ b/spec/services/discourse_donations/rewards_spec.rb @@ -0,0 +1,17 @@ +require 'rails_helper' + +module DiscourseDonations + RSpec.describe DiscourseDonations::Rewards do + let(:grp) { Fabricate(:group, name: 'w00t') } + let(:user) { Fabricate(:user) } + subject { described_class.new(user) } + + it 'adds the user to a group' do + Group.expects(:find_by_name).with(grp.name).returns(grp) + grp.expects(:add).with(user) + subject.add_to_group(grp.name) + end + + it 'grants the user a badge' + end +end