filter_issues_spec.rb 19.9 KB
Newer Older
C
Clement Ho 已提交
1
require 'spec_helper'
2

3
describe 'Filter issues', js: true do
C
Clement Ho 已提交
4
  include FilteredSearchHelpers
5

6 7
  let(:project) { create(:project) }
  let(:user) { create(:user) }
8

C
Clement Ho 已提交
9
  let!(:bug_label) { create(:label, project: project, title: 'bug') }
10
  let!(:caps_sensitive_label) { create(:label, project: project, title: 'CaPs') }
11
  let!(:milestone) { create(:milestone, title: "8", project: project, start_date: 2.days.ago) }
C
Clement Ho 已提交
12
  let!(:multiple_words_label) { create(:label, project: project, title: "Two words") }
C
Clement Ho 已提交
13 14 15

  def expect_no_issues_list
    page.within '.issues-list' do
16
      expect(page).to have_no_selector('.issue')
C
Clement Ho 已提交
17 18 19 20 21 22 23 24 25 26 27 28
    end
  end

  def expect_issues_list_count(open_count, closed_count = 0)
    all_count = open_count + closed_count

    expect(page).to have_issuable_counts(open: open_count, closed: closed_count, all: all_count)
    page.within '.issues-list' do
      expect(page).to have_selector('.issue', count: open_count)
    end
  end

P
Phil Hughes 已提交
29 30 31 32
  def select_search_at_index(pos)
    evaluate_script("el = document.querySelector('.filtered-search'); el.focus(); el.setSelectionRange(#{pos}, #{pos});")
  end

33
  before do
34
    project.add_master(user)
35

36 37 38 39
    user2 = create(:user)

    create(:issue, project: project, author: user2, title: "Bug report 1")
    create(:issue, project: project, author: user2, title: "Bug report 2")
40

41 42
    create(:issue, project: project, author: user,  title: "issue by assignee", milestone: milestone, assignees: [user])
    create(:issue, project: project, author: user,  title: "issue by assignee with searchTerm", milestone: milestone, assignees: [user])
43

44
    create(:labeled_issue,
C
Clement Ho 已提交
45 46 47 48
      title: "Bug 2",
      project: project,
      milestone: milestone,
      author: user,
49 50
      assignees: [user],
      labels: [bug_label])
C
Clement Ho 已提交
51

52
    create(:labeled_issue,
C
Clement Ho 已提交
53 54 55 56
      title: "issue by assignee with searchTerm and label",
      project: project,
      milestone: milestone,
      author: user,
57 58
      assignees: [user],
      labels: [caps_sensitive_label])
C
Clement Ho 已提交
59

60
    create(:labeled_issue,
61
      title: "Bug report foo was possible",
C
Clement Ho 已提交
62 63 64
      project: project,
      milestone: milestone,
      author: user,
65 66
      assignees: [user],
      labels: [bug_label, caps_sensitive_label])
C
Clement Ho 已提交
67

68
    create(:labeled_issue, title: "Issue with multiple words label", project: project, labels: [multiple_words_label])
C
Clement Ho 已提交
69

70
    sign_in(user)
71
    visit project_issues_path(project)
C
Clement Ho 已提交
72
  end
73

C
Clement Ho 已提交
74
  describe 'filter issues by author' do
C
Clement Ho 已提交
75
    context 'only author' do
C
Clement Ho 已提交
76
      it 'filters issues by searched author' do
77
        input_filtered_search("author:@#{user.username}")
C
Clement Ho 已提交
78

79 80 81
        wait_for_requests

        expect_tokens([author_token(user.name)])
C
Clement Ho 已提交
82
        expect_issues_list_count(5)
C
Clement Ho 已提交
83
        expect_filtered_search_input_empty
C
Clement Ho 已提交
84
      end
85 86
    end

C
Clement Ho 已提交
87
    context 'author with other filters' do
C
Clement Ho 已提交
88
      it 'filters issues by searched author, assignee, label, milestone and text' do
89 90
        search_term = 'issue'

C
Clement Ho 已提交
91
        input_filtered_search("author:@#{user.username} assignee:@#{user.username} label:~#{caps_sensitive_label.title} milestone:%#{milestone.title} #{search_term}")
C
Clement Ho 已提交
92

93 94
        wait_for_requests

