2019-07-25 01:11:48 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-12-13 19:13:44 -05:00
|
|
|
FactoryBot.define do
|
2020-04-03 14:10:03 -04:00
|
|
|
factory :merge_request, traits: [:has_internal_id] do
|
2017-03-23 12:37:14 -04:00
|
|
|
title { generate(:title) }
|
2017-01-25 14:52:12 -05:00
|
|
|
association :source_project, :repository, factory: :project
|
2014-07-31 11:07:24 -04:00
|
|
|
target_project { source_project }
|
2017-08-04 13:14:04 -04:00
|
|
|
author { source_project.creator }
|
2014-07-31 11:07:24 -04:00
|
|
|
|
2015-06-22 14:43:51 -04:00
|
|
|
# $ git log --pretty=oneline feature..master
|
2014-07-31 11:07:24 -04:00
|
|
|
# 5937ac0a7beb003549fc5fd26fc247adbce4a52e Add submodule from gitlab.com
|
|
|
|
# 570e7b2abdd848b95f2f578043fc23bd6f6fd24d Change some files
|
|
|
|
# 6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9 More submodules
|
|
|
|
# d14d6c0abdd253381df51a723d58691b2ee1ab08 Remove ds_store files
|
|
|
|
# c1acaa58bbcbc3eafe538cb8274ba387047b69f8 Ignore DS files
|
2014-08-06 02:52:56 -04:00
|
|
|
#
|
|
|
|
# See also RepoHelpers.sample_compare
|
|
|
|
#
|
2019-10-01 20:06:26 -04:00
|
|
|
source_branch { "master" }
|
|
|
|
target_branch { "feature" }
|
2014-07-31 11:07:24 -04:00
|
|
|
|
2019-10-01 20:06:26 -04:00
|
|
|
merge_status { "can_be_merged" }
|
2014-07-31 11:07:24 -04:00
|
|
|
|
2021-02-11 07:08:52 -05:00
|
|
|
trait :draft_merge_request do
|
|
|
|
title { generate(:draft_title) }
|
|
|
|
end
|
|
|
|
|
|
|
|
trait :wip_merge_request do
|
|
|
|
title { generate(:wip_title) }
|
|
|
|
end
|
|
|
|
|
2020-12-09 16:09:43 -05:00
|
|
|
trait :jira_title do
|
|
|
|
title { generate(:jira_title) }
|
|
|
|
end
|
|
|
|
|
|
|
|
trait :jira_branch do
|
|
|
|
source_branch { generate(:jira_branch) }
|
|
|
|
end
|
|
|
|
|
2017-10-07 00:25:17 -04:00
|
|
|
trait :with_image_diffs do
|
2019-10-01 20:06:26 -04:00
|
|
|
source_branch { "add_images_and_changes" }
|
|
|
|
target_branch { "master" }
|
2017-10-07 00:25:17 -04:00
|
|
|
end
|
|
|
|
|
2016-03-09 02:19:54 -05:00
|
|
|
trait :without_diffs do
|
2019-10-01 20:06:26 -04:00
|
|
|
source_branch { "improve/awesome" }
|
|
|
|
target_branch { "master" }
|
2016-03-09 02:19:54 -05:00
|
|
|
end
|
|
|
|
|
2014-08-06 02:52:56 -04:00
|
|
|
trait :conflict do
|
2019-10-01 20:06:26 -04:00
|
|
|
source_branch { "feature_conflict" }
|
|
|
|
target_branch { "feature" }
|
2014-08-06 02:52:56 -04:00
|
|
|
end
|
|
|
|
|
2016-03-01 06:32:20 -05:00
|
|
|
trait :merged do
|
2019-10-18 07:11:44 -04:00
|
|
|
state_id { MergeRequest.available_states[:merged] }
|
2016-03-01 06:32:20 -05:00
|
|
|
end
|
|
|
|
|
2020-08-13 14:10:36 -04:00
|
|
|
trait :with_merged_metrics do
|
|
|
|
merged
|
|
|
|
|
|
|
|
transient do
|
|
|
|
merged_by { author }
|
|
|
|
end
|
|
|
|
|
|
|
|
after(:build) do |merge_request, evaluator|
|
|
|
|
metrics = merge_request.build_metrics
|
2020-12-02 19:09:53 -05:00
|
|
|
metrics.merged_at = 1.week.from_now
|
2020-08-13 14:10:36 -04:00
|
|
|
metrics.merged_by = evaluator.merged_by
|
|
|
|
metrics.pipeline = create(:ci_empty_pipeline)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-05-08 17:44:32 -04:00
|
|
|
trait :merged_target do
|
2019-10-01 20:06:26 -04:00
|
|
|
source_branch { "merged-target" }
|
|
|
|
target_branch { "improve/awesome" }
|
2018-05-08 17:44:32 -04:00
|
|
|
end
|
|
|
|
|
2019-02-20 10:35:57 -05:00
|
|
|
trait :merged_last_month do
|
|
|
|
merged
|
|
|
|
|
|
|
|
after(:build) do |merge_request|
|
|
|
|
merge_request.build_metrics.merged_at = 1.month.ago
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2014-07-31 11:07:24 -04:00
|
|
|
trait :closed do
|
2019-10-18 07:11:44 -04:00
|
|
|
state_id { MergeRequest.available_states[:closed] }
|
2014-07-31 11:07:24 -04:00
|
|
|
end
|
|
|
|
|
2019-02-20 10:35:57 -05:00
|
|
|
trait :closed_last_month do
|
|
|
|
closed
|
|
|
|
|
|
|
|
after(:build) do |merge_request|
|
|
|
|
merge_request.build_metrics.latest_closed_at = 1.month.ago
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-04-16 23:51:16 -04:00
|
|
|
trait :opened do
|
2019-10-18 07:11:44 -04:00
|
|
|
state_id { MergeRequest.available_states[:opened] }
|
2017-04-16 23:51:16 -04:00
|
|
|
end
|
|
|
|
|
2018-06-05 07:42:18 -04:00
|
|
|
trait :invalid do
|
2019-10-01 20:06:26 -04:00
|
|
|
source_branch { "feature_one" }
|
|
|
|
target_branch { "feature_two" }
|
2018-06-05 07:42:18 -04:00
|
|
|
end
|
|
|
|
|
2016-08-24 13:11:48 -04:00
|
|
|
trait :locked do
|
2019-10-18 07:11:44 -04:00
|
|
|
state_id { MergeRequest.available_states[:locked] }
|
2016-08-24 13:11:48 -04:00
|
|
|
end
|
|
|
|
|
2014-07-31 11:07:24 -04:00
|
|
|
trait :simple do
|
2019-10-01 20:06:26 -04:00
|
|
|
source_branch { "feature" }
|
|
|
|
target_branch { "master" }
|
2014-07-31 11:07:24 -04:00
|
|
|
end
|
|
|
|
|
2016-02-04 13:23:58 -05:00
|
|
|
trait :rebased do
|
2019-10-01 20:06:26 -04:00
|
|
|
source_branch { "markdown" }
|
|
|
|
target_branch { "improve/awesome" }
|
2016-02-04 13:23:58 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
trait :diverged do
|
2019-10-01 20:06:26 -04:00
|
|
|
source_branch { "feature" }
|
|
|
|
target_branch { "master" }
|
2016-02-04 13:23:58 -05:00
|
|
|
end
|
|
|
|
|
2017-02-17 08:56:13 -05:00
|
|
|
trait :merge_when_pipeline_succeeds do
|
2019-10-01 20:06:26 -04:00
|
|
|
auto_merge_enabled { true }
|
|
|
|
auto_merge_strategy { AutoMergeService::STRATEGY_MERGE_WHEN_PIPELINE_SUCCEEDS }
|
2018-09-20 13:02:36 -04:00
|
|
|
merge_user { author }
|
2019-11-15 10:06:12 -05:00
|
|
|
merge_params { { sha: diff_head_sha } }
|
2015-12-03 04:27:34 -05:00
|
|
|
end
|
|
|
|
|
2017-10-11 16:06:15 -04:00
|
|
|
trait :remove_source_branch do
|
|
|
|
merge_params do
|
|
|
|
{ 'force_remove_source_branch' => '1' }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-06-05 17:08:27 -04:00
|
|
|
trait :with_head_pipeline do
|
|
|
|
after(:build) do |merge_request|
|
|
|
|
merge_request.head_pipeline = build(
|
|
|
|
:ci_pipeline,
|
|
|
|
:running,
|
|
|
|
project: merge_request.source_project,
|
|
|
|
ref: merge_request.source_branch,
|
|
|
|
sha: merge_request.diff_head_sha)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-08-02 02:05:07 -04:00
|
|
|
trait :with_test_reports do
|
2018-08-03 07:08:13 -04:00
|
|
|
after(:build) do |merge_request|
|
|
|
|
merge_request.head_pipeline = build(
|
|
|
|
:ci_pipeline,
|
2018-08-02 02:05:07 -04:00
|
|
|
:success,
|
2018-08-03 08:53:29 -04:00
|
|
|
:with_test_reports,
|
2018-08-02 02:05:07 -04:00
|
|
|
project: merge_request.source_project,
|
|
|
|
ref: merge_request.source_branch,
|
2018-08-03 07:08:13 -04:00
|
|
|
sha: merge_request.diff_head_sha)
|
2018-08-02 02:05:07 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-05-08 17:09:47 -04:00
|
|
|
trait :with_accessibility_reports do
|
|
|
|
after(:build) do |merge_request|
|
|
|
|
merge_request.head_pipeline = build(
|
|
|
|
:ci_pipeline,
|
|
|
|
:success,
|
|
|
|
:with_accessibility_reports,
|
|
|
|
project: merge_request.source_project,
|
|
|
|
ref: merge_request.source_branch,
|
|
|
|
sha: merge_request.diff_head_sha)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-12-08 10:09:45 -05:00
|
|
|
trait :with_codequality_reports do
|
|
|
|
after(:build) do |merge_request|
|
|
|
|
merge_request.head_pipeline = build(
|
|
|
|
:ci_pipeline,
|
|
|
|
:success,
|
|
|
|
:with_codequality_reports,
|
|
|
|
project: merge_request.source_project,
|
|
|
|
ref: merge_request.source_branch,
|
|
|
|
sha: merge_request.diff_head_sha)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-05-21 20:08:07 -04:00
|
|
|
trait :unique_branches do
|
|
|
|
source_branch { generate(:branch) }
|
|
|
|
target_branch { generate(:branch) }
|
|
|
|
end
|
|
|
|
|
2020-10-05 14:08:51 -04:00
|
|
|
trait :unique_author do
|
|
|
|
author { association(:user) }
|
|
|
|
end
|
|
|
|
|
2020-03-17 14:09:44 -04:00
|
|
|
trait :with_coverage_reports do
|
|
|
|
after(:build) do |merge_request|
|
|
|
|
merge_request.head_pipeline = build(
|
|
|
|
:ci_pipeline,
|
|
|
|
:success,
|
2020-08-25 08:04:30 -04:00
|
|
|
:with_coverage_report_artifact,
|
2020-03-17 14:09:44 -04:00
|
|
|
project: merge_request.source_project,
|
|
|
|
ref: merge_request.source_branch,
|
|
|
|
sha: merge_request.diff_head_sha)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-02-03 13:09:25 -05:00
|
|
|
trait :with_codequality_mr_diff_reports do
|
|
|
|
after(:build) do |merge_request|
|
|
|
|
merge_request.head_pipeline = build(
|
|
|
|
:ci_pipeline,
|
|
|
|
:success,
|
|
|
|
:with_codequality_mr_diff_report,
|
|
|
|
project: merge_request.source_project,
|
|
|
|
ref: merge_request.source_branch,
|
|
|
|
sha: merge_request.diff_head_sha)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-04-21 11:21:10 -04:00
|
|
|
trait :with_terraform_reports do
|
|
|
|
after(:build) do |merge_request|
|
|
|
|
merge_request.head_pipeline = build(
|
|
|
|
:ci_pipeline,
|
|
|
|
:success,
|
|
|
|
:with_terraform_reports,
|
|
|
|
project: merge_request.source_project,
|
|
|
|
ref: merge_request.source_branch,
|
|
|
|
sha: merge_request.diff_head_sha)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-02-10 04:09:38 -05:00
|
|
|
trait :with_sast_reports do
|
|
|
|
after(:build) do |merge_request|
|
|
|
|
merge_request.head_pipeline = build(
|
|
|
|
:ci_pipeline,
|
|
|
|
:success,
|
|
|
|
:with_sast_report,
|
|
|
|
project: merge_request.source_project,
|
|
|
|
ref: merge_request.source_branch,
|
|
|
|
sha: merge_request.diff_head_sha)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
trait :with_secret_detection_reports do
|
|
|
|
after(:build) do |merge_request|
|
|
|
|
merge_request.head_pipeline = build(
|
|
|
|
:ci_pipeline,
|
|
|
|
:success,
|
|
|
|
:with_secret_detection_report,
|
|
|
|
project: merge_request.source_project,
|
|
|
|
ref: merge_request.source_branch,
|
|
|
|
sha: merge_request.diff_head_sha)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-10-21 11:05:58 -04:00
|
|
|
trait :with_exposed_artifacts do
|
|
|
|
after(:build) do |merge_request|
|
|
|
|
merge_request.head_pipeline = build(
|
|
|
|
:ci_pipeline,
|
|
|
|
:success,
|
|
|
|
:with_exposed_artifacts,
|
|
|
|
project: merge_request.source_project,
|
|
|
|
ref: merge_request.source_branch,
|
|
|
|
sha: merge_request.diff_head_sha)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-03-21 09:08:32 -04:00
|
|
|
trait :with_legacy_detached_merge_request_pipeline do
|
|
|
|
after(:create) do |merge_request|
|
2020-03-30 14:08:07 -04:00
|
|
|
create(:ci_pipeline, :legacy_detached_merge_request_pipeline, merge_request: merge_request)
|
2019-03-21 09:08:32 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-03-07 02:33:13 -05:00
|
|
|
trait :with_detached_merge_request_pipeline do
|
2019-03-21 09:08:32 -04:00
|
|
|
after(:create) do |merge_request|
|
2020-03-30 14:08:07 -04:00
|
|
|
create(:ci_pipeline, :detached_merge_request_pipeline, merge_request: merge_request)
|
2019-02-28 04:15:32 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-03-07 02:33:13 -05:00
|
|
|
trait :with_merge_request_pipeline do
|
|
|
|
transient do
|
|
|
|
merge_sha { 'test-merge-sha' }
|
|
|
|
source_sha { source_branch_sha }
|
|
|
|
target_sha { target_branch_sha }
|
|
|
|
end
|
|
|
|
|
2019-03-21 09:08:32 -04:00
|
|
|
after(:create) do |merge_request, evaluator|
|
2020-03-30 14:08:07 -04:00
|
|
|
create(:ci_pipeline, :merged_result_pipeline,
|
2019-03-07 02:33:13 -05:00
|
|
|
merge_request: merge_request,
|
|
|
|
sha: evaluator.merge_sha,
|
|
|
|
source_sha: evaluator.source_sha,
|
2020-03-30 14:08:07 -04:00
|
|
|
target_sha: evaluator.target_sha
|
|
|
|
)
|
2019-03-07 02:33:13 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-10-09 12:17:40 -04:00
|
|
|
trait :deployed_review_app do
|
2019-10-01 20:06:26 -04:00
|
|
|
target_branch { 'pages-deploy-target' }
|
2018-10-09 12:17:40 -04:00
|
|
|
|
|
|
|
transient do
|
2020-11-20 13:09:37 -05:00
|
|
|
deployment { association(:deployment, :review_app) }
|
2018-10-09 12:17:40 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
after(:build) do |merge_request, evaluator|
|
|
|
|
merge_request.source_branch = evaluator.deployment.ref
|
|
|
|
merge_request.source_project = evaluator.deployment.project
|
|
|
|
merge_request.target_project = evaluator.deployment.project
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-12-17 04:07:48 -05:00
|
|
|
trait :sequence_source_branch do
|
|
|
|
sequence(:source_branch) { |n| "feature#{n}" }
|
|
|
|
end
|
|
|
|
|
2017-08-09 07:30:07 -04:00
|
|
|
after(:build) do |merge_request|
|
|
|
|
target_project = merge_request.target_project
|
2017-08-09 09:41:45 -04:00
|
|
|
source_project = merge_request.source_project
|
2017-08-09 07:30:07 -04:00
|
|
|
|
2017-11-06 09:03:11 -05:00
|
|
|
# Fake `fetch_ref!` if we don't have repository
|
2020-12-08 19:09:42 -05:00
|
|
|
# We have too many existing tests relying on this behaviour
|
2017-08-09 09:41:45 -04:00
|
|
|
unless [target_project, source_project].all?(&:repository_exists?)
|
2017-11-06 09:03:11 -05:00
|
|
|
allow(merge_request).to receive(:fetch_ref!)
|
2017-08-09 07:30:07 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-10-18 07:11:44 -04:00
|
|
|
after(:build) do |merge_request, evaluator|
|
|
|
|
merge_request.state_id = MergeRequest.available_states[evaluator.state]
|
|
|
|
end
|
|
|
|
|
2018-07-30 14:52:42 -04:00
|
|
|
after(:create) do |merge_request, evaluator|
|
|
|
|
merge_request.cache_merge_request_closes_issues!
|
|
|
|
end
|
|
|
|
|
2016-03-01 06:32:20 -05:00
|
|
|
factory :merged_merge_request, traits: [:merged]
|
2014-07-31 11:07:24 -04:00
|
|
|
factory :closed_merge_request, traits: [:closed]
|
2017-07-19 10:03:50 -04:00
|
|
|
factory :reopened_merge_request, traits: [:opened]
|
2018-06-05 07:42:18 -04:00
|
|
|
factory :invalid_merge_request, traits: [:invalid]
|
2021-02-09 07:09:48 -05:00
|
|
|
factory :merge_request_with_diffs
|
2016-09-16 07:02:42 -04:00
|
|
|
factory :merge_request_with_diff_notes do
|
|
|
|
after(:create) do |mr|
|
|
|
|
create(:diff_note_on_merge_request, noteable: mr, project: mr.source_project)
|
|
|
|
end
|
|
|
|
end
|
2016-09-26 16:10:54 -04:00
|
|
|
|
|
|
|
factory :labeled_merge_request do
|
|
|
|
transient do
|
2019-10-01 20:06:26 -04:00
|
|
|
labels { [] }
|
2016-09-26 16:10:54 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
after(:create) do |merge_request, evaluator|
|
2020-07-21 08:09:30 -04:00
|
|
|
merge_request.update!(labels: evaluator.labels)
|
2016-09-26 16:10:54 -04:00
|
|
|
end
|
|
|
|
end
|
2020-09-28 14:09:40 -04:00
|
|
|
|
|
|
|
factory :merge_request_without_merge_request_diff, class: 'MergeRequestWithoutMergeRequestDiff'
|
2014-07-31 11:07:24 -04:00
|
|
|
end
|
|
|
|
end
|