mirror of
https://github.com/discourse/discourse-subscriptions.git
synced 2025-07-07 15:02:23 +00:00
no name collisions
This commit is contained in:
parent
9ca0f09916
commit
e875b17be2
@ -3,8 +3,10 @@ module Jobs
|
|||||||
class DonationUser < ::Jobs::Base
|
class DonationUser < ::Jobs::Base
|
||||||
def execute(args)
|
def execute(args)
|
||||||
user = User.create!(args)
|
user = User.create!(args)
|
||||||
if args[:rewards].present?
|
rewards = DiscourseDonations::Rewards.new(user)
|
||||||
DiscourseDonations::Rewards.new(user).grant_badge(args[:rewards][:name])
|
args[:rewards].to_a.each do |reward|
|
||||||
|
rewards.grant_badge(reward[:name]) if reward[:type] == 'badge'
|
||||||
|
rewards.add_to_group(reward[:name]) if reward[:type] == 'group'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -21,6 +21,8 @@ module DiscourseDonations
|
|||||||
BadgeGranter.grant(badge, user)
|
BadgeGranter.grant(badge, user)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
def log_group_add(grp)
|
def log_group_add(grp)
|
||||||
system_user = User.find(-1)
|
system_user = User.find(-1)
|
||||||
GroupActionLogger.new(system_user, grp).log_add_user_to_group(user)
|
GroupActionLogger.new(system_user, grp).log_add_user_to_group(user)
|
||||||
|
@ -1,24 +1,56 @@
|
|||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe Jobs::DonationUser, type: :job do
|
RSpec.describe Jobs::DonationUser, type: :job do
|
||||||
let(:args) { { email: 'fsfs4@example.com', username: 'sxsomething', name: 'ssbrian', password: 'ssecret-yo' } }
|
let(:args) { { email: 'captain-sensible@example.com', username: 'wot', name: 'captain', password: 'wot' } }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
SiteSetting.stubs(:enable_badges).returns(true)
|
SiteSetting.stubs(:enable_badges).returns(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates a new user' do
|
it 'creates a new user with no rewards' do
|
||||||
expect{ subject.execute(args) }.to change{ User.count }.by(1)
|
aggregate_failures do
|
||||||
|
expect{ subject.execute(args) }.to change{ User.count }.by(1)
|
||||||
|
user = User.find_by_email(args[:email])
|
||||||
|
expect(user.badges).to be_empty
|
||||||
|
expect(user.groups).to be_empty
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'rewards' do
|
describe 'rewards' do
|
||||||
let(:user) { Fabricate(:user, args) }
|
let(:user) { Fabricate(:user) }
|
||||||
let(:badge) { Fabricate(:badge) }
|
let(:badge) { Fabricate(:badge) }
|
||||||
|
let(:grp) { Fabricate(:group) }
|
||||||
|
|
||||||
it 'has the badge' do
|
before do
|
||||||
User.expects(:create!).returns(user)
|
User.expects(:create!).returns(user)
|
||||||
subject.execute(args.merge(rewards: { type: 'badge', name: badge.name }))
|
end
|
||||||
expect(user.badges).to include(badge)
|
|
||||||
|
it 'grants the user a badge' do
|
||||||
|
subject.execute(args.merge(rewards: [{ type: 'badge', name: badge.name }]))
|
||||||
|
aggregate_failures do
|
||||||
|
expect(user.badges).to include(badge)
|
||||||
|
expect(user.groups).to be_empty
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'adds the user to the group' do
|
||||||
|
subject.execute(args.merge(rewards: [{ type: 'group', name: grp.name }]))
|
||||||
|
aggregate_failures do
|
||||||
|
expect(user.badges).to be_empty
|
||||||
|
expect(user.groups).to include(grp)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'has no collisions in badges' do
|
||||||
|
Fabricate(:badge, name: 'weiner_schitzel')
|
||||||
|
subject.execute(args.merge(rewards: [{ type: 'group', name: 'weiner_schitzel' }]))
|
||||||
|
expect(user.badges).to be_empty
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'has no collisions in groups' do
|
||||||
|
Fabricate(:group, name: 'dude_ranch')
|
||||||
|
subject.execute(args.merge(rewards: [{ type: 'badge', name: 'dude_ranch' }]))
|
||||||
|
expect(user.groups).to be_empty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user