191 lines
6.2 KiB
Ruby
191 lines
6.2 KiB
Ruby
# == Schema Information
|
|
#
|
|
# Table name: services
|
|
#
|
|
# id :integer not null, primary key
|
|
# type :string(255)
|
|
# title :string(255)
|
|
# project_id :integer not null
|
|
# created_at :datetime
|
|
# updated_at :datetime
|
|
# active :boolean default(FALSE), not null
|
|
# properties :text
|
|
#
|
|
|
|
require 'spec_helper'
|
|
|
|
describe Ci::MailService do
|
|
describe "Associations" do
|
|
it { is_expected.to belong_to :project }
|
|
end
|
|
|
|
describe "Validations" do
|
|
context "active" do
|
|
before do
|
|
subject.active = true
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'Sends email for' do
|
|
let(:mail) { Ci::MailService.new }
|
|
let(:user) { User.new(notification_email: 'git@example.com')}
|
|
|
|
describe 'failed build' do
|
|
let(:project) { FactoryGirl.create(:ci_project, email_add_pusher: true) }
|
|
let(:gl_project) { FactoryGirl.create(:empty_project, gitlab_ci_project: project) }
|
|
let(:commit) { FactoryGirl.create(:ci_commit, gl_project: gl_project) }
|
|
let(:build) { FactoryGirl.create(:ci_build, status: 'failed', commit: commit, user: user) }
|
|
|
|
before do
|
|
allow(mail).to receive_messages(
|
|
project: project
|
|
)
|
|
end
|
|
|
|
it do
|
|
should_email("git@example.com")
|
|
mail.execute(build)
|
|
end
|
|
|
|
def should_email(email)
|
|
expect(Ci::Notify).to receive(:build_fail_email).with(build.id, email)
|
|
expect(Ci::Notify).not_to receive(:build_success_email).with(build.id, email)
|
|
end
|
|
end
|
|
|
|
describe 'successfull build' do
|
|
let(:project) { FactoryGirl.create(:ci_project, email_add_pusher: true, email_only_broken_builds: false) }
|
|
let(:gl_project) { FactoryGirl.create(:empty_project, gitlab_ci_project: project) }
|
|
let(:commit) { FactoryGirl.create(:ci_commit, gl_project: gl_project) }
|
|
let(:build) { FactoryGirl.create(:ci_build, status: 'success', commit: commit, user: user) }
|
|
|
|
before do
|
|
allow(mail).to receive_messages(
|
|
project: project
|
|
)
|
|
end
|
|
|
|
it do
|
|
should_email("git@example.com")
|
|
mail.execute(build)
|
|
end
|
|
|
|
def should_email(email)
|
|
expect(Ci::Notify).to receive(:build_success_email).with(build.id, email)
|
|
expect(Ci::Notify).not_to receive(:build_fail_email).with(build.id, email)
|
|
end
|
|
end
|
|
|
|
describe 'successfull build and project has email_recipients' do
|
|
let(:project) do
|
|
FactoryGirl.create(:ci_project,
|
|
email_add_pusher: true,
|
|
email_only_broken_builds: false,
|
|
email_recipients: "jeroen@example.com")
|
|
end
|
|
let(:gl_project) { FactoryGirl.create(:empty_project, gitlab_ci_project: project) }
|
|
let(:commit) { FactoryGirl.create(:ci_commit, gl_project: gl_project) }
|
|
let(:build) { FactoryGirl.create(:ci_build, status: 'success', commit: commit, user: user) }
|
|
|
|
before do
|
|
allow(mail).to receive_messages(
|
|
project: project
|
|
)
|
|
end
|
|
|
|
it do
|
|
should_email("git@example.com")
|
|
should_email("jeroen@example.com")
|
|
mail.execute(build)
|
|
end
|
|
|
|
def should_email(email)
|
|
expect(Ci::Notify).to receive(:build_success_email).with(build.id, email)
|
|
expect(Ci::Notify).not_to receive(:build_fail_email).with(build.id, email)
|
|
end
|
|
end
|
|
|
|
describe 'successful build and notify only broken builds' do
|
|
let(:project) do
|
|
FactoryGirl.create(:ci_project,
|
|
email_add_pusher: true,
|
|
email_only_broken_builds: true,
|
|
email_recipients: "jeroen@example.com")
|
|
end
|
|
let(:gl_project) { FactoryGirl.create(:empty_project, gitlab_ci_project: project) }
|
|
let(:commit) { FactoryGirl.create(:ci_commit, gl_project: gl_project) }
|
|
let(:build) { FactoryGirl.create(:ci_build, status: 'success', commit: commit, user: user) }
|
|
|
|
before do
|
|
allow(mail).to receive_messages(
|
|
project: project
|
|
)
|
|
end
|
|
|
|
it do
|
|
should_email(commit.git_author_email)
|
|
should_email("jeroen@example.com")
|
|
mail.execute(build) if mail.can_execute?(build)
|
|
end
|
|
|
|
def should_email(email)
|
|
expect(Ci::Notify).not_to receive(:build_success_email).with(build.id, email)
|
|
expect(Ci::Notify).not_to receive(:build_fail_email).with(build.id, email)
|
|
end
|
|
end
|
|
|
|
describe 'successful build and can test service' do
|
|
let(:project) do
|
|
FactoryGirl.create(:ci_project,
|
|
email_add_pusher: true,
|
|
email_only_broken_builds: false,
|
|
email_recipients: "jeroen@example.com")
|
|
end
|
|
let(:gl_project) { FactoryGirl.create(:empty_project, gitlab_ci_project: project) }
|
|
let(:commit) { FactoryGirl.create(:ci_commit, gl_project: gl_project) }
|
|
let(:build) { FactoryGirl.create(:ci_build, status: 'success', commit: commit, user: user) }
|
|
|
|
before do
|
|
allow(mail).to receive_messages(
|
|
project: project
|
|
)
|
|
build
|
|
end
|
|
|
|
it do
|
|
expect(mail.can_test?).to eq(true)
|
|
end
|
|
end
|
|
|
|
describe 'retried build should not receive email' do
|
|
let(:project) do
|
|
FactoryGirl.create(:ci_project,
|
|
email_add_pusher: true,
|
|
email_only_broken_builds: true,
|
|
email_recipients: "jeroen@example.com")
|
|
end
|
|
let(:gl_project) { FactoryGirl.create(:empty_project, gitlab_ci_project: project) }
|
|
let(:commit) { FactoryGirl.create(:ci_commit, gl_project: gl_project) }
|
|
let(:build) { FactoryGirl.create(:ci_build, status: 'failed', commit: commit, user: user) }
|
|
|
|
before do
|
|
allow(mail).to receive_messages(
|
|
project: project
|
|
)
|
|
end
|
|
|
|
it do
|
|
Ci::Build.retry(build)
|
|
should_email(commit.git_author_email)
|
|
should_email("jeroen@example.com")
|
|
mail.execute(build) if mail.can_execute?(build)
|
|
end
|
|
|
|
def should_email(email)
|
|
expect(Ci::Notify).not_to receive(:build_success_email).with(build.id, email)
|
|
expect(Ci::Notify).not_to receive(:build_fail_email).with(build.id, email)
|
|
end
|
|
end
|
|
end
|
|
end
|