boards_spec.rb 20.9 KB
Newer Older
P
Phil Hughes 已提交
1 2 3
require 'rails_helper'

describe 'Issue Boards', feature: true, js: true do
4 5
  include WaitForAjax

6
  let(:project) { create(:empty_project, :public) }
7 8
  let(:user)    { create(:user) }
  let!(:user2)  { create(:user) }
P
Phil Hughes 已提交
9 10

  before do
11 12 13
    project.create_board
    project.board.lists.create(list_type: :backlog)
    project.board.lists.create(list_type: :done)
14

P
Phil Hughes 已提交
15
    project.team << [user, :master]
P
Phil Hughes 已提交
16
    project.team << [user2, :master]
17

P
Phil Hughes 已提交
18 19 20
    login_as(user)
  end

P
Phil Hughes 已提交
21 22 23
  context 'no lists' do
    before do
      visit namespace_project_board_path(project.namespace, project)
P
Phil Hughes 已提交
24 25
      wait_for_vue_resource
      expect(page).to have_selector('.board', count: 3)
P
Phil Hughes 已提交
26
    end
P
Phil Hughes 已提交
27

P
Phil Hughes 已提交
28 29
    it 'shows blank state' do
      expect(page).to have_content('Welcome to your Issue Board!')
P
Phil Hughes 已提交
30 31
    end

32
    it 'hides the blank state when clicking nevermind button' do
P
Phil Hughes 已提交
33
      page.within(find('.board-blank-state')) do
P
Phil Hughes 已提交
34
        click_button("Nevermind, I'll use my own")
P
Phil Hughes 已提交
35 36
      end
      expect(page).to have_selector('.board', count: 2)
P
Phil Hughes 已提交
37 38
    end

P
Phil Hughes 已提交
39 40
    it 'creates default lists' do
      lists = ['Backlog', 'Development', 'Testing', 'Production', 'Ready', 'Done']
P
Phil Hughes 已提交
41

P
Phil Hughes 已提交
42
      page.within(find('.board-blank-state')) do
P
Phil Hughes 已提交
43 44
        click_button('Add default lists')
      end
P
Phil Hughes 已提交
45 46
      wait_for_vue_resource

P
Phil Hughes 已提交
47 48 49 50 51 52
      expect(page).to have_selector('.board', count: 6)

      page.all('.board').each_with_index do |list, i|
        expect(list.find('.board-title')).to have_content(lists[i])
      end
    end
P
Phil Hughes 已提交
53 54
  end

P
Phil Hughes 已提交
55
  context 'with lists' do
56
    let(:milestone) { create(:milestone, project: project) }
P
Phil Hughes 已提交
57

P
Phil Hughes 已提交
58 59 60
    let(:planning)    { create(:label, project: project, name: 'Planning') }
    let(:development) { create(:label, project: project, name: 'Development') }
    let(:testing)     { create(:label, project: project, name: 'Testing') }
P
Phil Hughes 已提交
61
    let(:bug)         { create(:label, project: project, name: 'Bug') }
62 63
    let!(:backlog)    { create(:label, project: project, name: 'Backlog') }
    let!(:done)       { create(:label, project: project, name: 'Done') }
P
Phil Hughes 已提交
64 65 66 67

    let!(:list1) { create(:list, board: project.board, label: planning, position: 0) }
    let!(:list2) { create(:list, board: project.board, label: development, position: 1) }

68 69 70 71 72
    let!(:confidential_issue) { create(:issue, :confidential, project: project, author: user) }
    let!(:issue1) { create(:issue, project: project, assignee: user) }
    let!(:issue2) { create(:issue, project: project, author: user2) }
    let!(:issue3) { create(:issue, project: project) }
    let!(:issue4) { create(:issue, project: project) }
P
Phil Hughes 已提交
73
    let!(:issue5) { create(:labeled_issue, project: project, labels: [planning], milestone: milestone) }
74 75
    let!(:issue6) { create(:labeled_issue, project: project, labels: [planning, development]) }
    let!(:issue7) { create(:labeled_issue, project: project, labels: [development]) }
76
    let!(:issue8) { create(:closed_issue, project: project) }