C
Clement Ho 已提交
95
        expect_tokens([
96 97 98 99
          author_token(user.name),
          assignee_token(user.name),
          label_token(caps_sensitive_label.title),
          milestone_token(milestone.title)
C
Clement Ho 已提交
100
        ])
C
Clement Ho 已提交
101
        expect_issues_list_count(1)
C
Clement Ho 已提交
102
        expect_filtered_search_input(search_term)
103 104 105
      end
    end
  end
A
Arinde Eniola 已提交
106

C
Clement Ho 已提交
107
  describe 'filter issues by assignee' do
C
Clement Ho 已提交
108
    context 'only assignee' do
C
Clement Ho 已提交
109
      it 'filters issues by searched assignee' do
C
Clement Ho 已提交
110
        input_filtered_search("assignee:@#{user.username}")
C
Clement Ho 已提交
111

112 113 114
        wait_for_requests

        expect_tokens([assignee_token(user.name)])
C
Clement Ho 已提交
115
        expect_issues_list_count(5)
C
Clement Ho 已提交
116
        expect_filtered_search_input_empty
C
Clement Ho 已提交
117
      end
A
Arinde Eniola 已提交
118

C
Clement Ho 已提交
119
      it 'filters issues by no assignee' do
C
Clement Ho 已提交
120
        input_filtered_search('assignee:none')
C
Clement Ho 已提交
121

122
        expect_tokens([assignee_token('none')])
123
        expect_issues_list_count(3)
C
Clement Ho 已提交
124
        expect_filtered_search_input_empty
C
Clement Ho 已提交
125
      end
A
Arinde Eniola 已提交
126 127
    end

C
Clement Ho 已提交
128
    context 'assignee with other filters' do
C
Clement Ho 已提交
129
      it 'filters issues by searched assignee, author, label, milestone and text' do
130 131
        search_term = 'searchTerm'

C
Clement Ho 已提交
132
        input_filtered_search("assignee:@#{user.username} author:@#{user.username} label:~#{caps_sensitive_label.title} milestone:%#{milestone.title} #{search_term}")
C
Clement Ho 已提交
133

C
Clement Ho 已提交
134
        expect_tokens([
135 136 137 138
          assignee_token(user.name),
          author_token(user.name),
          label_token(caps_sensitive_label.title),
          milestone_token(milestone.title)
C
Clement Ho 已提交
139
        ])
C
Clement Ho 已提交
140
        expect_issues_list_count(1)
C
Clement Ho 已提交
141
        expect_filtered_search_input(search_term)
C
Clement Ho 已提交
142 143
      end
    end
C
Clement Ho 已提交
144
  end
P
Phil Hughes 已提交
145

C
Clement Ho 已提交
146
  describe 'filter issues by label' do
C
Clement Ho 已提交
147
    context 'only label' do
C
Clement Ho 已提交
148
      it 'filters issues by searched label' do
C
Clement Ho 已提交
149
        input_filtered_search("label:~#{bug_label.title}")
C
Clement Ho 已提交
150

151
        expect_tokens([label_token(bug_label.title)])
C
Clement Ho 已提交
152
        expect_issues_list_count(2)
C
Clement Ho 已提交
153
        expect_filtered_search_input_empty
154
      end
P
Phil Hughes 已提交
155

C
Clement Ho 已提交
156
      it 'filters issues by no label' do
C
Clement Ho 已提交
157
        input_filtered_search('label:none')
C
Clement Ho 已提交
158

159
        expect_tokens([label_token('none', false)])
160
        expect_issues_list_count(8)
C
Clement Ho 已提交
161
        expect_filtered_search_input_empty
162
      end
163

C
Clement Ho 已提交
164
      it 'filters issues by multiple labels' do
C
Clement Ho 已提交
165
        input_filtered_search("label:~#{bug_label.title} label:~#{caps_sensitive_label.title}")
C
Clement Ho 已提交
166

C
Clement Ho 已提交
167
        expect_tokens([
168 169
          label_token(bug_label.title),
          label_token(caps_sensitive_label.title)
C
Clement Ho 已提交
170
        ])
C
Clement Ho 已提交
171
        expect_issues_list_count(1)
C
Clement Ho 已提交
172
        expect_filtered_search_input_empty
C
Clement Ho 已提交
173
      end
C
Clement Ho 已提交
174 175 176 177 178

      it 'filters issues by label containing special characters' do
        special_label = create(:label, project: project, title: '!@#{$%^&*()-+[]<>?/:{}|\}')
        special_issue = create(:issue, title: "Issue with special character label", project: project)
        special_issue.labels << special_label
