
- Re-factor - Remove code for notifications - Remove addons - Remove travis-core gem. - Ignore logs directory only - Move core tests to spec/lib
89 lines
2.8 KiB
Ruby
89 lines
2.8 KiB
Ruby
describe Travis::Services::FindAdmin do
|
|
include Travis::Testing::Stubs
|
|
|
|
describe 'find' do
|
|
let(:result) { described_class.new(nil, repository: repository).run }
|
|
|
|
before :each do
|
|
User.stubs(:with_permissions).with(:repository_id => repository.id, :admin => true).returns [user]
|
|
end
|
|
|
|
describe 'given a user has admin access to a repository (as seen by github)' do
|
|
before :each do
|
|
GH.stubs(:[]).with("repos/#{repository.slug}").returns('permissions' => { 'admin' => true })
|
|
end
|
|
|
|
it 'returns that user' do
|
|
result.should == user
|
|
end
|
|
end
|
|
|
|
describe 'given a user does not have access to a repository' do
|
|
before :each do
|
|
GH.stubs(:[]).with("repos/#{repository.slug}").returns('permissions' => { 'admin' => false })
|
|
user.stubs(:update_attributes!)
|
|
end
|
|
|
|
xit 'raises an exception' do
|
|
lambda { result }.should raise_error(Travis::AdminMissing, 'no admin available for svenfuchs/minimal')
|
|
end
|
|
|
|
xit 'revokes admin permissions for that user on our side' do
|
|
user.expects(:update_attributes!).with(:permissions => { 'admin' => false })
|
|
ignore_exception { result }
|
|
end
|
|
end
|
|
|
|
describe 'given an error occurs while retrieving the repository info' do
|
|
let(:error) { stub('error', :backtrace => [], :response => stub('reponse')) }
|
|
|
|
before :each do
|
|
GH.stubs(:[]).with("repos/#{repository.slug}").raises(GH::Error.new(error))
|
|
end
|
|
|
|
xit 'raises an exception' do
|
|
lambda { result }.should raise_error(Travis::AdminMissing, 'no admin available for svenfuchs/minimal')
|
|
end
|
|
|
|
it 'does not revoke permissions' do
|
|
user.expects(:update_permissions!).never
|
|
ignore_exception { result }
|
|
end
|
|
end
|
|
|
|
describe 'missing repository' do
|
|
it 'raises Travis::RepositoryMissing' do
|
|
expect { described_class.new.run }.to raise_error(Travis::RepositoryMissing)
|
|
end
|
|
end
|
|
|
|
def ignore_exception(&block)
|
|
block.call
|
|
rescue Travis::AdminMissing
|
|
end
|
|
end
|
|
end
|
|
|
|
describe Travis::Services::FindAdmin::Instrument do
|
|
include Travis::Testing::Stubs
|
|
|
|
let(:publisher) { Travis::Notification::Publisher::Memory.new }
|
|
let(:event) { publisher.events[1] }
|
|
let(:service) { Travis::Services::FindAdmin.new(nil, repository: repository) }
|
|
|
|
before :each do
|
|
Travis::Notification.publishers.replace([publisher])
|
|
User.stubs(:with_permissions).with(repository_id: repository.id, admin: true).returns [user]
|
|
GH.stubs(:[]).with("repos/#{repository.slug}").returns('permissions' => { 'admin' => true })
|
|
service.run
|
|
end
|
|
|
|
it 'publishes a event' do
|
|
event.should publish_instrumentation_event(
|
|
event: 'travis.services.find_admin.run:completed',
|
|
message: 'Travis::Services::FindAdmin#run:completed for svenfuchs/minimal: svenfuchs',
|
|
result: user,
|
|
)
|
|
end
|
|
end
|