77
    let!(:issue9) { create(:labeled_issue, project: project, labels: [testing, bug]) }
P
Phil Hughes 已提交
78 79 80 81

    before do
      visit namespace_project_board_path(project.namespace, project)

P
Phil Hughes 已提交
82
      wait_for_vue_resource
P
Phil Hughes 已提交
83 84

      expect(page).to have_selector('.board', count: 4)
85 86 87 88
      expect(find('.board:nth-child(1)')).to have_selector('.card')
      expect(find('.board:nth-child(2)')).to have_selector('.card')
      expect(find('.board:nth-child(3)')).to have_selector('.card')
      expect(find('.board:nth-child(4)')).to have_selector('.card')
P
Phil Hughes 已提交
89 90 91 92 93 94 95
    end

    it 'shows lists' do
      expect(page).to have_selector('.board', count: 4)
    end

    it 'shows issues in lists' do
P
Phil Hughes 已提交
96
      page.within(find('.board:nth-child(2)')) do
97 98
        expect(page.find('.board-header')).to have_content('2')
        expect(page).to have_selector('.card', count: 2)
P
Phil Hughes 已提交
99
      end
P
Phil Hughes 已提交
100

P
Phil Hughes 已提交
101
      page.within(find('.board:nth-child(3)')) do
P
Phil Hughes 已提交
102 103 104 105
        expect(page.find('.board-header')).to have_content('2')
        expect(page).to have_selector('.card', count: 2)
      end
    end
P
Phil Hughes 已提交
106

P
Phil Hughes 已提交
107
    it 'shows confidential issues with icon' do
P
Phil Hughes 已提交
108
      page.within(find('.board', match: :first)) do
P
Phil Hughes 已提交
109 110 111 112
        expect(page).to have_selector('.confidential-icon', count: 1)
      end
    end

113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
    it 'search backlog list' do
      page.within('#js-boards-seach') do
        find('.form-control').set(issue1.title)
      end

      wait_for_vue_resource

      expect(find('.board:nth-child(1)')).to have_selector('.card', count: 1)
      expect(find('.board:nth-child(2)')).to have_selector('.card', count: 0)
      expect(find('.board:nth-child(3)')).to have_selector('.card', count: 0)
      expect(find('.board:nth-child(4)')).to have_selector('.card', count: 0)
    end

    it 'search done list' do
      page.within('#js-boards-seach') do
        find('.form-control').set(issue8.title)
      end

      wait_for_vue_resource

      expect(find('.board:nth-child(1)')).to have_selector('.card', count: 0)
      expect(find('.board:nth-child(2)')).to have_selector('.card', count: 0)
      expect(find('.board:nth-child(3)')).to have_selector('.card', count: 0)
      expect(find('.board:nth-child(4)')).to have_selector('.card', count: 1)
    end

    it 'search list' do
      page.within('#js-boards-seach') do
        find('.form-control').set(issue5.title)
      end

      wait_for_vue_resource

      expect(find('.board:nth-child(1)')).to have_selector('.card', count: 0)
      expect(find('.board:nth-child(2)')).to have_selector('.card', count: 1)
      expect(find('.board:nth-child(3)')).to have_selector('.card', count: 0)
      expect(find('.board:nth-child(4)')).to have_selector('.card', count: 0)
    end

P
Phil Hughes 已提交
152
    it 'allows user to delete board' do
P
Phil Hughes 已提交
153
      page.within(find('.board:nth-child(2)')) do
P
Phil Hughes 已提交
154
        find('.board-delete').click
P
Phil Hughes 已提交
155
      end
P
Phil Hughes 已提交
156 157 158

      wait_for_vue_resource

P
Phil Hughes 已提交
159
      expect(page).to have_selector('.board', count: 3)
P
Phil Hughes 已提交
160 161
    end

162 163 164 165
    it 'removes checkmark in new list dropdown after deleting' do
      click_button 'Create new list'
      wait_for_ajax

P
Phil Hughes 已提交
166
      page.within(find('.board:nth-child(2)')) do
167 168
        find('.board-delete').click
      end
169

P
Phil Hughes 已提交
170
      wait_for_vue_resource
171

