BigW Consortium Gitlab

search_spec.rb 7.39 KB
Newer Older
1 2
require 'spec_helper'

3
describe "Search", feature: true  do
4 5
  include WaitForAjax

6 7
  let(:user) { create(:user) }
  let(:project) { create(:project, namespace: user.namespace) }
Phil Hughes committed
8 9
  let!(:issue) { create(:issue, project: project, assignee: user) }
  let!(:issue2) { create(:issue, project: project, author: user) }
10

11
  before do
12 13
    login_with(user)
    project.team << [user, :reporter]
14
    visit search_path
15
  end
16

17
  it 'does not show top right search form' do
18 19
    expect(page).not_to have_selector('.search')
  end
20

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
  context 'search filters', js: true do
    let(:group) { create(:group) }

    before do
      group.add_owner(user)
    end

    it 'shows group name after filtering' do
      find('.js-search-group-dropdown').click
      wait_for_ajax

      page.within '.search-holder' do
        click_link group.name
      end

      expect(find('.js-search-group-dropdown')).to have_content(group.name)
    end

    it 'shows project name after filtering' do
      page.within('.project-filter') do
        find('.js-search-project-dropdown').click
        wait_for_ajax

        click_link project.name_with_namespace
      end

      expect(find('.js-search-project-dropdown')).to have_content(project.name_with_namespace)
    end
  end

51 52 53 54 55 56 57 58
  describe 'searching for Projects' do
    it 'finds a project' do
      page.within '.search-holder' do
        fill_in "search", with: project.name[0..3]
        click_button "Search"
      end

      expect(page).to have_content project.name
59
    end
60 61
  end

62
  context 'search for comments' do
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
    context 'when comment belongs to a invalid commit' do
      let(:note) { create(:note_on_commit, author: user, project: project, commit_id: project.repository.commit.id, note: 'Bug here') }

      before { note.update_attributes(commit_id: 12345678) }

      it 'finds comment' do
        visit namespace_project_path(project.namespace, project)

        page.within '.search' do
          fill_in 'search', with: note.note
          click_button 'Go'
        end

        click_link 'Comments'

        expect(page).to have_text("Commit deleted")
        expect(page).to have_text("12345678")
      end
    end

83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
    it 'finds a snippet' do
      snippet = create(:project_snippet, :private, project: project, author: user, title: 'Some title')
      note = create(:note,
                    noteable: snippet,
                    author: user,
                    note: 'Supercalifragilisticexpialidocious',
                    project: project)
      # Must visit project dashboard since global search won't search
      # everything (e.g. comments, snippets, etc.)
      visit namespace_project_path(project.namespace, project)

      page.within '.search' do
        fill_in 'search', with: note.note
        click_button 'Go'
      end

      click_link 'Comments'

      expect(page).to have_link(snippet.title)
    end
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128

    it 'finds a commit' do
      visit namespace_project_path(project.namespace, project)

      page.within '.search' do
        fill_in 'search', with: 'add'
        click_button 'Go'
      end

      click_link "Commits"

      expect(page).to have_selector('.commit-row-description')
    end

    it 'finds a code' do
      visit namespace_project_path(project.namespace, project)

      page.within '.search' do
        fill_in 'search', with: 'def'
        click_button 'Go'
      end

      click_link "Code"

      expect(page).to have_selector('.file-content .code')
    end
129
  end
130 131

  describe 'Right header search field', feature: true do
132 133 134 135 136 137 138 139 140 141
    it 'allows enter key to search', js: true do
      visit namespace_project_path(project.namespace, project)
      fill_in 'search', with: 'gitlab'
      find('#search').native.send_keys(:enter)

      page.within '.title' do
        expect(page).to have_content 'Search'
      end
    end

142 143 144 145 146
    describe 'Search in project page' do
      before do
        visit namespace_project_path(project.namespace, project)
      end

147
      it 'shows top right search form' do
148 149 150
        expect(page).to have_selector('#search')
      end

151
      it 'contains location badge in top right search form' do
152 153 154 155
        expect(page).to have_selector('.has-location-badge')
      end

      context 'clicking the search field', js: true do
156
        it 'shows category search dropdown' do
157 158
          page.find('#search').click

159
          expect(page).to have_selector('.dropdown-header', text: /#{project.name}/i)
160 161 162 163 164 165 166 167
        end
      end

      context 'click the links in the category search dropdown', js: true do
        before do
          page.find('#search').click
        end

168
        it 'takes user to her issues page when issues assigned is clicked' do
169 170 171
          find('.dropdown-menu').click_link 'Issues assigned to me'
          sleep 2

Clement Ho committed
172
          expect(page).to have_selector('.filtered-search')
173
          expect(find('.filtered-search').value).to eq("assignee:@#{user.username}")
174 175
        end

176
        it 'takes user to her issues page when issues authored is clicked' do
177 178 179
          find('.dropdown-menu').click_link "Issues I've created"
          sleep 2

Clement Ho committed
180
          expect(page).to have_selector('.filtered-search')
181
          expect(find('.filtered-search').value).to eq("author:@#{user.username}")
182 183
        end

184
        it 'takes user to her MR page when MR assigned is clicked' do
185 186 187 188
          find('.dropdown-menu').click_link 'Merge requests assigned to me'
          sleep 2

          expect(page).to have_selector('.merge-requests-holder')
189
          expect(find('.filtered-search').value).to eq("assignee:@#{user.username}")
190 191
        end

192
        it 'takes user to her MR page when MR authored is clicked' do
193 194 195 196
          find('.dropdown-menu').click_link "Merge requests I've created"
          sleep 2

          expect(page).to have_selector('.merge-requests-holder')
197
          expect(find('.filtered-search').value).to eq("author:@#{user.username}")
198 199 200 201 202 203 204 205 206 207
        end
      end

      context 'entering text into the search field', js: true do
        before do
          page.within '.search-input-wrap' do
            fill_in "search", with: project.name[0..3]
          end
        end

208
        it 'does not display the category search dropdown' do
209
          expect(page).not_to have_selector('.dropdown-header', text: /#{project.name}/i)
210 211 212 213
        end
      end
    end
  end
214 215 216 217 218 219

  describe 'search for commits' do
    before do
      visit search_path(project_id: project.id)
    end

220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244
    it 'redirects to commit page when search by sha and only commit found' do
      fill_in 'search', with: '6d394385cf567f80a8fd85055db1ab4c5295806f'

      click_button 'Search'

      expect(page).to have_current_path(namespace_project_commit_path(project.namespace, project, '6d394385cf567f80a8fd85055db1ab4c5295806f'))
    end

    it 'redirects to single commit regardless of query case' do
      fill_in 'search', with: '6D394385cf'

      click_button 'Search'

      expect(page).to have_current_path(namespace_project_commit_path(project.namespace, project, '6d394385cf567f80a8fd85055db1ab4c5295806f'))
    end

    it 'holds on /search page when the only commit is found by message' do
      create_commit('Message referencing another sha: "deadbeef" ', project, user, 'master')

      fill_in 'search', with: 'deadbeef'
      click_button 'Search'

      expect(page).to have_current_path('/search', only_path: true)
    end

245 246 247 248 249 250 251 252 253
    it 'shows multiple matching commits' do
      fill_in 'search', with: 'See merge request'

      click_button 'Search'
      click_link 'Commits'

      expect(page).to have_selector('.commit-row-description', count: 9)
    end
  end
254
end