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

describe 'Issue Boards', feature: true, js: true do
4
  include WaitForAjax
P
Phil Hughes 已提交
5
  include WaitForVueResource
6

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

  before do
    project.team << [user, :master]
P
Phil Hughes 已提交
14
    project.team << [user2, :master]
15

P
Phil Hughes 已提交
16 17 18
    login_as(user)
  end

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

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

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

P
Phil Hughes 已提交
37
    it 'creates default lists' do
A
Annabel Dunstone Gray 已提交
38
      lists = ['Backlog', 'To Do', 'Doing', 'Done']
P
Phil Hughes 已提交
39

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

A
Annabel Dunstone Gray 已提交
45
      expect(page).to have_selector('.board', count: 4)
P
Phil Hughes 已提交
46 47 48 49 50

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

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

P
Phil Hughes 已提交
56 57 58
    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 已提交
59
    let(:bug)         { create(:label, project: project, name: 'Bug') }
60 61
    let!(:backlog)    { create(:label, project: project, name: 'Backlog') }
    let!(:done)       { create(:label, project: project, name: 'Done') }
62
    let!(:accepting)  { create(:label, project: project, name: 'Accepting Merge Requests') }
P
Phil Hughes 已提交
63

64 65
    let!(:list1) { create(:list, board: board, label: planning, position: 0) }
    let!(:list2) { create(:list, board: board, label: development, position: 1) }
P
Phil Hughes 已提交
66

67 68 69 70 71
    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 已提交
72
    let!(:issue5) { create(:labeled_issue, project: project, labels: [planning], milestone: milestone) }
73 74
    let!(:issue6) { create(:labeled_issue, project: project, labels: [planning, development]) }
    let!(:issue7) { create(:labeled_issue, project: project, labels: [development]) }
75
    let!(:issue8) { create(:closed_issue, project: project) }
76
    let!(:issue9) { create(:labeled_issue, project: project, labels: [testing, bug, accepting]) }
P
Phil Hughes 已提交
77 78

    before do
79
      visit namespace_project_board_path(project.namespace, project, board)
P
Phil Hughes 已提交
80

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

      expect(page).to have_selector('.board', count: 4)
84 85 86 87
      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 已提交
88 89 90 91 92 93 94
    end

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

    it 'shows issues in lists' do
95 96
      wait_for_board_cards(2, 2)
      wait_for_board_cards(3, 2)
P
Phil Hughes 已提交
97
    end
P
Phil Hughes 已提交
98

P
Phil Hughes 已提交
99
    it 'shows confidential issues with icon' do
P
Phil Hughes 已提交
100
      page.within(find('.board', match: :first)) do
P
Phil Hughes 已提交
101 102 103 104
        expect(page).to have_selector('.confidential-icon', count: 1)
      end
    end

105 106 107 108 109 110 111 112 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
    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 已提交
144
    it 'allows user to delete board' do
P
Phil Hughes 已提交
145
      page.within(find('.board:nth-child(2)')) do
P
Phil Hughes 已提交
146
        find('.board-delete').click
P
Phil Hughes 已提交
147
      end
P
Phil Hughes 已提交
148 149 150

      wait_for_vue_resource

P
Phil Hughes 已提交
151
      expect(page).to have_selector('.board', count: 3)
P
Phil Hughes 已提交
152 153
    end

154 155 156 157
    it 'removes checkmark in new list dropdown after deleting' do
      click_button 'Create new list'
      wait_for_ajax

P
Phil Hughes 已提交
158
      page.within(find('.board:nth-child(2)')) do
159 160
        find('.board-delete').click
      end
161

P
Phil Hughes 已提交
162
      wait_for_vue_resource
163

164
      expect(page).to have_selector('.board', count: 3)
165 166 167
      expect(find(".js-board-list-#{planning.id}", visible: false)).not_to have_css('.is-active')
    end

168 169
    it 'infinite scrolls list' do
      50.times do
170
        create(:issue, project: project)
171 172
      end

173
      visit namespace_project_board_path(project.namespace, project, board)
P
Phil Hughes 已提交
174
      wait_for_vue_resource
175

P
Phil Hughes 已提交
176
      page.within(find('.board', match: :first)) do
177
        expect(page.find('.board-header')).to have_content('56')
178
        expect(page).to have_selector('.card', count: 20)
P
Phil Hughes 已提交
179
        expect(page).to have_content('Showing 20 of 56 issues')
180 181

        evaluate_script("document.querySelectorAll('.board .board-list')[0].scrollTop = document.querySelectorAll('.board .board-list')[0].scrollHeight")
P
Phil Hughes 已提交
182
        wait_for_vue_resource
183 184

        expect(page).to have_selector('.card', count: 40)
