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
This commit is contained in:
Kamil Trzciński 2018-12-04 12:22:14 +00:00
commit 15c6e39026
23 changed files with 56 additions and 0 deletions

View File

@ -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 }

View File

@ -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

View File

@ -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 }

View File

@ -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) }

View File

@ -1,6 +1,8 @@
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) }

View File

@ -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)

View File

@ -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

View File

@ -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) }

View File

@ -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) }

View File

@ -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) }

View File

@ -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 }

View File

@ -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) }

View File

@ -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

View File

@ -1,6 +1,8 @@
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) }

View File

@ -1,6 +1,8 @@
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) }

View File

@ -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) }

View File

@ -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) }

View File

@ -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) }

View File

@ -1,6 +1,8 @@
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)

View File

@ -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) }

View File

@ -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

View File

@ -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 }

View File

@ -0,0 +1,12 @@
# 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