diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-06 21:09:02 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-06 21:09:02 +0300 |
commit | 0c4a28ded2d4539eafa7ff077c34682227b43292 (patch) | |
tree | 2502827b071a2b8b661572edd1b843415c272270 /spec | |
parent | 2e1b10493f9ed9685eb892ab747335983e58f154 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/features/error_tracking/user_filters_errors_by_status_spec.rb | 1 | ||||
-rw-r--r-- | spec/features/error_tracking/user_searches_sentry_errors_spec.rb | 1 | ||||
-rw-r--r-- | spec/features/error_tracking/user_sees_error_index_spec.rb | 1 | ||||
-rw-r--r-- | spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb | 1 | ||||
-rw-r--r-- | spec/features/projects/pipelines/pipelines_spec.rb | 1 | ||||
-rw-r--r-- | spec/frontend/tracking_spec.js | 26 | ||||
-rw-r--r-- | spec/lib/api/helpers_spec.rb | 43 | ||||
-rw-r--r-- | spec/models/ci/artifact_blob_spec.rb | 1 | ||||
-rw-r--r-- | spec/models/ci/build_spec.rb | 2 | ||||
-rw-r--r-- | spec/models/ci/build_trace_chunk_spec.rb | 1 | ||||
-rw-r--r-- | spec/models/ci/daily_build_group_report_result_spec.rb | 1 | ||||
-rw-r--r-- | spec/models/ci/pipeline_spec.rb | 10 | ||||
-rw-r--r-- | spec/models/ci/runner_spec.rb | 1 | ||||
-rw-r--r-- | spec/models/ci/stage_spec.rb | 1 | ||||
-rw-r--r-- | spec/serializers/service_event_entity_spec.rb | 4 | ||||
-rw-r--r-- | spec/services/projects/create_service_spec.rb | 10 | ||||
-rw-r--r-- | spec/workers/projects/post_creation_worker_spec.rb | 89 |
17 files changed, 156 insertions, 38 deletions
diff --git a/spec/features/error_tracking/user_filters_errors_by_status_spec.rb b/spec/features/error_tracking/user_filters_errors_by_status_spec.rb index a0d93b791d9..6846d8f6ade 100644 --- a/spec/features/error_tracking/user_filters_errors_by_status_spec.rb +++ b/spec/features/error_tracking/user_filters_errors_by_status_spec.rb @@ -7,6 +7,7 @@ RSpec.describe 'When a user filters Sentry errors by status', :js, :use_clean_ra let_it_be(:issues_response_body) { fixture_file('sentry/issues_sample_response.json') } let_it_be(:filtered_errors_by_status_response) { Gitlab::Json.parse(issues_response_body).filter { |error| error['status'] == 'ignored' }.to_json } + let(:issues_api_url) { "#{sentry_api_urls.issues_url}?limit=20&query=is:unresolved" } let(:issues_api_url_filter) { "#{sentry_api_urls.issues_url}?limit=20&query=is:ignored" } let(:auth_token) {{ 'Authorization' => 'Bearer access_token_123' }} diff --git a/spec/features/error_tracking/user_searches_sentry_errors_spec.rb b/spec/features/error_tracking/user_searches_sentry_errors_spec.rb index 025a6261957..c16c9d3fb1f 100644 --- a/spec/features/error_tracking/user_searches_sentry_errors_spec.rb +++ b/spec/features/error_tracking/user_searches_sentry_errors_spec.rb @@ -7,6 +7,7 @@ RSpec.describe 'When a user searches for Sentry errors', :js, :use_clean_rails_m let_it_be(:issues_response_body) { fixture_file('sentry/issues_sample_response.json') } let_it_be(:error_search_response_body) { fixture_file('sentry/error_list_search_response.json') } + let(:issues_api_url) { "#{sentry_api_urls.issues_url}?limit=20&query=is:unresolved" } let(:issues_api_url_search) { "#{sentry_api_urls.issues_url}?limit=20&query=is:unresolved%20NotFound" } diff --git a/spec/features/error_tracking/user_sees_error_index_spec.rb b/spec/features/error_tracking/user_sees_error_index_spec.rb index 074aca4c152..bc6709c659d 100644 --- a/spec/features/error_tracking/user_sees_error_index_spec.rb +++ b/spec/features/error_tracking/user_sees_error_index_spec.rb @@ -7,6 +7,7 @@ RSpec.describe 'View error index page', :js, :use_clean_rails_memory_store_cachi let_it_be(:issues_response_body) { fixture_file('sentry/issues_sample_response.json') } let_it_be(:issues_response) { Gitlab::Json.parse(issues_response_body) } + let(:issues_api_url) { "#{sentry_api_urls.issues_url}?limit=20&query=is:unresolved" } before do diff --git a/spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb b/spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb index 5547c0fd1f3..733b5a97fea 100644 --- a/spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb +++ b/spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb @@ -26,7 +26,6 @@ RSpec.describe 'Merge request > User sees pipelines triggered by merge request', end before do - stub_feature_flags(new_pipelines_table: false) stub_application_setting(auto_devops_enabled: false) stub_ci_pipeline_yaml_file(YAML.dump(config)) project.add_maintainer(user) diff --git a/spec/features/projects/pipelines/pipelines_spec.rb b/spec/features/projects/pipelines/pipelines_spec.rb index 1eb03d43182..b441021161a 100644 --- a/spec/features/projects/pipelines/pipelines_spec.rb +++ b/spec/features/projects/pipelines/pipelines_spec.rb @@ -14,7 +14,6 @@ RSpec.describe 'Pipelines', :js do sign_in(user) stub_feature_flags(graphql_pipeline_details: false) stub_feature_flags(graphql_pipeline_details_users: false) - stub_feature_flags(new_pipelines_table: false) project.add_developer(user) project.update!(auto_devops_attributes: { enabled: false }) diff --git a/spec/frontend/tracking_spec.js b/spec/frontend/tracking_spec.js index f61c4d0e707..2c7bcaa98b0 100644 --- a/spec/frontend/tracking_spec.js +++ b/spec/frontend/tracking_spec.js @@ -254,7 +254,7 @@ describe('Tracking', () => { expect(eventSpy).toHaveBeenCalledWith('_category_', 'nested_event', {}); }); - it('brings in experiment data if linked to an experiment', () => { + it('includes experiment data if linked to an experiment', () => { const mockExperimentData = { variant: 'candidate', experiment: 'repo_integrations_link', @@ -326,6 +326,30 @@ describe('Tracking', () => { mixin.computed.tracking = { foo: 'baz', baz: 'bar' }; expect(mixin.computed.trackingOptions()).toEqual({ foo: 'baz', baz: 'bar' }); }); + + it('includes experiment data if linked to an experiment', () => { + const mockExperimentData = { + variant: 'candidate', + experiment: 'darkMode', + }; + getExperimentData.mockReturnValue(mockExperimentData); + + const mixin = Tracking.mixin({ foo: 'bar', experiment: 'darkMode' }); + expect(mixin.computed.trackingOptions()).toEqual({ + foo: 'bar', + context: { + schema: TRACKING_CONTEXT_SCHEMA, + data: mockExperimentData, + }, + }); + }); + + it('does not include experiment data if experiment data does not exist', () => { + const mixin = Tracking.mixin({ foo: 'bar', experiment: 'lightMode' }); + expect(mixin.computed.trackingOptions()).toEqual({ + foo: 'bar', + }); + }); }); describe('trackingCategory', () => { diff --git a/spec/lib/api/helpers_spec.rb b/spec/lib/api/helpers_spec.rb index a8547b39b27..92326cd34d9 100644 --- a/spec/lib/api/helpers_spec.rb +++ b/spec/lib/api/helpers_spec.rb @@ -179,46 +179,23 @@ RSpec.describe API::Helpers do let(:value) { '9f302fea-f828-4ca9-aef4-e10bd723c0b3' } let(:event_name) { 'g_compliance_dashboard' } let(:unknown_event) { 'unknown' } - let(:feature) { "usage_data_#{event_name}" } - before do - skip_feature_flags_yaml_validation - end - - context 'with feature enabled' do - before do - stub_feature_flags(feature => true) - end - - it 'tracks redis hll event' do - expect(Gitlab::UsageDataCounters::HLLRedisCounter).to receive(:track_event).with(event_name, values: value) - - subject.increment_unique_values(event_name, value) - end + it 'tracks redis hll event' do + expect(Gitlab::UsageDataCounters::HLLRedisCounter).to receive(:track_event).with(event_name, values: value) - it 'logs an exception for unknown event' do - expect(Gitlab::AppLogger).to receive(:warn).with("Redis tracking event failed for event: #{unknown_event}, message: Unknown event #{unknown_event}") - - subject.increment_unique_values(unknown_event, value) - end + subject.increment_unique_values(event_name, value) + end - it 'does not track event for nil values' do - expect(Gitlab::UsageDataCounters::HLLRedisCounter).not_to receive(:track_event) + it 'logs an exception for unknown event' do + expect(Gitlab::AppLogger).to receive(:warn).with("Redis tracking event failed for event: #{unknown_event}, message: Unknown event #{unknown_event}") - subject.increment_unique_values(unknown_event, nil) - end + subject.increment_unique_values(unknown_event, value) end - context 'with feature disabled' do - before do - stub_feature_flags(feature => false) - end + it 'does not track event for nil values' do + expect(Gitlab::UsageDataCounters::HLLRedisCounter).not_to receive(:track_event) - it 'does not track event' do - expect(Gitlab::UsageDataCounters::HLLRedisCounter).not_to receive(:track_event) - - subject.increment_unique_values(event_name, value) - end + subject.increment_unique_values(unknown_event, nil) end end diff --git a/spec/models/ci/artifact_blob_spec.rb b/spec/models/ci/artifact_blob_spec.rb index 44f895cc1c5..c00f46683b9 100644 --- a/spec/models/ci/artifact_blob_spec.rb +++ b/spec/models/ci/artifact_blob_spec.rb @@ -5,6 +5,7 @@ require 'spec_helper' RSpec.describe Ci::ArtifactBlob do let_it_be(:project) { create(:project, :public) } let_it_be(:build) { create(:ci_build, :artifacts, project: project) } + let(:entry) { build.artifacts_metadata_entry('other_artifacts_0.1.2/another-subdirectory/banana_sample.gif') } subject { described_class.new(entry) } diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb index fa0e72e7ad4..505923f3709 100644 --- a/spec/models/ci/build_spec.rb +++ b/spec/models/ci/build_spec.rb @@ -3730,6 +3730,7 @@ RSpec.describe Ci::Build do describe '.matches_tag_ids' do let_it_be(:build, reload: true) { create(:ci_build, project: project, user: user) } + let(:tag_ids) { ::ActsAsTaggableOn::Tag.named_any(tag_list).ids } subject { described_class.where(id: build).matches_tag_ids(tag_ids) } @@ -4181,6 +4182,7 @@ RSpec.describe Ci::Build do describe '#artifacts_metadata_entry' do let_it_be(:build) { create(:ci_build, project: project) } + let(:path) { 'other_artifacts_0.1.2/another-subdirectory/banana_sample.gif' } around do |example| diff --git a/spec/models/ci/build_trace_chunk_spec.rb b/spec/models/ci/build_trace_chunk_spec.rb index 3d728b9335e..12bc5d9aa3c 100644 --- a/spec/models/ci/build_trace_chunk_spec.rb +++ b/spec/models/ci/build_trace_chunk_spec.rb @@ -6,6 +6,7 @@ RSpec.describe Ci::BuildTraceChunk, :clean_gitlab_redis_shared_state do include ExclusiveLeaseHelpers let_it_be(:build) { create(:ci_build, :running) } + let(:chunk_index) { 0 } let(:data_store) { :redis } let(:raw_data) { nil } diff --git a/spec/models/ci/daily_build_group_report_result_spec.rb b/spec/models/ci/daily_build_group_report_result_spec.rb index 4e96ec7cecb..acc87c61036 100644 --- a/spec/models/ci/daily_build_group_report_result_spec.rb +++ b/spec/models/ci/daily_build_group_report_result_spec.rb @@ -86,6 +86,7 @@ RSpec.describe Ci::DailyBuildGroupReportResult do describe 'scopes' do let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, group: group) } + let(:recent_build_group_report_result) { create(:ci_daily_build_group_report_result, project: project, group: group) } let(:old_build_group_report_result) do create(:ci_daily_build_group_report_result, date: 1.week.ago, project: project) diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb index 83d8e675f81..736b2ad4b99 100644 --- a/spec/models/ci/pipeline_spec.rb +++ b/spec/models/ci/pipeline_spec.rb @@ -427,6 +427,7 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep do subject { pipeline.legacy_detached_merge_request_pipeline? } let_it_be(:merge_request) { create(:merge_request) } + let(:ref) { 'feature' } let(:target_sha) { nil } @@ -832,6 +833,7 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep do let_it_be(:assignees) { create_list(:user, 2) } let_it_be(:milestone) { create(:milestone, project: project) } let_it_be(:labels) { create_list(:label, 2) } + let(:merge_request) do create(:merge_request, :simple, source_project: project, @@ -1276,6 +1278,7 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep do describe 'state machine' do let_it_be_with_reload(:pipeline) { create(:ci_empty_pipeline, :created) } + let(:current) { Time.current.change(usec: 0) } let(:build) { create_build('build1', queued_at: 0) } let(:build_b) { create_build('build2', queued_at: 0) } @@ -2327,6 +2330,7 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep do subject { pipeline.reload.status } let_it_be(:pipeline) { create(:ci_empty_pipeline, :created) } + let(:build) { create(:ci_build, :created, pipeline: pipeline, name: 'test') } context 'on waiting for resource' do @@ -2721,6 +2725,7 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep do describe '#execute_hooks' do let_it_be(:pipeline) { create(:ci_empty_pipeline, :created) } + let!(:build_a) { create_build('a', 0) } let!(:build_b) { create_build('b', 0) } @@ -3386,6 +3391,7 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep do describe '#build_with_artifacts_in_self_and_descendants' do let_it_be(:pipeline) { create(:ci_pipeline) } + let!(:build) { create(:ci_build, name: 'test', pipeline: pipeline) } let(:child_pipeline) { create(:ci_pipeline, child_of: pipeline) } let!(:child_build) { create(:ci_build, :artifacts, name: 'test', pipeline: child_pipeline) } @@ -3896,6 +3902,7 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep do describe '#find_stage_by_name' do let_it_be(:pipeline) { create(:ci_pipeline) } + let(:stage_name) { 'test' } let(:stage) do @@ -4181,6 +4188,7 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep do subject { pipeline.base_and_ancestors(same_project: same_project) } let_it_be(:pipeline) { create(:ci_pipeline, :created) } + let(:same_project) { false } context 'when pipeline is not child nor parent' do @@ -4217,6 +4225,7 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep do context 'when pipeline is a child of a child pipeline' do let_it_be(:pipeline) { create(:ci_pipeline, :created) } + let(:ancestor) { create(:ci_pipeline) } let(:parent) { create(:ci_pipeline) } @@ -4232,6 +4241,7 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep do context 'when pipeline is a triggered pipeline' do let_it_be(:pipeline) { create(:ci_pipeline, :created) } + let(:upstream) { create(:ci_pipeline, project: create(:project)) } before do diff --git a/spec/models/ci/runner_spec.rb b/spec/models/ci/runner_spec.rb index ff3551d2a18..ffe0b0d0b19 100644 --- a/spec/models/ci/runner_spec.rb +++ b/spec/models/ci/runner_spec.rb @@ -353,6 +353,7 @@ RSpec.describe Ci::Runner do using RSpec::Parameterized::TableSyntax let_it_be(:pipeline) { create(:ci_pipeline) } + let(:build) { create(:ci_build, pipeline: pipeline) } let(:runner_project) { build.project } let(:runner) { create(:ci_runner, :project, projects: [runner_project], tag_list: tag_list, run_untagged: run_untagged) } diff --git a/spec/models/ci/stage_spec.rb b/spec/models/ci/stage_spec.rb index 677e4b34ecd..e46d9189c86 100644 --- a/spec/models/ci/stage_spec.rb +++ b/spec/models/ci/stage_spec.rb @@ -4,6 +4,7 @@ require 'spec_helper' RSpec.describe Ci::Stage, :models do let_it_be(:pipeline) { create(:ci_empty_pipeline) } + let(:stage) { create(:ci_stage_entity, pipeline: pipeline, project: pipeline.project) } it_behaves_like 'having unique enum values' diff --git a/spec/serializers/service_event_entity_spec.rb b/spec/serializers/service_event_entity_spec.rb index 34ffd93ea0c..64baa57fd6d 100644 --- a/spec/serializers/service_event_entity_spec.rb +++ b/spec/serializers/service_event_entity_spec.rb @@ -17,7 +17,7 @@ RSpec.describe ServiceEventEntity do let(:event) { 'push' } it 'exposes correct attributes' do - expect(subject[:description]).to eq('Event triggered when someone pushes to the repository.') + expect(subject[:description]).to eq('Trigger event for pushes to the repository.') expect(subject[:name]).to eq('push_events') expect(subject[:title]).to eq('push') expect(subject[:value]).to be(true) @@ -29,7 +29,7 @@ RSpec.describe ServiceEventEntity do let(:event) { 'note' } it 'exposes correct attributes' do - expect(subject[:description]).to eq('Event triggered when someone adds a comment.') + expect(subject[:description]).to eq('Trigger event for new comments.') expect(subject[:name]).to eq('note_events') expect(subject[:title]).to eq('note') expect(subject[:value]).to eq(false) diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb index 306d87eefb8..24a2fa74b77 100644 --- a/spec/services/projects/create_service_spec.rb +++ b/spec/services/projects/create_service_spec.rb @@ -673,7 +673,17 @@ RSpec.describe Projects::CreateService, '#execute' do expect(rugged.config['gitlab.fullpath']).to eq project.full_path end + it 'triggers PostCreationWorker' do + expect(Projects::PostCreationWorker).to receive(:perform_async).with(a_kind_of(Integer)) + + create_project(user, opts) + end + context 'when project has access to shared service' do + before do + stub_feature_flags(projects_post_creation_worker: false) + end + context 'Prometheus application is shared via group cluster' do let(:cluster) { create(:cluster, :group, groups: [group]) } let(:group) do diff --git a/spec/workers/projects/post_creation_worker_spec.rb b/spec/workers/projects/post_creation_worker_spec.rb new file mode 100644 index 00000000000..06e824f1530 --- /dev/null +++ b/spec/workers/projects/post_creation_worker_spec.rb @@ -0,0 +1,89 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Projects::PostCreationWorker do + let_it_be(:user) { create :user } + + let(:worker) { described_class.new } + let(:project) { create(:project) } + + subject { described_class.new.perform(project.id) } + + it_behaves_like 'an idempotent worker' do + let(:job_args) { [project.id] } + + describe 'Prometheus service' do + context 'project is nil' do + let(:job_args) { [nil] } + + it 'does not create prometheus service' do + expect { subject }.not_to change { Service.count } + end + end + + context 'when project has access to shared service' do + context 'Prometheus application is shared via group cluster' do + let(:project) { create(:project, group: group) } + let(:cluster) { create(:cluster, :group, groups: [group]) } + let(:group) do + create(:group).tap do |group| + group.add_owner(user) + end + end + + before do + create(:clusters_applications_prometheus, :installed, cluster: cluster) + end + + it 'creates PrometheusService record', :aggregate_failures do + subject + + service = project.prometheus_service + expect(service.active).to be true + expect(service.manual_configuration?).to be false + expect(service.persisted?).to be true + end + end + + context 'Prometheus application is shared via instance cluster' do + let(:cluster) { create(:cluster, :instance) } + + before do + create(:clusters_applications_prometheus, :installed, cluster: cluster) + end + + it 'creates PrometheusService record', :aggregate_failures do + subject + + service = project.prometheus_service + expect(service.active).to be true + expect(service.manual_configuration?).to be false + expect(service.persisted?).to be true + end + + it 'cleans invalid record and logs warning', :aggregate_failures do + invalid_service_record = build(:prometheus_service, properties: { api_url: nil, manual_configuration: true }.to_json) + + allow_next_found_instance_of(Project) do |instance| + allow(instance).to receive(:build_prometheus_service).and_return(invalid_service_record) + end + + expect(Gitlab::ErrorTracking).to receive(:track_exception).with(an_instance_of(ActiveRecord::RecordInvalid), include(extra: { project_id: a_kind_of(Integer) })).twice + subject + + expect(project.prometheus_service).to be_nil + end + end + + context 'shared Prometheus application is not available' do + it 'does not persist PrometheusService record', :aggregate_failures do + subject + + expect(project.prometheus_service).to be_nil + end + end + end + end + end +end |