P
Phil Hughes 已提交
185 186 187
        expect(page).to have_content('Showing 40 of 56 issues')

        evaluate_script("document.querySelectorAll('.board .board-list')[0].scrollTop = document.querySelectorAll('.board .board-list')[0].scrollHeight")
P
Phil Hughes 已提交
188
        wait_for_vue_resource
P
Phil Hughes 已提交
189 190 191

        expect(page).to have_selector('.card', count: 56)
        expect(page).to have_content('Showing all issues')
192 193 194
      end
    end

P
Phil Hughes 已提交
195 196
    context 'backlog' do
      it 'shows issues in backlog with no labels' do
197
        wait_for_board_cards(1, 6)
P
Phil Hughes 已提交
198 199 200 201
      end

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

203
        wait_for_vue_resource
204 205
        wait_for_board_cards(1, 5)
        wait_for_board_cards(2, 3)
P
Phil Hughes 已提交
206 207 208
      end
    end

P
Phil Hughes 已提交
209 210
    context 'done' do
      it 'shows list of done issues' do
211 212
        wait_for_board_cards(4, 1)
        wait_for_ajax
P
Phil Hughes 已提交
213 214 215 216 217
      end

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

218 219 220 221 222 223
        wait_for_board_cards(1, 5)
        wait_for_board_cards(2, 2)
        wait_for_board_cards(3, 2)
        wait_for_board_cards(4, 2)

        expect(find('.board:nth-child(1)')).not_to have_content(issue9.title)
P
Phil Hughes 已提交
224 225 226
        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 已提交
227 228 229 230 231
      end

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

232 233 234 235 236 237
        wait_for_board_cards(1, 6)
        wait_for_board_cards(2, 1)
        wait_for_board_cards(3, 1)
        wait_for_board_cards(4, 2)

        expect(find('.board:nth-child(2)')).not_to have_content(issue6.title)
P
Phil Hughes 已提交
238 239
        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 已提交
240 241 242 243
      end
    end

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

247 248 249 250 251
        wait_for_board_cards(1, 6)
        wait_for_board_cards(2, 2)
        wait_for_board_cards(3, 2)
        wait_for_board_cards(4, 1)

P
Phil Hughes 已提交
252 253
        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 已提交
254 255
      end

P
Phil Hughes 已提交
256
      it 'issue moves between lists' do
257
        drag_to(list_from_index: 1, card_index: 1, list_to_index: 2)
P
Phil Hughes 已提交
258

259 260 261 262 263
        wait_for_board_cards(1, 6)
        wait_for_board_cards(2, 1)
        wait_for_board_cards(3, 3)
        wait_for_board_cards(4, 1)

P
Phil Hughes 已提交
264 265
        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 已提交
266 267
      end

P
Phil Hughes 已提交
268
      it 'issue moves between lists' do
P
Phil Hughes 已提交
269 270
        drag_to(list_from_index: 2, list_to_index: 1)

271 272 273 274 275
        wait_for_board_cards(1, 6)
        wait_for_board_cards(2, 3)
        wait_for_board_cards(3, 1)
        wait_for_board_cards(4, 1)

P
Phil Hughes 已提交
276 277
        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 已提交
278 279
      end

P
Phil Hughes 已提交
280
      it 'issue moves from done' do
P
Phil Hughes 已提交
281 282
        drag_to(list_from_index: 3, list_to_index: 1)

P
Phil Hughes 已提交
283
        expect(find('.board:nth-child(2)')).to have_content(issue8.title)
284 285 286 287 288

        wait_for_board_cards(1, 6)
        wait_for_board_cards(2, 3)
        wait_for_board_cards(3, 2)
        wait_for_board_cards(4, 0)
P
Phil Hughes 已提交
289 290 291 292
      end

      context 'issue card' do
        it 'shows assignee' do
P
Phil Hughes 已提交
293
          page.within(find('.board', match: :first)) do
P
Phil Hughes 已提交
294
            expect(page).to have_selector('.avatar', count: 1)
P
Phil Hughes 已提交
295 296 297 298 299 300 301
          end
        end
      end

      context 'new list' do
        it 'shows all labels in new list dropdown' do
          click_button 'Create new list'
302
          wait_for_ajax
P
Phil Hughes 已提交
303 304 305 306 307 308 309 310 311 312

          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'
313
          wait_for_ajax
P
Phil Hughes 已提交
314 315 316 317 318

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

319 320
          wait_for_vue_resource

P
Phil Hughes 已提交
321 322 323
          expect(page).to have_selector('.board', count: 5)
        end

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

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

332 333
          wait_for_vue_resource

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

        it 'creates new list for Done label' do
          click_button 'Create new list'
339
          wait_for_ajax
340 341 342 343 344

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

345 346
          wait_for_vue_resource

