diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-11-13 15:06:22 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-11-13 15:06:22 +0300 |
commit | 4e516dbff9767a35677fdc4a6e39005b4b564376 (patch) | |
tree | 7c650b30777b8e7f72cafb186e9446a50d3fa3be /spec | |
parent | 4f01ac5ba0bf72427ed4fef9b229d056dbb60e89 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
23 files changed, 147 insertions, 243 deletions
diff --git a/spec/controllers/projects/pipelines_controller_spec.rb b/spec/controllers/projects/pipelines_controller_spec.rb index 9d3753ef2ab..3c7f69f0e6e 100644 --- a/spec/controllers/projects/pipelines_controller_spec.rb +++ b/spec/controllers/projects/pipelines_controller_spec.rb @@ -149,7 +149,7 @@ describe Projects::PipelinesController do end describe 'GET show.json' do - let(:pipeline) { create(:ci_pipeline_with_one_job, project: project) } + let(:pipeline) { create(:ci_pipeline, project: project) } it 'returns the pipeline' do get_pipeline_json diff --git a/spec/factories/ci/pipelines.rb b/spec/factories/ci/pipelines.rb index 39ab574cc76..e2ec9d496bc 100644 --- a/spec/factories/ci/pipelines.rb +++ b/spec/factories/ci/pipelines.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true FactoryBot.define do + # TODO: we can remove this factory in favour of :ci_pipeline factory :ci_empty_pipeline, class: Ci::Pipeline do source { :push } ref { 'master' } @@ -10,20 +11,6 @@ FactoryBot.define do project - factory :ci_pipeline_without_jobs do - after(:build) do |pipeline| - pipeline.instance_variable_set(:@ci_yaml_file, YAML.dump({})) - end - end - - factory :ci_pipeline_with_one_job do - after(:build) do |pipeline| - allow(pipeline).to receive(:ci_yaml_file) do - pipeline.instance_variable_set(:@ci_yaml_file, YAML.dump({ rspec: { script: "ls" } })) - end - end - end - # Persist merge request head_pipeline_id # on pipeline factories to avoid circular references transient { head_pipeline_of { nil } } @@ -34,24 +21,8 @@ FactoryBot.define do end factory :ci_pipeline do - transient { config { nil } } - - after(:build) do |pipeline, evaluator| - if evaluator.config - pipeline.instance_variable_set(:@ci_yaml_file, YAML.dump(evaluator.config)) - - # Populates pipeline with errors - pipeline.config_processor if evaluator.config - else - pipeline.instance_variable_set(:@ci_yaml_file, File.read(Rails.root.join('spec/support/gitlab_stubs/gitlab_ci.yml'))) - end - end - trait :invalid do - config do - { rspec: nil } - end - + yaml_errors { 'invalid YAML' } failure_reason { :config_error } end diff --git a/spec/factories/commit_statuses.rb b/spec/factories/commit_statuses.rb index 3ce71a1b05d..5d635d93ff2 100644 --- a/spec/factories/commit_statuses.rb +++ b/spec/factories/commit_statuses.rb @@ -7,7 +7,7 @@ FactoryBot.define do stage_idx { 0 } status { 'success' } description { 'commit status'} - pipeline factory: :ci_pipeline_with_one_job + pipeline factory: :ci_pipeline started_at { 'Tue, 26 Jan 2016 08:21:42 +0100'} finished_at { 'Tue, 26 Jan 2016 08:23:42 +0100'} diff --git a/spec/features/merge_request/user_sees_deployment_widget_spec.rb b/spec/features/merge_request/user_sees_deployment_widget_spec.rb index 87fb3f5b3e7..cdffd2ae2f6 100644 --- a/spec/features/merge_request/user_sees_deployment_widget_spec.rb +++ b/spec/features/merge_request/user_sees_deployment_widget_spec.rb @@ -11,7 +11,7 @@ describe 'Merge request > User sees deployment widget', :js do let(:role) { :developer } let(:ref) { merge_request.target_branch } let(:sha) { project.commit(ref).id } - let(:pipeline) { create(:ci_pipeline_without_jobs, sha: sha, project: project, ref: ref) } + let(:pipeline) { create(:ci_pipeline, sha: sha, project: project, ref: ref) } let!(:manual) { } before do @@ -33,7 +33,7 @@ describe 'Merge request > User sees deployment widget', :js do end context 'when a user created a new merge request with the same SHA' do - let(:pipeline2) { create(:ci_pipeline_without_jobs, sha: sha, project: project, ref: 'new-patch-1') } + let(:pipeline2) { create(:ci_pipeline, sha: sha, project: project, ref: 'new-patch-1') } let(:build2) { create(:ci_build, :success, pipeline: pipeline2) } let(:environment2) { create(:environment, project: project) } let!(:deployment2) { create(:deployment, environment: environment2, sha: sha, ref: 'new-patch-1', deployable: build2) } diff --git a/spec/features/merge_request/user_sees_merge_widget_spec.rb b/spec/features/merge_request/user_sees_merge_widget_spec.rb index 7c2c7ae4386..098f41f120d 100644 --- a/spec/features/merge_request/user_sees_merge_widget_spec.rb +++ b/spec/features/merge_request/user_sees_merge_widget_spec.rb @@ -44,7 +44,7 @@ describe 'Merge request > User sees merge widget', :js do context 'view merge request' do let!(:environment) { create(:environment, project: project) } let(:sha) { project.commit(merge_request.source_branch).sha } - let(:pipeline) { create(:ci_pipeline_without_jobs, status: 'success', sha: sha, project: project, ref: merge_request.source_branch) } + let(:pipeline) { create(:ci_pipeline, status: 'success', sha: sha, project: project, ref: merge_request.source_branch) } let(:build) { create(:ci_build, :success, pipeline: pipeline) } let!(:deployment) do @@ -745,7 +745,7 @@ describe 'Merge request > User sees merge widget', :js do context 'when MR has pipeline but user does not have permission' do let(:sha) { project.commit(merge_request.source_branch).sha } - let!(:pipeline) { create(:ci_pipeline_without_jobs, status: 'success', sha: sha, project: project, ref: merge_request.source_branch) } + let!(:pipeline) { create(:ci_pipeline, status: 'success', sha: sha, project: project, ref: merge_request.source_branch) } before do project.update( diff --git a/spec/graphql/types/base_enum_spec.rb b/spec/graphql/types/base_enum_spec.rb new file mode 100644 index 00000000000..3eadb492cf5 --- /dev/null +++ b/spec/graphql/types/base_enum_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Types::BaseEnum do + describe '#enum' do + let(:enum) do + Class.new(described_class) do + value 'TEST', value: 3 + value 'other' + value 'NORMAL' + end + end + + it 'adds all enum values to #enum' do + expect(enum.enum.keys).to contain_exactly('test', 'other', 'normal') + expect(enum.enum.values).to contain_exactly(3, 'other', 'NORMAL') + end + + it 'is a HashWithIndefferentAccess' do + expect(enum.enum).to be_a(HashWithIndifferentAccess) + end + end +end diff --git a/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb index 9bccd5be4fe..75160a93ba7 100644 --- a/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb @@ -7,9 +7,7 @@ describe Gitlab::Ci::Pipeline::Chain::Populate do set(:user) { create(:user) } let(:pipeline) do - build(:ci_pipeline_with_one_job, project: project, - ref: 'master', - user: user) + build(:ci_pipeline, project: project, ref: 'master', user: user) end let(:command) do @@ -22,6 +20,14 @@ describe Gitlab::Ci::Pipeline::Chain::Populate do let(:step) { described_class.new(pipeline, command) } + let(:config) do + { rspec: { script: 'rspec' } } + end + + before do + stub_ci_pipeline_yaml_file(YAML.dump(config)) + end + context 'when pipeline doesn not have seeds block' do before do step.perform! @@ -59,10 +65,6 @@ describe Gitlab::Ci::Pipeline::Chain::Populate do } } end - let(:pipeline) do - build(:ci_pipeline, project: project, config: config) - end - before do step.perform! end @@ -202,10 +204,6 @@ describe Gitlab::Ci::Pipeline::Chain::Populate do prod: { script: 'cap prod', stage: 'deploy', only: ['tags'] } } end - let(:pipeline) do - build(:ci_pipeline, ref: 'master', project: project, config: config) - end - it_behaves_like 'a correct pipeline' context 'when variables expression is specified' do diff --git a/spec/lib/gitlab/ci/pipeline/chain/remove_unwanted_chat_jobs_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/remove_unwanted_chat_jobs_spec.rb index 7c1c016b4bb..af0f4d68150 100644 --- a/spec/lib/gitlab/ci/pipeline/chain/remove_unwanted_chat_jobs_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/chain/remove_unwanted_chat_jobs_spec.rb @@ -6,13 +6,17 @@ describe Gitlab::Ci::Pipeline::Chain::RemoveUnwantedChatJobs do let(:project) { create(:project, :repository) } let(:pipeline) do - build(:ci_pipeline_with_one_job, project: project, ref: 'master') + build(:ci_pipeline, project: project) end let(:command) do double(:command, project: project, chat_data: { command: 'echo' }) end + before do + stub_ci_pipeline_yaml_file(YAML.dump(rspec: { script: 'rspec' })) + end + describe '#perform!' do it 'removes unwanted jobs for chat pipelines' do allow(pipeline).to receive(:chat?).and_return(true) diff --git a/spec/lib/gitlab/ci/pipeline/chain/validate/config_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/validate/config_spec.rb index e23aa09d881..ed3ce6760a3 100644 --- a/spec/lib/gitlab/ci/pipeline/chain/validate/config_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/chain/validate/config_spec.rb @@ -13,11 +13,13 @@ describe Gitlab::Ci::Pipeline::Chain::Validate::Config do save_incompleted: true) end + let(:pipeline) do + build(:ci_pipeline, project: project) + end + let!(:step) { described_class.new(pipeline, command) } - before do - step.perform! - end + subject { step.perform! } context 'when pipeline has no YAML configuration' do let(:pipeline) do @@ -25,18 +27,23 @@ describe Gitlab::Ci::Pipeline::Chain::Validate::Config do end it 'appends errors about missing configuration' do + subject + expect(pipeline.errors.to_a) .to include 'Missing .gitlab-ci.yml file' end it 'breaks the chain' do + subject + expect(step.break?).to be true end end context 'when YAML configuration contains errors' do - let(:pipeline) do - build(:ci_pipeline, project: project, config: 'invalid YAML') + before do + stub_ci_pipeline_yaml_file('invalid YAML') + subject end it 'appends errors about YAML errors' do @@ -56,10 +63,14 @@ describe Gitlab::Ci::Pipeline::Chain::Validate::Config do end it 'fails the pipeline' do + subject + expect(pipeline.reload).to be_failed end it 'sets a config error failure reason' do + subject + expect(pipeline.reload.config_error?).to eq true end end @@ -72,6 +83,8 @@ describe Gitlab::Ci::Pipeline::Chain::Validate::Config do end it 'does not drop pipeline' do + subject + expect(pipeline).not_to be_failed expect(pipeline).not_to be_persisted end @@ -79,17 +92,15 @@ describe Gitlab::Ci::Pipeline::Chain::Validate::Config do end context 'when pipeline contains configuration validation errors' do - let(:config) do - { + before do + stub_ci_pipeline_yaml_file(YAML.dump({ rspec: { before_script: 10, script: 'ls -al' } - } - end + })) - let(:pipeline) do - build(:ci_pipeline, project: project, config: config) + subject end it 'appends configuration validation errors to pipeline errors' do @@ -103,8 +114,13 @@ describe Gitlab::Ci::Pipeline::Chain::Validate::Config do end context 'when pipeline is correct and complete' do - let(:pipeline) do - build(:ci_pipeline_with_one_job, project: project) + before do + stub_ci_pipeline_yaml_file(YAML.dump({ + rspec: { + script: 'rspec' + } + })) + subject end it 'does not invalidate the pipeline' do @@ -119,6 +135,7 @@ describe Gitlab::Ci::Pipeline::Chain::Validate::Config do context 'when pipeline source is merge request' do before do stub_ci_pipeline_yaml_file(YAML.dump(config)) + subject end let(:pipeline) { build_stubbed(:ci_pipeline, project: project) } diff --git a/spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb b/spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb index 934e676d020..b190a1007a0 100644 --- a/spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb +++ b/spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb @@ -132,10 +132,6 @@ describe Gitlab::ImportExport::FastHashSerializer do end it 'has no when YML attributes but only the DB column' do - allow_any_instance_of(Ci::Pipeline) - .to receive(:ci_yaml_file) - .and_return(File.read(Rails.root.join('spec/support/gitlab_stubs/gitlab_ci.yml'))) - expect_any_instance_of(Gitlab::Ci::YamlProcessor).not_to receive(:build_attributes) subject diff --git a/spec/lib/gitlab/import_export/project_tree_saver_spec.rb b/spec/lib/gitlab/import_export/project_tree_saver_spec.rb index ff46e062a5d..97d8b155826 100644 --- a/spec/lib/gitlab/import_export/project_tree_saver_spec.rb +++ b/spec/lib/gitlab/import_export/project_tree_saver_spec.rb @@ -203,7 +203,6 @@ describe Gitlab::ImportExport::ProjectTreeSaver do end it 'has no when YML attributes but only the DB column' do - allow_any_instance_of(Ci::Pipeline).to receive(:ci_yaml_file).and_return(File.read(Rails.root.join('spec/support/gitlab_stubs/gitlab_ci.yml'))) expect_any_instance_of(Gitlab::Ci::YamlProcessor).not_to receive(:build_attributes) saved_project_json diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index 0ad196bd050..f01d89b35e2 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -17,6 +17,9 @@ describe Gitlab::UsageData do create(:service, project: projects[0], type: 'SlackSlashCommandsService', active: true) create(:service, project: projects[1], type: 'SlackService', active: true) create(:service, project: projects[2], type: 'SlackService', active: true) + create(:service, project: projects[2], type: 'MattermostService', active: true) + create(:service, project: projects[2], type: 'JenkinsService', active: true) + create(:service, project: projects[2], type: 'CustomIssueTrackerService', active: true) create(:project_error_tracking_setting, project: projects[0]) create(:project_error_tracking_setting, project: projects[1], enabled: false) create_list(:issue, 4, project: projects[0]) @@ -157,6 +160,9 @@ describe Gitlab::UsageData do projects_jira_cloud_active projects_slack_notifications_active projects_slack_slash_active + projects_custom_issue_tracker_active + projects_jenkins_active + projects_mattermost_active projects_prometheus_active projects_with_repositories_enabled projects_with_error_tracking_enabled @@ -190,6 +196,9 @@ describe Gitlab::UsageData do expect(count_data[:projects_jira_cloud_active]).to eq(2) expect(count_data[:projects_slack_notifications_active]).to eq(2) expect(count_data[:projects_slack_slash_active]).to eq(1) + expect(count_data[:projects_custom_issue_tracker_active]).to eq(1) + expect(count_data[:projects_jenkins_active]).to eq(1) + expect(count_data[:projects_mattermost_active]).to eq(1) expect(count_data[:projects_with_repositories_enabled]).to eq(3) expect(count_data[:projects_with_error_tracking_enabled]).to eq(1) expect(count_data[:issues_with_associated_zoom_link]).to eq(2) diff --git a/spec/migrations/schedule_fix_gitlab_com_pages_access_level_spec.rb b/spec/migrations/schedule_fix_gitlab_com_pages_access_level_spec.rb deleted file mode 100644 index 1ddb468f6b7..00000000000 --- a/spec/migrations/schedule_fix_gitlab_com_pages_access_level_spec.rb +++ /dev/null @@ -1,145 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' -require Rails.root.join('db', 'post_migrate', '20191017045817_schedule_fix_gitlab_com_pages_access_level.rb') - -describe ScheduleFixGitlabComPagesAccessLevel, :migration, :sidekiq_might_not_need_inline, schema: 2019_10_16_072826 do - using RSpec::Parameterized::TableSyntax - - let(:migration_name) { 'FixGitlabComPagesAccessLevel' } - - ProjectClass = ::Gitlab::BackgroundMigration::FixGitlabComPagesAccessLevel::Project - FeatureClass = ::Gitlab::BackgroundMigration::FixGitlabComPagesAccessLevel::ProjectFeature - - let(:namespaces_table) { table(:namespaces) } - let(:projects_table) { table(:projects) } - let(:features_table) { table(:project_features) } - let(:pages_metadata_table) { table(:project_pages_metadata) } - - let(:subgroup) do - root_group = namespaces_table.create(path: "group", name: "group") - namespaces_table.create!(path: "subgroup", name: "group", parent_id: root_group.id) - end - - before do - allow(::Gitlab).to receive(:com?).and_return true - end - - describe 'scheduling migration' do - let!(:first_project) { create_project(ProjectClass::PRIVATE, FeatureClass::PRIVATE, false, false, 'first' ) } - let!(:last_project) { create_project(ProjectClass::PRIVATE, FeatureClass::PRIVATE, false, false, 'second' ) } - - subject do - Sidekiq::Testing.fake! do - migrate! - end - end - - it 'schedules background migrations' do - Timecop.freeze do - subject - - expect(migration_name).to be_scheduled_delayed_migration(2.minutes, first_project.id, last_project.id) - expect(BackgroundMigrationWorker.jobs.size).to eq(1) - end - end - - context 'not on gitlab.com' do - before do - allow(::Gitlab).to receive(:com?).and_return false - end - - it 'does not schedule background migrations' do - Timecop.freeze do - subject - - expect(BackgroundMigrationWorker.jobs.size).to eq(0) - end - end - end - end - - where(:visibility_level, :pages_access_level, - :pages_deployed, :ac_is_enabled_in_config, - :result_pages_access_level) do - # Does not change anything if pages are not deployed - ProjectClass::PRIVATE | FeatureClass::DISABLED | false | false | FeatureClass::DISABLED - ProjectClass::PRIVATE | FeatureClass::PRIVATE | false | false | FeatureClass::PRIVATE - ProjectClass::PRIVATE | FeatureClass::ENABLED | false | false | FeatureClass::ENABLED - ProjectClass::PRIVATE | FeatureClass::PUBLIC | false | false | FeatureClass::PUBLIC - ProjectClass::INTERNAL | FeatureClass::DISABLED | false | false | FeatureClass::DISABLED - ProjectClass::INTERNAL | FeatureClass::PRIVATE | false | false | FeatureClass::PRIVATE - ProjectClass::INTERNAL | FeatureClass::ENABLED | false | false | FeatureClass::ENABLED - ProjectClass::INTERNAL | FeatureClass::PUBLIC | false | false | FeatureClass::PUBLIC - ProjectClass::PUBLIC | FeatureClass::DISABLED | false | false | FeatureClass::DISABLED - ProjectClass::PUBLIC | FeatureClass::PRIVATE | false | false | FeatureClass::PRIVATE - ProjectClass::PUBLIC | FeatureClass::ENABLED | false | false | FeatureClass::ENABLED - ProjectClass::PUBLIC | FeatureClass::PUBLIC | false | false | FeatureClass::PUBLIC - - # Does not change anything if pages are already private in config.json - # many of these cases are invalid and will not occur in production - ProjectClass::PRIVATE | FeatureClass::DISABLED | true | true | FeatureClass::DISABLED - ProjectClass::PRIVATE | FeatureClass::PRIVATE | true | true | FeatureClass::PRIVATE - ProjectClass::PRIVATE | FeatureClass::ENABLED | true | true | FeatureClass::ENABLED - ProjectClass::PRIVATE | FeatureClass::PUBLIC | true | true | FeatureClass::PUBLIC - ProjectClass::INTERNAL | FeatureClass::DISABLED | true | true | FeatureClass::DISABLED - ProjectClass::INTERNAL | FeatureClass::PRIVATE | true | true | FeatureClass::PRIVATE - ProjectClass::INTERNAL | FeatureClass::ENABLED | true | true | FeatureClass::ENABLED - ProjectClass::INTERNAL | FeatureClass::PUBLIC | true | true | FeatureClass::PUBLIC - ProjectClass::PUBLIC | FeatureClass::DISABLED | true | true | FeatureClass::DISABLED - ProjectClass::PUBLIC | FeatureClass::PRIVATE | true | true | FeatureClass::PRIVATE - ProjectClass::PUBLIC | FeatureClass::ENABLED | true | true | FeatureClass::ENABLED - ProjectClass::PUBLIC | FeatureClass::PUBLIC | true | true | FeatureClass::PUBLIC - - # when pages are deployed and ac is disabled in config - ProjectClass::PRIVATE | FeatureClass::DISABLED | true | false | FeatureClass::DISABLED - ProjectClass::PRIVATE | FeatureClass::PRIVATE | true | false | FeatureClass::PUBLIC # need to update - ProjectClass::PRIVATE | FeatureClass::ENABLED | true | false | FeatureClass::PUBLIC # invalid state, need to update - ProjectClass::PRIVATE | FeatureClass::PUBLIC | true | false | FeatureClass::PUBLIC - ProjectClass::INTERNAL | FeatureClass::DISABLED | true | false | FeatureClass::DISABLED - ProjectClass::INTERNAL | FeatureClass::PRIVATE | true | false | FeatureClass::PUBLIC # need to update - ProjectClass::INTERNAL | FeatureClass::ENABLED | true | false | FeatureClass::PUBLIC # invalid state, need to update - ProjectClass::INTERNAL | FeatureClass::PUBLIC | true | false | FeatureClass::PUBLIC - ProjectClass::PUBLIC | FeatureClass::DISABLED | true | false | FeatureClass::DISABLED - ProjectClass::PUBLIC | FeatureClass::PRIVATE | true | false | FeatureClass::ENABLED # need to update - ProjectClass::PUBLIC | FeatureClass::ENABLED | true | false | FeatureClass::ENABLED - ProjectClass::PUBLIC | FeatureClass::PUBLIC | true | false | FeatureClass::ENABLED # invalid state, need to update - end - - with_them do - it 'fixes settings' do - perform_enqueued_jobs do - project = create_project(visibility_level, pages_access_level, pages_deployed, ac_is_enabled_in_config) - - expect(features_table.find_by(project_id: project.id).pages_access_level).to eq(pages_access_level) - - migrate! - - expect(features_table.find_by(project_id: project.id).pages_access_level).to eq(result_pages_access_level) - end - end - end - - def create_project(visibility_level, pages_access_level, pages_deployed, ac_is_enabled_in_config, path = 'project') - project = projects_table.create!(path: path, visibility_level: visibility_level, - namespace_id: subgroup.id) - - pages_metadata_table.create!(project_id: project.id, deployed: pages_deployed) - - if pages_deployed - FileUtils.mkdir_p(ProjectClass.find(project.id).public_pages_path) - - # write config.json - allow(project).to receive(:public_pages?).and_return(!ac_is_enabled_in_config) - allow(project).to receive(:pages_domains).and_return([]) - allow(project).to receive(:project_id).and_return(project.id) - allow(project).to receive(:pages_path).and_return(ProjectClass.find(project.id).pages_path) - Projects::UpdatePagesConfigurationService.new(project).execute - end - - project.update!(visibility_level: visibility_level) - features_table.create!(project_id: project.id, pages_access_level: pages_access_level) - - project - end -end diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb index 9295bb993ce..1242cf05a59 100644 --- a/spec/models/ci/pipeline_spec.rb +++ b/spec/models/ci/pipeline_spec.rb @@ -980,7 +980,11 @@ describe Ci::Pipeline, :mailer do describe 'pipeline stages' do describe '#stage_seeds' do - let(:pipeline) { build(:ci_pipeline, config: config) } + before do + stub_ci_pipeline_yaml_file(YAML.dump(config)) + end + + let(:pipeline) { build(:ci_pipeline) } let(:config) { { rspec: { script: 'rake' } } } it 'returns preseeded stage seeds object' do @@ -1010,7 +1014,7 @@ describe Ci::Pipeline, :mailer do context 'when refs policy is specified' do let(:pipeline) do - build(:ci_pipeline, ref: 'feature', tag: true, config: config) + build(:ci_pipeline, ref: 'feature', tag: true) end let(:config) do @@ -1028,7 +1032,7 @@ describe Ci::Pipeline, :mailer do end context 'when source policy is specified' do - let(:pipeline) { build(:ci_pipeline, source: :schedule, config: config) } + let(:pipeline) { build(:ci_pipeline, source: :schedule) } let(:config) do { production: { stage: 'deploy', script: 'cap prod', only: ['triggers'] }, @@ -1060,7 +1064,7 @@ describe Ci::Pipeline, :mailer do context 'when user configured kubernetes from CI/CD > Clusters' do let!(:cluster) { create(:cluster, :project, :provided_by_gcp) } let(:project) { cluster.project } - let(:pipeline) { build(:ci_pipeline, project: project, config: config) } + let(:pipeline) { build(:ci_pipeline, project: project) } it 'returns seeds for kubernetes dependent job' do seeds = pipeline.stage_seeds @@ -1098,6 +1102,10 @@ describe Ci::Pipeline, :mailer do end describe '#seeds_size' do + before do + stub_ci_pipeline_yaml_file(YAML.dump(config)) + end + context 'when refs policy is specified' do let(:config) do { production: { stage: 'deploy', script: 'cap prod', only: ['master'] }, @@ -1105,7 +1113,7 @@ describe Ci::Pipeline, :mailer do end let(:pipeline) do - build(:ci_pipeline, ref: 'feature', tag: true, config: config) + build(:ci_pipeline, ref: 'feature', tag: true) end it 'returns real seeds size' do @@ -2886,21 +2894,25 @@ describe Ci::Pipeline, :mailer do end describe '#has_yaml_errors?' do + before do + stub_ci_pipeline_yaml_file(YAML.dump(config)) + end + + let(:pipeline) { create(:ci_pipeline) } + context 'when pipeline has errors' do - let(:pipeline) do - create(:ci_pipeline, config: { rspec: nil }) - end + let(:config) { { rspec: nil } } it 'contains yaml errors' do + pipeline.config_processor + expect(pipeline).to have_yaml_errors expect(pipeline.yaml_errors).to include('contains unknown keys') end end context 'when pipeline has undefined error' do - let(:pipeline) do - create(:ci_pipeline, config: {}) - end + let(:config) { double(:config) } it 'contains yaml errors' do expect(::Gitlab::Ci::YamlProcessor).to receive(:new) @@ -2910,14 +2922,16 @@ describe Ci::Pipeline, :mailer do .with(be_a(RuntimeError), anything) .and_call_original + pipeline.config_processor + expect(pipeline).to have_yaml_errors expect(pipeline.yaml_errors).to include('Undefined error') end end context 'when pipeline does not have errors' do - let(:pipeline) do - create(:ci_pipeline, config: { rspec: { script: 'rake test' } }) + let(:config) do + { rspec: { script: 'rake test' } } end it 'does not contain yaml errors' do diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index adf178330f4..f775dfb87a2 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -2807,7 +2807,7 @@ describe MergeRequest do describe '#mergeable_with_quick_action?' do def create_pipeline(status) - pipeline = create(:ci_pipeline_with_one_job, + pipeline = create(:ci_pipeline, project: project, ref: merge_request.source_branch, sha: merge_request.diff_head_sha, @@ -2922,9 +2922,9 @@ describe MergeRequest do let(:project) { create(:project, :public, :repository) } let(:merge_request) { create(:merge_request, source_project: project) } - let!(:first_pipeline) { create(:ci_pipeline_without_jobs, pipeline_arguments) } - let!(:last_pipeline) { create(:ci_pipeline_without_jobs, pipeline_arguments) } - let!(:last_pipeline_with_other_ref) { create(:ci_pipeline_without_jobs, pipeline_arguments.merge(ref: 'other')) } + let!(:first_pipeline) { create(:ci_pipeline, pipeline_arguments) } + let!(:last_pipeline) { create(:ci_pipeline, pipeline_arguments) } + let!(:last_pipeline_with_other_ref) { create(:ci_pipeline, pipeline_arguments.merge(ref: 'other')) } it 'returns latest pipeline for the target branch' do expect(merge_request.base_pipeline).to eq(last_pipeline) diff --git a/spec/models/service_spec.rb b/spec/models/service_spec.rb index 64077b76f01..f58bcbebd67 100644 --- a/spec/models/service_spec.rb +++ b/spec/models/service_spec.rb @@ -15,6 +15,26 @@ describe Service do end describe 'Scopes' do + describe '.by_type' do + let!(:service1) { create(:jira_service) } + let!(:service2) { create(:jira_service) } + let!(:service3) { create(:redmine_service) } + + subject { described_class.by_type(type) } + + context 'when type is "JiraService"' do + let(:type) { 'JiraService' } + + it { is_expected.to match_array([service1, service2]) } + end + + context 'when type is "RedmineService"' do + let(:type) { 'RedmineService' } + + it { is_expected.to match_array([service3]) } + end + end + describe '.confidential_note_hooks' do it 'includes services where confidential_note_events is true' do create(:service, active: true, confidential_note_events: true) diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb index 3f28ad7433e..9ebddffe882 100644 --- a/spec/requests/api/merge_requests_spec.rb +++ b/spec/requests/api/merge_requests_spec.rb @@ -12,7 +12,7 @@ describe API::MergeRequests do let(:project) { create(:project, :public, :repository, creator: user, namespace: user.namespace, only_allow_merge_if_pipeline_succeeds: false) } let(:milestone) { create(:milestone, title: '1.0.0', project: project) } let(:milestone1) { create(:milestone, title: '0.9', project: project) } - let!(:merge_request) { create(:merge_request, :simple, milestone: milestone1, author: user, assignees: [user], source_project: project, target_project: project, title: "Test", created_at: base_time) } + let!(:merge_request) { create(:merge_request, :simple, milestone: milestone1, author: user, assignees: [user], source_project: project, target_project: project, source_branch: 'markdown', title: "Test", created_at: base_time) } let!(:merge_request_closed) { create(:merge_request, state: "closed", milestone: milestone1, author: user, assignees: [user], source_project: project, target_project: project, title: "Closed test", created_at: base_time + 1.second) } let!(:merge_request_merged) { create(:merge_request, state: "merged", author: user, assignees: [user], source_project: project, target_project: project, title: "Merged test", created_at: base_time + 2.seconds, merge_commit_sha: '9999999999999999999999999999999999999999') } let!(:merge_request_locked) { create(:merge_request, state: "locked", milestone: milestone1, author: user, assignees: [user], source_project: project, target_project: project, title: "Locked test", created_at: base_time + 1.second) } @@ -1330,7 +1330,7 @@ describe API::MergeRequests do context 'accepts remove_source_branch parameter' do let(:params) do { title: 'Test merge_request', - source_branch: 'markdown', + source_branch: 'feature_conflict', target_branch: 'master', author: user } end @@ -1490,7 +1490,7 @@ describe API::MergeRequests do end describe "PUT /projects/:id/merge_requests/:merge_request_iid/merge" do - let(:pipeline) { create(:ci_pipeline_without_jobs) } + let(:pipeline) { create(:ci_pipeline) } it "returns merge_request in case of success" do put api("/projects/#{project.id}/merge_requests/#{merge_request.iid}/merge", user) diff --git a/spec/requests/api/runner_spec.rb b/spec/requests/api/runner_spec.rb index 342d8905abc..6138036b0af 100644 --- a/spec/requests/api/runner_spec.rb +++ b/spec/requests/api/runner_spec.rb @@ -314,7 +314,7 @@ describe API::Runner, :clean_gitlab_redis_shared_state do let(:root_namespace) { create(:namespace) } let(:namespace) { create(:namespace, parent: root_namespace) } let(:project) { create(:project, namespace: namespace, shared_runners_enabled: false) } - let(:pipeline) { create(:ci_pipeline_without_jobs, project: project, ref: 'master') } + let(:pipeline) { create(:ci_pipeline, project: project, ref: 'master') } let(:runner) { create(:ci_runner, :project, projects: [project]) } let(:job) do create(:ci_build, :artifacts, :extended_options, @@ -612,7 +612,7 @@ describe API::Runner, :clean_gitlab_redis_shared_state do end context 'when job is made for merge request' do - let(:pipeline) { create(:ci_pipeline_without_jobs, source: :merge_request_event, project: project, ref: 'feature', merge_request: merge_request) } + let(:pipeline) { create(:ci_pipeline, source: :merge_request_event, project: project, ref: 'feature', merge_request: merge_request) } let!(:job) { create(:ci_build, pipeline: pipeline, name: 'spinach', ref: 'feature', stage: 'test', stage_idx: 0) } let(:merge_request) { create(:merge_request) } diff --git a/spec/serializers/pipeline_details_entity_spec.rb b/spec/serializers/pipeline_details_entity_spec.rb index b180ede51eb..9ce7c265e43 100644 --- a/spec/serializers/pipeline_details_entity_spec.rb +++ b/spec/serializers/pipeline_details_entity_spec.rb @@ -115,7 +115,7 @@ describe PipelineDetailsEntity do context 'when pipeline has YAML errors' do let(:pipeline) do - create(:ci_pipeline, config: { rspec: { invalid: :value } }) + create(:ci_pipeline, yaml_errors: 'Some error occurred') end it 'contains information about error' do diff --git a/spec/services/auto_merge/merge_when_pipeline_succeeds_service_spec.rb b/spec/services/auto_merge/merge_when_pipeline_succeeds_service_spec.rb index 1bebeacb4d4..f2cda999932 100644 --- a/spec/services/auto_merge/merge_when_pipeline_succeeds_service_spec.rb +++ b/spec/services/auto_merge/merge_when_pipeline_succeeds_service_spec.rb @@ -13,8 +13,7 @@ describe AutoMerge::MergeWhenPipelineSucceedsService do end let(:pipeline) do - create(:ci_pipeline_with_one_job, ref: mr_merge_if_green_enabled.source_branch, - project: project) + create(:ci_pipeline, ref: mr_merge_if_green_enabled.source_branch, project: project) end let(:service) do diff --git a/spec/services/merge_requests/add_todo_when_build_fails_service_spec.rb b/spec/services/merge_requests/add_todo_when_build_fails_service_spec.rb index f26b67f902d..203048984a1 100644 --- a/spec/services/merge_requests/add_todo_when_build_fails_service_spec.rb +++ b/spec/services/merge_requests/add_todo_when_build_fails_service_spec.rb @@ -10,9 +10,7 @@ describe MergeRequests::AddTodoWhenBuildFailsService do let(:ref) { merge_request.source_branch } let(:pipeline) do - create(:ci_pipeline_with_one_job, ref: ref, - project: project, - sha: sha) + create(:ci_pipeline, ref: ref, project: project, sha: sha) end let(:service) do diff --git a/spec/services/merge_requests/update_service_spec.rb b/spec/services/merge_requests/update_service_spec.rb index 741420d76a7..0cfcae1b006 100644 --- a/spec/services/merge_requests/update_service_spec.rb +++ b/spec/services/merge_requests/update_service_spec.rb @@ -190,7 +190,7 @@ describe MergeRequests::UpdateService, :mailer do context 'with finished pipeline' do before do - create(:ci_pipeline_with_one_job, + create(:ci_pipeline, project: project, ref: merge_request.source_branch, sha: merge_request.diff_head_sha, @@ -212,7 +212,7 @@ describe MergeRequests::UpdateService, :mailer do before do service_mock = double create( - :ci_pipeline_with_one_job, + :ci_pipeline, project: project, ref: merge_request.source_branch, sha: merge_request.diff_head_sha, diff --git a/spec/services/system_notes/merge_requests_service_spec.rb b/spec/services/system_notes/merge_requests_service_spec.rb index cccc2818676..6d2473e8c03 100644 --- a/spec/services/system_notes/merge_requests_service_spec.rb +++ b/spec/services/system_notes/merge_requests_service_spec.rb @@ -14,7 +14,7 @@ describe ::SystemNotes::MergeRequestsService do let(:service) { described_class.new(noteable: noteable, project: project, author: author) } describe '.merge_when_pipeline_succeeds' do - let(:pipeline) { build(:ci_pipeline_without_jobs )} + let(:pipeline) { build(:ci_pipeline) } subject { service.merge_when_pipeline_succeeds(pipeline.sha) } |