filter_issues_spec.rb 20.0 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 10
  let!(:label) { create(:label, project: project) }
  let!(:wontfix) { create(:label, project: project, title: "Won't fix") }
11

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

C
Clement Ho 已提交
17
  let!(:closed_issue) { create(:issue, title: 'bug that is closed', project: project, state: :closed) }
C
Clement Ho 已提交
18

C
Clement Ho 已提交
19 20
  def expect_no_issues_list
    page.within '.issues-list' do
21
      expect(page).to have_no_selector('.issue')
C
Clement Ho 已提交
22 23 24 25 26 27 28 29 30 31 32 33
    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 已提交
34 35 36 37
  def select_search_at_index(pos)
    evaluate_script("el = document.querySelector('.filtered-search'); el.focus(); el.setSelectionRange(#{pos}, #{pos});")
  end

38
  before do
39
    project.add_master(user)
40

41 42 43 44
    user2 = create(:user)

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

46 47
    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])
48

49
    create(:labeled_issue,
C
Clement Ho 已提交
50 51 52 53
      title: "Bug 2",
      project: project,
      milestone: milestone,
      author: user,
54 55
      assignees: [user],
      labels: [bug_label])
C
Clement Ho 已提交
56

57
    create(:labeled_issue,
C
Clement Ho 已提交
58 59 60 61
      title: "issue by assignee with searchTerm and label",
      project: project,
      milestone: milestone,
      author: user,
62 63
      assignees: [user],
      labels: [caps_sensitive_label])
C
Clement Ho 已提交
64

65
    create(:labeled_issue,
66
      title: "Bug report foo was possible",
C
Clement Ho 已提交
67 68 69
      project: project,
      milestone: milestone,
      author: user,
70 71
      assignees: [user],
      labels: [bug_label, caps_sensitive_label])
C
Clement Ho 已提交
72

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

75
    sign_in(user)
76
    visit project_issues_path(project)
C
Clement Ho 已提交
77
  end
78

C
Clement Ho 已提交
79
  describe 'filter issues by author' do
C
Clement Ho 已提交
80
    context 'only author' do
C
Clement Ho 已提交
81
      it 'filters issues by searched author' do
82
        input_filtered_search("author:@#{user.username}")
C
Clement Ho 已提交
83

84 85 86
        wait_for_requests

        expect_tokens([author_token(user.name)])
C
Clement Ho 已提交
87
        expect_issues_list_count(5)
C
Clement Ho 已提交
88
        expect_filtered_search_input_empty
C
Clement Ho 已提交
89
      end
90 91
    end

C
Clement Ho 已提交
92
    context 'author with other filters' do
C
Clement Ho 已提交
93
      it 'filters issues by searched author, assignee, label, milestone and text' do
94 95
        search_term = 'issue'

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

98 99
        wait_for_requests

C
Clement Ho 已提交
100
        expect_tokens([
101 102 103 104
          author_token(user.name),
          assignee_token(user.name),
          label_token(caps_sensitive_label.title),
          milestone_token(milestone.title)
C
Clement Ho 已提交
105
        ])
C
Clement Ho 已提交
106
        expect_issues_list_count(1)
C
Clement Ho 已提交
107
        expect_filtered_search_input(search_term)
108 109 110
      end
    end
  end
A
Arinde Eniola 已提交
111

C
Clement Ho 已提交
112
  describe 'filter issues by assignee' do
C
Clement Ho 已提交
113
    context 'only assignee' do
C
Clement Ho 已提交
114
      it 'filters issues by searched assignee' do
C
Clement Ho 已提交
115
        input_filtered_search("assignee:@#{user.username}")
C
Clement Ho 已提交
116

117 118 119
        wait_for_requests

        expect_tokens([assignee_token(user.name)])
C
Clement Ho 已提交
120
        expect_issues_list_count(5)
C
Clement Ho 已提交
121
        expect_filtered_search_input_empty
C
Clement Ho 已提交
122
      end
A
Arinde Eniola 已提交
123