347 348 349
          expect(page).to have_selector('.board', count: 5)
        end

P
Phil Hughes 已提交
350
        it 'moves issues from backlog into new list' do
351
          wait_for_board_cards(1, 6)
P
Phil Hughes 已提交
352 353

          click_button 'Create new list'
354
          wait_for_ajax
P
Phil Hughes 已提交
355 356 357 358 359

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

360 361
          wait_for_vue_resource

362
          wait_for_board_cards(1, 5)
P
Phil Hughes 已提交
363 364 365 366 367
        end
      end
    end

    context 'filtering' do
P
Phil Hughes 已提交
368 369 370
      it 'filters by author' do
        page.within '.issues-filters' do
          click_button('Author')
371
          wait_for_ajax
P
Phil Hughes 已提交
372 373 374 375

          page.within '.dropdown-menu-author' do
            click_link(user2.name)
          end
P
Phil Hughes 已提交
376
          wait_for_vue_resource
P
Phil Hughes 已提交
377 378 379 380

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

P
Phil Hughes 已提交
381
        wait_for_vue_resource
382 383
        wait_for_board_cards(1, 1)
        wait_for_empty_boards((2..4))
P
Phil Hughes 已提交
384 385 386 387 388
      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
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

401 402
        wait_for_board_cards(1, 1)
        wait_for_empty_boards((2..4))
P
Phil Hughes 已提交
403 404 405 406
      end

      it 'filters by milestone' do
        page.within '.issues-filters' do
407
          click_button('Milestone')
408
          wait_for_ajax
P
Phil Hughes 已提交
409 410 411 412

          page.within '.milestone-filter' do
            click_link(milestone.title)
          end
P
Phil Hughes 已提交
413
          wait_for_vue_resource
P
Phil Hughes 已提交
414 415 416 417

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

P
Phil Hughes 已提交
418
        wait_for_vue_resource
419 420 421 422
        wait_for_board_cards(1, 0)
        wait_for_board_cards(2, 1)
        wait_for_board_cards(3, 0)
        wait_for_board_cards(4, 0)
P
Phil Hughes 已提交
423 424 425 426 427
      end

      it 'filters by label' do
        page.within '.issues-filters' do
          click_button('Label')
428
          wait_for_ajax
P
Phil Hughes 已提交
429 430 431

          page.within '.dropdown-menu-labels' do
            click_link(testing.title)
P
Phil Hughes 已提交
432
            wait_for_vue_resource
P
Phil Hughes 已提交
433 434 435 436
            find('.dropdown-menu-close').click
          end
        end

P
Phil Hughes 已提交
437
        wait_for_vue_resource
438 439
        wait_for_board_cards(1, 1)
        wait_for_empty_boards((2..4))
P
Phil Hughes 已提交
440 441
      end

442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469
      it 'filters by label with space after reload' do
        page.within '.issues-filters' do
          click_button('Label')
          wait_for_ajax

          page.within '.dropdown-menu-labels' do
            click_link(accepting.title)
            wait_for_vue_resource(spinner: false)
            find('.dropdown-menu-close').click
          end
        end

        # Test after reload
        page.evaluate_script 'window.location.reload()'

        wait_for_vue_resource

        page.within(find('.board', match: :first)) do
          expect(page.find('.board-header')).to have_content('1')
          expect(page).to have_selector('.card', count: 1)
        end

        page.within(find('.board:nth-child(2)')) do
          expect(page.find('.board-header')).to have_content('0')
          expect(page).to have_selector('.card', count: 0)
        end
      end

470
      it 'removes filtered labels' do
P
Phil Hughes 已提交
471
        wait_for_vue_resource
472

473 474 475 476 477 478
        page.within '.labels-filter' do
          click_button('Label')
          wait_for_ajax

          page.within '.dropdown-menu-labels' do
            click_link(testing.title)
P
Phil Hughes 已提交
479
            wait_for_vue_resource(spinner: false)
480 481 482 483 484 485
          end

          expect(page).to have_css('input[name="label_name[]"]', visible: false)

          page.within '.dropdown-menu-labels' do
            click_link(testing.title)
P
Phil Hughes 已提交
486
            wait_for_vue_resource(spinner: false)
487 488 489 490 491 492
          end

          expect(page).not_to have_css('input[name="label_name[]"]', visible: false)
        end
      end

493 494
      it 'infinite scrolls list with label filter' do
        50.times do
495
          create(:labeled_issue, project: project, labels: [testing])
496 497 498 499
        end

        page.within '.issues-filters' do
          click_button('Label')
500
          wait_for_ajax
501 502 503

          page.within '.dropdown-menu-labels' do
            click_link(testing.title)
P
Phil Hughes 已提交
504
            wait_for_vue_resource