172
      expect(page).to have_selector('.board', count: 3)
173 174 175
      expect(find(".js-board-list-#{planning.id}", visible: false)).not_to have_css('.is-active')
    end

176 177
    it 'infinite scrolls list' do
      50.times do
178
        create(:issue, project: project)
179 180 181
      end

      visit namespace_project_board_path(project.namespace, project)
P
Phil Hughes 已提交
182
      wait_for_vue_resource
183

P
Phil Hughes 已提交
184
      page.within(find('.board', match: :first)) do
185 186 187 188
        expect(page.find('.board-header')).to have_content('20')
        expect(page).to have_selector('.card', count: 20)

        evaluate_script("document.querySelectorAll('.board .board-list')[0].scrollTop = document.querySelectorAll('.board .board-list')[0].scrollHeight")
189
        wait_for_vue_resource(spinner: false)
190 191 192 193 194 195

        expect(page.find('.board-header')).to have_content('40')
        expect(page).to have_selector('.card', count: 40)
      end
    end

P
Phil Hughes 已提交
196 197
    context 'backlog' do
      it 'shows issues in backlog with no labels' do
P
Phil Hughes 已提交
198
        page.within(find('.board', match: :first)) do
P
Phil Hughes 已提交
199 200
          expect(page.find('.board-header')).to have_content('6')
          expect(page).to have_selector('.card', count: 6)
P
Phil Hughes 已提交
201 202 203 204 205
        end
      end

      it 'moves issue from backlog into list' do
        drag_to(list_to_index: 1)
P
Phil Hughes 已提交
206

P
Phil Hughes 已提交
207
        page.within(find('.board', match: :first)) do
P
Phil Hughes 已提交
208 209
          expect(page.find('.board-header')).to have_content('5')
          expect(page).to have_selector('.card', count: 5)
P
Phil Hughes 已提交
210
        end
P
Phil Hughes 已提交
211

212 213
        wait_for_vue_resource

P
Phil Hughes 已提交
214
        page.within(find('.board:nth-child(2)')) do
215 216
          expect(page.find('.board-header')).to have_content('3')
          expect(page).to have_selector('.card', count: 3)
P
Phil Hughes 已提交
217
        end
P
Phil Hughes 已提交
218 219 220
      end
    end

P
Phil Hughes 已提交
221 222
    context 'done' do
      it 'shows list of done issues' do
P
Phil Hughes 已提交
223
        expect(find('.board:nth-child(4)')).to have_selector('.card', count: 1)
P
Phil Hughes 已提交
224 225 226 227 228
      end

      it 'moves issue to done' do
        drag_to(list_from_index: 0, list_to_index: 3)

P
Phil Hughes 已提交
229 230 231
        expect(find('.board:nth-child(4)')).to have_selector('.card', count: 2)
        expect(find('.board:nth-child(4)')).to have_content(issue9.title)
        expect(find('.board:nth-child(4)')).not_to have_content(planning.title)
P
Phil Hughes 已提交
232 233 234 235 236
      end

      it 'removes all of the same issue to done' do
        drag_to(list_from_index: 1, list_to_index: 3)

P
Phil Hughes 已提交
237 238 239 240
        expect(find('.board:nth-child(2)')).to have_selector('.card', count: 1)
        expect(find('.board:nth-child(3)')).to have_selector('.card', count: 1)
        expect(find('.board:nth-child(4)')).to have_content(issue6.title)
        expect(find('.board:nth-child(4)')).not_to have_content(planning.title)
P
Phil Hughes 已提交
241 242 243 244
      end
    end

    context 'lists' do
P
Phil Hughes 已提交
245
      it 'changes position of list' do
P
Phil Hughes 已提交
246
        drag_to(list_from_index: 1, list_to_index: 2, selector: '.board-header')
P
Phil Hughes 已提交
247

P
Phil Hughes 已提交
248 249
        expect(find('.board:nth-child(2)')).to have_content(development.title)
        expect(find('.board:nth-child(2)')).to have_content(planning.title)
P
Phil Hughes 已提交
250 251
      end

P
Phil Hughes 已提交
252
      it 'issue moves between lists' do
