spec/models/project_services/slack_message_spec.rb (67 lines of code) (raw):

require 'spec_helper' describe SlackMessage do subject { described_class.new(commit) } let(:project) { FactoryGirl.create :project } context "One build" do let(:commit) { FactoryGirl.create(: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(: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