C
Clement Ho 已提交
124
      it 'filters issues by no assignee' do
C
Clement Ho 已提交
125
        input_filtered_search('assignee:none')
C
Clement Ho 已提交
126

127
        expect_tokens([assignee_token('none')])
128
        expect_issues_list_count(3, 1)
C
Clement Ho 已提交
129
        expect_filtered_search_input_empty
C
Clement Ho 已提交
130
      end
A
Arinde Eniola 已提交
131 132
    end

C
Clement Ho 已提交
133
    context 'assignee with other filters' do
C
Clement Ho 已提交
134
      it 'filters issues by searched assignee, author, label, milestone and text' do
135 136
        search_term = 'searchTerm'

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

C
Clement Ho 已提交
139
        expect_tokens([
140 141 142 143
          assignee_token(user.name),
          author_token(user.name),
          label_token(caps_sensitive_label.title),
          milestone_token(milestone.title)
C
Clement Ho 已提交
144
        ])
C
Clement Ho 已提交
145
        expect_issues_list_count(1)
C
Clement Ho 已提交
146
        expect_filtered_search_input(search_term)
C
Clement Ho 已提交
147 148
      end
    end
C
Clement Ho 已提交
149
  end
P
Phil Hughes 已提交
150

C
Clement Ho 已提交
151
  describe 'filter issues by label' do
C
Clement Ho 已提交
152
    context 'only label' do
C
Clement Ho 已提交
153
      it 'filters issues by searched label' do
C
Clement Ho 已提交
154
        input_filtered_search("label:~#{bug_label.title}")
C
Clement Ho 已提交
155

156
        expect_tokens([label_token(bug_label.title)])
C
Clement Ho 已提交
157
        expect_issues_list_count(2)
C
Clement Ho 已提交
158
        expect_filtered_search_input_empty
159
      end
P
Phil Hughes 已提交
160

C
Clement Ho 已提交
161
      it 'filters issues by no label' do
C
Clement Ho 已提交
162
        input_filtered_search('label:none')
C
Clement Ho 已提交
163

164
        expect_tokens([label_token('none', false)])
165
        expect_issues_list_count(8, 1)
C
Clement Ho 已提交
166
        expect_filtered_search_input_empty
167
      end
168

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

C
Clement Ho 已提交
172
        expect_tokens([
173 174
          label_token(bug_label.title),
          label_token(caps_sensitive_label.title)
C
Clement Ho 已提交
175
        ])
C
Clement Ho 已提交
176
        expect_issues_list_count(1)
C
Clement Ho 已提交
177
        expect_filtered_search_input_empty
C
Clement Ho 已提交
178
      end
C
Clement Ho 已提交
179 180 181 182 183

      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 已提交
184

C
Clement Ho 已提交
185
        input_filtered_search("label:~#{special_label.title}")
186 187

        expect_tokens([label_token(special_label.title)])
C
Clement Ho 已提交
188
        expect_issues_list_count(1)
C
Clement Ho 已提交
189
        expect_filtered_search_input_empty
C
Clement Ho 已提交
190 191
      end

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

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

197
        expect_tokens([label_token(new_label.title)])
198
        expect_no_issues_list
C
Clement Ho 已提交
199
        expect_filtered_search_input_empty
C
Clement Ho 已提交
200 201 202
      end
    end

C
Clement Ho 已提交
203
    context 'label with multiple words' do
C
Clement Ho 已提交
204 205 206 207 208
      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 已提交
209
        input_filtered_search("label:~'#{special_multiple_label.title}'")
C
Clement Ho 已提交
210

211
        # Check for search results (which makes sure that the page has changed)
C
Clement Ho 已提交
212
        expect_issues_list_count(1)
C
Clement Ho 已提交
213

214 215 216
        # filtered search defaults quotations to double quotes
        expect_tokens([label_token("\"#{special_multiple_label.title}\"")])

C
Clement Ho 已提交
217
        expect_filtered_search_input_empty
C
Clement Ho 已提交
218 219 220
      end

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

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

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