C
Clement Ho 已提交
179

C
Clement Ho 已提交
180
        input_filtered_search("label:~#{special_label.title}")
181 182

        expect_tokens([label_token(special_label.title)])
C
Clement Ho 已提交
183
        expect_issues_list_count(1)
C
Clement Ho 已提交
184
        expect_filtered_search_input_empty
C
Clement Ho 已提交
185 186
      end

187
      it 'does not show issues for unused labels' do
C
Clement Ho 已提交
188
        new_label = create(:label, project: project, title: 'new_label')
C
Clement Ho 已提交
189

C
Clement Ho 已提交
190
        input_filtered_search("label:~#{new_label.title}")
C
Clement Ho 已提交
191

192
        expect_tokens([label_token(new_label.title)])
193
        expect_no_issues_list
C
Clement Ho 已提交
194
        expect_filtered_search_input_empty
C
Clement Ho 已提交
195 196 197
      end
    end

C
Clement Ho 已提交
198
    context 'label with multiple words' do
C
Clement Ho 已提交
199 200 201 202 203
      it 'special characters' do
        special_multiple_label = create(:label, project: project, title: "Utmost |mp0rt@nce")
        special_multiple_issue = create(:issue, title: "Issue with special character multiple words label", project: project)
        special_multiple_issue.labels << special_multiple_label

C
Clement Ho 已提交
204
        input_filtered_search("label:~'#{special_multiple_label.title}'")
C
Clement Ho 已提交
205

206
        # Check for search results (which makes sure that the page has changed)
C
Clement Ho 已提交
207
        expect_issues_list_count(1)
C
Clement Ho 已提交
208

209 210 211
        # filtered search defaults quotations to double quotes
        expect_tokens([label_token("\"#{special_multiple_label.title}\"")])

C
Clement Ho 已提交
212
        expect_filtered_search_input_empty
C
Clement Ho 已提交
213 214 215
      end

      it 'single quotes' do
C
Clement Ho 已提交
216
        input_filtered_search("label:~'#{multiple_words_label.title}'")
C
Clement Ho 已提交
217

C
Clement Ho 已提交
218
        expect_issues_list_count(1)
219
        expect_tokens([label_token("\"#{multiple_words_label.title}\"")])
C
Clement Ho 已提交
220
        expect_filtered_search_input_empty
C
Clement Ho 已提交
221 222 223
      end

      it 'double quotes' do
C
Clement Ho 已提交
224
        input_filtered_search("label:~\"#{multiple_words_label.title}\"")
C
Clement Ho 已提交
225

226
        expect_tokens([label_token("\"#{multiple_words_label.title}\"")])
C
Clement Ho 已提交
227
        expect_issues_list_count(1)
C
Clement Ho 已提交
228
        expect_filtered_search_input_empty
C
Clement Ho 已提交
229 230 231
      end

      it 'single quotes containing double quotes' do
232 233 234
        double_quotes_label = create(:label, project: project, title: 'won"t fix')
        double_quotes_label_issue = create(:issue, title: "Issue with double quotes label", project: project)
        double_quotes_label_issue.labels << double_quotes_label
C
Clement Ho 已提交
235

C
Clement Ho 已提交
236
        input_filtered_search("label:~'#{double_quotes_label.title}'")
C
Clement Ho 已提交
237

238
        expect_tokens([label_token("'#{double_quotes_label.title}'")])
239
        expect_issues_list_count(1)
C
Clement Ho 已提交
240
        expect_filtered_search_input_empty
C
Clement Ho 已提交
241 242 243 244 245 246 247
      end

      it 'double quotes containing single quotes' do
        single_quotes_label = create(:label, project: project, title: "won't fix")
        single_quotes_label_issue = create(:issue, title: "Issue with single quotes label", project: project)
        single_quotes_label_issue.labels << single_quotes_label

C
Clement Ho 已提交
248
        input_filtered_search("label:~\"#{single_quotes_label.title}\"")
C
Clement Ho 已提交
249

250
        expect_tokens([label_token("\"#{single_quotes_label.title}\"")])
C
Clement Ho 已提交
251
        expect_issues_list_count(1)
C
Clement Ho 已提交
252
        expect_filtered_search_input_empty
C
Clement Ho 已提交
253
      end
254
    end
255

