2014-03-05 18:22:20 +05:30
require 'spec_helper'
describe UserBadgesController do
let ( :user ) { Fabricate ( :user ) }
let ( :badge ) { Fabricate ( :badge ) }
context 'index' do
2014-04-16 16:04:27 +05:30
let! ( :user_badge ) { UserBadge . create ( badge : badge , user : user , granted_by : Discourse . system_user , granted_at : Time . now ) }
2014-03-05 18:22:20 +05:30
2014-04-16 20:26:11 +05:30
it 'requires username or badge_id to be specified' do
2014-03-05 18:22:20 +05:30
expect { xhr :get , :index } . to raise_error
end
2014-04-16 20:26:11 +05:30
it 'returns user_badges for a user' do
2014-03-05 18:22:20 +05:30
xhr :get , :index , username : user . username
response . status . should == 200
parsed = JSON . parse ( response . body )
parsed [ " user_badges " ] . length . should == 1
end
2014-04-16 20:26:11 +05:30
it 'returns user_badges for a badge' do
xhr :get , :index , badge_id : badge . id
response . status . should == 200
parsed = JSON . parse ( response . body )
parsed [ " user_badges " ] . length . should == 1
end
2014-03-05 18:22:20 +05:30
end
context 'create' do
it 'requires username to be specified' do
expect { xhr :post , :create , badge_id : badge . id } . to raise_error
end
it 'does not allow regular users to grant badges' do
log_in_user Fabricate ( :user )
xhr :post , :create , badge_id : badge . id , username : user . username
response . status . should == 403
end
it 'grants badges from staff' do
admin = Fabricate ( :admin )
log_in_user admin
2014-03-20 01:00:12 +05:30
StaffActionLogger . any_instance . expects ( :log_badge_grant ) . once
2014-03-05 18:22:20 +05:30
xhr :post , :create , badge_id : badge . id , username : user . username
response . status . should == 200
2014-05-06 14:41:59 +01:00
user_badge = UserBadge . find_by ( user : user , badge : badge )
2014-03-05 18:22:20 +05:30
user_badge . should be_present
user_badge . granted_by . should eq ( admin )
end
it 'does not grant badges from regular api calls' do
Fabricate ( :api_key , user : user )
xhr :post , :create , badge_id : badge . id , username : user . username , api_key : user . api_key . key
response . status . should == 403
end
it 'grants badges from master api calls' do
api_key = Fabricate ( :api_key )
2014-03-20 01:00:12 +05:30
StaffActionLogger . any_instance . expects ( :log_badge_grant ) . never
2014-03-05 18:22:20 +05:30
xhr :post , :create , badge_id : badge . id , username : user . username , api_key : api_key . key
response . status . should == 200
2014-05-06 14:41:59 +01:00
user_badge = UserBadge . find_by ( user : user , badge : badge )
2014-03-05 18:22:20 +05:30
user_badge . should be_present
user_badge . granted_by . should eq ( Discourse . system_user )
end
end
context 'destroy' do
2014-04-16 16:04:27 +05:30
let! ( :user_badge ) { UserBadge . create ( badge : badge , user : user , granted_by : Discourse . system_user , granted_at : Time . now ) }
2014-03-05 18:22:20 +05:30
it 'checks that the user is authorized to revoke a badge' do
2014-04-16 16:04:27 +05:30
xhr :delete , :destroy , id : user_badge . id
2014-03-05 18:22:20 +05:30
response . status . should == 403
end
it 'revokes the badge' do
log_in :admin
2014-03-20 01:00:12 +05:30
StaffActionLogger . any_instance . expects ( :log_badge_revoke ) . once
2014-04-16 16:04:27 +05:30
xhr :delete , :destroy , id : user_badge . id
2014-03-05 18:22:20 +05:30
response . status . should == 200
2014-05-06 14:41:59 +01:00
UserBadge . find_by ( id : user_badge . id ) . should be_nil
2014-03-05 18:22:20 +05:30
end
end
end