Commit 5cb45b6a authored by Shinya Maeda's avatar Shinya Maeda

Add CASE When Clause for saving order when using where IN

parent bd846f7d
...@@ -251,7 +251,15 @@ class Group < Namespace ...@@ -251,7 +251,15 @@ class Group < Namespace
def secret_variables_for(ref, project) def secret_variables_for(ref, project)
list_of_ids = ([self] + ancestors).map { |l| l.id } list_of_ids = ([self] + ancestors).map { |l| l.id }
variables = Ci::GroupVariable.where("group_id IN (#{list_of_ids.join(", ")})")
order = list_of_ids.map.with_index do |id, index|
"WHEN #{id} THEN #{index}"
end.join("\n")
variables = Ci::GroupVariable
.where("group_id IN (#{list_of_ids.join(", ")})")
.order("CASE group_id #{order} END DESC")
project.protected_for?(ref) ? variables : variables.unprotected project.protected_for?(ref) ? variables : variables.unprotected
end end
......
...@@ -466,14 +466,21 @@ describe Group, models: true do ...@@ -466,14 +466,21 @@ describe Group, models: true do
it_behaves_like 'ref is protected' it_behaves_like 'ref is protected'
end end
context 'when group has a child' do context 'when group has children' do
let!(:group_child) { create(:group, :access_requestable, parent: group) } let!(:group_child) { create(:group, parent: group) }
let!(:variable_child) { create(:ci_group_variable, group: group_child) } let!(:variable_child) { create(:ci_group_variable, group: group_child) }
let!(:group_child_3) { create(:group, parent: group_child_2) }
subject { group_child.secret_variables_for('ref', project) } let!(:variable_child_3) { create(:ci_group_variable, group: group_child_3) }
let!(:group_child_2) { create(:group, parent: group_child) }
let!(:variable_child_2) { create(:ci_group_variable, group: group_child_2) }
it 'returns all variables belong to the group and parent groups' do it 'returns all variables belong to the group and parent groups' do
is_expected.to contain_exactly(secret_variable, protected_variable, variable_child) expected_array1 = [protected_variable, secret_variable]
expected_array2 = [variable_child, variable_child_2, variable_child_3]
got_array = group_child_3.secret_variables_for('ref', project).to_a
expect(got_array.shift(2)).to contain_exactly(*expected_array1)
expect(got_array).to eq(expected_array2)
end end
end 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