filter_issues_spec.rb 19.8 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 45 46 47
    user2 = create(:user)

    create(:issue, project: project, author: user2, title: "Bug report 1")
    create(:issue, project: project, author: user2, title: "Bug report 2")
    create(:issue, project: project, author: user2, title: "issue with 'single quotes'")
    create(:issue, project: project, author: user2, title: "issue with \"double quotes\"")
    create(:issue, project: project, author: user2, title: "issue with !@\#{$%^&*()-+")
48

49 50
    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])
51

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

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

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

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

78 79 80
    create(:milestone, project: project, due_date: 1.month.from_now) do |future_milestone|
      create(:issue, project: project, milestone: future_milestone, author: user2)
    end
P
Phil Hughes 已提交
81

82
    sign_in(user)
83
    visit project_issues_path(project)
C
Clement Ho 已提交
84
  end
85

C
Clement Ho 已提交
86
  describe 'filter issues by author' do
C
Clement Ho 已提交
87
    context 'only author' do
C
Clement Ho 已提交
88
      it 'filters issues by searched author' do
89
        input_filtered_search("author:@#{user.username}")
C
Clement Ho 已提交
90

91 92 93
        wait_for_requests

        expect_tokens([author_token(user.name)])
C
Clement Ho 已提交
94
        expect_issues_list_count(5)
C
Clement Ho 已提交
95
        expect_filtered_search_input_empty
C
Clement Ho 已提交
96
      end
97 98
    end

C
Clement Ho 已提交
99
    context 'author with other filters' do
C
Clement Ho 已提交
100
      it 'filters issues by searched author, assignee, label, milestone and text' do
101 102
        search_term = 'issue'

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

105 106
        wait_for_requests

C
Clement Ho 已提交
107
        expect_tokens([
108 109 110 111
          author_token(user.name),
          assignee_token(user.name),
          label_token(caps_sensitive_label.title),
          milestone_token(milestone.title)
C
Clement Ho 已提交
112
        ])
C
Clement Ho 已提交
113
        expect_issues_list_count(1)
C
Clement Ho 已提交
114
        expect_filtered_search_input(search_term)
115 116 117
      end
    end
  end
A
Arinde Eniola 已提交
118

C
Clement Ho 已提交
119
  describe 'filter issues by assignee' do
C
Clement Ho 已提交
120
    context 'only assignee' do
C
Clement Ho 已提交
121
      it 'filters issues by searched assignee' do
C
Clement Ho 已提交
122
        input_filtered_search("assignee:@#{user.username}")
C
Clement Ho 已提交
123

124 125 126
        wait_for_requests

        expect_tokens([assignee_token(user.name)])
C
Clement Ho 已提交
127
        expect_issues_list_count(5)
C
Clement Ho 已提交
128
        expect_filtered_search_input_empty
C
Clement Ho 已提交
129
      end
A
Arinde Eniola 已提交
130

C
Clement Ho 已提交
131
      it 'filters issues by no assignee' do
C
Clement Ho 已提交
132
        input_filtered_search('assignee:none')
C
Clement Ho 已提交
133

134
        expect_tokens([assignee_token('none')])
135
        expect_issues_list_count(7, 1)
C
Clement Ho 已提交
136
        expect_filtered_search_input_empty
C
Clement Ho 已提交
137
      end
A
Arinde Eniola 已提交
138 139
    end

C
Clement Ho 已提交
140
    context 'assignee with other filters' do
C
Clement Ho 已提交
141
      it 'filters issues by searched assignee, author, label, milestone and text' do
142 143
        search_term = 'searchTerm'

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

C
Clement Ho 已提交
146
        expect_tokens([
147 148 149 150
          assignee_token(user.name),
          author_token(user.name),
          label_token(caps_sensitive_label.title),
          milestone_token(milestone.title)
C
Clement Ho 已提交
151
        ])
C
Clement Ho 已提交
152
        expect_issues_list_count(1)
C
Clement Ho 已提交
153
        expect_filtered_search_input(search_term)
C
Clement Ho 已提交
154 155
      end
    end
C
Clement Ho 已提交
156
  end
P
Phil Hughes 已提交
157

C
Clement Ho 已提交
158
  describe 'filter issues by label' do
C
Clement Ho 已提交
159
    context 'only label' do
C
Clement Ho 已提交
160
      it 'filters issues by searched label' do
C
Clement Ho 已提交
161
        input_filtered_search("label:~#{bug_label.title}")
C
Clement Ho 已提交
162

163
        expect_tokens([label_token(bug_label.title)])
C
Clement Ho 已提交
164
        expect_issues_list_count(2)
C
Clement Ho 已提交
165
        expect_filtered_search_input_empty
166
      end
P
Phil Hughes 已提交
167

C
Clement Ho 已提交
168
      it 'filters issues by no label' do
C
Clement Ho 已提交
169
        input_filtered_search('label:none')
C
Clement Ho 已提交
170

171
        expect_tokens([label_token('none', false)])
