mirror of
https://github.com/discourse/discourse.git
synced 2025-06-01 09:08:10 +08:00
FEATURE: prioritize group search order based on prefix match (#16093)
Our @mention user search prioritized users based on prefix matches. So if searching for `sa` we will display `sam`, `asam` in that order Previously, we did not prioritize group matches based on prefix. This change ensures better parity. Implementation notes: 1. User search only prioritizes based on username prefix, not name prefix. TBD if we want to change that. 2. @mention on client side will show 0 group matches if we fill up all the spots with user matches. TBD if we want to unconditionally show the first / second group match. Co-authored-by: Alan Guo Xiang Tan <gxtan1990@gmail.com>
This commit is contained in:
@ -923,21 +923,36 @@ describe Group do
|
||||
end
|
||||
|
||||
describe '.search_groups' do
|
||||
fab!(:group) { Fabricate(:group, name: 'tEsT_more_things', full_name: 'Abc something awesome') }
|
||||
let(:messageable_group) { Fabricate(:group, name: "MessageableGroup", messageable_level: Group::ALIAS_LEVELS[:everyone]) }
|
||||
|
||||
def search_group_names(name)
|
||||
Group.search_groups(name, sort: :auto).map(&:name)
|
||||
end
|
||||
|
||||
it 'should return the right groups' do
|
||||
group
|
||||
group_name = Fabricate(:group, name: 'tEsT_more_things', full_name: 'Abc something awesome').name
|
||||
|
||||
expect(Group.search_groups('te')).to eq([group])
|
||||
expect(Group.search_groups('TE')).to eq([group])
|
||||
expect(Group.search_groups('es')).to eq([group])
|
||||
expect(Group.search_groups('ES')).to eq([group])
|
||||
expect(Group.search_groups('ngs')).to eq([group])
|
||||
expect(Group.search_groups('sOmEthi')).to eq([group])
|
||||
expect(Group.search_groups('abc')).to eq([group])
|
||||
expect(Group.search_groups('sOmEthi')).to eq([group])
|
||||
expect(Group.search_groups('test2')).to eq([])
|
||||
expect(search_group_names('te')).to eq([group_name])
|
||||
expect(search_group_names('TE')).to eq([group_name])
|
||||
expect(search_group_names('es')).to eq([group_name])
|
||||
expect(search_group_names('ES')).to eq([group_name])
|
||||
expect(search_group_names('ngs')).to eq([group_name])
|
||||
expect(search_group_names('sOmEthi')).to eq([group_name])
|
||||
expect(search_group_names('abc')).to eq([group_name])
|
||||
expect(search_group_names('sOmEthi')).to eq([group_name])
|
||||
expect(search_group_names('test2')).to eq([])
|
||||
end
|
||||
|
||||
it "should prioritize prefix matches on group's name or fullname" do
|
||||
Fabricate(:group, name: 'pears_11', full_name: 'fred apple')
|
||||
Fabricate(:group, name: 'apples', full_name: 'jane orange')
|
||||
Fabricate(:group, name: 'oranges2', full_name: 'nothing')
|
||||
Fabricate(:group, name: 'oranges1', full_name: 'ms fred')
|
||||
|
||||
expect(search_group_names('ap')).to eq(['apples', 'pears_11'])
|
||||
expect(search_group_names('fr')).to eq(['pears_11', 'oranges1'])
|
||||
expect(search_group_names('oran')).to eq(['oranges1', 'oranges2', 'apples'])
|
||||
|
||||
expect(search_group_names('pearsX11')).to eq([])
|
||||
end
|
||||
end
|
||||
|
||||
|
Reference in New Issue
Block a user