diff options
author | Felipe Artur <felipefac@gmail.com> | 2017-03-28 17:04:14 -0300 |
---|---|---|
committer | Felipe Artur <felipefac@gmail.com> | 2017-05-05 16:17:45 -0300 |
commit | 354bb7cce844e6ee5f9344d3bcd4e23b9d6e8fcf (patch) | |
tree | 1b6f558b8d26d8683c4c80b37c7dc5a483b80b79 | |
parent | ff7a64a90a9f644bed9734562d6e5ba56ced0959 (diff) | |
download | gitlab-ce-354bb7cce844e6ee5f9344d3bcd4e23b9d6e8fcf.tar.gz |
Fix specs 2
-rw-r--r-- | app/models/ci/pipeline.rb | 11 | ||||
-rw-r--r-- | db/post_migrate/20170428170547_add_head_pipeline_for_each_merge_request.rb | 26 | ||||
-rw-r--r-- | db/schema.rb | 15 | ||||
-rw-r--r-- | spec/controllers/projects/merge_requests_controller_spec.rb | 5 | ||||
-rw-r--r-- | spec/features/cycle_analytics_spec.rb | 14 | ||||
-rw-r--r-- | spec/features/merge_requests/widget_spec.rb | 6 | ||||
-rw-r--r-- | spec/lib/gitlab/cycle_analytics/events_spec.rb | 4 | ||||
-rw-r--r-- | spec/models/ci/pipeline_spec.rb | 2 | ||||
-rw-r--r-- | spec/models/merge_request_spec.rb | 4 | ||||
-rw-r--r-- | spec/services/merge_requests/merge_when_pipeline_succeeds_service_spec.rb | 2 | ||||
-rw-r--r-- | spec/services/merge_requests/update_service_spec.rb | 2 | ||||
-rw-r--r-- | spec/workers/pipeline_metrics_worker_spec.rb | 2 |
12 files changed, 41 insertions, 52 deletions
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb index 785052246ff..e1c2f2dc025 100644 --- a/app/models/ci/pipeline.rb +++ b/app/models/ci/pipeline.rb @@ -16,6 +16,9 @@ module Ci has_many :statuses, class_name: 'CommitStatus', foreign_key: :commit_id has_many :builds, foreign_key: :commit_id has_many :trigger_requests, dependent: :destroy, foreign_key: :commit_id + + # Merge requests for which the current pipeline is running against + # the merge request's latest commit. has_many :merge_requests, foreign_key: "head_pipeline_id" has_many :pending_builds, -> { pending }, foreign_key: :commit_id, class_name: 'Ci::Build' @@ -381,14 +384,6 @@ module Ci project.execute_services(data, :pipeline_hooks) end - # Merge requests for which the current pipeline is running against - # the merge request's latest commit. - def merge_requests - @merge_requests ||= project.merge_requests - .where(source_branch: self.ref) - .select { |merge_request| merge_request.head_pipeline.try(:id) == self.id } - end - # All the merge requests for which the current pipeline runs/ran against def all_merge_requests @all_merge_requests ||= project.merge_requests.where(source_branch: ref) diff --git a/db/post_migrate/20170428170547_add_head_pipeline_for_each_merge_request.rb b/db/post_migrate/20170428170547_add_head_pipeline_for_each_merge_request.rb index 0e139c28402..bc3850c0c23 100644 --- a/db/post_migrate/20170428170547_add_head_pipeline_for_each_merge_request.rb +++ b/db/post_migrate/20170428170547_add_head_pipeline_for_each_merge_request.rb @@ -1,21 +1,23 @@ class AddHeadPipelineForEachMergeRequest < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + DOWNTIME = false - class Pipeline < ActiveRecord::Base - self.table_name = "ci_pipelines" + def up + disable_statement_timeout - def self.last_per_branch - select('ref, MAX(id) as head_id, project_id').group(:ref).group(:project_id) - end - end + pipelines = Arel::Table.new(:ci_pipelines) + merge_requests = Arel::Table.new(:merge_requests) - class MergeRequest < ActiveRecord::Base; end + head_id = pipelines. + project(Arel::Nodes::NamedFunction.new('max', [pipelines[:id]])). + from(pipelines). + where(pipelines[:ref].eq(merge_requests[:source_branch])). + where(pipelines[:project_id].eq(merge_requests[:source_project_id])) - def up - Pipeline.last_per_branch.each do |pipeline| - mrs = MergeRequest.where(source_branch: pipeline.ref, source_project_id: pipeline.project_id) - mrs.update_all(head_pipeline_id: pipeline.head_id) - end + sub_query = Arel::Nodes::SqlLiteral.new(Arel::Nodes::Grouping.new(head_id).to_sql) + + update_column_in_batches(:merge_requests, :head_pipeline_id, sub_query) end def down diff --git a/db/schema.rb b/db/schema.rb index e692794bb7c..8da50ffaacb 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -117,25 +117,13 @@ ActiveRecord::Schema.define(version: 20170504102911) do t.integer "unique_ips_limit_per_user" t.integer "unique_ips_limit_time_window" t.boolean "unique_ips_limit_enabled", default: false, null: false -<<<<<<< 6fa0e950d2cce0104e0c5f36e0dee43c77224afd -<<<<<<< 6ae76738dde8fecb117f7706ae2ef74c1d83cdb7 t.decimal "polling_interval_multiplier", default: 1.0, null: false t.integer "cached_markdown_version" t.boolean "usage_ping_enabled", default: true, null: false t.string "uuid" -<<<<<<< bf04c4ba5fbb4c87cad369c5ad224f0cbf112626 t.boolean "clientside_sentry_enabled", default: false, null: false t.string "clientside_sentry_dsn" -======= -======= t.string "default_artifacts_expire_in", default: "0", null: false ->>>>>>> Preloads head pipeline for each merge request -<<<<<<< 362bf76f9fb7cfbc4bbbeeaa7eed6b3e26a91d72 ->>>>>>> Preloads head pipeline for each merge request -======= -======= ->>>>>>> Populate merge requests head_pipeline_id ->>>>>>> Populate merge requests head_pipeline_id end create_table "audit_events", force: :cascade do |t| @@ -688,11 +676,8 @@ ActiveRecord::Schema.define(version: 20170504102911) do t.text "title_html" t.text "description_html" t.integer "time_estimate" -<<<<<<< 6ae76738dde8fecb117f7706ae2ef74c1d83cdb7 t.integer "cached_markdown_version" -======= t.integer "head_pipeline_id" ->>>>>>> Preloads head pipeline for each merge request end add_index "merge_requests", ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree diff --git a/spec/controllers/projects/merge_requests_controller_spec.rb b/spec/controllers/projects/merge_requests_controller_spec.rb index ddc055cb008..6dbba178850 100644 --- a/spec/controllers/projects/merge_requests_controller_spec.rb +++ b/spec/controllers/projects/merge_requests_controller_spec.rb @@ -1200,7 +1200,10 @@ describe Projects::MergeRequestsController do let(:status) { pipeline.detailed_status(double('user')) } - before { get_pipeline_status } + before do + merge_request.update(head_pipeline: pipeline) + get_pipeline_status + end it 'return a detailed head_pipeline status in json' do expect(response).to have_http_status(:ok) diff --git a/spec/features/cycle_analytics_spec.rb b/spec/features/cycle_analytics_spec.rb index 9ccd893fa0d..47a73011673 100644 --- a/spec/features/cycle_analytics_spec.rb +++ b/spec/features/cycle_analytics_spec.rb @@ -9,14 +9,17 @@ feature 'Cycle Analytics', feature: true, js: true do let(:mr) { create_merge_request_closing_issue(issue) } let(:pipeline) { create(:ci_empty_pipeline, status: 'created', project: project, ref: mr.source_branch, sha: mr.source_branch_sha) } - before { mr.update(head_pipeline: pipeline) } + before do + allow_any_instance_of(Gitlab::ReferenceExtractor).to receive(:issues).and_return([issue]) + end context 'as an allowed user' do context 'when project is new' do before do project.add_master(user) - mr.update(head_pipeline_id: pipeline.id) + login_as(user) + visit namespace_project_cycle_analytics_path(project.namespace, project) wait_for_ajax end @@ -33,9 +36,8 @@ feature 'Cycle Analytics', feature: true, js: true do context "when there's cycle analytics data" do before do - project.team << [user, :master] - - allow_any_instance_of(Gitlab::ReferenceExtractor).to receive(:issues).and_return([issue]) + mr.update(head_pipeline: pipeline) + project.add_master(user) create_cycle deploy_master @@ -88,7 +90,7 @@ feature 'Cycle Analytics', feature: true, js: true do context "as a guest" do before do - project.team << [guest, :guest] + project.add_guest(guest) allow_any_instance_of(Gitlab::ReferenceExtractor).to receive(:issues).and_return([issue]) create_cycle diff --git a/spec/features/merge_requests/widget_spec.rb b/spec/features/merge_requests/widget_spec.rb index 02193dbfc8d..b1255ac0bd5 100644 --- a/spec/features/merge_requests/widget_spec.rb +++ b/spec/features/merge_requests/widget_spec.rb @@ -89,7 +89,7 @@ describe 'Merge request', :feature, :js do statuses: [commit_status]) create(:ci_build, :pending, pipeline: pipeline) - merge_request.update(head_pipeline_id: pipeline.id) + merge_request.update(head_pipeline: pipeline) visit namespace_project_merge_request_path(project.namespace, project, merge_request) end @@ -111,7 +111,7 @@ describe 'Merge request', :feature, :js do status: :manual ) - merge_request.update(head_pipeline_id: pipeline.id) + merge_request.update(head_pipeline: pipeline) visit namespace_project_merge_request_path(project.namespace, project, @@ -136,7 +136,7 @@ describe 'Merge request', :feature, :js do statuses: [commit_status]) create(:ci_build, :pending, pipeline: pipeline) - merge_request.update(head_pipeline_id: pipeline.id) + merge_request.update(head_pipeline: pipeline) visit namespace_project_merge_request_path(project.namespace, project, merge_request) end diff --git a/spec/lib/gitlab/cycle_analytics/events_spec.rb b/spec/lib/gitlab/cycle_analytics/events_spec.rb index 4b0cffe57d0..a8a1fba22f1 100644 --- a/spec/lib/gitlab/cycle_analytics/events_spec.rb +++ b/spec/lib/gitlab/cycle_analytics/events_spec.rb @@ -132,7 +132,7 @@ describe 'cycle analytics events' do end before do - merge_request.update(head_pipeline_id: pipeline.id) + merge_request.update(head_pipeline: pipeline) create(:ci_build, pipeline: pipeline, status: :success, author: user) create(:ci_build, pipeline: pipeline, status: :success, author: user) @@ -230,7 +230,7 @@ describe 'cycle analytics events' do end before do - merge_request.update(head_pipeline_id: pipeline.id) + merge_request.update(head_pipeline: pipeline) create(:ci_build, pipeline: pipeline, status: :success, author: user) create(:ci_build, pipeline: pipeline, status: :success, author: user) diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb index da5143fab0e..8f5fb5e960d 100644 --- a/spec/models/ci/pipeline_spec.rb +++ b/spec/models/ci/pipeline_spec.rb @@ -1044,7 +1044,7 @@ describe Ci::Pipeline, models: true do it "returns merge requests whose `diff_head_sha` matches the pipeline's SHA" do allow_any_instance_of(MergeRequest).to receive(:diff_head_sha) { 'a288a022a53a5a944fae87bcec6efc87b7061808' } - merge_request = create(:merge_request, source_project: project, head_pipeline: pipeline, , source_branch: pipeline.ref) + merge_request = create(:merge_request, source_project: project, head_pipeline: pipeline, source_branch: pipeline.ref) expect(pipeline.merge_requests).to eq([merge_request]) end diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index ce043f77e83..c95b1c59bcb 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -1436,6 +1436,8 @@ describe MergeRequest, models: true do status: status) merge_request.update(head_pipeline: pipeline) + + pipeline end let(:project) { create(:project, :public, :repository, only_allow_merge_if_pipeline_succeeds: true) } @@ -1521,7 +1523,7 @@ describe MergeRequest, models: true do context 'with running pipeline' do before do - merge_request.update(head_pipeline: create_pipeline(:running)) + create_pipeline(:running) end it 'is mergeable' do diff --git a/spec/services/merge_requests/merge_when_pipeline_succeeds_service_spec.rb b/spec/services/merge_requests/merge_when_pipeline_succeeds_service_spec.rb index b0304b3b73f..3ef5135e6a3 100644 --- a/spec/services/merge_requests/merge_when_pipeline_succeeds_service_spec.rb +++ b/spec/services/merge_requests/merge_when_pipeline_succeeds_service_spec.rb @@ -128,7 +128,7 @@ describe MergeRequests::MergeWhenPipelineSucceedsService do sha: mr_conflict.diff_head_sha, status: 'success') end - before { mr_conflict.update(head_pipeline_id: conflict_pipeline.id) } + before { mr_conflict.update(head_pipeline: conflict_pipeline) } it 'does not merge the merge request' do expect(MergeWorker).not_to receive(:perform_async) diff --git a/spec/services/merge_requests/update_service_spec.rb b/spec/services/merge_requests/update_service_spec.rb index 5cf9f0adfc7..6da3d979df9 100644 --- a/spec/services/merge_requests/update_service_spec.rb +++ b/spec/services/merge_requests/update_service_spec.rb @@ -172,7 +172,7 @@ describe MergeRequests::UpdateService, services: true do ref: merge_request.source_branch, sha: merge_request.diff_head_sha) - merge_request.update(head_pipeline_id: pipeline.id) + merge_request.update(head_pipeline: pipeline) expect(MergeRequests::MergeWhenPipelineSucceedsService).to receive(:new).with(project, user). and_return(service_mock) diff --git a/spec/workers/pipeline_metrics_worker_spec.rb b/spec/workers/pipeline_metrics_worker_spec.rb index dbf2b7251c6..ef71125c0b6 100644 --- a/spec/workers/pipeline_metrics_worker_spec.rb +++ b/spec/workers/pipeline_metrics_worker_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' describe PipelineMetricsWorker do let(:project) { create(:project, :repository) } - let!(:merge_request) { create(:merge_request, source_project: project, source_branch: pipeline.ref, head_pipeline_id: pipeline.id) } + let!(:merge_request) { create(:merge_request, source_project: project, source_branch: pipeline.ref, head_pipeline: pipeline) } let(:pipeline) do create(:ci_empty_pipeline, |