172
        expect_issues_list_count(8, 1)
C
Clement Ho 已提交
173
        expect_filtered_search_input_empty
174
      end
175

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

C
Clement Ho 已提交
179
        expect_tokens([
180 181
          label_token(bug_label.title),
          label_token(caps_sensitive_label.title)
C
Clement Ho 已提交
182
        ])
C
Clement Ho 已提交
183
        expect_issues_list_count(1)
C
Clement Ho 已提交
184
        expect_filtered_search_input_empty
C
Clement Ho 已提交
185
      end
C
Clement Ho 已提交
186 187 188 189 190

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

C
Clement Ho 已提交
192
        input_filtered_search("label:~#{special_label.title}")
193 194

        expect_tokens([label_token(special_label.title)])
C
Clement Ho 已提交
195
        expect_issues_list_count(1)
C
Clement Ho 已提交
196
        expect_filtered_search_input_empty
C
Clement Ho 已提交
197 198 199
      end

      it 'does not show issues' do
C
Clement Ho 已提交
200
        new_label = create(:label, project: project, title: 'new_label')
C
Clement Ho 已提交
201

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

204
        expect_tokens([label_token(new_label.title)])
C
Clement Ho 已提交
205
        expect_no_issues_list()
C
Clement Ho 已提交
206
        expect_filtered_search_input_empty
C
Clement Ho 已提交
207 208 209
      end
    end

C
Clement Ho 已提交
210
    context 'label with multiple words' do
C
Clement Ho 已提交
211 212 213 214 215
      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 已提交
216
        input_filtered_search("label:~'#{special_multiple_label.title}'")
C
Clement Ho 已提交
217

218
        # Check for search results (which makes sure that the page has changed)
C
Clement Ho 已提交
219
        expect_issues_list_count(1)
C
Clement Ho 已提交
220

221 222 223
        # filtered search defaults quotations to double quotes
        expect_tokens([label_token("\"#{special_multiple_label.title}\"")])

C
Clement Ho 已提交
224
        expect_filtered_search_input_empty
C
Clement Ho 已提交
225 226 227
      end

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

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

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

238
        expect_tokens([label_token("\"#{multiple_words_label.title}\"")])
C
Clement Ho 已提交
239
        expect_issues_list_count(1)
C
Clement Ho 已提交
240
        expect_filtered_search_input_empty
C
Clement Ho 已提交
241 242 243
      end

      it 'single quotes containing double quotes' do
244 245 246
        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 已提交
247

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

250
        expect_tokens([label_token("'#{double_quotes_label.title}'")])
251
        expect_issues_list_count(1)
C
Clement Ho 已提交
252
        expect_filtered_search_input_empty
C
Clement Ho 已提交
253 254 255 256 257 258 259
      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 已提交
260
        input_filtered_search("label:~\"#{single_quotes_label.title}\"")
C
Clement Ho 已提交
261

262
        expect_tokens([label_token("\"#{single_quotes_label.title}\"")])
C
Clement Ho 已提交
263
        expect_issues_list_count(1)
C
Clement Ho 已提交
264
        expect_filtered_search_input_empty
C
Clement Ho 已提交
265
      end
266
    end
267

C
Clement Ho 已提交
268
    context 'label with other filters' do
C
Clement Ho 已提交
269
      it 'filters issues by searched label, author, assignee, milestone and text' do
270 271
        search_term = 'bug'

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

C
Clement Ho 已提交
274
        expect_tokens([
275 276 277 278
          label_token(caps_sensitive_label.title),
          author_token(user.name),
          assignee_token(user.name),
          milestone_token(milestone.title)
C
Clement Ho 已提交
279
        ])
C
Clement Ho 已提交
280
        expect_issues_list_count(1)
C
Clement Ho 已提交
281
        expect_filtered_search_input(search_term)
C
Clement Ho 已提交
282 283
      end
    end
P
Phil Hughes 已提交
284

C
Clement Ho 已提交
285
    context 'multiple labels with other filters' do
C
Clement Ho 已提交
286
      it 'filters issues by searched label, label2, author, assignee, milestone and text' do
287 288
        search_term = 'bug'

C
Clement Ho 已提交
289
        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 已提交
290

291 292
        wait_for_requests

C
Clement Ho 已提交
293
        expect_tokens([
294 295 296 297 298
          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 已提交
299
        ])
C
Clement Ho 已提交
300
        expect_issues_list_count(1)
C
Clement Ho 已提交
301
        expect_filtered_search_input(search_term)
C
Clement Ho 已提交
302
      end
303 304
    end

C
Clement Ho 已提交
305
    context 'issue label clicked' do
C
Clement Ho 已提交
306
      before do
T
Taurie Davis 已提交
307
        find('.issues-list .issue .issue-main-info .issuable-info a .label', text: multiple_words_label.title).click
C
Clement Ho 已提交
308 309 310 311 312 313 314
      end

      it 'filters' do
        expect_issues_list_count(1)
      end

      it 'displays in search bar' do