505 506 507 508
            find('.dropdown-menu-close').click
          end
        end

P
Phil Hughes 已提交
509 510
        wait_for_vue_resource

P
Phil Hughes 已提交
511
        page.within(find('.board', match: :first)) do
512
          expect(page.find('.board-header')).to have_content('51')
513
          expect(page).to have_selector('.card', count: 20)
P
Phil Hughes 已提交
514
          expect(page).to have_content('Showing 20 of 51 issues')
515 516 517 518

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

          expect(page).to have_selector('.card', count: 40)
P
Phil Hughes 已提交
519 520 521 522 523 524
          expect(page).to have_content('Showing 40 of 51 issues')

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

          expect(page).to have_selector('.card', count: 51)
          expect(page).to have_content('Showing all issues')
525 526 527
        end
      end

P
Phil Hughes 已提交
528 529 530
      it 'filters by multiple labels' do
        page.within '.issues-filters' do
          click_button('Label')
531
          wait_for_ajax
P
Phil Hughes 已提交
532

533
          page.within(find('.dropdown-menu-labels')) do
P
Phil Hughes 已提交
534
            click_link(testing.title)
P
Phil Hughes 已提交
535
            wait_for_vue_resource
P
Phil Hughes 已提交
536
            click_link(bug.title)
P
Phil Hughes 已提交
537
            wait_for_vue_resource
P
Phil Hughes 已提交
538 539 540 541
            find('.dropdown-menu-close').click
          end
        end

P
Phil Hughes 已提交
542 543
        wait_for_vue_resource

544 545
        wait_for_board_cards(1, 1)
        wait_for_empty_boards((2..4))
P
Phil Hughes 已提交
546 547 548 549 550
      end

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

P
Phil Hughes 已提交
553 554
          page.within '.dropdown-menu-labels' do
            click_link("No Label")
P
Phil Hughes 已提交
555
            wait_for_vue_resource
P
Phil Hughes 已提交
556 557 558 559
            find('.dropdown-menu-close').click
          end
        end

P
Phil Hughes 已提交
560 561
        wait_for_vue_resource

562 563 564 565
        wait_for_board_cards(1, 5)
        wait_for_board_cards(2, 0)
        wait_for_board_cards(3, 0)
        wait_for_board_cards(4, 1)
P
Phil Hughes 已提交
566
      end
567 568

      it 'filters by clicking label button on issue' do
P
Phil Hughes 已提交
569 570
        page.within(find('.board', match: :first)) do
          expect(page).to have_selector('.card', count: 6)
571
          expect(find('.card', match: :first)).to have_content(bug.title)
P
Phil Hughes 已提交
572
          click_button(bug.title)
P
Phil Hughes 已提交
573
          wait_for_vue_resource
574 575
        end

576 577
        wait_for_vue_resource

578 579
        wait_for_board_cards(1, 1)
        wait_for_empty_boards((2..4))
580 581

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

      it 'removes label filter by clicking label button on issue' do
P
Phil Hughes 已提交
587 588
        page.within(find('.board', match: :first)) do
          page.within(find('.card', match: :first)) do
589 590
            click_button(bug.title)
          end
P
Phil Hughes 已提交
591
          wait_for_vue_resource
592 593 594 595

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

P
Phil Hughes 已提交
596 597
        wait_for_vue_resource

598 599 600 601
        page.within('.labels-filter') do
          expect(find('.dropdown-toggle-text')).to have_content(bug.title)
        end
      end
P
Phil Hughes 已提交
602 603 604
    end
  end

605 606
  context 'keyboard shortcuts' do
    before do
607
      visit namespace_project_board_path(project.namespace, project, board)
608 609 610 611 612 613 614 615 616
      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

617 618 619
  context 'signed out user' do
    before do
      logout
620
      visit namespace_project_board_path(project.namespace, project, board)
621
      wait_for_vue_resource
622 623 624 625 626 627 628 629 630 631 632 633 634 635
    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)
636
      visit namespace_project_board_path(project.namespace, project, board)
637
      wait_for_vue_resource
638 639 640 641 642 643 644
    end

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

P
Phil Hughes 已提交
645 646
  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}}});")
647 648 649 650 651 652

    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 已提交
653
  end
654 655 656 657 658 659 660 661 662 663 664 665 666

  def wait_for_board_cards(board_number, expected_cards)
    page.within(find(".board:nth-child(#{board_number})")) do
      expect(page.find('.board-header')).to have_content(expected_cards.to_s)
      expect(page).to have_selector('.card', count: expected_cards)
    end
  end

  def wait_for_empty_boards(board_numbers)
    board_numbers.each do |board|
      wait_for_board_cards(board, 0)
    end
  end
P
Phil Hughes 已提交
667
end