253
        drag_to(list_from_index: 1, card_index: 1, list_to_index: 2)
P
Phil Hughes 已提交
254

P
Phil Hughes 已提交
255 256 257 258
        expect(find('.board:nth-child(2)')).to have_selector('.card', count: 1)
        expect(find('.board:nth-child(3)')).to have_selector('.card', count: 3)
        expect(find('.board:nth-child(3)')).to have_content(issue6.title)
        expect(find('.board:nth-child(3)').all('.card').last).not_to have_content(development.title)
P
Phil Hughes 已提交
259 260
      end

P
Phil Hughes 已提交
261
      it 'issue moves between lists' do
P
Phil Hughes 已提交
262 263
        drag_to(list_from_index: 2, list_to_index: 1)

P
Phil Hughes 已提交
264 265 266 267
        expect(find('.board:nth-child(2)')).to have_selector('.card', count: 3)
        expect(find('.board:nth-child(3)')).to have_selector('.card', count: 1)
        expect(find('.board:nth-child(2)')).to have_content(issue7.title)
        expect(find('.board:nth-child(2)').all('.card').first).not_to have_content(planning.title)
P
Phil Hughes 已提交
268 269
      end

P
Phil Hughes 已提交
270
      it 'issue moves from done' do
P
Phil Hughes 已提交
271 272
        drag_to(list_from_index: 3, list_to_index: 1)

P
Phil Hughes 已提交
273 274
        expect(find('.board:nth-child(2)')).to have_selector('.card', count: 3)
        expect(find('.board:nth-child(2)')).to have_content(issue8.title)
P
Phil Hughes 已提交
275 276 277 278
      end

      context 'issue card' do
        it 'shows assignee' do
P
Phil Hughes 已提交
279
          page.within(find('.board', match: :first)) do
P
Phil Hughes 已提交
280
            expect(page).to have_selector('.avatar', count: 1)
P
Phil Hughes 已提交
281 282 283 284 285 286 287
          end
        end
      end

      context 'new list' do
        it 'shows all labels in new list dropdown' do
          click_button 'Create new list'
288
          wait_for_ajax
P
Phil Hughes 已提交
289 290 291 292 293 294 295 296 297 298

          page.within('.dropdown-menu-issues-board-new') do
            expect(page).to have_content(planning.title)
            expect(page).to have_content(development.title)
            expect(page).to have_content(testing.title)
          end
        end

        it 'creates new list for label' do
          click_button 'Create new list'
299
          wait_for_ajax
P
Phil Hughes 已提交
300 301 302 303 304

          page.within('.dropdown-menu-issues-board-new') do
            click_link testing.title
          end

305 306
          wait_for_vue_resource

P
Phil Hughes 已提交
307 308 309
          expect(page).to have_selector('.board', count: 5)
        end

310 311
        it 'creates new list for Backlog label' do
          click_button 'Create new list'
312
          wait_for_ajax
313 314 315 316 317

          page.within('.dropdown-menu-issues-board-new') do
            click_link backlog.title
          end

318 319
          wait_for_vue_resource

320 321 322 323 324
          expect(page).to have_selector('.board', count: 5)
        end

        it 'creates new list for Done label' do
          click_button 'Create new list'
325
          wait_for_ajax
326 327 328 329 330

          page.within('.dropdown-menu-issues-board-new') do
            click_link done.title
          end

331 332
          wait_for_vue_resource

333 334 335
          expect(page).to have_selector('.board', count: 5)
        end

P
Phil Hughes 已提交
336
        it 'moves issues from backlog into new list' do
P
Phil Hughes 已提交
337
          page.within(find('.board', match: :first)) do
P
Phil Hughes 已提交
338 339
            expect(page.find('.board-header')).to have_content('6')
            expect(page).to have_selector('.card', count: 6)
P
Phil Hughes 已提交
340 341 342
          end

          click_button 'Create new list'
343
          wait_for_ajax
P
Phil Hughes 已提交
344 345 346 347 348

          page.within('.dropdown-menu-issues-board-new') do
            click_link testing.title
          end

349 350
          wait_for_vue_resource

P
Phil Hughes 已提交
351
          page.within(find('.board', match: :first)) do