231
        expect_tokens([label_token("\"#{multiple_words_label.title}\"")])
C
Clement Ho 已提交
232
        expect_issues_list_count(1)
C
Clement Ho 已提交
233
        expect_filtered_search_input_empty
C
Clement Ho 已提交
234 235 236
      end

      it 'single quotes containing double quotes' do
237 238 239
        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 已提交
240

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

243
        expect_tokens([label_token("'#{double_quotes_label.title}'")])
244
        expect_issues_list_count(1)
C
Clement Ho 已提交
245
        expect_filtered_search_input_empty
C
Clement Ho 已提交
246 247 248 249 250 251 252
      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 已提交
253
        input_filtered_search("label:~\"#{single_quotes_label.title}\"")
C
Clement Ho 已提交
254

255
        expect_tokens([label_token("\"#{single_quotes_label.title}\"")])
C
Clement Ho 已提交
256
        expect_issues_list_count(1)
C
Clement Ho 已提交
257
        expect_filtered_search_input_empty
C
Clement Ho 已提交
258
      end
259
    end
260

C
Clement Ho 已提交
261
    context 'label with other filters' do
C
Clement Ho 已提交
262
      it 'filters issues by searched label, author, assignee, milestone and text' do
263 264
        search_term = 'bug'

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

C
Clement Ho 已提交
267
        expect_tokens([
268 269 270 271
          label_token(caps_sensitive_label.title),
          author_token(user.name),
          assignee_token(user.name),
          milestone_token(milestone.title)
C
Clement Ho 已提交
272
        ])
C
Clement Ho 已提交
273
        expect_issues_list_count(1)
C
Clement Ho 已提交
274
        expect_filtered_search_input(search_term)
C
Clement Ho 已提交
275 276
      end
    end
P
Phil Hughes 已提交
277

C
Clement Ho 已提交
278
    context 'multiple labels with other filters' do
C
Clement Ho 已提交
279
      it 'filters issues by searched label, label2, author, assignee, milestone and text' do
280 281
        search_term = 'bug'

C
Clement Ho 已提交
282
        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 已提交
283

284 285
        wait_for_requests

C
Clement Ho 已提交
286
        expect_tokens([
287 288 289 290 291
          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 已提交
292
        ])
C
Clement Ho 已提交
293
        expect_issues_list_count(1)
C
Clement Ho 已提交
294
        expect_filtered_search_input(search_term)
C
Clement Ho 已提交
295
      end
296 297
    end

C
Clement Ho 已提交
298
    context 'issue label clicked' do
C
Clement Ho 已提交
299
      before do
T
Taurie Davis 已提交
300
        find('.issues-list .issue .issue-main-info .issuable-info a .label', text: multiple_words_label.title).click
C
Clement Ho 已提交
301 302 303 304 305 306 307
      end

      it 'filters' do
        expect_issues_list_count(1)
      end

      it 'displays in search bar' do
308
        expect_tokens([label_token("\"#{multiple_words_label.title}\"")])
C
Clement Ho 已提交
309
        expect_filtered_search_input_empty
C
Clement Ho 已提交
310 311
      end
    end
P
Phil Hughes 已提交
312 313
  end

C
Clement Ho 已提交
314
  describe 'filter issues by milestone' do
C
Clement Ho 已提交
315
    context 'only milestone' do
C
Clement Ho 已提交
316
      it 'filters issues by searched milestone' do
317
        input_filtered_search("milestone:%#{milestone.title}")
C
Clement Ho 已提交
318

319
        expect_tokens([milestone_token(milestone.title)])
C
Clement Ho 已提交
320
        expect_issues_list_count(5)
C
Clement Ho 已提交
321
        expect_filtered_search_input_empty
C
Clement Ho 已提交
322
      end
A
Arinde Eniola 已提交
323

C
Clement Ho 已提交
324
      it 'filters issues by no milestone' do
325
        input_filtered_search("milestone:none")
C
Clement Ho 已提交
326

327
        expect_tokens([milestone_token('none', false)])