C
Clement Ho 已提交
256
    context 'label with other filters' do
C
Clement Ho 已提交
257
      it 'filters issues by searched label, author, assignee, milestone and text' do
258 259
        search_term = 'bug'

C
Clement Ho 已提交
260
        input_filtered_search("label:~#{caps_sensitive_label.title} author:@#{user.username} assignee:@#{user.username} milestone:%#{milestone.title} #{search_term}")
C
Clement Ho 已提交
261

C
Clement Ho 已提交
262
        expect_tokens([
263 264 265 266
          label_token(caps_sensitive_label.title),
          author_token(user.name),
          assignee_token(user.name),
          milestone_token(milestone.title)
C
Clement Ho 已提交
267
        ])
C
Clement Ho 已提交
268
        expect_issues_list_count(1)
C
Clement Ho 已提交
269
        expect_filtered_search_input(search_term)
C
Clement Ho 已提交
270 271
      end
    end
P
Phil Hughes 已提交
272

C
Clement Ho 已提交
273
    context 'multiple labels with other filters' do
C
Clement Ho 已提交
274
      it 'filters issues by searched label, label2, author, assignee, milestone and text' do
275 276
        search_term = 'bug'

C
Clement Ho 已提交
277
        input_filtered_search("label:~#{bug_label.title} label:~#{caps_sensitive_label.title} author:@#{user.username} assignee:@#{user.username} milestone:%#{milestone.title} #{search_term}")
C
Clement Ho 已提交
278

279 280
        wait_for_requests

C
Clement Ho 已提交
281
        expect_tokens([
282 283 284 285 286
          label_token(bug_label.title),
          label_token(caps_sensitive_label.title),
          author_token(user.name),
          assignee_token(user.name),
          milestone_token(milestone.title)
C
Clement Ho 已提交
287
        ])
C
Clement Ho 已提交
288
        expect_issues_list_count(1)
C
Clement Ho 已提交
289
        expect_filtered_search_input(search_term)
C
Clement Ho 已提交
290
      end
291 292
    end

C
Clement Ho 已提交
293
    context 'issue label clicked' do
C
Clement Ho 已提交
294
      before do
T
Taurie Davis 已提交
295
        find('.issues-list .issue .issue-main-info .issuable-info a .label', text: multiple_words_label.title).click
C
Clement Ho 已提交
296 297 298 299 300 301 302
      end

      it 'filters' do
        expect_issues_list_count(1)
      end

      it 'displays in search bar' do
303
        expect_tokens([label_token("\"#{multiple_words_label.title}\"")])
C
Clement Ho 已提交
304
        expect_filtered_search_input_empty
C
Clement Ho 已提交
305 306
      end
    end
P
Phil Hughes 已提交
307 308
  end

C
Clement Ho 已提交
309
  describe 'filter issues by milestone' do
C
Clement Ho 已提交
310
    context 'only milestone' do
C
Clement Ho 已提交
311
      it 'filters issues by searched milestone' do
312
        input_filtered_search("milestone:%#{milestone.title}")
C
Clement Ho 已提交
313

314
        expect_tokens([milestone_token(milestone.title)])
C
Clement Ho 已提交
315
        expect_issues_list_count(5)
C
Clement Ho 已提交
316
        expect_filtered_search_input_empty
C
Clement Ho 已提交
317
      end
A
Arinde Eniola 已提交
318

C
Clement Ho 已提交
319
      it 'filters issues by no milestone' do
320
        input_filtered_search("milestone:none")
C
Clement Ho 已提交
321

322
        expect_tokens([milestone_token('none', false)])
323
        expect_issues_list_count(3)
C
Clement Ho 已提交
324
        expect_filtered_search_input_empty
C
Clement Ho 已提交
325
      end
A
Arinde Eniola 已提交
326

C
Clement Ho 已提交
327
      it 'filters issues by upcoming milestones' do
328 329 330 331
        create(:milestone, project: project, due_date: 1.month.from_now) do |future_milestone|
          create(:issue, project: project, milestone: future_milestone, author: user)
        end

332
        input_filtered_search("milestone:upcoming")
C
Clement Ho 已提交
333

334
        expect_tokens([milestone_token('upcoming', false)])
335
        expect_issues_list_count(1)
C
Clement Ho 已提交
336
        expect_filtered_search_input_empty
C
Clement Ho 已提交
337
      end
A
Arinde Eniola 已提交
338