P
Phil Hughes 已提交
352 353
            expect(page.find('.board-header')).to have_content('5')
            expect(page).to have_selector('.card', count: 5)
P
Phil Hughes 已提交
354 355 356 357 358 359
          end
        end
      end
    end

    context 'filtering' do
P
Phil Hughes 已提交
360 361 362
      it 'filters by author' do
        page.within '.issues-filters' do
          click_button('Author')
363
          wait_for_ajax
P
Phil Hughes 已提交
364 365 366 367

          page.within '.dropdown-menu-author' do
            click_link(user2.name)
          end
P
Phil Hughes 已提交
368
          wait_for_vue_resource(spinner: false)
P
Phil Hughes 已提交
369 370 371 372

          expect(find('.js-author-search')).to have_content(user2.name)
        end

P
Phil Hughes 已提交
373 374
        wait_for_vue_resource

P
Phil Hughes 已提交
375
        page.within(find('.board', match: :first)) do
P
Phil Hughes 已提交
376 377 378 379
          expect(page.find('.board-header')).to have_content('1')
          expect(page).to have_selector('.card', count: 1)
        end

P
Phil Hughes 已提交
380
        page.within(find('.board:nth-child(2)')) do
P
Phil Hughes 已提交
381 382 383 384 385 386 387 388
          expect(page.find('.board-header')).to have_content('0')
          expect(page).to have_selector('.card', count: 0)
        end
      end

      it 'filters by assignee' do
        page.within '.issues-filters' do
          click_button('Assignee')
389
          wait_for_ajax
P
Phil Hughes 已提交
390 391 392 393

          page.within '.dropdown-menu-assignee' do
            click_link(user.name)
          end
P
Phil Hughes 已提交
394
          wait_for_vue_resource(spinner: false)
P
Phil Hughes 已提交
395 396 397 398

          expect(find('.js-assignee-search')).to have_content(user.name)
        end

P
Phil Hughes 已提交
399 400
        wait_for_vue_resource

P
Phil Hughes 已提交
401
        page.within(find('.board', match: :first)) do
P
Phil Hughes 已提交
402 403 404 405
          expect(page.find('.board-header')).to have_content('1')
          expect(page).to have_selector('.card', count: 1)
        end

P
Phil Hughes 已提交
406
        page.within(find('.board:nth-child(2)')) do
P
Phil Hughes 已提交
407 408 409 410 411 412 413
          expect(page.find('.board-header')).to have_content('0')
          expect(page).to have_selector('.card', count: 0)
        end
      end

      it 'filters by milestone' do
        page.within '.issues-filters' do
414
          click_button('Milestone')
415
          wait_for_ajax
P
Phil Hughes 已提交
416 417 418 419

          page.within '.milestone-filter' do
            click_link(milestone.title)
          end
P
Phil Hughes 已提交
420
          wait_for_vue_resource(spinner: false)
P
Phil Hughes 已提交
421 422 423 424

          expect(find('.js-milestone-select')).to have_content(milestone.title)
        end

P
Phil Hughes 已提交
425 426
        wait_for_vue_resource

P
Phil Hughes 已提交
427
        page.within(find('.board', match: :first)) do
P
Phil Hughes 已提交
428 429 430 431
          expect(page.find('.board-header')).to have_content('0')
          expect(page).to have_selector('.card', count: 0)
        end

P
Phil Hughes 已提交
432
        page.within(find('.board:nth-child(2)')) do
P
Phil Hughes 已提交
433 434 435 436 437 438 439 440
          expect(page.find('.board-header')).to have_content('1')
          expect(page).to have_selector('.card', count: 1)
        end
      end

      it 'filters by label' do
        page.within '.issues-filters' do
          click_button('Label')
441
          wait_for_ajax
P
Phil Hughes 已提交
442 443 444

          page.within '.dropdown-menu-labels' do
            click_link(testing.title)
P
Phil Hughes 已提交
445
            wait_for_vue_resource(spinner: false)
P
Phil Hughes 已提交
446 447 448 449
            find('.dropdown-menu-close').click
          end
        end

P
Phil Hughes 已提交
450 451
        wait_for_vue_resource

