Commit 15c6e390 authored by Kamil Trzciński's avatar Kamil Trzciński

Merge branch 'check-unique-values-of-pipeline-enum' into 'master'

Check the uniqueness of the values of pipeline enum

See merge request gitlab-org/gitlab-ce!23504
parents e9e3820c e1449df7
...@@ -15,6 +15,8 @@ describe Ci::BuildMetadata do ...@@ -15,6 +15,8 @@ describe Ci::BuildMetadata do
let(:build) { create(:ci_build, pipeline: pipeline) } let(:build) { create(:ci_build, pipeline: pipeline) }
let(:build_metadata) { build.metadata } let(:build_metadata) { build.metadata }
it_behaves_like 'having unique enum values'
describe '#update_timeout_state' do describe '#update_timeout_state' do
subject { build_metadata } subject { build_metadata }
......
...@@ -12,6 +12,8 @@ describe Ci::BuildTraceChunk, :clean_gitlab_redis_shared_state do ...@@ -12,6 +12,8 @@ describe Ci::BuildTraceChunk, :clean_gitlab_redis_shared_state do
described_class.new(build: build, chunk_index: chunk_index, data_store: data_store, raw_data: raw_data) described_class.new(build: build, chunk_index: chunk_index, data_store: data_store, raw_data: raw_data)
end end
it_behaves_like 'having unique enum values'
before do before do
stub_feature_flags(ci_enable_live_trace: true) stub_feature_flags(ci_enable_live_trace: true)
stub_artifacts_object_storage stub_artifacts_object_storage
......
...@@ -15,6 +15,8 @@ describe Ci::JobArtifact do ...@@ -15,6 +15,8 @@ describe Ci::JobArtifact do
it { is_expected.to delegate_method(:open).to(:file) } it { is_expected.to delegate_method(:open).to(:file) }
it { is_expected.to delegate_method(:exists?).to(:file) } it { is_expected.to delegate_method(:exists?).to(:file) }
it_behaves_like 'having unique enum values'
describe '.test_reports' do describe '.test_reports' do
subject { described_class.test_reports } subject { described_class.test_reports }
......
...@@ -8,6 +8,8 @@ describe Ci::Pipeline, :mailer do ...@@ -8,6 +8,8 @@ describe Ci::Pipeline, :mailer do
create(:ci_empty_pipeline, status: :created, project: project) create(:ci_empty_pipeline, status: :created, project: project)
end end
it_behaves_like 'having unique enum values'
it { is_expected.to belong_to(:project) } it { is_expected.to belong_to(:project) }
it { is_expected.to belong_to(:user) } it { is_expected.to belong_to(:user) }
it { is_expected.to belong_to(:auto_canceled_by) } it { is_expected.to belong_to(:auto_canceled_by) }
......
require 'spec_helper' require 'spec_helper'
describe Ci::Runner do describe Ci::Runner do
it_behaves_like 'having unique enum values'
describe 'validation' do describe 'validation' do
it { is_expected.to validate_presence_of(:access_level) } it { is_expected.to validate_presence_of(:access_level) }
it { is_expected.to validate_presence_of(:runner_type) } it { is_expected.to validate_presence_of(:runner_type) }
......
...@@ -3,6 +3,8 @@ require 'spec_helper' ...@@ -3,6 +3,8 @@ require 'spec_helper'
describe Ci::Stage, :models do describe Ci::Stage, :models do
let(:stage) { create(:ci_stage_entity) } let(:stage) { create(:ci_stage_entity) }
it_behaves_like 'having unique enum values'
describe 'associations' do describe 'associations' do
before do before do
create(:ci_build, stage_id: stage.id) create(:ci_build, stage_id: stage.id)
......
...@@ -3,6 +3,8 @@ require 'rails_helper' ...@@ -3,6 +3,8 @@ require 'rails_helper'
describe Clusters::Applications::Ingress do describe Clusters::Applications::Ingress do
let(:ingress) { create(:clusters_applications_ingress) } let(:ingress) { create(:clusters_applications_ingress) }
it_behaves_like 'having unique enum values'
include_examples 'cluster application core specs', :clusters_applications_ingress include_examples 'cluster application core specs', :clusters_applications_ingress
include_examples 'cluster application status specs', :clusters_applications_ingress include_examples 'cluster application status specs', :clusters_applications_ingress
include_examples 'cluster application helm specs', :clusters_applications_ingress include_examples 'cluster application helm specs', :clusters_applications_ingress
......
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
require 'spec_helper' require 'spec_helper'
describe Clusters::Cluster do describe Clusters::Cluster do
it_behaves_like 'having unique enum values'
it { is_expected.to belong_to(:user) } it { is_expected.to belong_to(:user) }
it { is_expected.to have_many(:cluster_projects) } it { is_expected.to have_many(:cluster_projects) }
it { is_expected.to have_many(:projects) } it { is_expected.to have_many(:projects) }
......
...@@ -18,6 +18,8 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching ...@@ -18,6 +18,8 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching
it { is_expected.to delegate_method(:managed?).to(:cluster) } it { is_expected.to delegate_method(:managed?).to(:cluster) }
it { is_expected.to delegate_method(:kubernetes_namespace).to(:cluster) } it { is_expected.to delegate_method(:kubernetes_namespace).to(:cluster) }
it_behaves_like 'having unique enum values'
describe 'before_validation' do describe 'before_validation' do
context 'when namespace includes upper case' do context 'when namespace includes upper case' do
let(:kubernetes) { create(:cluster_platform_kubernetes, :configured, namespace: namespace) } let(:kubernetes) { create(:cluster_platform_kubernetes, :configured, namespace: namespace) }
......
...@@ -13,6 +13,8 @@ describe CommitStatus do ...@@ -13,6 +13,8 @@ describe CommitStatus do
create(:commit_status, pipeline: pipeline, **opts) create(:commit_status, pipeline: pipeline, **opts)
end end
it_behaves_like 'having unique enum values'
it { is_expected.to belong_to(:pipeline) } it { is_expected.to belong_to(:pipeline) }
it { is_expected.to belong_to(:user) } it { is_expected.to belong_to(:user) }
it { is_expected.to belong_to(:project) } it { is_expected.to belong_to(:project) }
......
...@@ -16,6 +16,8 @@ describe Deployment do ...@@ -16,6 +16,8 @@ describe Deployment do
it { is_expected.to validate_presence_of(:ref) } it { is_expected.to validate_presence_of(:ref) }
it { is_expected.to validate_presence_of(:sha) } it { is_expected.to validate_presence_of(:sha) }
it_behaves_like 'having unique enum values'
describe '#scheduled_actions' do describe '#scheduled_actions' do
subject { deployment.scheduled_actions } subject { deployment.scheduled_actions }
......
...@@ -8,6 +8,8 @@ RSpec.describe GpgSignature do ...@@ -8,6 +8,8 @@ RSpec.describe GpgSignature do
let(:gpg_key) { create(:gpg_key) } let(:gpg_key) { create(:gpg_key) }
let(:gpg_key_subkey) { create(:gpg_key_subkey) } let(:gpg_key_subkey) { create(:gpg_key_subkey) }
it_behaves_like 'having unique enum values'
describe 'associations' do describe 'associations' do
it { is_expected.to belong_to(:project) } it { is_expected.to belong_to(:project) }
it { is_expected.to belong_to(:gpg_key) } it { is_expected.to belong_to(:gpg_key) }
......
...@@ -7,6 +7,8 @@ describe InternalId do ...@@ -7,6 +7,8 @@ describe InternalId do
let(:scope) { { project: project } } let(:scope) { { project: project } }
let(:init) { ->(s) { s.project.issues.size } } let(:init) { ->(s) { s.project.issues.size } }
it_behaves_like 'having unique enum values'
context 'validations' do context 'validations' do
it { is_expected.to validate_presence_of(:usage) } it { is_expected.to validate_presence_of(:usage) }
end end
......
require 'rails_helper' require 'rails_helper'
describe List do describe List do
it_behaves_like 'having unique enum values'
describe 'relationships' do describe 'relationships' do
it { is_expected.to belong_to(:board) } it { is_expected.to belong_to(:board) }
it { is_expected.to belong_to(:label) } it { is_expected.to belong_to(:label) }
......
require 'rails_helper' require 'rails_helper'
RSpec.describe NotificationSetting do RSpec.describe NotificationSetting do
it_behaves_like 'having unique enum values'
describe "Associations" do describe "Associations" do
it { is_expected.to belong_to(:user) } it { is_expected.to belong_to(:user) }
it { is_expected.to belong_to(:source) } it { is_expected.to belong_to(:source) }
......
...@@ -3,6 +3,8 @@ require 'spec_helper' ...@@ -3,6 +3,8 @@ require 'spec_helper'
describe ProjectAutoDevops do describe ProjectAutoDevops do
set(:project) { build(:project) } set(:project) { build(:project) }
it_behaves_like 'having unique enum values'
it { is_expected.to belong_to(:project) } it { is_expected.to belong_to(:project) }
it { is_expected.to define_enum_for(:deploy_strategy) } it { is_expected.to define_enum_for(:deploy_strategy) }
......
...@@ -4,6 +4,8 @@ describe Project do ...@@ -4,6 +4,8 @@ describe Project do
include ProjectForksHelper include ProjectForksHelper
include GitHelpers include GitHelpers
it_behaves_like 'having unique enum values'
describe 'associations' do describe 'associations' do
it { is_expected.to belong_to(:group) } it { is_expected.to belong_to(:group) }
it { is_expected.to belong_to(:namespace) } it { is_expected.to belong_to(:namespace) }
......
...@@ -6,6 +6,8 @@ describe PrometheusMetric do ...@@ -6,6 +6,8 @@ describe PrometheusMetric do
subject { build(:prometheus_metric) } subject { build(:prometheus_metric) }
let(:other_project) { build(:project) } let(:other_project) { build(:project) }
it_behaves_like 'having unique enum values'
it { is_expected.to belong_to(:project) } it { is_expected.to belong_to(:project) }
it { is_expected.to validate_presence_of(:title) } it { is_expected.to validate_presence_of(:title) }
it { is_expected.to validate_presence_of(:query) } it { is_expected.to validate_presence_of(:query) }
......
require 'spec_helper' require 'spec_helper'
describe PushEventPayload do describe PushEventPayload do
it_behaves_like 'having unique enum values'
describe 'saving payloads' do describe 'saving payloads' do
it 'does not allow commit messages longer than 70 characters' do it 'does not allow commit messages longer than 70 characters' do
event = create(:push_event) event = create(:push_event)
......
...@@ -7,6 +7,8 @@ RSpec.describe ResourceLabelEvent, type: :model do ...@@ -7,6 +7,8 @@ RSpec.describe ResourceLabelEvent, type: :model do
let(:issue) { create(:issue) } let(:issue) { create(:issue) }
let(:merge_request) { create(:merge_request) } let(:merge_request) { create(:merge_request) }
it_behaves_like 'having unique enum values'
describe 'associations' do describe 'associations' do
it { is_expected.to belong_to(:user) } it { is_expected.to belong_to(:user) }
it { is_expected.to belong_to(:issue) } it { is_expected.to belong_to(:issue) }
......
...@@ -3,6 +3,8 @@ require 'rails_helper' ...@@ -3,6 +3,8 @@ require 'rails_helper'
describe UserCallout do describe UserCallout do
let!(:callout) { create(:user_callout) } let!(:callout) { create(:user_callout) }
it_behaves_like 'having unique enum values'
describe 'relationships' do describe 'relationships' do
it { is_expected.to belong_to(:user) } it { is_expected.to belong_to(:user) }
end end
......
...@@ -4,6 +4,8 @@ describe User do ...@@ -4,6 +4,8 @@ describe User do
include ProjectForksHelper include ProjectForksHelper
include TermsHelper include TermsHelper
it_behaves_like 'having unique enum values'
describe 'modules' do describe 'modules' do
subject { described_class } subject { described_class }
......
# frozen_string_literal: true
shared_examples 'having unique enum values' do
described_class.defined_enums.each do |name, enum|
it "has unique values in #{name.inspect}" do
duplicated = enum.group_by(&:last).select { |key, value| value.size > 1 }
expect(duplicated).to be_empty,
"Duplicated values detected: #{duplicated.values.map(&Hash.method(:[]))}"
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment