85 lines
2.7 KiB
Ruby
85 lines
2.7 KiB
Ruby
|
require 'spec_helper'
|
||
|
|
||
|
describe Ci::SlackMessage do
|
||
|
subject { Ci::SlackMessage.new(commit) }
|
||
|
|
||
|
let(:project) { FactoryGirl.create :ci_project }
|
||
|
|
||
|
context "One build" do
|
||
|
let(:commit) { FactoryGirl.create(:ci_commit_with_one_job, project: project) }
|
||
|
|
||
|
let(:build) do
|
||
|
commit.create_builds
|
||
|
commit.builds.first
|
||
|
end
|
||
|
|
||
|
context 'when build succeeded' do
|
||
|
let(:color) { 'good' }
|
||
|
|
||
|
it 'returns a message with succeeded build' do
|
||
|
build.update(status: "success")
|
||
|
|
||
|
expect(subject.color).to eq(color)
|
||
|
expect(subject.fallback).to include('Build')
|
||
|
expect(subject.fallback).to include("\##{build.id}")
|
||
|
expect(subject.fallback).to include('succeeded')
|
||
|
expect(subject.attachments.first[:fields]).to be_empty
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when build failed' do
|
||
|
let(:color) { 'danger' }
|
||
|
|
||
|
it 'returns a message with failed build' do
|
||
|
build.update(status: "failed")
|
||
|
|
||
|
expect(subject.color).to eq(color)
|
||
|
expect(subject.fallback).to include('Build')
|
||
|
expect(subject.fallback).to include("\##{build.id}")
|
||
|
expect(subject.fallback).to include('failed')
|
||
|
expect(subject.attachments.first[:fields]).to be_empty
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context "Several builds" do
|
||
|
let(:commit) { FactoryGirl.create(:ci_commit_with_two_jobs, project: project) }
|
||
|
|
||
|
context 'when all matrix builds succeeded' do
|
||
|
let(:color) { 'good' }
|
||
|
|
||
|
it 'returns a message with success' do
|
||
|
commit.create_builds
|
||
|
commit.builds.update_all(status: "success")
|
||
|
commit.reload
|
||
|
|
||
|
expect(subject.color).to eq(color)
|
||
|
expect(subject.fallback).to include('Commit')
|
||
|
expect(subject.fallback).to include("\##{commit.id}")
|
||
|
expect(subject.fallback).to include('succeeded')
|
||
|
expect(subject.attachments.first[:fields]).to be_empty
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when one of matrix builds failed' do
|
||
|
let(:color) { 'danger' }
|
||
|
|
||
|
it 'returns a message with information about failed build' 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.color).to eq(color)
|
||
|
expect(subject.fallback).to include('Commit')
|
||
|
expect(subject.fallback).to include("\##{commit.id}")
|
||
|
expect(subject.fallback).to include('failed')
|
||
|
expect(subject.attachments.first[:fields].size).to eq(1)
|
||
|
expect(subject.attachments.first[:fields].first[:title]).to eq(second_build.name)
|
||
|
expect(subject.attachments.first[:fields].first[:value]).to include("\##{second_build.id}")
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|