P
Phil Hughes 已提交
452
        page.within(find('.board', match: :first)) do
P
Phil Hughes 已提交
453 454 455 456
          expect(page.find('.board-header')).to have_content('1')
          expect(page).to have_selector('.card', count: 1)
        end

P
Phil Hughes 已提交
457
        page.within(find('.board:nth-child(2)')) do
P
Phil Hughes 已提交
458 459 460 461 462
          expect(page.find('.board-header')).to have_content('0')
          expect(page).to have_selector('.card', count: 0)
        end
      end

463 464
      it 'infinite scrolls list with label filter' do
        50.times do
465
          create(:labeled_issue, project: project, labels: [testing])
466 467 468 469
        end

        page.within '.issues-filters' do
          click_button('Label')
470
          wait_for_ajax
471 472 473

          page.within '.dropdown-menu-labels' do
            click_link(testing.title)
P
Phil Hughes 已提交
474
            wait_for_vue_resource(spinner: false)
475 476 477 478
            find('.dropdown-menu-close').click
          end
        end

P
Phil Hughes 已提交
479 480
        wait_for_vue_resource

P
Phil Hughes 已提交
481
        page.within(find('.board', match: :first)) do
482 483 484 485 486 487 488 489 490 491
          expect(page.find('.board-header')).to have_content('20')
          expect(page).to have_selector('.card', count: 20)

          evaluate_script("document.querySelectorAll('.board .board-list')[0].scrollTop = document.querySelectorAll('.board .board-list')[0].scrollHeight")

          expect(page.find('.board-header')).to have_content('40')
          expect(page).to have_selector('.card', count: 40)
        end
      end

P
Phil Hughes 已提交
492 493 494
      it 'filters by multiple labels' do
        page.within '.issues-filters' do
          click_button('Label')
495
          wait_for_ajax
P
Phil Hughes 已提交
496

497
          page.within(find('.dropdown-menu-labels')) do
P
Phil Hughes 已提交
498
            click_link(testing.title)
P
Phil Hughes 已提交
499
            wait_for_vue_resource(spinner: false)
P
Phil Hughes 已提交
500
            click_link(bug.title)
P
Phil Hughes 已提交
501
            wait_for_vue_resource(spinner: false)
P
Phil Hughes 已提交
502 503 504 505
            find('.dropdown-menu-close').click
          end
        end

P
Phil Hughes 已提交
506 507
        wait_for_vue_resource

P
Phil Hughes 已提交
508
        page.within(find('.board', match: :first)) do
P
Phil Hughes 已提交
509 510
          expect(page.find('.board-header')).to have_content('1')
          expect(page).to have_selector('.card', count: 1)
P
Phil Hughes 已提交
511 512
        end

P
Phil Hughes 已提交
513
        page.within(find('.board:nth-child(2)')) do
P
Phil Hughes 已提交
514 515 516 517 518 519 520 521
          expect(page.find('.board-header')).to have_content('0')
          expect(page).to have_selector('.card', count: 0)
        end
      end

      it 'filters by no label' do
        page.within '.issues-filters' do
          click_button('Label')
522
          wait_for_ajax
P
Phil Hughes 已提交
523

P
Phil Hughes 已提交
524 525
          page.within '.dropdown-menu-labels' do
            click_link("No Label")
P
Phil Hughes 已提交
526
            wait_for_vue_resource(spinner: false)
P
Phil Hughes 已提交
527 528 529 530
            find('.dropdown-menu-close').click
          end
        end

P
Phil Hughes 已提交
531 532
        wait_for_vue_resource

P
Phil Hughes 已提交
533
        page.within(find('.board', match: :first)) do
P
Phil Hughes 已提交
534 535
          expect(page.find('.board-header')).to have_content('5')
          expect(page).to have_selector('.card', count: 5)
P
Phil Hughes 已提交
536 537
        end

P
Phil Hughes 已提交
538
        page.within(find('.board:nth-child(2)')) do
P
Phil Hughes 已提交
539 540 541 542
          expect(page.find('.board-header')).to have_content('0')
          expect(page).to have_selector('.card', count: 0)
        end
      end
