summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatija Čupić <matteeyah@gmail.com>2018-02-05 15:23:32 +0100
committerMatija Čupić <matteeyah@gmail.com>2018-02-05 18:58:21 +0100
commit79570ce24fa93709db7a7bdd4fae2532a7235486 (patch)
treece9bd4dbce252fdc71441e02896bd4f47e5e1105
parentf7ed096455c932a5ead8bafb8c937ff9cdb3070c (diff)
downloadgitlab-ce-dynamic-pipeline-variables.tar.gz
Fix validation of duplicate new variablesdynamic-pipeline-variables
-rw-r--r--app/models/group.rb1
-rw-r--r--app/models/project.rb1
-rw-r--r--spec/support/shared_examples/controllers/variables_shared_examples.rb23
3 files changed, 25 insertions, 0 deletions
diff --git a/app/models/group.rb b/app/models/group.rb
index 29df4144d03..75bf013ecd2 100644
--- a/app/models/group.rb
+++ b/app/models/group.rb
@@ -36,6 +36,7 @@ class Group < Namespace
validate :visibility_level_allowed_by_projects
validate :visibility_level_allowed_by_sub_groups
validate :visibility_level_allowed_by_parent
+ validates :variables, variable_duplicates: true
validates :two_factor_grace_period, presence: true, numericality: { greater_than_or_equal_to: 0 }
diff --git a/app/models/project.rb b/app/models/project.rb
index 12d5f28f5ea..7e0a10cb4cd 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -261,6 +261,7 @@ class Project < ActiveRecord::Base
validates :repository_storage,
presence: true,
inclusion: { in: ->(_object) { Gitlab.config.repositories.storages.keys } }
+ validates :variables, variable_duplicates: true
has_many :uploads, as: :model, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
diff --git a/spec/support/shared_examples/controllers/variables_shared_examples.rb b/spec/support/shared_examples/controllers/variables_shared_examples.rb
index 3f1690e71dd..d7acf8c0032 100644
--- a/spec/support/shared_examples/controllers/variables_shared_examples.rb
+++ b/spec/support/shared_examples/controllers/variables_shared_examples.rb
@@ -48,6 +48,29 @@ shared_examples 'PATCH #update updates variables' do
end
end
+ context 'with duplicate new variable parameters' do
+ let(:variables_attributes) do
+ [
+ new_variable_attributes,
+ new_variable_attributes.merge(value: 'other_value')
+ ]
+ end
+
+ it 'does not update the existing variable' do
+ expect { subject }.not_to change { variable.reload.value }
+ end
+
+ it 'does not create the new variable' do
+ expect { subject }.not_to change { owner.variables.count }
+ end
+
+ it 'returns a bad request response' do
+ subject
+
+ expect(response).to have_gitlab_http_status(:bad_request)
+ end
+ end
+
context 'with valid new variable parameters' do
let(:variables_attributes) do
[