diff options
Diffstat (limited to 'spec/models/project_services/hip_chat_message_spec.rb')
-rw-r--r-- | spec/models/project_services/hip_chat_message_spec.rb | 98 |
1 files changed, 56 insertions, 42 deletions
diff --git a/spec/models/project_services/hip_chat_message_spec.rb b/spec/models/project_services/hip_chat_message_spec.rb index 6096b5c..d4bfb31 100644 --- a/spec/models/project_services/hip_chat_message_spec.rb +++ b/spec/models/project_services/hip_chat_message_spec.rb @@ -4,62 +4,76 @@ describe HipChatMessage do subject { HipChatMessage.new(build) } let(:project) { FactoryGirl.create(:project) } - let(:commit) { FactoryGirl.create(:commit, project: project) } - let(:job) { FactoryGirl.create(:job, project: project) } - let(:build) { FactoryGirl.create(:build, commit: commit, job: job, status: 'success') } - context 'when build succeeds' do - - before { build.save } - - it 'returns a successful message' do - expect( subject.status_color ).to eq 'green' - expect( subject.notify? ).to be_false - expect( subject.to_s ).to match(/Build '[^']+' #\d+/) - expect( subject.to_s ).to match(/Successful in \d+ second\(s\)\./) + context "One build" do + let(:commit) do + commit = FactoryGirl.create(:commit, project: project) + commit.push_data[:ci_yaml_file] = YAML.dump({jobs: ["ls"]}) + commit.save + commit end - end - context 'when build fails' do + let(:build) do + commit.create_builds + commit.builds.first + end - before do - build.status = 'failed' - build.save + context 'when build succeeds' do + it 'returns a successful message' do + build.update(status: "success") + + expect( subject.status_color ).to eq 'green' + expect( subject.notify? ).to be_false + expect( subject.to_s ).to match(/Build '[^']+' #\d+/) + expect( subject.to_s ).to match(/Successful in \d+ second\(s\)\./) + end end - it 'returns a failure message' do - expect( subject.status_color ).to eq 'red' - expect( subject.notify? ).to be_true - expect( subject.to_s ).to match(/Build '[^']+' #\d+/) - expect( subject.to_s ).to match(/Failed in \d+ second\(s\)\./) + context 'when build fails' do + it 'returns a failure message' do + build.update(status: "failed") + + expect( subject.status_color ).to eq 'red' + expect( subject.notify? ).to be_true + expect( subject.to_s ).to match(/Build '[^']+' #\d+/) + expect( subject.to_s ).to match(/Failed in \d+ second\(s\)\./) + end end end - context 'when all matrix builds succeed' do - let(:job2) { FactoryGirl.create(:job, project: project, name: 'Another Job') } - let(:build2) { FactoryGirl.create(:build, id: 10, commit: commit, job: job2, status: 'success') } - - before { build.save; build2.save } + context "Several builds" do + let(:commit) {commit = FactoryGirl.create(:commit, project: project)} - it 'returns a successful message' do - expect( subject.status_color ).to eq 'green' - expect( subject.notify? ).to be_false - expect( subject.to_s ).to match(/Commit #\d+/) - expect( subject.to_s ).to match(/Successful in \d+ second\(s\)\./) + let(:build) do + commit.builds.first end - end - context 'when at least one matrix build fails' do - let(:job2) { FactoryGirl.create(:job, project: project, name: 'Another Job') } - let(:build2) { FactoryGirl.create(:build, id: 10, commit: commit, job: job2, status: 'failed') } + context 'when all matrix builds succeed' do + it 'returns a successful message' do + commit.create_builds + commit.builds.update_all(status: "success") + commit.reload - before { build.save; build2.save } + expect( subject.status_color ).to eq 'green' + expect( subject.notify? ).to be_false + expect( subject.to_s ).to match(/Commit #\d+/) + expect( subject.to_s ).to match(/Successful in \d+ second\(s\)\./) + end + end - it 'returns a failure message' do - expect( subject.status_color ).to eq 'red' - expect( subject.notify? ).to be_true - expect( subject.to_s ).to match(/Commit #\d+/) - expect( subject.to_s ).to match(/Failed in \d+ second\(s\)\./) + context 'when at least one matrix build fails' do + it 'returns a failure message' do + commit.create_builds + first_build = commit.builds.first + second_build = commit.builds.last + first_build.update(status: "success") + second_build.update(status: "failed") + + expect( subject.status_color ).to eq 'red' + expect( subject.notify? ).to be_true + expect( subject.to_s ).to match(/Commit #\d+/) + expect( subject.to_s ).to match(/Failed in \d+ second\(s\)\./) + end end end end |