328
        expect_issues_list_count(3, 1)
C
Clement Ho 已提交
329
        expect_filtered_search_input_empty
C
Clement Ho 已提交
330
      end
A
Arinde Eniola 已提交
331

C
Clement Ho 已提交
332
      it 'filters issues by upcoming milestones' do
333 334 335 336
        create(:milestone, project: project, due_date: 1.month.from_now) do |future_milestone|
          create(:issue, project: project, milestone: future_milestone, author: user)
        end

337
        input_filtered_search("milestone:upcoming")
C
Clement Ho 已提交
338

339
        expect_tokens([milestone_token('upcoming', false)])
340
        expect_issues_list_count(1)
C
Clement Ho 已提交
341
        expect_filtered_search_input_empty
C
Clement Ho 已提交
342
      end
A
Arinde Eniola 已提交
343

344 345 346
      it 'filters issues by started milestones' do
        input_filtered_search("milestone:started")

347
        expect_tokens([milestone_token('started', false)])
348 349 350 351
        expect_issues_list_count(5)
        expect_filtered_search_input_empty
      end

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

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

358
        expect_tokens([milestone_token(special_milestone.title)])
C
Clement Ho 已提交
359
        expect_issues_list_count(1)
C
Clement Ho 已提交
360
        expect_filtered_search_input_empty
C
Clement Ho 已提交
361 362
      end

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

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

368
        expect_tokens([milestone_token(new_milestone.title)])
369
        expect_no_issues_list
C
Clement Ho 已提交
370
        expect_filtered_search_input_empty
C
Clement Ho 已提交
371
      end
A
Arinde Eniola 已提交
372 373
    end

C
Clement Ho 已提交
374
    context 'milestone with other filters' do
C
Clement Ho 已提交
375
      it 'filters issues by searched milestone, author, assignee, label and text' do
376 377
        search_term = 'bug'

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

380 381
        wait_for_requests

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

C
Clement Ho 已提交
394
  describe 'filter issues by text' do
C
Clement Ho 已提交
395
    context 'only text' do
396
      it 'filters issues by searched text' do
C
Clement Ho 已提交
397 398
        search = 'Bug'
        input_filtered_search(search)
C
Clement Ho 已提交
399

C
Clement Ho 已提交
400
        expect_issues_list_count(4, 1)
C
Clement Ho 已提交
401
        expect_filtered_search_input(search)
P
Phil Hughes 已提交
402 403
      end

C
Clement Ho 已提交
404
      it 'filters issues by multiple searched text' do
C
Clement Ho 已提交
405 406
        search = 'Bug report'
        input_filtered_search(search)
C
Clement Ho 已提交
407

C
Clement Ho 已提交
408
        expect_issues_list_count(3)
C
Clement Ho 已提交
409
        expect_filtered_search_input(search)
P
Phil Hughes 已提交
410 411
      end

C
Clement Ho 已提交
412
      it 'filters issues by case insensitive searched text' do
C
Clement Ho 已提交
413 414
        search = 'bug report'
        input_filtered_search(search)
C
Clement Ho 已提交
415

C
Clement Ho 已提交
416
        expect_issues_list_count(3)
C
Clement Ho 已提交
417
        expect_filtered_search_input(search)
P
Phil Hughes 已提交
418 419
      end

C
Clement Ho 已提交
420
      it 'filters issues by searched text containing single quotes' do
421 422 423
        issue = create(:issue, project: project, author: user, title: "issue with 'single quotes'")

        search = "'single quotes'"
C
Clement Ho 已提交
424
        input_filtered_search(search)
C
Clement Ho 已提交
425

C
Clement Ho 已提交
426
        expect_issues_list_count(1)
C
Clement Ho 已提交
427
        expect_filtered_search_input(search)
428
        expect(page).to have_content(issue.title)
P
Phil Hughes 已提交
429 430
      end

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

C
Clement Ho 已提交
434 435
        search = '"double quotes"'
        input_filtered_search(search)
C
Clement Ho 已提交
436