543 544

      it 'filters by clicking label button on issue' do
P
Phil Hughes 已提交
545 546
        page.within(find('.board', match: :first)) do
          expect(page).to have_selector('.card', count: 6)
547
          expect(find('.card', match: :first)).to have_content(bug.title)
P
Phil Hughes 已提交
548 549
          click_button(bug.title)
          wait_for_vue_resource(spinner: false)
550 551
        end

552 553
        wait_for_vue_resource

P
Phil Hughes 已提交
554
        page.within(find('.board', match: :first)) do
555 556 557 558
          expect(page.find('.board-header')).to have_content('1')
          expect(page).to have_selector('.card', count: 1)
        end

P
Phil Hughes 已提交
559
        page.within(find('.board:nth-child(2)')) do
560 561 562 563 564
          expect(page.find('.board-header')).to have_content('0')
          expect(page).to have_selector('.card', count: 0)
        end

        page.within('.labels-filter') do
P
Phil Hughes 已提交
565
          expect(find('.dropdown-toggle-text')).to have_content(bug.title)
566 567 568 569
        end
      end

      it 'removes label filter by clicking label button on issue' do
P
Phil Hughes 已提交
570 571
        page.within(find('.board', match: :first)) do
          page.within(find('.card', match: :first)) do
572 573
            click_button(bug.title)
          end
P
Phil Hughes 已提交
574
          wait_for_vue_resource(spinner: false)
575 576 577 578

          expect(page).to have_selector('.card', count: 1)
        end

P
Phil Hughes 已提交
579 580
        wait_for_vue_resource

581 582 583 584
        page.within('.labels-filter') do
          expect(find('.dropdown-toggle-text')).to have_content(bug.title)
        end
      end
P
Phil Hughes 已提交
585 586 587
    end
  end

588 589 590 591 592 593 594 595 596 597 598 599
  context 'keyboard shortcuts' do
    before do
      visit namespace_project_board_path(project.namespace, project)
      wait_for_vue_resource
    end

    it 'allows user to use keyboard shortcuts' do
      find('.boards-list').native.send_keys('i')
      expect(page).to have_content('New Issue')
    end
  end

600 601 602 603
  context 'signed out user' do
    before do
      logout
      visit namespace_project_board_path(project.namespace, project)
604
      wait_for_vue_resource
605 606 607 608 609 610 611 612 613 614 615 616 617 618 619
    end

    it 'does not show create new list' do
      expect(page).not_to have_selector('.js-new-board-list')
    end
  end

  context 'as guest user' do
    let(:user_guest) { create(:user) }

    before do
      project.team << [user_guest, :guest]
      logout
      login_as(user_guest)
      visit namespace_project_board_path(project.namespace, project)
620
      wait_for_vue_resource
621 622 623 624 625 626 627
    end

    it 'does not show create new list' do
      expect(page).not_to have_selector('.js-new-board-list')
    end
  end

P
Phil Hughes 已提交
628 629
  def drag_to(list_from_index: 0, card_index: 0, to_index: 0, list_to_index: 0, selector: '.board-list')
    evaluate_script("simulateDrag({scrollable: document.getElementById('board-app'), from: {el: $('#{selector}').eq(#{list_from_index}).get(0), index: #{card_index}}, to: {el: $('.board-list').eq(#{list_to_index}).get(0), index: #{to_index}}});")
630 631 632 633 634 635

    Timeout.timeout(Capybara.default_max_wait_time) do
      loop until page.evaluate_script('window.SIMULATE_DRAG_ACTIVE').zero?
    end

    wait_for_vue_resource
P
Phil Hughes 已提交
636
  end
P
Phil Hughes 已提交
637

P
Phil Hughes 已提交
638
  def wait_for_vue_resource(spinner: true)
639 640 641 642
    Timeout.timeout(Capybara.default_max_wait_time) do
      loop until page.evaluate_script('Vue.activeResources').zero?
    end

P
Phil Hughes 已提交
643 644 645
    if spinner
      expect(find('.boards-list')).not_to have_selector('.fa-spinner')
    end
P
Phil Hughes 已提交
646
  end
P
Phil Hughes 已提交
647
end