task_lists_spec.rb 4.5 KB
Newer Older
R
Robert Speicher 已提交
1 2
require 'spec_helper'

3
feature 'Task Lists', feature: true do
R
Robert Speicher 已提交
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
  include Warden::Test::Helpers

  let(:project) { create(:project) }
  let(:user)    { create(:user) }
  let(:user2)   { create(:user) }

  let(:markdown) do
    <<-MARKDOWN.strip_heredoc
    This is a task list:

    - [ ] Incomplete entry 1
    - [x] Complete entry 1
    - [ ] Incomplete entry 2
    - [x] Complete entry 2
    - [ ] Incomplete entry 3
    - [ ] Incomplete entry 4
    MARKDOWN
  end

  before do
    Warden.test_mode!

    project.team << [user, :master]
    project.team << [user2, :guest]

    login_as(user)
  end

  def visit_issue(project, issue)
    visit namespace_project_issue_path(project.namespace, project, issue)
  end

  describe 'for Issues' do
    let!(:issue) { create(:issue, description: markdown, author: user, project: project) }

    it 'renders' do
      visit_issue(project, issue)

      expect(page).to have_selector('ul.task-list',      count: 1)
      expect(page).to have_selector('li.task-list-item', count: 6)
      expect(page).to have_selector('ul input[checked]', count: 2)
    end

    it 'contains the required selectors' do
      visit_issue(project, issue)

      container = '.issue-details .description.js-task-list-container'

      expect(page).to have_selector(container)
      expect(page).to have_selector("#{container} .wiki .task-list .task-list-item .task-list-item-checkbox")
54
      expect(page).to have_selector('form.js-issuable-update')
R
Robert Speicher 已提交
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
      expect(page).to have_selector('a.btn-close')
    end

    it 'is only editable by author' do
      visit_issue(project, issue)
      expect(page).to have_selector('.js-task-list-container')

      logout(:user)

      login_as(user2)
      visit current_path
      expect(page).not_to have_selector('.js-task-list-container')
    end

    it 'provides a summary on Issues#index' do
      visit namespace_project_issues_path(project.namespace, project)
71
      expect(page).to have_content("6 tasks (2 completed, 4 remaining)")
R
Robert Speicher 已提交
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
    end
  end

  describe 'for Notes' do
    let!(:issue) { create(:issue, author: user, project: project) }
    let!(:note)  { create(:note, note: markdown, noteable: issue, author: user) }

    it 'renders for note body' do
      visit_issue(project, issue)

      expect(page).to have_selector('.note ul.task-list',      count: 1)
      expect(page).to have_selector('.note li.task-list-item', count: 6)
      expect(page).to have_selector('.note ul input[checked]', count: 2)
    end

    it 'contains the required selectors' do
      visit_issue(project, issue)

      expect(page).to have_selector('.note .js-task-list-container')
      expect(page).to have_selector('.note .js-task-list-container .task-list .task-list-item .task-list-item-checkbox')
    end

    it 'is only editable by author' do
      visit_issue(project, issue)
      expect(page).to have_selector('.js-task-list-container')

      logout(:user)

      login_as(user2)
      visit current_path
      expect(page).not_to have_selector('.js-task-list-container')
    end
  end

  describe 'for Merge Requests' do
    def visit_merge_request(project, merge)
      visit namespace_project_merge_request_path(project.namespace, project, merge)
    end

    let!(:merge) { create(:merge_request, :simple, description: markdown, author: user, source_project: project) }

    it 'renders for description' do
      visit_merge_request(project, merge)

      expect(page).to have_selector('ul.task-list',      count: 1)
      expect(page).to have_selector('li.task-list-item', count: 6)
      expect(page).to have_selector('ul input[checked]', count: 2)
    end

    it 'contains the required selectors' do
      visit_merge_request(project, merge)

      container = '.merge-request-details .description.js-task-list-container'

      expect(page).to have_selector(container)
      expect(page).to have_selector("#{container} .wiki .task-list .task-list-item .task-list-item-checkbox")
128
      expect(page).to have_selector('form.js-issuable-update')
R
Robert Speicher 已提交
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
      expect(page).to have_selector('a.btn-close')
    end

    it 'is only editable by author' do
      visit_merge_request(project, merge)
      expect(page).to have_selector('.js-task-list-container')

      logout(:user)

      login_as(user2)
      visit current_path
      expect(page).not_to have_selector('.js-task-list-container')
    end

    it 'provides a summary on MergeRequests#index' do
      visit namespace_project_merge_requests_path(project.namespace, project)
145
      expect(page).to have_content("6 tasks (2 completed, 4 remaining)")
R
Robert Speicher 已提交
146 147 148
    end
  end
end