339 340 341
      it 'filters issues by started milestones' do
        input_filtered_search("milestone:started")

342
        expect_tokens([milestone_token('started', false)])
343 344 345 346
        expect_issues_list_count(5)
        expect_filtered_search_input_empty
      end

C
Clement Ho 已提交
347 348
      it 'filters issues by milestone containing special characters' do
        special_milestone = create(:milestone, title: '!@\#{$%^&*()}', project: project)
349
        create(:issue, project: project, milestone: special_milestone)
C
Clement Ho 已提交
350

C
Clement Ho 已提交
351
        input_filtered_search("milestone:%#{special_milestone.title}")
C
Clement Ho 已提交
352

353
        expect_tokens([milestone_token(special_milestone.title)])
C
Clement Ho 已提交
354
        expect_issues_list_count(1)
C
Clement Ho 已提交
355
        expect_filtered_search_input_empty
C
Clement Ho 已提交
356 357
      end

358 359
      it 'does not show issues for unused milestones' do
        new_milestone = create(:milestone, title: 'new', project: project)
C
Clement Ho 已提交
360

C
Clement Ho 已提交
361
        input_filtered_search("milestone:%#{new_milestone.title}")
C
Clement Ho 已提交
362

363
        expect_tokens([milestone_token(new_milestone.title)])
364
        expect_no_issues_list
C
Clement Ho 已提交
365
        expect_filtered_search_input_empty
C
Clement Ho 已提交
366
      end
A
Arinde Eniola 已提交
367 368
    end

C
Clement Ho 已提交
369
    context 'milestone with other filters' do
C
Clement Ho 已提交
370
      it 'filters issues by searched milestone, author, assignee, label and text' do
371 372
        search_term = 'bug'

C
Clement Ho 已提交
373 374
        input_filtered_search("milestone:%#{milestone.title} author:@#{user.username} assignee:@#{user.username} label:~#{bug_label.title} #{search_term}")

375 376
        wait_for_requests

C
Clement Ho 已提交
377
        expect_tokens([
378 379 380 381
          milestone_token(milestone.title),
          author_token(user.name),
          assignee_token(user.name),
          label_token(bug_label.title)
C
Clement Ho 已提交
382
        ])
C
Clement Ho 已提交
383
        expect_issues_list_count(2)
C
Clement Ho 已提交
384
        expect_filtered_search_input(search_term)
A
Arinde Eniola 已提交
385 386
      end
    end
C
Clement Ho 已提交
387
  end
P
Phil Hughes 已提交
388

C
Clement Ho 已提交
389
  describe 'filter issues by text' do
C
Clement Ho 已提交
390
    context 'only text' do
391
      it 'filters issues by searched text' do
C
Clement Ho 已提交
392 393
        search = 'Bug'
        input_filtered_search(search)
C
Clement Ho 已提交
394

395
        expect_issues_list_count(4)
C
Clement Ho 已提交
396
        expect_filtered_search_input(search)
P
Phil Hughes 已提交
397 398
      end

C
Clement Ho 已提交
399
      it 'filters issues by multiple searched text' do
C
Clement Ho 已提交
400 401
        search = 'Bug report'
        input_filtered_search(search)
C
Clement Ho 已提交
402

C
Clement Ho 已提交
403
        expect_issues_list_count(3)
C
Clement Ho 已提交
404
        expect_filtered_search_input(search)
P
Phil Hughes 已提交
405 406
      end

C
Clement Ho 已提交
407
      it 'filters issues by case insensitive searched text' do
C
Clement Ho 已提交
408 409
        search = 'bug report'
        input_filtered_search(search)
C
Clement Ho 已提交
410

C
Clement Ho 已提交
411
        expect_issues_list_count(3)
C
Clement Ho 已提交
412
        expect_filtered_search_input(search)
P
Phil Hughes 已提交
413 414
      end

C
Clement Ho 已提交
415
      it 'filters issues by searched text containing single quotes' do
416 417 418
        issue = create(:issue, project: project, author: user, title: "issue with 'single quotes'")

        search = "'single quotes'"
C
Clement Ho 已提交
419
        input_filtered_search(search)
C
Clement Ho 已提交
420

C
Clement Ho 已提交
421
        expect_issues_list_count(1)
C
Clement Ho 已提交
422
        expect_filtered_search_input(search)
423
        expect(page).to have_content(issue.title)
