diff options
Diffstat (limited to 'spec/helpers/search_helper_spec.rb')
-rw-r--r-- | spec/helpers/search_helper_spec.rb | 95 |
1 files changed, 94 insertions, 1 deletions
diff --git a/spec/helpers/search_helper_spec.rb b/spec/helpers/search_helper_spec.rb index b209ed869bf..699232e67b1 100644 --- a/spec/helpers/search_helper_spec.rb +++ b/spec/helpers/search_helper_spec.rb @@ -2,12 +2,105 @@ require 'spec_helper' -describe SearchHelper do +RSpec.describe SearchHelper do # Override simple_sanitize for our testing purposes def simple_sanitize(str) str end + describe 'search_autocomplete_opts' do + context "with no current user" do + before do + allow(self).to receive(:current_user).and_return(nil) + end + + it "returns nil" do + expect(search_autocomplete_opts("q")).to be_nil + end + end + + context "with a standard user" do + let(:user) { create(:user) } + + before do + allow(self).to receive(:current_user).and_return(user) + end + + it "includes Help sections" do + expect(search_autocomplete_opts("hel").size).to eq(9) + end + + it "includes default sections" do + expect(search_autocomplete_opts("dash").size).to eq(1) + end + + it "does not include admin sections" do + expect(search_autocomplete_opts("admin").size).to eq(0) + end + + it "does not allow regular expression in search term" do + expect(search_autocomplete_opts("(webhooks|api)").size).to eq(0) + end + + it "includes the user's groups" do + create(:group).add_owner(user) + expect(search_autocomplete_opts("gro").size).to eq(1) + end + + it "includes nested group" do + create(:group, :nested, name: 'foo').add_owner(user) + expect(search_autocomplete_opts('foo').size).to eq(1) + end + + it "includes the user's projects" do + project = create(:project, namespace: create(:namespace, owner: user)) + expect(search_autocomplete_opts(project.name).size).to eq(1) + end + + it "includes the required project attrs" do + project = create(:project, namespace: create(:namespace, owner: user)) + result = search_autocomplete_opts(project.name).first + + expect(result.keys).to match_array(%i[category id value label url avatar_url]) + end + + it "includes the required group attrs" do + create(:group).add_owner(user) + result = search_autocomplete_opts("gro").first + + expect(result.keys).to match_array(%i[category id label url avatar_url]) + end + + it "does not include the public group" do + group = create(:group) + expect(search_autocomplete_opts(group.name).size).to eq(0) + end + + context "with a current project" do + before do + @project = create(:project, :repository) + end + + it "includes project-specific sections" do + expect(search_autocomplete_opts("Files").size).to eq(1) + expect(search_autocomplete_opts("Commits").size).to eq(1) + end + end + end + + context 'with an admin user' do + let(:admin) { create(:admin) } + + before do + allow(self).to receive(:current_user).and_return(admin) + end + + it "includes admin sections" do + expect(search_autocomplete_opts("admin").size).to eq(1) + end + end + end + describe 'search_entries_info' do using RSpec::Parameterized::TableSyntax |