315
        expect_tokens([label_token("\"#{multiple_words_label.title}\"")])
C
Clement Ho 已提交
316
        expect_filtered_search_input_empty
C
Clement Ho 已提交
317 318
      end
    end
P
Phil Hughes 已提交
319 320
  end

C
Clement Ho 已提交
321
  describe 'filter issues by milestone' do
C
Clement Ho 已提交
322
    context 'only milestone' do
C
Clement Ho 已提交
323
      it 'filters issues by searched milestone' do
324
        input_filtered_search("milestone:%#{milestone.title}")
C
Clement Ho 已提交
325

326
        expect_tokens([milestone_token(milestone.title)])
C
Clement Ho 已提交
327
        expect_issues_list_count(5)
C
Clement Ho 已提交
328
        expect_filtered_search_input_empty
C
Clement Ho 已提交
329
      end
A
Arinde Eniola 已提交
330

C
Clement Ho 已提交
331
      it 'filters issues by no milestone' do
332
        input_filtered_search("milestone:none")
C
Clement Ho 已提交
333

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

C
Clement Ho 已提交
339
      it 'filters issues by upcoming milestones' do
340
        input_filtered_search("milestone:upcoming")
C
Clement Ho 已提交
341

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

347 348 349
      it 'filters issues by started milestones' do
        input_filtered_search("milestone:started")

350
        expect_tokens([milestone_token('started', false)])
351 352 353 354
        expect_issues_list_count(5)
        expect_filtered_search_input_empty
      end

C
Clement Ho 已提交
355 356 357
      it 'filters issues by milestone containing special characters' do
        special_milestone = create(:milestone, title: '!@\#{$%^&*()}', project: project)
        create(:issue, title: "Issue with special character milestone", project: project, milestone: special_milestone)
C
Clement Ho 已提交
358

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

361
        expect_tokens([milestone_token(special_milestone.title)])
C
Clement Ho 已提交
362
        expect_issues_list_count(1)
C
Clement Ho 已提交
363
        expect_filtered_search_input_empty
C
Clement Ho 已提交
364 365 366 367
      end

      it 'does not show issues' do
        new_milestone = create(:milestone, title: "new", project: project)
C
Clement Ho 已提交
368

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

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

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

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

383 384
        wait_for_requests

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

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

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

C
Clement Ho 已提交
407
      it 'filters issues by multiple 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 case insensitive searched text' do
C
Clement Ho 已提交
416 417
        search = 'bug report'
        input_filtered_search(search)
C
Clement Ho 已提交
418

C
Clement Ho 已提交
419
        expect_issues_list_count(3)
C
Clement Ho 已提交
420
        expect_filtered_search_input(search)
P
Phil Hughes 已提交
421 422
      end

C
Clement Ho 已提交
423
      it 'filters issues by searched text containing single quotes' do
C
Clement Ho 已提交
424 425
        search = '\'single quotes\''
        input_filtered_search(search)
C
Clement Ho 已提交
426

C
Clement Ho 已提交
427
        expect_issues_list_count(1)
C
Clement Ho 已提交
428
        expect_filtered_search_input(search)
P
Phil Hughes 已提交
429 430
      end

C
Clement Ho 已提交
431
      it 'filters issues by searched text containing double quotes' do
C
Clement Ho 已提交
432 433
        search = '"double quotes"'
        input_filtered_search(search)
C
Clement Ho 已提交
434

C
Clement Ho 已提交
435
        expect_issues_list_count(1)
C
Clement Ho 已提交
436
        expect_filtered_search_input(search)
C
Clement Ho 已提交
437
      end
P
Phil Hughes 已提交
438

C
Clement Ho 已提交
439
      it 'filters issues by searched text containing special characters' do
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)
C
Clement Ho 已提交
445
      end
P
Phil Hughes 已提交
446

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

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

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

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

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

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

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

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

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

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

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

C
Clement Ho 已提交
496
  describe 'retains filter when switching issue states' do
C
Clement Ho 已提交
497 498
    before do
      input_filtered_search('bug')
C
Clement Ho 已提交
499

C
Clement Ho 已提交
500 501
      # This ensures that the search is performed
      expect_issues_list_count(4, 1)
C
Clement Ho 已提交
502 503 504
    end

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

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

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

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

C
Clement Ho 已提交
518 519 520 521 522
      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
523
      find('.issues-state-filters [data-state="all"]').click
524
      wait_for_requests
C
Clement Ho 已提交
525

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

530
  describe 'RSS feeds' do
531 532 533 534 535 536 537
    let(:group) { create(:group) }
    let(:project) { create(:project, group: group) }

    before do
      group.add_developer(user)
    end

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

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

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

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

  context 'URL has a trailing slash' do
    before do
571
      visit "#{project_issues_path(project)}/"
A
Alfredo Sumaran 已提交
572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589
    end

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

      within('#js-dropdown-milestone') do
        expect(page).to have_selector('.filter-dropdown .filter-dropdown-item', count: 2)
      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
590
end