Skip to content
Snippets Groups Projects
Commit 2e9d5358 authored by Felipe Artur's avatar Felipe Artur
Browse files

Allow build email service to be tested

parent 2d96c66d
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -24,6 +24,7 @@ v 8.10.0 (unreleased)
- Add a new column `artifacts_size` to table `ci_builds` !4964
- Let Workhorse serve format-patch diffs
- Display tooltip for mentioned users and groups !5261 (winniehell)
- Allow build email service to be tested
- Added day name to contribution calendar tooltips
- Make images fit to the size of the viewport !4810
- Fix check for New Branch button on Issue page !4630 (winniehell)
Loading
Loading
Loading
Loading
@@ -45,8 +45,9 @@ class Projects::ServicesController < Projects::ApplicationController
end
 
def test
data = Gitlab::PushDataBuilder.build_sample(project, current_user)
data = @service.test_data(project, current_user)
outcome = @service.test(data)
if outcome[:success]
message = { notice: 'We sent a request to the provided URL' }
else
Loading
Loading
Loading
Loading
@@ -6,6 +6,7 @@ module Emails
 
add_project_headers
add_build_headers('failed')
mail(to: to, subject: subject("Build failed for #{@project.name}", @build.short_sha))
end
 
Loading
Loading
Loading
Loading
@@ -42,6 +42,19 @@ class BuildsEmailService < Service
end
end
 
def can_test?
project.builds.count > 0
end
def disabled_title
"Please setup a build on your repository."
end
def test_data(project = nil, user = nil)
build = project.builds.last
Gitlab::BuildDataBuilder.build(build)
end
def fields
[
{ type: 'textarea', name: 'recipients', placeholder: 'Emails separated by comma' },
Loading
Loading
@@ -50,6 +63,20 @@ class BuildsEmailService < Service
]
end
 
def test(data)
begin
# bypass build status verification when testing
data[:build_status] = "failed"
data[:build_allow_failure] = false
result = execute(data)
rescue StandardError => error
return { success: false, result: error }
end
{ success: true, result: result }
end
def should_build_be_notified?(data)
case data[:build_status]
when 'success'
Loading
Loading
Loading
Loading
@@ -76,6 +76,10 @@ class Service < ActiveRecord::Base
[]
end
 
def test_data(project, user)
Gitlab::PushDataBuilder.build_sample(project, user)
end
def supported_events
%w(push tag_push issue merge_request wiki_page)
end
Loading
Loading
@@ -94,6 +98,11 @@ class Service < ActiveRecord::Base
!project.empty_repo?
end
 
# reason why service cannot be tested
def disabled_title
"Please setup a project repository."
end
# Provide convenient accessor methods
# for each serialized property.
# Also keep track of updated properties in a similar way as ActiveModel::Dirty
Loading
Loading
Loading
Loading
@@ -12,5 +12,5 @@
&nbsp;
- if @service.valid? && @service.activated?
- disabled = @service.can_test? ? '':'disabled'
= link_to 'Test settings', test_namespace_project_service_path(@project.namespace, @project, @service.to_param), class: "btn #{disabled}"
= link_to 'Test settings', test_namespace_project_service_path(@project.namespace, @project, @service), class: "btn #{disabled}", title: @service.disabled_title
= link_to "Cancel", namespace_project_services_path(@project.namespace, @project), class: "btn btn-cancel"
Loading
Loading
@@ -23,6 +23,44 @@ describe BuildsEmailService do
end
end
 
describe '#test_data' do
let(:build) { create(:ci_build) }
let(:project) { build.project }
let(:user) { create(:user) }
before { project.team << [user, :developer] }
it 'builds test data' do
data = subject.test_data(project)
expect(data[:object_kind]).to eq("build")
end
end
describe '#test' do
it 'sends email' do
data = Gitlab::BuildDataBuilder.build(create(:ci_build))
subject.recipients = 'test@gitlab.com'
expect(BuildEmailWorker).to receive(:perform_async)
subject.test(data)
end
context 'notify only failed builds is true' do
it 'sends email' do
data = Gitlab::BuildDataBuilder.build(create(:ci_build))
data[:build_status] = "success"
subject.recipients = 'test@gitlab.com'
expect(subject).not_to receive(:notify_only_broken_builds)
expect(BuildEmailWorker).to receive(:perform_async)
subject.test(data)
end
end
end
describe '#execute' do
it 'sends email' do
subject.recipients = 'test@gitlab.com'
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment