diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-01-20 18:11:58 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-01-20 18:11:58 +0300 |
commit | c17eb7c97062d25cdf1b44573e4c0241f52aa2fe (patch) | |
tree | 5164ebf4ccf1701cce78d7b4121c414ab370db6e /spec | |
parent | 60e09a0cef4e104aa41e20ab7a40499f3343e90f (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
40 files changed, 225 insertions, 110 deletions
diff --git a/spec/frontend/clusters/agents/components/show_spec.js b/spec/frontend/clusters/agents/components/show_spec.js index 2a3c11f4b47..4b40f9e7223 100644 --- a/spec/frontend/clusters/agents/components/show_spec.js +++ b/spec/frontend/clusters/agents/components/show_spec.js @@ -11,12 +11,14 @@ import { useFakeDate } from 'helpers/fake_date'; import createMockApollo from 'helpers/mock_apollo_helper'; import waitForPromises from 'helpers/wait_for_promises'; import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue'; +import { MAX_LIST_COUNT, TOKEN_STATUS_ACTIVE } from '~/clusters/agents/constants'; const localVue = createLocalVue(); localVue.use(VueApollo); describe('ClusterAgentShow', () => { let wrapper; + let agentQueryResponse; useFakeDate([2021, 2, 15]); const provide = { @@ -40,7 +42,7 @@ describe('ClusterAgentShow', () => { }; const createWrapper = ({ clusterAgent, queryResponse = null }) => { - const agentQueryResponse = + agentQueryResponse = queryResponse || jest.fn().mockResolvedValue({ data: { project: { id: 'project-1', clusterAgent } } }); const apolloProvider = createMockApollo([[getAgentQuery, agentQueryResponse]]); @@ -84,6 +86,18 @@ describe('ClusterAgentShow', () => { return createWrapper({ clusterAgent: defaultClusterAgent }); }); + it('sends expected params', () => { + const variables = { + agentName: provide.agentName, + projectPath: provide.projectPath, + tokenStatus: TOKEN_STATUS_ACTIVE, + first: MAX_LIST_COUNT, + last: null, + }; + + expect(agentQueryResponse).toHaveBeenCalledWith(variables); + }); + it('displays the agent name', () => { expect(wrapper.text()).toContain(provide.agentName); }); diff --git a/spec/frontend/environments/deployment_spec.js b/spec/frontend/environments/deployment_spec.js index 37209bdc86c..3e088ef6c5f 100644 --- a/spec/frontend/environments/deployment_spec.js +++ b/spec/frontend/environments/deployment_spec.js @@ -1,4 +1,5 @@ import { mountExtended } from 'helpers/vue_test_utils_helper'; +import { s__ } from '~/locale'; import Deployment from '~/environments/components/deployment.vue'; import DeploymentStatusBadge from '~/environments/components/deployment_status_badge.vue'; import { resolvedEnvironment } from './graphql/mock_data'; @@ -26,4 +27,22 @@ describe('~/environments/components/deployment.vue', () => { ); }); }); + + describe('latest', () => { + it('should show a badge if the deployment is latest', () => { + wrapper = createWrapper({ propsData: { latest: true } }); + + const badge = wrapper.findByText(s__('Deployment|Latest Deployed')); + + expect(badge.exists()).toBe(true); + }); + + it('should not show a badge if the deployment is not latest', () => { + wrapper = createWrapper(); + + const badge = wrapper.findByText(s__('Deployment|Latest Deployed')); + + expect(badge.exists()).toBe(false); + }); + }); }); diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js b/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js index 0dcf988c814..917d0fccf3f 100644 --- a/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js +++ b/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js @@ -8,7 +8,7 @@ import { stripTypenames } from 'helpers/graphql_helpers'; import component from '~/packages_and_registries/container_registry/explorer/components/details_page/tags_list.vue'; import TagsListRow from '~/packages_and_registries/container_registry/explorer/components/details_page/tags_list_row.vue'; -import TagsLoader from '~/packages_and_registries/container_registry/explorer/components/details_page/tags_loader.vue'; +import TagsLoader from '~/packages_and_registries/shared/components/tags_loader.vue'; import RegistryList from '~/packages_and_registries/shared/components/registry_list.vue'; import PersistedSearch from '~/packages_and_registries/shared/components/persisted_search.vue'; import getContainerRepositoryTagsQuery from '~/packages_and_registries/container_registry/explorer/graphql/queries/get_container_repository_tags.query.graphql'; diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_loader_spec.js b/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_loader_spec.js index 060dc9dc5f3..e5df260a260 100644 --- a/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_loader_spec.js +++ b/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_loader_spec.js @@ -1,5 +1,5 @@ import { shallowMount } from '@vue/test-utils'; -import component from '~/packages_and_registries/container_registry/explorer/components/details_page/tags_loader.vue'; +import component from '~/packages_and_registries/shared/components/tags_loader.vue'; import { GlSkeletonLoader } from '../../stubs'; describe('TagsLoader component', () => { diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/components/list_page/cli_commands_spec.js b/spec/frontend/packages_and_registries/container_registry/explorer/components/list_page/cli_commands_spec.js index 4039fba869b..86fb6f4c77d 100644 --- a/spec/frontend/packages_and_registries/container_registry/explorer/components/list_page/cli_commands_spec.js +++ b/spec/frontend/packages_and_registries/container_registry/explorer/components/list_page/cli_commands_spec.js @@ -1,7 +1,7 @@ import { GlDropdown } from '@gitlab/ui'; import { mount, createLocalVue } from '@vue/test-utils'; import Vuex from 'vuex'; -import QuickstartDropdown from '~/packages_and_registries/container_registry/explorer/components/list_page/cli_commands.vue'; +import QuickstartDropdown from '~/packages_and_registries/shared/components/cli_commands.vue'; import { QUICK_START, LOGIN_COMMAND_LABEL, @@ -22,22 +22,14 @@ localVue.use(Vuex); describe('cli_commands', () => { let wrapper; - const config = { - repositoryUrl: 'foo', - registryHostUrlWithPort: 'bar', - }; - const findDropdownButton = () => wrapper.find(GlDropdown); const findCodeInstruction = () => wrapper.findAll(CodeInstruction); const mountComponent = () => { wrapper = mount(QuickstartDropdown, { localVue, - provide() { - return { - config, - ...dockerCommands, - }; + propsData: { + ...dockerCommands, }, }); }; diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/pages/details_spec.js b/spec/frontend/packages_and_registries/container_registry/explorer/pages/details_spec.js index 7992bead60a..9e9d61a1241 100644 --- a/spec/frontend/packages_and_registries/container_registry/explorer/pages/details_spec.js +++ b/spec/frontend/packages_and_registries/container_registry/explorer/pages/details_spec.js @@ -11,7 +11,7 @@ import DetailsHeader from '~/packages_and_registries/container_registry/explorer import PartialCleanupAlert from '~/packages_and_registries/container_registry/explorer/components/details_page/partial_cleanup_alert.vue'; import StatusAlert from '~/packages_and_registries/container_registry/explorer/components/details_page/status_alert.vue'; import TagsList from '~/packages_and_registries/container_registry/explorer/components/details_page/tags_list.vue'; -import TagsLoader from '~/packages_and_registries/container_registry/explorer/components/details_page/tags_loader.vue'; +import TagsLoader from '~/packages_and_registries/shared/components/tags_loader.vue'; import { UNFINISHED_STATUS, diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js b/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js index 051d1e2a169..ec00e7f9319 100644 --- a/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js +++ b/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js @@ -8,7 +8,7 @@ import getContainerRepositoriesQuery from 'shared_queries/container_registry/get import CleanupPolicyEnabledAlert from '~/packages_and_registries/shared/components/cleanup_policy_enabled_alert.vue'; import { FILTERED_SEARCH_TERM } from '~/packages_and_registries/shared/constants'; import DeleteImage from '~/packages_and_registries/container_registry/explorer/components/delete_image.vue'; -import CliCommands from '~/packages_and_registries/container_registry/explorer/components/list_page/cli_commands.vue'; +import CliCommands from '~/packages_and_registries/shared/components/cli_commands.vue'; import GroupEmptyState from '~/packages_and_registries/container_registry/explorer/components/list_page/group_empty_state.vue'; import ImageList from '~/packages_and_registries/container_registry/explorer/components/list_page/image_list.vue'; import ProjectEmptyState from '~/packages_and_registries/container_registry/explorer/components/list_page/project_empty_state.vue'; diff --git a/spec/initializers/net_http_patch_spec.rb b/spec/initializers/net_http_patch_spec.rb index e5205abbed2..d6b003d84fa 100644 --- a/spec/initializers/net_http_patch_spec.rb +++ b/spec/initializers/net_http_patch_spec.rb @@ -1,6 +1,9 @@ # frozen_string_literal: true + require 'fast_spec_helper' +require_relative '../../config/initializers/net_http_patch' + RSpec.describe 'Net::HTTP patch proxy user and password encoding' do let(:net_http) { Net::HTTP.new('hostname.example') } diff --git a/spec/lib/gitlab/ci/config/entry/include/rules/rule_spec.rb b/spec/lib/gitlab/ci/config/entry/include/rules/rule_spec.rb index 0505b17ea91..e83d4974bb7 100644 --- a/spec/lib/gitlab/ci/config/entry/include/rules/rule_spec.rb +++ b/spec/lib/gitlab/ci/config/entry/include/rules/rule_spec.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'fast_spec_helper' +require_dependency 'active_model' RSpec.describe Gitlab::Ci::Config::Entry::Include::Rules::Rule do let(:factory) do diff --git a/spec/lib/gitlab/ci/config/entry/include/rules_spec.rb b/spec/lib/gitlab/ci/config/entry/include/rules_spec.rb index c255d6e9dd6..d5988dbbb58 100644 --- a/spec/lib/gitlab/ci/config/entry/include/rules_spec.rb +++ b/spec/lib/gitlab/ci/config/entry/include/rules_spec.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'fast_spec_helper' +require_dependency 'active_model' RSpec.describe Gitlab::Ci::Config::Entry::Include::Rules do let(:factory) do diff --git a/spec/lib/gitlab/ci/config/entry/include_spec.rb b/spec/lib/gitlab/ci/config/entry/include_spec.rb index 275cdcddeb0..fd7f85c9298 100644 --- a/spec/lib/gitlab/ci/config/entry/include_spec.rb +++ b/spec/lib/gitlab/ci/config/entry/include_spec.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'fast_spec_helper' +require_dependency 'active_model' RSpec.describe ::Gitlab::Ci::Config::Entry::Include do subject(:include_entry) { described_class.new(config) } diff --git a/spec/lib/gitlab/ci/config/entry/policy_spec.rb b/spec/lib/gitlab/ci/config/entry/policy_spec.rb index 46800055dd9..29fd031efd8 100644 --- a/spec/lib/gitlab/ci/config/entry/policy_spec.rb +++ b/spec/lib/gitlab/ci/config/entry/policy_spec.rb @@ -1,8 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' -require 'support/helpers/stub_feature_flags' -require_dependency 'active_model' +require 'spec_helper' RSpec.describe Gitlab::Ci::Config::Entry::Policy do let(:entry) { described_class.new(config) } @@ -47,6 +45,7 @@ RSpec.describe Gitlab::Ci::Config::Entry::Policy do end context 'when using unsafe regexp' do + # When removed we could use `require 'fast_spec_helper'` again. include StubFeatureFlags let(:config) { ['/^(?!master).+/'] } @@ -107,6 +106,7 @@ RSpec.describe Gitlab::Ci::Config::Entry::Policy do end context 'when using unsafe regexp' do + # When removed we could use `require 'fast_spec_helper'` again. include StubFeatureFlags let(:config) { { refs: ['/^(?!master).+/'] } } diff --git a/spec/lib/gitlab/ci/config/normalizer/matrix_strategy_spec.rb b/spec/lib/gitlab/ci/config/normalizer/matrix_strategy_spec.rb index a29471706cc..1cc8b462224 100644 --- a/spec/lib/gitlab/ci/config/normalizer/matrix_strategy_spec.rb +++ b/spec/lib/gitlab/ci/config/normalizer/matrix_strategy_spec.rb @@ -1,12 +1,8 @@ # frozen_string_literal: true require 'fast_spec_helper' -require 'support/helpers/stubbed_feature' -require 'support/helpers/stub_feature_flags' RSpec.describe Gitlab::Ci::Config::Normalizer::MatrixStrategy do - include StubFeatureFlags - describe '.applies_to?' do subject { described_class.applies_to?(config) } diff --git a/spec/lib/gitlab/cluster/lifecycle_events_spec.rb b/spec/lib/gitlab/cluster/lifecycle_events_spec.rb index 4ed68d54680..5eea78acd98 100644 --- a/spec/lib/gitlab/cluster/lifecycle_events_spec.rb +++ b/spec/lib/gitlab/cluster/lifecycle_events_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' -require 'rspec-parameterized' +require 'spec_helper' RSpec.describe Gitlab::Cluster::LifecycleEvents do # we create a new instance to ensure that we do not touch existing hooks diff --git a/spec/lib/gitlab/database/background_migration/batch_metrics_spec.rb b/spec/lib/gitlab/database/background_migration/batch_metrics_spec.rb index e96862fbc2d..66983733411 100644 --- a/spec/lib/gitlab/database/background_migration/batch_metrics_spec.rb +++ b/spec/lib/gitlab/database/background_migration/batch_metrics_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'spec_helper' RSpec.describe Gitlab::Database::BackgroundMigration::BatchMetrics do let(:batch_metrics) { described_class.new } diff --git a/spec/lib/gitlab/database/no_cross_db_foreign_keys_spec.rb b/spec/lib/gitlab/database/no_cross_db_foreign_keys_spec.rb index 05103bc776f..0d6758f8cdd 100644 --- a/spec/lib/gitlab/database/no_cross_db_foreign_keys_spec.rb +++ b/spec/lib/gitlab/database/no_cross_db_foreign_keys_spec.rb @@ -44,8 +44,6 @@ RSpec.describe 'cross-database foreign keys' do dast_profiles_pipelines.ci_pipeline_id dast_site_profiles_pipelines.ci_pipeline_id external_pull_requests.project_id - merge_requests.head_pipeline_id - merge_trains.pipeline_id vulnerability_feedback.pipeline_id vulnerability_occurrence_pipelines.pipeline_id vulnerability_statistics.latest_pipeline_id diff --git a/spec/lib/gitlab/error_tracking/context_payload_generator_spec.rb b/spec/lib/gitlab/error_tracking/context_payload_generator_spec.rb index 0e72dd7ec5e..38745fe0cde 100644 --- a/spec/lib/gitlab/error_tracking/context_payload_generator_spec.rb +++ b/spec/lib/gitlab/error_tracking/context_payload_generator_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' -require 'rspec-parameterized' +require 'spec_helper' RSpec.describe Gitlab::ErrorTracking::ContextPayloadGenerator do subject(:generator) { described_class.new } diff --git a/spec/lib/gitlab/error_tracking/log_formatter_spec.rb b/spec/lib/gitlab/error_tracking/log_formatter_spec.rb index 188ccd000a1..15d201401f4 100644 --- a/spec/lib/gitlab/error_tracking/log_formatter_spec.rb +++ b/spec/lib/gitlab/error_tracking/log_formatter_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'spec_helper' RSpec.describe Gitlab::ErrorTracking::LogFormatter do let(:exception) { StandardError.new('boom') } diff --git a/spec/lib/gitlab/feature_categories_spec.rb b/spec/lib/gitlab/feature_categories_spec.rb index daced154a69..477da900d0a 100644 --- a/spec/lib/gitlab/feature_categories_spec.rb +++ b/spec/lib/gitlab/feature_categories_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'spec_helper' RSpec.describe Gitlab::FeatureCategories do let(:fake_categories) { %w(foo bar) } diff --git a/spec/lib/gitlab/graphql/authorize/object_authorization_spec.rb b/spec/lib/gitlab/graphql/authorize/object_authorization_spec.rb index 73e25f23848..274cc83a6be 100644 --- a/spec/lib/gitlab/graphql/authorize/object_authorization_spec.rb +++ b/spec/lib/gitlab/graphql/authorize/object_authorization_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'spec_helper' RSpec.describe ::Gitlab::Graphql::Authorize::ObjectAuthorization do describe '#ok?' do diff --git a/spec/lib/gitlab/graphql/batch_key_spec.rb b/spec/lib/gitlab/graphql/batch_key_spec.rb index 7b73b27f24b..43e248885c2 100644 --- a/spec/lib/gitlab/graphql/batch_key_spec.rb +++ b/spec/lib/gitlab/graphql/batch_key_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true require 'fast_spec_helper' -require 'test_prof/recipes/rspec/let_it_be' RSpec.describe ::Gitlab::Graphql::BatchKey do - let_it_be(:rect) { Struct.new(:len, :width) } - let_it_be(:circle) { Struct.new(:radius) } - + let(:rect) { Struct.new(:len, :width) } + let(:circle) { Struct.new(:radius) } let(:lookahead) { nil } let(:object) { rect.new(2, 3) } diff --git a/spec/lib/gitlab/graphql/queries_spec.rb b/spec/lib/gitlab/graphql/queries_spec.rb index 8b7f4ca7933..ad1aaac712e 100644 --- a/spec/lib/gitlab/graphql/queries_spec.rb +++ b/spec/lib/gitlab/graphql/queries_spec.rb @@ -1,8 +1,6 @@ # frozen_string_literal: true require 'spec_helper' -require 'fast_spec_helper' -require "test_prof/recipes/rspec/let_it_be" RSpec.describe Gitlab::Graphql::Queries do shared_examples 'a valid GraphQL query for the blog schema' do diff --git a/spec/lib/gitlab/graphql/tracers/application_context_tracer_spec.rb b/spec/lib/gitlab/graphql/tracers/application_context_tracer_spec.rb index 6eff816b95a..264fe993197 100644 --- a/spec/lib/gitlab/graphql/tracers/application_context_tracer_spec.rb +++ b/spec/lib/gitlab/graphql/tracers/application_context_tracer_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true -require "fast_spec_helper" -require "support/graphql/fake_tracer" -require "support/graphql/fake_query_type" + +require 'spec_helper' RSpec.describe Gitlab::Graphql::Tracers::ApplicationContextTracer do let(:tracer_spy) { spy('tracer_spy') } diff --git a/spec/lib/gitlab/import_export/config_spec.rb b/spec/lib/gitlab/import_export/config_spec.rb index 7ad5d3d846c..fcb48678b88 100644 --- a/spec/lib/gitlab/import_export/config_spec.rb +++ b/spec/lib/gitlab/import_export/config_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' -require 'rspec-parameterized' +require 'spec_helper' RSpec.describe Gitlab::ImportExport::Config do let(:yaml_file) { described_class.new } diff --git a/spec/lib/gitlab/incident_management/pager_duty/incident_issue_description_spec.rb b/spec/lib/gitlab/incident_management/pager_duty/incident_issue_description_spec.rb index 535cce6aa04..c5288b9afbc 100644 --- a/spec/lib/gitlab/incident_management/pager_duty/incident_issue_description_spec.rb +++ b/spec/lib/gitlab/incident_management/pager_duty/incident_issue_description_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'spec_helper' RSpec.describe Gitlab::IncidentManagement::PagerDuty::IncidentIssueDescription do describe '#to_s' do diff --git a/spec/lib/gitlab/kubernetes/kubectl_cmd_spec.rb b/spec/lib/gitlab/kubernetes/kubectl_cmd_spec.rb index 2e373613269..3028e0a13aa 100644 --- a/spec/lib/gitlab/kubernetes/kubectl_cmd_spec.rb +++ b/spec/lib/gitlab/kubernetes/kubectl_cmd_spec.rb @@ -2,6 +2,8 @@ require 'fast_spec_helper' +require_relative '../../../../lib/gitlab/kubernetes/pod_cmd' + RSpec.describe Gitlab::Kubernetes::KubectlCmd do describe '.delete' do it 'constructs string properly' do diff --git a/spec/lib/gitlab/regex_spec.rb b/spec/lib/gitlab/regex_spec.rb index 8d67350f0f3..54a0b282e99 100644 --- a/spec/lib/gitlab/regex_spec.rb +++ b/spec/lib/gitlab/regex_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'spec_helper' RSpec.describe Gitlab::Regex do shared_examples_for 'project/group name chars regex' do diff --git a/spec/lib/gitlab/request_profiler/profile_spec.rb b/spec/lib/gitlab/request_profiler/profile_spec.rb index 2e9c75dde87..30e23a99b22 100644 --- a/spec/lib/gitlab/request_profiler/profile_spec.rb +++ b/spec/lib/gitlab/request_profiler/profile_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'spec_helper' RSpec.describe Gitlab::RequestProfiler::Profile do let(:profile) { described_class.new(filename) } diff --git a/spec/lib/gitlab/untrusted_regexp/ruby_syntax_spec.rb b/spec/lib/gitlab/untrusted_regexp/ruby_syntax_spec.rb index 42fc84cf076..b021abc9f25 100644 --- a/spec/lib/gitlab/untrusted_regexp/ruby_syntax_spec.rb +++ b/spec/lib/gitlab/untrusted_regexp/ruby_syntax_spec.rb @@ -1,8 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' -require 'support/shared_examples/lib/gitlab/malicious_regexp_shared_examples' -require 'support/helpers/stub_feature_flags' +require 'spec_helper' RSpec.describe Gitlab::UntrustedRegexp::RubySyntax do describe '.matches_syntax?' do @@ -77,6 +75,7 @@ RSpec.describe Gitlab::UntrustedRegexp::RubySyntax do include StubFeatureFlags before do + # When removed we could use `require 'fast_spec_helper'` again. stub_feature_flags(allow_unsafe_ruby_regexp: true) allow(Gitlab::UntrustedRegexp).to receive(:new).and_raise(RegexpError) diff --git a/spec/lib/gitlab/webpack/file_loader_spec.rb b/spec/lib/gitlab/webpack/file_loader_spec.rb index 34d00b9f106..6475ef58611 100644 --- a/spec/lib/gitlab/webpack/file_loader_spec.rb +++ b/spec/lib/gitlab/webpack/file_loader_spec.rb @@ -1,8 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' -require 'support/helpers/file_read_helpers' -require 'support/webmock' +require 'spec_helper' RSpec.describe Gitlab::Webpack::FileLoader do include FileReadHelpers diff --git a/spec/lib/peek/views/detailed_view_spec.rb b/spec/lib/peek/views/detailed_view_spec.rb index 8d6d9a829ef..149685b243a 100644 --- a/spec/lib/peek/views/detailed_view_spec.rb +++ b/spec/lib/peek/views/detailed_view_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'spec_helper' RSpec.describe Peek::Views::DetailedView, :request_store do context 'when a class defines thresholds' do diff --git a/spec/lib/serializers/json_spec.rb b/spec/lib/serializers/json_spec.rb index 0c1801b34f9..96a57cde056 100644 --- a/spec/lib/serializers/json_spec.rb +++ b/spec/lib/serializers/json_spec.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'fast_spec_helper' +require 'oj' RSpec.describe Serializers::Json do describe '.dump' do diff --git a/spec/lib/serializers/symbolized_json_spec.rb b/spec/lib/serializers/symbolized_json_spec.rb index b30fb074ddd..b9217854d9a 100644 --- a/spec/lib/serializers/symbolized_json_spec.rb +++ b/spec/lib/serializers/symbolized_json_spec.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'fast_spec_helper' +require 'oj' RSpec.describe Serializers::SymbolizedJson do describe '.dump' do diff --git a/spec/lib/system_check/incoming_email/imap_authentication_check_spec.rb b/spec/lib/system_check/incoming_email/imap_authentication_check_spec.rb index d7a77a84472..9c4aebaedd8 100644 --- a/spec/lib/system_check/incoming_email/imap_authentication_check_spec.rb +++ b/spec/lib/system_check/incoming_email/imap_authentication_check_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fast_spec_helper' +require 'spec_helper' MAIL_ROOM_CONFIG_ENABLED_SAMPLE = ":mailboxes:\n"\ diff --git a/spec/models/concerns/ci/has_variable_spec.rb b/spec/models/concerns/ci/has_variable_spec.rb index e917ec6b802..7f395a737fa 100644 --- a/spec/models/concerns/ci/has_variable_spec.rb +++ b/spec/models/concerns/ci/has_variable_spec.rb @@ -68,9 +68,68 @@ RSpec.describe Ci::HasVariable do end describe '#to_runner_variable' do + let_it_be(:ci_variable) { create(:ci_variable) } + + subject { ci_variable } + it 'returns a hash for the runner' do expect(subject.to_runner_variable) .to include(key: subject.key, value: subject.value, public: false) end + + context 'with RequestStore enabled', :request_store do + let(:expected) do + { + file: false, + key: subject.key, + value: subject.value, + public: false, + masked: false + } + end + + before do + # CreatePipelineService normally writes this because this feature flag + # cannot be checked in a tight loop + ::Gitlab::SafeRequestStore[:enable_ci_variable_caching] = true + end + + it 'decrypts once' do + expect(OpenSSL::PKCS5).to receive(:pbkdf2_hmac).once.and_call_original + + 2.times { expect(subject.reload.to_runner_variable).to eq(expected) } + end + + it 'does not cache similar keys', :aggregate_failures do + group_var = create(:ci_group_variable, key: subject.key, value: 'group') + project_var = create(:ci_variable, key: subject.key, value: 'project') + + expect(subject.to_runner_variable).to include(key: subject.key, value: subject.value) + expect(group_var.to_runner_variable).to include(key: subject.key, value: 'group') + expect(project_var.to_runner_variable).to include(key: subject.key, value: 'project') + end + + it 'does not cache unpersisted values' do + new_variable = Ci::Variable.new(key: SecureRandom.hex, value: "12345") + old_value = new_variable.to_runner_variable + new_variable.value = '98765' + + expect(new_variable.to_runner_variable).not_to eq(old_value) + end + + context 'with enable_ci_variable_caching feature flag disabled' do + before do + # CreatePipelineService normally writes this because this feature flag + # cannot be checked in a tight loop + ::Gitlab::SafeRequestStore[:enable_ci_variable_caching] = false + end + + it 'decrypts twice' do + expect(OpenSSL::PKCS5).to receive(:pbkdf2_hmac).twice.and_call_original + + 2.times { expect(subject.reload.to_runner_variable).to eq(expected) } + end + end + end end end diff --git a/spec/models/instance_metadata_spec.rb b/spec/models/instance_metadata_spec.rb index e3a9167620b..5fc073c392d 100644 --- a/spec/models/instance_metadata_spec.rb +++ b/spec/models/instance_metadata_spec.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true require 'fast_spec_helper' +require_relative '../../app/models/instance_metadata' +require_relative '../../app/models/instance_metadata/kas' RSpec.describe InstanceMetadata do it 'has the correct properties' do diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 4005a2ec6da..5839bc414cc 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -4965,4 +4965,11 @@ RSpec.describe MergeRequest, factory_default: :keep do it_behaves_like 'it has loose foreign keys' do let(:factory_name) { :merge_request } end + + context 'loose foreign key on merge_requests.head_pipeline_id' do + it_behaves_like 'cleanup by a loose foreign key' do + let!(:parent) { create(:ci_pipeline) } + let!(:model) { create(:merge_request, head_pipeline: parent) } + end + end end diff --git a/spec/services/ci/create_downstream_pipeline_service_spec.rb b/spec/services/ci/create_downstream_pipeline_service_spec.rb index d61abf6a6ee..43eb57df66c 100644 --- a/spec/services/ci/create_downstream_pipeline_service_spec.rb +++ b/spec/services/ci/create_downstream_pipeline_service_spec.rb @@ -441,44 +441,99 @@ RSpec.describe Ci::CreateDownstreamPipelineService, '#execute' do end end - context 'when relationship between pipelines is cyclical' do - before do - pipeline_a = create(:ci_pipeline, project: upstream_project) - pipeline_b = create(:ci_pipeline, project: downstream_project) - pipeline_c = create(:ci_pipeline, project: upstream_project) + describe 'cyclical dependency detection' do + shared_examples 'detects cyclical pipelines' do + it 'does not create a new pipeline' do + expect { service.execute(bridge) } + .not_to change { Ci::Pipeline.count } + end + + it 'changes status of the bridge build' do + service.execute(bridge) - create_source_pipeline(pipeline_a, pipeline_b) - create_source_pipeline(pipeline_b, pipeline_c) - create_source_pipeline(pipeline_c, upstream_pipeline) + expect(bridge.reload).to be_failed + expect(bridge.failure_reason).to eq 'pipeline_loop_detected' + end end - it 'does not create a new pipeline' do - expect { service.execute(bridge) } - .not_to change { Ci::Pipeline.count } + shared_examples 'passes cyclical pipeline precondition' do + it 'creates a new pipeline' do + expect { service.execute(bridge) } + .to change { Ci::Pipeline.count } + end + + it 'expect bridge build not to be failed' do + service.execute(bridge) + + expect(bridge.reload).not_to be_failed + end end - it 'changes status of the bridge build' do - service.execute(bridge) + context 'when pipeline ancestry contains 2 cycles of dependencies' do + before do + # A(push on master) -> B(pipeline on master) -> A(push on master) -> + # B(pipeline on master) -> A(push on master) + pipeline_1 = create(:ci_pipeline, project: upstream_project, source: :push) + pipeline_2 = create(:ci_pipeline, project: downstream_project, source: :pipeline) + pipeline_3 = create(:ci_pipeline, project: upstream_project, source: :push) + pipeline_4 = create(:ci_pipeline, project: downstream_project, source: :pipeline) + + create_source_pipeline(pipeline_1, pipeline_2) + create_source_pipeline(pipeline_2, pipeline_3) + create_source_pipeline(pipeline_3, pipeline_4) + create_source_pipeline(pipeline_4, upstream_pipeline) + end - expect(bridge.reload).to be_failed - expect(bridge.failure_reason).to eq 'pipeline_loop_detected' + it_behaves_like 'detects cyclical pipelines' + + context 'when ci_drop_cyclical_triggered_pipelines is not enabled' do + before do + stub_feature_flags(ci_drop_cyclical_triggered_pipelines: false) + end + + it_behaves_like 'passes cyclical pipeline precondition' + end end - context 'when ci_drop_cyclical_triggered_pipelines is not enabled' do + context 'when source in the ancestry differ' do before do - stub_feature_flags(ci_drop_cyclical_triggered_pipelines: false) + # A(push on master) -> B(pipeline on master) -> A(pipeline on master) + pipeline_1 = create(:ci_pipeline, project: upstream_project, source: :push) + pipeline_2 = create(:ci_pipeline, project: downstream_project, source: :pipeline) + upstream_pipeline.update!(source: :pipeline) + + create_source_pipeline(pipeline_1, pipeline_2) + create_source_pipeline(pipeline_2, upstream_pipeline) end - it 'creates a new pipeline' do - expect { service.execute(bridge) } - .to change { Ci::Pipeline.count } + it_behaves_like 'passes cyclical pipeline precondition' + end + + context 'when ref in the ancestry differ' do + before do + # A(push on master) -> B(pipeline on master) -> A(push on feature-1) + pipeline_1 = create(:ci_pipeline, ref: 'master', project: upstream_project, source: :push) + pipeline_2 = create(:ci_pipeline, ref: 'master', project: downstream_project, source: :pipeline) + upstream_pipeline.update!(ref: 'feature-1') + + create_source_pipeline(pipeline_1, pipeline_2) + create_source_pipeline(pipeline_2, upstream_pipeline) end - it 'expect bridge build not to be failed' do - service.execute(bridge) + it_behaves_like 'passes cyclical pipeline precondition' + end - expect(bridge.reload).not_to be_failed + context 'when only 1 cycle is detected' do + before do + # A(push on master) -> B(pipeline on master) -> A(push on master) + pipeline_1 = create(:ci_pipeline, ref: 'master', project: upstream_project, source: :push) + pipeline_2 = create(:ci_pipeline, ref: 'master', project: downstream_project, source: :pipeline) + + create_source_pipeline(pipeline_1, pipeline_2) + create_source_pipeline(pipeline_2, upstream_pipeline) end + + it_behaves_like 'passes cyclical pipeline precondition' end end diff --git a/spec/services/ci/update_build_queue_service_spec.rb b/spec/services/ci/update_build_queue_service_spec.rb index 2e2ef120f1b..ef43866d8d4 100644 --- a/spec/services/ci/update_build_queue_service_spec.rb +++ b/spec/services/ci/update_build_queue_service_spec.rb @@ -308,36 +308,12 @@ RSpec.describe Ci::UpdateBuildQueueService do let!(:build) { create(:ci_build, pipeline: pipeline, tag_list: %w[a b]) } let!(:project_runner) { create(:ci_runner, :project, :online, projects: [project], tag_list: %w[a b c]) } - context 'when ci_preload_runner_tags is enabled' do - before do - stub_feature_flags( - ci_preload_runner_tags: true - ) - end - - it 'does execute the same amount of queries regardless of number of runners' do - control_count = ActiveRecord::QueryRecorder.new { subject.tick(build) }.count - - create_list(:ci_runner, 10, :project, :online, projects: [project], tag_list: %w[b c d]) - - expect { subject.tick(build) }.not_to exceed_all_query_limit(control_count) - end - end - - context 'when ci_preload_runner_tags are disabled' do - before do - stub_feature_flags( - ci_preload_runner_tags: false - ) - end - - it 'does execute more queries for more runners' do - control_count = ActiveRecord::QueryRecorder.new { subject.tick(build) }.count + it 'does execute the same amount of queries regardless of number of runners' do + control_count = ActiveRecord::QueryRecorder.new { subject.tick(build) }.count - create_list(:ci_runner, 10, :project, :online, projects: [project], tag_list: %w[b c d]) + create_list(:ci_runner, 10, :project, :online, projects: [project], tag_list: %w[b c d]) - expect { subject.tick(build) }.to exceed_all_query_limit(control_count) - end + expect { subject.tick(build) }.not_to exceed_all_query_limit(control_count) end end end diff --git a/spec/tooling/docs/deprecation_handling_spec.rb b/spec/tooling/docs/deprecation_handling_spec.rb index e389fe882b2..e43f5c7147b 100644 --- a/spec/tooling/docs/deprecation_handling_spec.rb +++ b/spec/tooling/docs/deprecation_handling_spec.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true -require_relative '../../fast_spec_helper' +require 'spec_helper' + require_relative '../../../tooling/docs/deprecation_handling' -require_relative '../../support/helpers/next_instance_of' RSpec.describe Docs::DeprecationHandling do - include ::NextInstanceOf - let(:type) { 'deprecation' } subject { described_class.new(type).render } |