P
Phil Hughes 已提交
424 425
      end

C
Clement Ho 已提交
426
      it 'filters issues by searched text containing double quotes' do
427 428
        issue = create(:issue, project: project, author: user, title: "issue with \"double quotes\"")

C
Clement Ho 已提交
429 430
        search = '"double quotes"'
        input_filtered_search(search)
C
Clement Ho 已提交
431

C
Clement Ho 已提交
432
        expect_issues_list_count(1)
C
Clement Ho 已提交
433
        expect_filtered_search_input(search)
434
        expect(page).to have_content(issue.title)
C
Clement Ho 已提交
435
      end
P
Phil Hughes 已提交
436

C
Clement Ho 已提交
437
      it 'filters issues by searched text containing special characters' do
438 439
        issue = create(:issue, project: project, author: user, title: "issue with !@\#{$%^&*()-+")

C
Clement Ho 已提交
440 441
        search = '!@#{$%^&*()-+'
        input_filtered_search(search)
C
Clement Ho 已提交
442

C
Clement Ho 已提交
443
        expect_issues_list_count(1)
C
Clement Ho 已提交
444
        expect_filtered_search_input(search)
445
        expect(page).to have_content(issue.title)
C
Clement Ho 已提交
446
      end
P
Phil Hughes 已提交
447

C
Clement Ho 已提交
448
      it 'does not show any issues' do
C
Clement Ho 已提交
449 450
        search = 'testing'
        input_filtered_search(search)
C
Clement Ho 已提交
451

452
        expect_no_issues_list
C
Clement Ho 已提交
453
        expect_filtered_search_input(search)
P
Phil Hughes 已提交
454
      end
C
Clement Ho 已提交
455
    end
P
Phil Hughes 已提交
456

C
Clement Ho 已提交
457
    context 'searched text with other filters' do
C
Clement Ho 已提交
458
      it 'filters issues by searched text, author, text, assignee, text, label1, text, label2, text, milestone and text' do
459
        input_filtered_search("bug author:@#{user.username} assignee:@#{user.username} report label:~#{bug_label.title} label:~#{caps_sensitive_label.title} milestone:%#{milestone.title} foo")
C
Clement Ho 已提交
460

C
Clement Ho 已提交
461
        expect_issues_list_count(1)
462
        expect_filtered_search_input('bug report foo')
463 464
      end
    end
C
Clement Ho 已提交
465

C
Clement Ho 已提交
466
    context 'sorting' do
C
Clement Ho 已提交
467
      it 'sorts by oldest updated' do
C
Clement Ho 已提交
468 469 470 471
        create(:issue,
          title: '3 days ago',
          project: project,
          author: user,
C
Clement Ho 已提交
472 473 474
          created_at: 3.days.ago,
          updated_at: 3.days.ago)

C
Clement Ho 已提交
475 476 477 478
        old_issue = create(:issue,
          title: '5 days ago',
          project: project,
          author: user,
C
Clement Ho 已提交
479 480 481 482
          created_at: 5.days.ago,
          updated_at: 5.days.ago)

        input_filtered_search('days ago')
C
Clement Ho 已提交
483

C
Clement Ho 已提交
484 485
        expect_issues_list_count(2)

E
Eric Eastwood 已提交
486
        sort_toggle = find('.filtered-search-wrapper .dropdown-toggle')
C
Clement Ho 已提交
487
        sort_toggle.click
C
Clement Ho 已提交
488

E
Eric Eastwood 已提交
489
        find('.filtered-search-wrapper .dropdown-menu li a', text: 'Oldest updated').click
490
        wait_for_requests
C
Clement Ho 已提交
491

C
Clement Ho 已提交
492 493 494 495 496
        expect(find('.issues-list .issue:first-of-type .issue-title-text a')).to have_content(old_issue.title)
      end
    end
  end

C
Clement Ho 已提交
497
  describe 'retains filter when switching issue states' do
498 499
    let!(:closed_issue) { create(:issue, :closed, project: project, title: 'closed bug') }

C
Clement Ho 已提交
500 501
    before do
      input_filtered_search('bug')
C
Clement Ho 已提交
502

C
Clement Ho 已提交
503 504
      # This ensures that the search is performed
      expect_issues_list_count(4, 1)
C
Clement Ho 已提交
505 506 507
    end

    it 'open state' do
508
      find('.issues-state-filters [data-state="closed"]').click
509
      wait_for_requests
