2017-05-08 13:38:14 +10:00
|
|
|
require 'rails_helper'
|
2017-05-04 17:23:41 +10:00
|
|
|
|
|
|
|
RSpec.describe Jobs::DonationUser, type: :job do
|
2017-05-08 14:37:19 +10:00
|
|
|
let(:args) { { email: 'captain-sensible@example.com', username: 'wot', name: 'captain', password: 'wot' } }
|
2017-05-08 13:38:14 +10:00
|
|
|
|
|
|
|
before do
|
|
|
|
SiteSetting.stubs(:enable_badges).returns(true)
|
|
|
|
end
|
2017-05-04 17:23:41 +10:00
|
|
|
|
2017-05-08 14:37:19 +10:00
|
|
|
it 'creates a new user with no rewards' do
|
|
|
|
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
|
2017-05-08 13:38:14 +10:00
|
|
|
end
|
|
|
|
|
|
|
|
describe 'rewards' do
|
2017-05-08 14:37:19 +10:00
|
|
|
let(:user) { Fabricate(:user) }
|
2017-05-08 13:38:14 +10:00
|
|
|
let(:badge) { Fabricate(:badge) }
|
2017-05-08 14:37:19 +10:00
|
|
|
let(:grp) { Fabricate(:group) }
|
2017-05-08 13:38:14 +10:00
|
|
|
|
2017-05-08 14:37:19 +10:00
|
|
|
before do
|
2017-05-08 13:38:14 +10:00
|
|
|
User.expects(:create!).returns(user)
|
2017-05-08 14:37:19 +10:00
|
|
|
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
|
2017-05-08 13:38:14 +10:00
|
|
|
end
|
2017-05-04 17:23:41 +10:00
|
|
|
end
|
|
|
|
end
|