diff --git a/app/jobs/regular/donation_user.rb b/app/jobs/regular/donation_user.rb index 81a5276..d96b750 100644 --- a/app/jobs/regular/donation_user.rb +++ b/app/jobs/regular/donation_user.rb @@ -2,7 +2,7 @@ module Jobs class DonationUser < ::Jobs::Base def execute(args) - user = User.create!(args) + user = User.create!(args.slice(:username, :password, :name, :email)) rewards = DiscourseDonations::Rewards.new(user) args[:rewards].to_a.each do |reward| rewards.grant_badge(reward[:name]) if reward[:type] == 'badge' diff --git a/spec/jobs/regular/donation_user_spec.rb b/spec/jobs/regular/donation_user_spec.rb index 573cb9c..9d0de86 100644 --- a/spec/jobs/regular/donation_user_spec.rb +++ b/spec/jobs/regular/donation_user_spec.rb @@ -17,40 +17,49 @@ RSpec.describe Jobs::DonationUser, type: :job do end describe 'rewards' do - let(:user) { Fabricate(:user) } - let(:badge) { Fabricate(:badge) } - let(:grp) { Fabricate(:group) } - - before do - User.expects(:create!).returns(user) + describe 'create user with rewards' do + it 'creates a User object without rewards' do + User.expects(:create!).with(args) + subject.execute(args.merge(rewards: [], otherthing: nil)) + end end - 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) + describe 'User rewards' do + let(:user) { Fabricate(:user) } + let(:badge) { Fabricate(:badge) } + let(:grp) { Fabricate(:group) } + + before do + User.stubs(:create!).returns(user) + end + + 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 - - 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