C
Clement Ho 已提交
510

511
      find('.issues-state-filters [data-state="opened"]').click
512
      wait_for_requests
C
Clement Ho 已提交
513 514 515 516 517

      expect(page).to have_selector('.issues-list .issue', count: 4)
    end

    it 'closed state' do
518
      find('.issues-state-filters [data-state="closed"]').click
519
      wait_for_requests
C
Clement Ho 已提交
520

C
Clement Ho 已提交
521 522 523 524 525
      expect(page).to have_selector('.issues-list .issue', count: 1)
      expect(find('.issues-list .issue:first-of-type .issue-title-text a')).to have_content(closed_issue.title)
    end

    it 'all state' do
526
      find('.issues-state-filters [data-state="all"]').click
527
      wait_for_requests
C
Clement Ho 已提交
528

C
Clement Ho 已提交
529
      expect(page).to have_selector('.issues-list .issue', count: 5)
C
Clement Ho 已提交
530
    end
531
  end
532

533
  describe 'RSS feeds' do
534 535 536 537 538 539 540
    let(:group) { create(:group) }
    let(:project) { create(:project, group: group) }

    before do
      group.add_developer(user)
    end

541
    it 'updates atom feed link for project issues' do
542
      visit project_issues_path(project, milestone_title: milestone.title, assignee_id: user.id)
A
Annabel Dunstone Gray 已提交
543
      link = find_link('Subscribe')
C
Clement Ho 已提交
544
      params = CGI.parse(URI.parse(link[:href]).query)
545
      auto_discovery_link = find('link[type="application/atom+xml"]', visible: false)
C
Clement Ho 已提交
546
      auto_discovery_params = CGI.parse(URI.parse(auto_discovery_link[:href]).query)
C
Clement Ho 已提交
547

548
      expect(params).to include('rss_token' => [user.rss_token])
C
Clement Ho 已提交
549
      expect(params).to include('milestone_title' => [milestone.title])
550
      expect(params).to include('assignee_id' => [user.id.to_s])
551
      expect(auto_discovery_params).to include('rss_token' => [user.rss_token])
C
Clement Ho 已提交
552
      expect(auto_discovery_params).to include('milestone_title' => [milestone.title])
553 554
      expect(auto_discovery_params).to include('assignee_id' => [user.id.to_s])
    end
555

556
    it 'updates atom feed link for group issues' do
C
Clement Ho 已提交
557
      visit issues_group_path(group, milestone_title: milestone.title, assignee_id: user.id)
P
Phil Hughes 已提交
558
      link = find('.breadcrumbs a', text: 'Subscribe')
C
Clement Ho 已提交
559
      params = CGI.parse(URI.parse(link[:href]).query)
560
      auto_discovery_link = find('link[type="application/atom+xml"]', visible: false)
C
Clement Ho 已提交
561
      auto_discovery_params = CGI.parse(URI.parse(auto_discovery_link[:href]).query)
C
Clement Ho 已提交
562

563
      expect(params).to include('rss_token' => [user.rss_token])
C
Clement Ho 已提交
564
      expect(params).to include('milestone_title' => [milestone.title])
565
      expect(params).to include('assignee_id' => [user.id.to_s])
566
      expect(auto_discovery_params).to include('rss_token' => [user.rss_token])
C
Clement Ho 已提交
567
      expect(auto_discovery_params).to include('milestone_title' => [milestone.title])
568 569
      expect(auto_discovery_params).to include('assignee_id' => [user.id.to_s])
    end
570
  end
A
Alfredo Sumaran 已提交
571 572 573

  context 'URL has a trailing slash' do
    before do
574
      visit "#{project_issues_path(project)}/"
A
Alfredo Sumaran 已提交
575 576 577 578 579 580
    end

    it 'milestone dropdown loads milestones' do
      input_filtered_search("milestone:", submit: false)

      within('#js-dropdown-milestone') do
581
        expect(page).to have_selector('.filter-dropdown .filter-dropdown-item', count: 1)
A
Alfredo Sumaran 已提交
582 583 584 585 586 587 588
      end
    end

    it 'label dropdown load labels' do
      input_filtered_search("label:", submit: false)

      within('#js-dropdown-label') do
589
        expect(page).to have_selector('.filter-dropdown .filter-dropdown-item', count: 3)
A
Alfredo Sumaran 已提交
590 591 592
      end
    end
  end
593
end