C
Clement Ho 已提交
437
        expect_issues_list_count(1)
C
Clement Ho 已提交
438
        expect_filtered_search_input(search)
439
        expect(page).to have_content(issue.title)
C
Clement Ho 已提交
440
      end
P
Phil Hughes 已提交
441

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

C
Clement Ho 已提交
445 446
        search = '!@#{$%^&*()-+'
        input_filtered_search(search)
C
Clement Ho 已提交
447

C
Clement Ho 已提交
448
        expect_issues_list_count(1)
C
Clement Ho 已提交
449
        expect_filtered_search_input(search)
450
        expect(page).to have_content(issue.title)
C
Clement Ho 已提交
451
      end
P
Phil Hughes 已提交
452

C
Clement Ho 已提交
453
      it 'does not show any issues' do
C
Clement Ho 已提交
454 455
        search = 'testing'
        input_filtered_search(search)
C
Clement Ho 已提交
456

457
        expect_no_issues_list
C
Clement Ho 已提交
458
        expect_filtered_search_input(search)
P
Phil Hughes 已提交
459
      end
C
Clement Ho 已提交
460
    end
P
Phil Hughes 已提交
461

C
Clement Ho 已提交
462
    context 'searched text with other filters' do
C
Clement Ho 已提交
463
      it 'filters issues by searched text, author, text, assignee, text, label1, text, label2, text, milestone and text' do
464
        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 已提交
465

C
Clement Ho 已提交
466
        expect_issues_list_count(1)
467
        expect_filtered_search_input('bug report foo')
468 469
      end
    end
C
Clement Ho 已提交
470

C
Clement Ho 已提交
471
    context 'sorting' do
C
Clement Ho 已提交
472
      it 'sorts by oldest updated' do
C
Clement Ho 已提交
473 474 475 476
        create(:issue,
          title: '3 days ago',
          project: project,
          author: user,
C
Clement Ho 已提交
477 478 479
          created_at: 3.days.ago,
          updated_at: 3.days.ago)

C
Clement Ho 已提交
480 481 482 483
        old_issue = create(:issue,
          title: '5 days ago',
          project: project,
          author: user,
C
Clement Ho 已提交
484 485 486 487
          created_at: 5.days.ago,
          updated_at: 5.days.ago)

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

C
Clement Ho 已提交
489 490
        expect_issues_list_count(2)

E
Eric Eastwood 已提交
491
        sort_toggle = find('.filtered-search-wrapper .dropdown-toggle')
C
Clement Ho 已提交
492
        sort_toggle.click
C
Clement Ho 已提交
493

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

C
Clement Ho 已提交
497 498 499 500 501
        expect(find('.issues-list .issue:first-of-type .issue-title-text a')).to have_content(old_issue.title)
      end
    end
  end

C
Clement Ho 已提交
502
  describe 'retains filter when switching issue states' do
C
Clement Ho 已提交
503 504
    before do
      input_filtered_search('bug')
C
Clement Ho 已提交
505

C
Clement Ho 已提交
506 507
      # This ensures that the search is performed
      expect_issues_list_count(4, 1)
C
Clement Ho 已提交
508 509 510
    end

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

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

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

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

C
Clement Ho 已提交
524 525 526 527 528
      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
529
      find('.issues-state-filters [data-state="all"]').click
530
      wait_for_requests
C
Clement Ho 已提交
531

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

536
  describe 'RSS feeds' do
537 538 539 540 541 542 543
    let(:group) { create(:group) }
    let(:project) { create(:project, group: group) }

    before do
      group.add_developer(user)
    end

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

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

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

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

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

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

      within('#js-dropdown-milestone') do
584
        expect(page).to have_selector('.filter-dropdown .filter-dropdown-item', count: 1)
A
Alfredo Sumaran 已提交
585 586 587 588 589 590 591 592 593 594 595
      end
    end

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

      within('#js-dropdown-label') do
        expect(page).to have_selector('.filter-dropdown .filter-dropdown-item', count: 5)
      end
    end
  end
596
end