mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: Support uploading a csv with either user emails or usernames (#8971)
This commit is contained in:
3
spec/fixtures/csv/usernames.csv
vendored
Normal file
3
spec/fixtures/csv/usernames.csv
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
username1
|
||||
username2
|
||||
username3
|
||||
|
@@ -6,9 +6,10 @@ describe Jobs::MassAwardBadge do
|
||||
describe '#execute' do
|
||||
fab!(:badge) { Fabricate(:badge) }
|
||||
fab!(:user) { Fabricate(:user) }
|
||||
let(:email_mode) { 'email' }
|
||||
|
||||
it 'creates the badge for an existing user' do
|
||||
subject.execute(user_emails: [user.email], badge_id: badge.id)
|
||||
execute_job([user.email])
|
||||
|
||||
expect(UserBadge.where(user: user, badge: badge).exists?).to eq(true)
|
||||
end
|
||||
@@ -16,14 +17,14 @@ describe Jobs::MassAwardBadge do
|
||||
it 'works with multiple users' do
|
||||
user_2 = Fabricate(:user)
|
||||
|
||||
subject.execute(user_emails: [user.email, user_2.email], badge_id: badge.id)
|
||||
execute_job([user.email, user_2.email])
|
||||
|
||||
expect(UserBadge.exists?(user: user, badge: badge)).to eq(true)
|
||||
expect(UserBadge.exists?(user: user_2, badge: badge)).to eq(true)
|
||||
end
|
||||
|
||||
it 'also creates a notification for the user' do
|
||||
subject.execute(user_emails: [user.email], badge_id: badge.id)
|
||||
execute_job([user.email])
|
||||
|
||||
expect(Notification.exists?(user: user)).to eq(true)
|
||||
expect(UserBadge.where.not(notification_id: nil).exists?(user: user, badge: badge)).to eq(true)
|
||||
@@ -34,10 +35,14 @@ describe Jobs::MassAwardBadge do
|
||||
|
||||
UserBadge.create!(badge_id: Badge::Member, user: user, granted_by: Discourse.system_user, granted_at: Time.now)
|
||||
|
||||
subject.execute(user_emails: [user.email, user_2.email], badge_id: badge.id)
|
||||
execute_job([user.email, user_2.email])
|
||||
|
||||
expect(UserBadge.find_by(user: user, badge: badge).featured_rank).to eq(2)
|
||||
expect(UserBadge.find_by(user: user_2, badge: badge).featured_rank).to eq(1)
|
||||
end
|
||||
|
||||
def execute_job(emails)
|
||||
subject.execute(users_batch: emails, badge_id: badge.id, mode: 'email')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -199,7 +199,7 @@ describe Admin::BadgesController do
|
||||
expect(response.status).to eq(400)
|
||||
end
|
||||
|
||||
it 'creates the badge for an existing user' do
|
||||
it 'awards the badge using a list of user emails' do
|
||||
Jobs.run_immediately!
|
||||
|
||||
user = Fabricate(:user, email: 'user1@test.com')
|
||||
@@ -209,6 +209,17 @@ describe Admin::BadgesController do
|
||||
|
||||
expect(UserBadge.exists?(user: user, badge: badge)).to eq(true)
|
||||
end
|
||||
|
||||
it 'awards the badge using a list of usernames' do
|
||||
Jobs.run_immediately!
|
||||
|
||||
user = Fabricate(:user, username: 'username1')
|
||||
file = file_from_fixtures('usernames.csv', 'csv')
|
||||
|
||||
post "/admin/badges/award/#{badge.id}.json", params: { file: fixture_file_upload(file) }
|
||||
|
||||
expect(UserBadge.exists?(user: user, badge: badge)).to eq(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user