summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2015-10-05 12:02:26 +0200
committerKamil Trzcinski <ayufan@ayufan.eu>2015-10-05 12:02:26 +0200
commit317a7469545d0e9a70e54a87a540b8aabe4c418b (patch)
tree34d0d41cc2518cddb098660f0f12112ab927f667
parente3d870d7fc282a1f0a1028996c8b44e5d32b9cbf (diff)
downloadgitlab-ce-317a7469545d0e9a70e54a87a540b8aabe4c418b.tar.gz
Make commit_spec run
-rw-r--r--app/models/ci/build.rb4
-rw-r--r--app/models/ci/commit.rb75
-rw-r--r--app/services/ci/create_builds_service.rb39
-rw-r--r--app/services/ci/web_hook_service.rb2
-rw-r--r--app/views/ci/builds/show.html.haml5
-rw-r--r--app/views/ci/commits/show.html.haml11
-rw-r--r--db/schema.rb101
-rw-r--r--lib/ci/gitlab_ci_yaml_processor.rb4
-rw-r--r--spec/factories/ci/commits.rb16
-rw-r--r--spec/models/ci/build_spec.rb51
-rw-r--r--spec/models/ci/commit_spec.rb122
-rw-r--r--spec/models/ci/project_services/mail_service_spec.rb (renamed from spec/models/ci/mail_service_spec.rb)0
-rw-r--r--spec/spec_helper.rb4
13 files changed, 226 insertions, 208 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index bfdc1c7486e..79f040b8954 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -80,6 +80,8 @@ module Ci
def retry(build)
new_build = Ci::Build.new(status: :pending)
+ new_build.ref = build.ref
+ new_build.tag = build.tag
new_build.options = build.options
new_build.commands = build.commands
new_build.tag_list = build.tag_list
@@ -141,7 +143,7 @@ module Ci
state :canceled, value: 'canceled'
end
- delegate :sha, :short_sha, :before_sha, :ref, :project,
+ delegate :sha, :short_sha, :project,
to: :commit, prefix: false
def trace_html
diff --git a/app/models/ci/commit.rb b/app/models/ci/commit.rb
index 3c577e3f081..59d4932d434 100644
--- a/app/models/ci/commit.rb
+++ b/app/models/ci/commit.rb
@@ -58,14 +58,6 @@ module Ci
end
end
- def new_branch?
- before_sha == Ci::Git::BLANK_SHA
- end
-
- def compare?
- !new_branch?
- end
-
def git_author_name
commit_data.author_name if commit_data
end
@@ -78,10 +70,6 @@ module Ci
commit_data.message if commit_data
end
- def short_before_sha
- Ci::Commit.truncate_sha(before_sha)
- end
-
def short_sha
Ci::Commit.truncate_sha(sha)
end
@@ -99,7 +87,22 @@ module Ci
def create_builds(ref, tag, user, trigger_request = nil)
return if skip_ci? && trigger_request.blank?
return unless config_processor
- CreateBuildsService.new.execute(self, config_processor, ref, tag, user, trigger_request)
+ config_processor.stages.any? do |stage|
+ CreateBuildsService.new.execute(self, stage, ref, tag, user, trigger_request).present?
+ end
+ end
+
+ def create_next_builds(ref, tag, user, trigger_request)
+ return if skip_ci? && trigger_request.blank?
+ return unless config_processor
+
+ stages = builds.where(ref: ref, tag: tag, trigger_request: trigger_request).group_by(&:stage)
+
+ config_processor.stages.any? do |stage|
+ unless stages.include?(stage)
+ CreateBuildsService.new.execute(self, stage, ref, tag, user, trigger_request).present?
+ end
+ end
end
def refs
@@ -111,7 +114,14 @@ module Ci
end
def builds_without_retry
- builds.latest
+ @builds_without_retry ||=
+ begin
+ grouped_builds = builds.group_by(&:name)
+ latest_builds = grouped_builds.map do |name, builds|
+ builds.sort_by(&:id).last
+ end
+ latest_builds.sort_by(&:stage_idx)
+ end
end
def retried_builds
@@ -125,32 +135,35 @@ module Ci
return 'failed'
elsif builds.none?
return 'skipped'
- end
-
- statuses = builds_without_retry.ignore_failures.pluck(:status)
- if statuses.all? { |status| status == 'success' }
- return 'success'
- elsif statuses.all? { |status| status == 'pending' }
- return 'pending'
- elsif statuses.include?('running') || statuses.include?('pending')
- return 'running'
- elsif statuses.all? { |status| status == 'canceled' }
- return 'canceled'
+ elsif success?
+ 'success'
+ elsif pending?
+ 'pending'
+ elsif running?
+ 'running'
+ elsif canceled?
+ 'canceled'
else
- return 'failed'
+ 'failed'
end
end
def pending?
- status == 'pending'
+ builds_without_retry.all? do |build|
+ build.pending?
+ end
end
def running?
- status == 'running'
+ builds_without_retry.any? do |build|
+ build.running? || build.pending?
+ end
end
def success?
- status == 'success'
+ builds_without_retry.all? do |build|
+ build.success? || build.ignored?
+ end
end
def failed?
@@ -158,7 +171,9 @@ module Ci
end
def canceled?
- status == 'canceled'
+ builds_without_retry.all? do |build|
+ build.canceled?
+ end
end
def duration
diff --git a/app/services/ci/create_builds_service.rb b/app/services/ci/create_builds_service.rb
index 77a4305071c..255fdc41103 100644
--- a/app/services/ci/create_builds_service.rb
+++ b/app/services/ci/create_builds_service.rb
@@ -1,26 +1,23 @@
module Ci
class CreateBuildsService
- def execute(commit, ref, tag, user, config_processor, trigger_request)
- config_processor.stages.any? do |stage|
- builds_attrs = config_processor.builds_for_stage_and_ref(stage, ref, tag)
- builds_attrs.map do |build_attrs|
- # don't create the same build twice
- unless commit.builds.find_by_name_and_trigger_request(name: build_attrs[:name], ref: ref, tag: tag, trigger_request: trigger_request)
- commit.builds.create!({
- name: build_attrs[:name],
- commands: build_attrs[:script],
- tag_list: build_attrs[:tags],
- options: build_attrs[:options],
- allow_failure: build_attrs[:allow_failure],
- stage: build_attrs[:stage],
- stage_idx: build_attrs[:stage_idx],
- trigger_request: trigger_request,
- ref: ref,
- tag: tag,
- user: user,
- })
- end
- end
+ def execute(commit, stage, ref, tag, user, trigger_request)
+ builds_attrs = commit.config_processor.builds_for_stage_and_ref(stage, ref, tag)
+
+ builds_attrs.map do |build_attrs|
+ build_attrs.slice!(:name,
+ :commands,
+ :tag_list,
+ :options,
+ :allow_failure,
+ :stage,
+ :stage_idx)
+
+ build_attrs.merge!(ref: ref,
+ tag: tag,
+ trigger_request: trigger_request,
+ user: user)
+
+ commit.builds.create!(build_attrs)
end
end
end
diff --git a/app/services/ci/web_hook_service.rb b/app/services/ci/web_hook_service.rb
index 87984b20fa1..4bbca5c7da1 100644
--- a/app/services/ci/web_hook_service.rb
+++ b/app/services/ci/web_hook_service.rb
@@ -28,8 +28,6 @@ module Ci
gitlab_url: project.gitlab_url,
ref: build.ref,
sha: build.sha,
- before_sha: build.before_sha,
- push_data: build.commit.push_data
})
end
end
diff --git a/app/views/ci/builds/show.html.haml b/app/views/ci/builds/show.html.haml
index f941143e2e0..e4ec190ada5 100644
--- a/app/views/ci/builds/show.html.haml
+++ b/app/views/ci/builds/show.html.haml
@@ -122,11 +122,6 @@
Commit
.pull-right
%small #{build_commit_link @build}
-
- - if @build.commit.compare?
- %p
- %span.attr-name Compare:
- #{build_compare_link @build}
%p
%span.attr-name Branch:
#{build_ref_link @build}
diff --git a/app/views/ci/commits/show.html.haml b/app/views/ci/commits/show.html.haml
index 4badb671287..69487320175 100644
--- a/app/views/ci/commits/show.html.haml
+++ b/app/views/ci/commits/show.html.haml
@@ -9,14 +9,9 @@
.gray-content-block.second-block
.row
.col-sm-6
- - if @commit.compare?
- %p
- %span.attr-name Compare:
- #{gitlab_compare_link(@project, @commit.short_before_sha, @commit.short_sha)}
- - else
- %p
- %span.attr-name Commit:
- #{gitlab_commit_link(@project, @commit.sha)}
+ %p
+ %span.attr-name Commit:
+ #{gitlab_commit_link(@project, @commit.sha)}
.col-sm-6
- if @commit.git_author_name || @commit.git_author_email
%p
diff --git a/db/schema.rb b/db/schema.rb
index 72609da93f1..f2bda91f799 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,10 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20150930095736) do
-
- # These are extensions that must be enabled in order to support this database
- enable_extension "plpgsql"
+ActiveRecord::Schema.define(version: 20151005075649) do
create_table "abuse_reports", force: true do |t|
t.integer "reporter_id"
@@ -45,8 +42,8 @@ ActiveRecord::Schema.define(version: 20150930095736) do
t.string "after_sign_out_path"
t.integer "session_expire_delay", default: 10080, null: false
t.text "import_sources"
- t.text "help_page_text"
t.boolean "ci_enabled", default: true, null: false
+ t.text "help_page_text"
end
create_table "audit_events", force: true do |t|
@@ -85,37 +82,60 @@ ActiveRecord::Schema.define(version: 20150930095736) do
t.integer "project_id"
t.string "status"
t.datetime "finished_at"
- t.text "trace"
+ t.text "trace", limit: 2147483647
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "started_at"
t.integer "runner_id"
- t.float "coverage"
+ t.float "coverage", limit: 24
t.integer "commit_id"
t.text "commands"
t.integer "job_id"
t.string "name"
- t.boolean "deploy", default: false
+ t.boolean "deploy", default: false
t.text "options"
- t.boolean "allow_failure", default: false, null: false
+ t.boolean "allow_failure", default: false, null: false
t.string "stage"
t.integer "trigger_request_id"
+ t.integer "gl_project_id"
+ t.integer "stage_idx"
+ t.boolean "tag"
+ t.string "ref"
+ t.text "push_data"
+ t.integer "user_id"
end
+ add_index "ci_builds", ["commit_id", "name"], name: "index_ci_builds_on_commit_id_and_name", using: :btree
+ add_index "ci_builds", ["commit_id", "stage_idx", "created_at"], name: "index_ci_builds_on_commit_id_and_stage_idx_and_created_at", using: :btree
add_index "ci_builds", ["commit_id"], name: "index_ci_builds_on_commit_id", using: :btree
add_index "ci_builds", ["project_id", "commit_id"], name: "index_ci_builds_on_project_id_and_commit_id", using: :btree
add_index "ci_builds", ["project_id"], name: "index_ci_builds_on_project_id", using: :btree
add_index "ci_builds", ["runner_id"], name: "index_ci_builds_on_runner_id", using: :btree
+ create_table "ci_commit_statuses", force: true do |t|
+ t.integer "commit_id"
+ t.string "sha"
+ t.string "ref"
+ t.string "state"
+ t.string "target_url"
+ t.string "description"
+ t.string "context", default: "default"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "ci_commit_statuses", ["commit_id", "context", "ref"], name: "index_ci_commit_statuses_on_commit_id_and_context_and_ref", using: :btree
+ add_index "ci_commit_statuses", ["commit_id", "ref"], name: "index_ci_commit_statuses_on_commit_id_and_ref", using: :btree
+
create_table "ci_commits", force: true do |t|
t.integer "project_id"
t.string "ref"
t.string "sha"
t.string "before_sha"
- t.text "push_data"
+ t.text "push_data", limit: 16777215
t.datetime "created_at"
t.datetime "updated_at"
- t.boolean "tag", default: false
+ t.boolean "tag", default: false
t.text "yaml_errors"
t.datetime "committed_at"
t.integer "gl_project_id"
@@ -134,6 +154,7 @@ ActiveRecord::Schema.define(version: 20150930095736) do
t.text "description"
t.datetime "created_at"
t.datetime "updated_at"
+ t.integer "gl_project_id"
end
add_index "ci_events", ["created_at"], name: "index_ci_events_on_created_at", using: :btree
@@ -181,10 +202,11 @@ ActiveRecord::Schema.define(version: 20150930095736) do
end
create_table "ci_runner_projects", force: true do |t|
- t.integer "runner_id", null: false
- t.integer "project_id", null: false
+ t.integer "runner_id", null: false
+ t.integer "project_id", null: false
t.datetime "created_at"
t.datetime "updated_at"
+ t.integer "gl_project_id"
end
add_index "ci_runner_projects", ["project_id"], name: "index_ci_runner_projects_on_project_id", using: :btree
@@ -208,11 +230,12 @@ ActiveRecord::Schema.define(version: 20150930095736) do
create_table "ci_services", force: true do |t|
t.string "type"
t.string "title"
- t.integer "project_id", null: false
+ t.integer "project_id", null: false
t.datetime "created_at"
t.datetime "updated_at"
- t.boolean "active", default: false, null: false
+ t.boolean "active", default: false, null: false
t.text "properties"
+ t.integer "gl_project_id"
end
add_index "ci_services", ["project_id"], name: "index_ci_services_on_project_id", using: :btree
@@ -257,10 +280,11 @@ ActiveRecord::Schema.define(version: 20150930095736) do
create_table "ci_triggers", force: true do |t|
t.string "token"
- t.integer "project_id", null: false
+ t.integer "project_id", null: false
t.datetime "deleted_at"
t.datetime "created_at"
t.datetime "updated_at"
+ t.integer "gl_project_id"
end
add_index "ci_triggers", ["deleted_at"], name: "index_ci_triggers_on_deleted_at", using: :btree
@@ -272,15 +296,17 @@ ActiveRecord::Schema.define(version: 20150930095736) do
t.text "encrypted_value"
t.string "encrypted_value_salt"
t.string "encrypted_value_iv"
+ t.integer "gl_project_id"
end
add_index "ci_variables", ["project_id"], name: "index_ci_variables_on_project_id", using: :btree
create_table "ci_web_hooks", force: true do |t|
- t.string "url", null: false
- t.integer "project_id", null: false
+ t.string "url", null: false
+ t.integer "project_id", null: false
t.datetime "created_at"
t.datetime "updated_at"
+ t.integer "gl_project_id"
end
create_table "deploy_keys_projects", force: true do |t|
@@ -426,9 +452,9 @@ ActiveRecord::Schema.define(version: 20150930095736) do
create_table "merge_request_diffs", force: true do |t|
t.string "state"
- t.text "st_commits"
- t.text "st_diffs"
- t.integer "merge_request_id", null: false
+ t.text "st_commits", limit: 2147483647
+ t.text "st_diffs", limit: 2147483647
+ t.integer "merge_request_id", null: false
t.datetime "created_at"
t.datetime "updated_at"
end
@@ -511,8 +537,8 @@ ActiveRecord::Schema.define(version: 20150930095736) do
t.string "line_code"
t.string "commit_id"
t.integer "noteable_id"
- t.boolean "system", default: false, null: false
- t.text "st_diff"
+ t.boolean "system", default: false, null: false
+ t.text "st_diff", limit: 2147483647
t.integer "updated_by_id"
end
@@ -581,25 +607,26 @@ ActiveRecord::Schema.define(version: 20150930095736) do
t.datetime "created_at"
t.datetime "updated_at"
t.integer "creator_id"
- t.boolean "issues_enabled", default: true, null: false
- t.boolean "wall_enabled", default: true, null: false
- t.boolean "merge_requests_enabled", default: true, null: false
- t.boolean "wiki_enabled", default: true, null: false
+ t.boolean "issues_enabled", default: true, null: false
+ t.boolean "wall_enabled", default: true, null: false
+ t.boolean "merge_requests_enabled", default: true, null: false
+ t.boolean "wiki_enabled", default: true, null: false
t.integer "namespace_id"
- t.string "issues_tracker", default: "gitlab", null: false
+ t.string "issues_tracker", default: "gitlab", null: false
t.string "issues_tracker_id"
- t.boolean "snippets_enabled", default: true, null: false
+ t.boolean "snippets_enabled", default: true, null: false
t.datetime "last_activity_at"
t.string "import_url"
- t.integer "visibility_level", default: 0, null: false
- t.boolean "archived", default: false, null: false
+ t.integer "visibility_level", default: 0, null: false
+ t.boolean "archived", default: false, null: false
t.string "avatar"
t.string "import_status"
- t.float "repository_size", default: 0.0
- t.integer "star_count", default: 0, null: false
+ t.float "repository_size", limit: 24, default: 0.0
+ t.integer "star_count", default: 0, null: false
t.string "import_type"
t.string "import_source"
- t.integer "commit_count", default: 0
+ t.integer "commit_count", default: 0
+ t.boolean "shared_runners_enabled", default: false
end
add_index "projects", ["created_at", "id"], name: "index_projects_on_created_at_and_id", using: :btree
@@ -651,15 +678,15 @@ ActiveRecord::Schema.define(version: 20150930095736) do
create_table "snippets", force: true do |t|
t.string "title"
- t.text "content"
- t.integer "author_id", null: false
+ t.text "content", limit: 2147483647
+ t.integer "author_id", null: false
t.integer "project_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "file_name"
t.datetime "expires_at"
t.string "type"
- t.integer "visibility_level", default: 0, null: false
+ t.integer "visibility_level", default: 0, null: false
end
add_index "snippets", ["author_id"], name: "index_snippets_on_author_id", using: :btree
diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb
index 861da770d3c..c47951bc5d1 100644
--- a/lib/ci/gitlab_ci_yaml_processor.rb
+++ b/lib/ci/gitlab_ci_yaml_processor.rb
@@ -87,8 +87,8 @@ module Ci
{
stage_idx: stages.index(job[:stage]),
stage: job[:stage],
- script: "#{@before_script.join("\n")}\n#{normalize_script(job[:script])}",
- tags: job[:tags] || [],
+ commands: "#{@before_script.join("\n")}\n#{normalize_script(job[:script])}",
+ tag_list: job[:tags] || [],
name: name,
only: job[:only],
except: job[:except],
diff --git a/spec/factories/ci/commits.rb b/spec/factories/ci/commits.rb
index b74aae795aa..9226e04a7b3 100644
--- a/spec/factories/ci/commits.rb
+++ b/spec/factories/ci/commits.rb
@@ -23,20 +23,26 @@ FactoryGirl.define do
gl_project factory: :empty_project
factory :ci_commit_without_jobs do
- after(:create) do |commit, evaluator|
+ after(:build) do |commit|
allow(commit).to receive(:ci_yaml_file) { YAML.dump({}) }
end
end
factory :ci_commit_with_one_job do
- after(:create) do |commit, evaluator|
- allow(commit).to receive(:ci_yaml_file) { YAML.dump({ rspec: { script: "ls" } }) }
+ after(:build) do |commit|
+ allow(commit).to receive(:ci_yaml_file) { YAML.dump({rspec: {script: "ls"}}) }
end
end
factory :ci_commit_with_two_jobs do
- after(:create) do |commit, evaluator|
- allow(commit).to receive(:ci_yaml_file) { YAML.dump({ rspec: { script: "ls" }, spinach: { script: "ls" } }) }
+ after(:build) do |commit|
+ allow(commit).to receive(:ci_yaml_file) { YAML.dump({rspec: {script: "ls"}, spinach: {script: "ls"}}) }
+ end
+ end
+
+ factory :ci_commit_yaml_stub do
+ after(:build) do |commit|
+ allow(commit).to receive(:ci_yaml_file) { File.read(Rails.root.join('spec/support/gitlab_stubs/gitlab_ci.yml')) }
end
end
end
diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb
index ca070a14975..d74063e5782 100644
--- a/spec/models/ci/build_spec.rb
+++ b/spec/models/ci/build_spec.rb
@@ -28,11 +28,14 @@ require 'spec_helper'
describe Ci::Build do
let(:project) { FactoryGirl.create :ci_project }
let(:gl_project) { FactoryGirl.create :empty_project, gitlab_ci_project: project }
- let(:commit) { FactoryGirl.create :ci_commit, gl_project: gl_project }
+ let(:commit) { FactoryGirl.create :ci_commit_yaml_stub, gl_project: gl_project }
let(:build) { FactoryGirl.create :ci_build, commit: commit }
+ subject { build }
it { is_expected.to belong_to(:commit) }
+ it { is_expected.to belong_to(:user) }
it { is_expected.to validate_presence_of :status }
+ it { is_expected.to validate_presence_of :ref }
it { is_expected.to respond_to :success? }
it { is_expected.to respond_to :failed? }
@@ -236,12 +239,6 @@ describe Ci::Build do
it { is_expected.to eq(options) }
end
- describe :ref do
- subject { build.ref }
-
- it { is_expected.to eq(commit.ref) }
- end
-
describe :sha do
subject { build.sha }
@@ -254,12 +251,6 @@ describe Ci::Build do
it { is_expected.to eq(commit.short_sha) }
end
- describe :before_sha do
- subject { build.before_sha }
-
- it { is_expected.to eq(commit.before_sha) }
- end
-
describe :allow_git_fetch do
subject { build.allow_git_fetch }
@@ -359,4 +350,38 @@ describe Ci::Build do
end
end
end
+
+ describe :project_recipients do
+ let (:pusher_email) { 'pusher@gitlab.test' }
+ let (:user) { User.new(notification_email: pusher_email) }
+ subject { build.project_recipients }
+
+ before do
+ build.update_attributes(user: user)
+ end
+
+ it 'should return pusher_email as only recipient when no additional recipients are given' do
+ project.update_attributes(email_add_pusher: true,
+ email_recipients: '')
+ is_expected.to eq([pusher_email])
+ end
+
+ it 'should return pusher_email and additional recipients' do
+ project.update_attributes(email_add_pusher: true,
+ email_recipients: 'rec1 rec2')
+ is_expected.to eq(['rec1', 'rec2', pusher_email])
+ end
+
+ it 'should return recipients' do
+ project.update_attributes(email_add_pusher: false,
+ email_recipients: 'rec1 rec2')
+ is_expected.to eq(['rec1', 'rec2'])
+ end
+
+ it 'should return unique recipients only' do
+ project.update_attributes(email_add_pusher: true,
+ email_recipients: "rec1 rec1 #{pusher_email}")
+ is_expected.to eq(['rec1', pusher_email])
+ end
+ end
end
diff --git a/spec/models/ci/commit_spec.rb b/spec/models/ci/commit_spec.rb
index c04bbcbadc7..63602e89e37 100644
--- a/spec/models/ci/commit_spec.rb
+++ b/spec/models/ci/commit_spec.rb
@@ -21,15 +21,10 @@ describe Ci::Commit do
let(:project) { FactoryGirl.create :ci_project }
let(:gl_project) { FactoryGirl.create :empty_project, gitlab_ci_project: project }
let(:commit) { FactoryGirl.create :ci_commit, gl_project: gl_project }
- let(:commit_with_project) { FactoryGirl.create :ci_commit, gl_project: gl_project }
- let(:config_processor) { Ci::GitlabCiYamlProcessor.new(gitlab_ci_yaml) }
it { is_expected.to belong_to(:gl_project) }
it { is_expected.to have_many(:builds) }
- it { is_expected.to validate_presence_of :before_sha }
it { is_expected.to validate_presence_of :sha }
- it { is_expected.to validate_presence_of :ref }
- it { is_expected.to validate_presence_of :push_data }
it { is_expected.to respond_to :git_author_name }
it { is_expected.to respond_to :git_author_email }
@@ -59,53 +54,6 @@ describe Ci::Commit do
end
end
- describe :project_recipients do
-
- context 'always sending notification' do
- it 'should return commit_pusher_email as only recipient when no additional recipients are given' do
- project = FactoryGirl.create :ci_project,
- email_add_pusher: true,
- email_recipients: ''
- gl_project = FactoryGirl.create :empty_project, gitlab_ci_project: project
- commit = FactoryGirl.create :ci_commit, gl_project: gl_project
- expected = 'commit_pusher_email'
- allow(commit).to receive(:push_data) { { user_email: expected } }
- expect(commit.project_recipients).to eq([expected])
- end
-
- it 'should return commit_pusher_email and additional recipients' do
- project = FactoryGirl.create :ci_project,
- email_add_pusher: true,
- email_recipients: 'rec1 rec2'
- gl_project = FactoryGirl.create :empty_project, gitlab_ci_project: project
- commit = FactoryGirl.create :ci_commit, gl_project: gl_project
- expected = 'commit_pusher_email'
- allow(commit).to receive(:push_data) { { user_email: expected } }
- expect(commit.project_recipients).to eq(['rec1', 'rec2', expected])
- end
-
- it 'should return recipients' do
- project = FactoryGirl.create :ci_project,
- email_add_pusher: false,
- email_recipients: 'rec1 rec2'
- gl_project = FactoryGirl.create :empty_project, gitlab_ci_project: project
- commit = FactoryGirl.create :ci_commit, gl_project: gl_project
- expect(commit.project_recipients).to eq(['rec1', 'rec2'])
- end
-
- it 'should return unique recipients only' do
- project = FactoryGirl.create :ci_project,
- email_add_pusher: true,
- email_recipients: 'rec1 rec1 rec2'
- gl_project = FactoryGirl.create :empty_project, gitlab_ci_project: project
- commit = FactoryGirl.create :ci_commit, gl_project: gl_project
- expected = 'rec2'
- allow(commit).to receive(:push_data) { { user_email: expected } }
- expect(commit.project_recipients).to eq(['rec1', 'rec2'])
- end
- end
- end
-
describe :valid_commit_sha do
context 'commit.sha can not start with 00000000' do
before do
@@ -117,14 +65,6 @@ describe Ci::Commit do
end
end
- describe :compare? do
- subject { commit_with_project.compare? }
-
- context 'if commit.before_sha are not nil' do
- it { is_expected.to be_truthy }
- end
- end
-
describe :short_sha do
subject { commit.short_before_sha }
@@ -144,36 +84,51 @@ describe Ci::Commit do
end
describe :create_next_builds do
- before do
- allow(commit).to receive(:config_processor).and_return(config_processor)
+ end
+
+ describe :create_builds do
+ let(:commit) { FactoryGirl.create :ci_commit_yaml_stub, gl_project: gl_project }
+
+ def create_builds(trigger_request = nil)
+ commit.create_builds('master', false, nil, trigger_request)
end
- it "creates builds for next type" do
- expect(commit.create_builds).to be_truthy
+ def create_next_builds(trigger_request = nil)
+ commit.create_next_builds('master', false, nil, trigger_request)
+ end
+
+ it 'creates builds' do
+ expect(create_builds).to be_truthy
commit.builds.reload
expect(commit.builds.size).to eq(2)
- expect(commit.create_next_builds(nil)).to be_truthy
+ expect(create_next_builds).to be_truthy
commit.builds.reload
expect(commit.builds.size).to eq(4)
- expect(commit.create_next_builds(nil)).to be_truthy
+ expect(create_next_builds).to be_truthy
commit.builds.reload
expect(commit.builds.size).to eq(5)
- expect(commit.create_next_builds(nil)).to be_falsey
+ expect(create_next_builds).to be_falsey
end
- end
- describe :create_builds do
- before do
- allow(commit).to receive(:config_processor).and_return(config_processor)
- end
+ context 'for different ref' do
+ def create_develop_builds
+ commit.create_builds('develop', false, nil, nil)
+ end
- it 'creates builds' do
- expect(commit.create_builds).to be_truthy
- commit.builds.reload
- expect(commit.builds.size).to eq(2)
+ it 'creates builds' do
+ expect(create_builds).to be_truthy
+ commit.builds.reload
+ expect(commit.builds.size).to eq(2)
+
+ expect(create_develop_builds).to be_truthy
+ commit.builds.reload
+ expect(commit.builds.size).to eq(4)
+ expect(commit.refs.size).to eq(2)
+ expect(commit.builds.pluck(:name).uniq.size).to eq(2)
+ end
end
context 'for build triggers' do
@@ -181,40 +136,39 @@ describe Ci::Commit do
let(:trigger_request) { FactoryGirl.create :ci_trigger_request, commit: commit, trigger: trigger }
it 'creates builds' do
- expect(commit.create_builds(trigger_request)).to be_truthy
+ expect(create_builds(trigger_request)).to be_truthy
commit.builds.reload
expect(commit.builds.size).to eq(2)
end
it 'rebuilds commit' do
- expect(commit.create_builds).to be_truthy
+ expect(create_builds).to be_truthy
commit.builds.reload
expect(commit.builds.size).to eq(2)
- expect(commit.create_builds(trigger_request)).to be_truthy
+ expect(create_builds(trigger_request)).to be_truthy
commit.builds.reload
expect(commit.builds.size).to eq(4)
end
it 'creates next builds' do
- expect(commit.create_builds(trigger_request)).to be_truthy
+ expect(create_builds(trigger_request)).to be_truthy
commit.builds.reload
expect(commit.builds.size).to eq(2)
- expect(commit.create_next_builds(trigger_request)).to be_truthy
+ expect(create_next_builds(trigger_request)).to be_truthy
commit.builds.reload
expect(commit.builds.size).to eq(4)
end
context 'for [ci skip]' do
before do
- commit.push_data[:commits][0][:message] = 'skip this commit [ci skip]'
- commit.save
+ allow(commit).to receive(:git_commit_message) { 'message [ci skip]' }
end
it 'rebuilds commit' do
expect(commit.status).to eq('skipped')
- expect(commit.create_builds(trigger_request)).to be_truthy
+ expect(create_builds(trigger_request)).to be_truthy
commit.builds.reload
expect(commit.builds.size).to eq(2)
expect(commit.status).to eq('pending')
diff --git a/spec/models/ci/mail_service_spec.rb b/spec/models/ci/project_services/mail_service_spec.rb
index 0d9f85959ba..0d9f85959ba 100644
--- a/spec/models/ci/mail_service_spec.rb
+++ b/spec/models/ci/project_services/mail_service_spec.rb
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index dfe855926c6..67f31ef54f6 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -42,4 +42,8 @@ RSpec.configure do |config|
end
end
+FactoryGirl::SyntaxRunner.class_eval do
+ include RSpec::Mocks::ExampleMethods
+end
+
ActiveRecord::Migration.maintain_test_schema!