Commit 63e61cfd authored by Alexis Reigel's avatar Alexis Reigel

use more explicit and explanatory sql statement

parent 1735ed61
...@@ -144,7 +144,9 @@ module Routable ...@@ -144,7 +144,9 @@ module Routable
return none if paths.empty? return none if paths.empty?
wheres = paths.map do |path| wheres = paths.map do |path|
"#{connection.quote(path)} LIKE CONCAT(routes.path, '%')" "#{connection.quote(path)} = routes.path
OR
#{connection.quote(path)} LIKE CONCAT(routes.path, '/%')"
end end
joins(:route).where(wheres.join(' OR ')) joins(:route).where(wheres.join(' OR '))
......
require 'spec_helper' require 'spec_helper'
describe Group, 'Routable' do describe Group, 'Routable' do
let!(:group) { create(:group, name: 'group 1') } let!(:group) { create(:group, name: 'foo') }
describe 'Validations' do describe 'Validations' do
it { is_expected.to validate_presence_of(:route) } it { is_expected.to validate_presence_of(:route) }
...@@ -92,20 +92,24 @@ describe Group, 'Routable' do ...@@ -92,20 +92,24 @@ describe Group, 'Routable' do
end end
describe '.member_hierarchy' do describe '.member_hierarchy' do
# foo/bar would also match foo/barbaz instead of just foo/bar and foo/bar/baz
let!(:user) { create(:user) } let!(:user) { create(:user) }
# _______ group _______ # group
# _______ (foo) _______
# | | # | |
# | | # | |
# nested_group_1 nested_group_2 # nested_group_1 nested_group_2
# (bar) (barbaz)
# | | # | |
# | | # | |
# nested_group_1_1 nested_group_2_1 # nested_group_1_1 nested_group_2_1
# (baz) (baz)
# #
let!(:nested_group_1) { create :group, parent: group, name: 'group 1-1' } let!(:nested_group_1) { create :group, parent: group, name: 'bar' }
let!(:nested_group_1_1) { create :group, parent: nested_group_1, name: 'group 1-1-1' } let!(:nested_group_1_1) { create :group, parent: nested_group_1, name: 'baz' }
let!(:nested_group_2) { create :group, parent: group, name: 'group 1-2' } let!(:nested_group_2) { create :group, parent: group, name: 'barbaz' }
let!(:nested_group_2_1) { create :group, parent: nested_group_2, name: 'group 1-2-1' } let!(:nested_group_2_1) { create :group, parent: nested_group_2, name: 'baz' }
context 'user is not a member of any group' do context 'user is not a member of any group' do
subject { described_class.member_hierarchy(user.id) } subject { described_class.member_hierarchy(user.id) }
...@@ -147,7 +151,7 @@ describe Group, 'Routable' do ...@@ -147,7 +151,7 @@ describe Group, 'Routable' do
end end
end end
context 'user is member of the first child (internal node)' do context 'user is member of the first child (internal node), branch 1' do
before { nested_group_1.add_owner(user) } before { nested_group_1.add_owner(user) }
subject { described_class.member_hierarchy(user.id) } subject { described_class.member_hierarchy(user.id) }
...@@ -159,6 +163,18 @@ describe Group, 'Routable' do ...@@ -159,6 +163,18 @@ describe Group, 'Routable' do
end end
end end
context 'user is member of the first child (internal node), branch 2' do
before { nested_group_2.add_owner(user) }
subject { described_class.member_hierarchy(user.id) }
it 'returns the groups in the hierarchy' do
is_expected.to match_array [
group,
nested_group_2, nested_group_2_1
]
end
end
context 'user is member of the last child (leaf node)' do context 'user is member of the last child (leaf node)' do
before { nested_group_1_1.add_owner(user) } before { nested_group_1_1.add_owner(user) }
subject { described_class.member_hierarchy(user.id) } subject { described_class.member_hierarchy(user.id) }
......
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