diff options
Diffstat (limited to 'spec/models/project_services/bamboo_service_spec.rb')
-rw-r--r-- | spec/models/project_services/bamboo_service_spec.rb | 167 |
1 files changed, 164 insertions, 3 deletions
diff --git a/spec/models/project_services/bamboo_service_spec.rb b/spec/models/project_services/bamboo_service_spec.rb index c34b2487ecf..54b0f9d23c5 100644 --- a/spec/models/project_services/bamboo_service_spec.rb +++ b/spec/models/project_services/bamboo_service_spec.rb @@ -41,13 +41,13 @@ describe BambooService, models: true do } ) end - + it "reset password if url changed" do @bamboo_service.bamboo_url = 'http://gitlab1.com' @bamboo_service.save expect(@bamboo_service.password).to be_nil end - + it "does not reset password if username changed" do @bamboo_service.username = "some_name" @bamboo_service.save @@ -69,7 +69,7 @@ describe BambooService, models: true do expect(@bamboo_service.password).to be_nil end end - + context "when no password was previously set" do before do @bamboo_service = BambooService.create( @@ -88,7 +88,168 @@ describe BambooService, models: true do expect(@bamboo_service.password).to eq("password") expect(@bamboo_service.bamboo_url).to eq("http://gitlab_edited.com") end + end + end + + module BambooServiceSpec + Response = Struct.new(:code, :data) do + def [](key) + data[key] + end + end + end + + describe '#build_info' do + let(:bamboo_url) { 'http://gitlab.com' } + let(:response) { BambooServiceSpec::Response.new(200, {}) } + subject do + BambooService.create( + project: create(:project), + properties: { + bamboo_url: bamboo_url, + username: 'mic', + password: 'password' + }) + end + before { allow(HTTParty).to receive(:get).and_return(response) } + + context 'when username and password are blank' do + subject do + BambooService.create( + project: create(:project), + properties: { + bamboo_url: bamboo_url + }) + end + + it { expect(subject.build_info('123')).to eq(response) } + end + + context 'when bamboo_url has no trailing slash' do + it { expect(subject.build_info('123')).to eq(response) } + end + + context 'when bamboo_url has a trailing slash' do + let(:bamboo_url) { 'http://gitlab.com/' } + + it { expect(subject.build_info('123')).to eq(response) } + end + end + + describe '#build_page' do + let(:bamboo_url) { 'http://gitlab.com' } + let(:response_code) { 200 } + let(:response) do + BambooServiceSpec::Response.new(response_code, { + 'results' => { + 'results' => { 'result' => { 'planResultKey' => { 'key' => '42' } } } + } + }) + end + subject do + BambooService.create( + project: create(:project), + properties: { + bamboo_url: bamboo_url, + username: 'mic', + password: 'password', + build_key: 'foo' + }) + end + before { allow(HTTParty).to receive(:get).and_return(response) } + + context 'when bamboo_url has no trailing slash' do + it { expect(subject.build_page('123', 'unused')).to eq('http://gitlab.com/browse/42') } + end + + context 'when bamboo_url has a trailing slash' do + let(:bamboo_url) { 'http://gitlab.com/' } + + it { expect(subject.build_page('123', 'unused')).to eq('http://gitlab.com/browse/42') } + end + + context 'when response code is not 200' do + let(:response_code) { 500 } + + it { expect(subject.build_page('123', 'unused')).to eq('http://gitlab.com/browse/foo') } + end + + context 'when response returns no result' do + let(:response) do + BambooServiceSpec::Response.new(response_code, { + 'results' => { 'results' => { 'size' => '0' } } + }) + end + + it { expect(subject.build_page('123', 'unused')).to eq('http://gitlab.com/browse/foo') } + end + end + + describe '#commit_status' do + let(:bamboo_url) { 'http://gitlab.com' } + let(:response_code) { 200 } + let(:build_state) { 'YAY Success!' } + let(:response) do + BambooServiceSpec::Response.new(response_code, { + 'results' => { 'results' => { 'result' => { 'buildState' => build_state } } } + }) + end + subject do + BambooService.create( + project: create(:project), + properties: { + bamboo_url: bamboo_url, + username: 'mic', + password: 'password', + build_type: 'foo' + }) + end + before { allow(HTTParty).to receive(:get).and_return(response) } + + context 'when response code is not 200' do + let(:response_code) { 500 } + + it { expect(subject.commit_status('123', 'unused')).to eq(:error) } + end + + context 'when response has no results' do + let(:response) do + BambooServiceSpec::Response.new(response_code, { + 'results' => { 'results' => { 'size' => '0' } } + }) + end + it { expect(subject.commit_status('123', 'unused')).to eq(:pending) } + end + + context 'when response code is 404' do + let(:response_code) { 404 } + + it { expect(subject.commit_status('123', 'unused')).to eq(:pending) } + end + + context 'when response code is 200' do + context 'when build status contains Success' do + it { expect(subject.commit_status('123', 'unused')).to eq(:success) } + end + + context 'when build status contains Failed' do + let(:build_state) { 'NO Failed!' } + + it { expect(subject.commit_status('123', 'unused')).to eq(:failed) } + end + + context 'when build status contains Failed' do + let(:build_state) { 'NO Pending!' } + + it { expect(subject.commit_status('123', 'unused')).to eq(:pending) } + end + + context 'when build status contains anything else' do + let(:build_state) { 'FOO BAR!' } + + it { expect(subject.commit_status('123', 'unused')).to eq(:error) } + end end end end |