user_creates_issue_spec.rb 6.6 KB
Newer Older
1 2
# frozen_string_literal: true

3 4 5
require "spec_helper"

describe "User creates issue" do
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
  include DropzoneHelper

  let_it_be(:project) { create(:project_empty_repo, :public) }
  let_it_be(:user) { create(:user) }

  context "when unauthenticated" do
    before do
      sign_out(:user)
    end

    it "redirects to signin then back to new issue after signin" do
      create(:issue, project: project)

      visit project_issues_path(project)

      page.within ".nav-controls" do
        click_link "New issue"
      end

      expect(current_path).to eq new_user_session_path

      gitlab_sign_in(create(:user))

      expect(current_path).to eq new_project_issue_path(project)
    end
  end
32 33 34 35 36 37 38 39 40

  context "when signed in as guest" do
    before do
      project.add_guest(user)
      sign_in(user)

      visit(new_project_issue_path(project))
    end

P
Phil Hughes 已提交
41
    it "creates issue", :js do
42 43 44 45
      page.within(".issue-form") do
        expect(page).to have_no_content("Assign to")
        .and have_no_content("Labels")
        .and have_no_content("Milestone")
46 47 48

        expect(page.find('#issue_title')['placeholder']).to eq 'Title'
        expect(page.find('#issue_description')['placeholder']).to eq 'Write a comment or drag your files here…'
49 50 51 52 53
      end

      issue_title = "500 error on profile"

      fill_in("Title", with: issue_title)
P
Phil Hughes 已提交
54
      first('.js-md').click
55
      first('.rspec-issuable-form-description').native.send_keys('Description')
P
Phil Hughes 已提交
56

57 58 59 60 61
      click_button("Submit issue")

      expect(page).to have_content(issue_title)
        .and have_content(user.name)
        .and have_content(project.name)
P
Phil Hughes 已提交
62
      expect(page).to have_selector('strong', text: 'Description')
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
    end
  end

  context "when signed in as developer", :js do
    before do
      project.add_developer(user)
      sign_in(user)

      visit(new_project_issue_path(project))
    end

    context "when previewing" do
      it "previews content" do
        form = first(".gfm-form")
        textarea = first(".gfm-form textarea")

        page.within(form) do
80
          click_button("Preview")
81 82 83 84 85

          preview = find(".js-md-preview") # this element is findable only when the "Preview" link is clicked.

          expect(preview).to have_content("Nothing to preview.")

86
          click_button("Write")
87
          fill_in("Description", with: "Bug fixed :smile:")
88
          click_button("Preview")
89 90 91 92 93 94 95 96

          expect(preview).to have_css("gl-emoji")
          expect(textarea).not_to be_visible
        end
      end
    end

    context "with labels" do
97
      let(:label_titles) { %w(bug feature enhancement) }
98 99

      before do
100
        label_titles.each do |title|
101 102 103 104 105 106 107 108 109
          create(:label, project: project, title: title)
        end
      end

      it "creates issue" do
        issue_title = "500 error on profile"

        fill_in("Title", with: issue_title)
        click_button("Label")
110
        click_link(label_titles.first)
111 112 113 114 115
        click_button("Submit issue")

        expect(page).to have_content(issue_title)
          .and have_content(user.name)
          .and have_content(project.name)
116
          .and have_content(label_titles.first)
117 118
      end
    end
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 152 153 154 155 156 157 158

    context 'with due date', :js do
      it 'saves with due date' do
        date = Date.today.at_beginning_of_month

        fill_in 'issue_title', with: 'bug 345'
        fill_in 'issue_description', with: 'bug description'
        find('#issuable-due-date').click

        page.within '.pika-single' do
          click_button date.day
        end

        expect(find('#issuable-due-date').value).to eq date.to_s

        click_button 'Submit issue'

        page.within '.issuable-sidebar' do
          expect(page).to have_content date.to_s(:medium)
        end
      end
    end

    context 'dropzone upload file', :js do
      before do
        visit new_project_issue_path(project)
      end

      it 'uploads file when dragging into textarea' do
        dropzone_file Rails.root.join('spec', 'fixtures', 'banana_sample.gif')

        expect(page.find_field("issue_description").value).to have_content 'banana_sample'
      end

      it "doesn't add double newline to end of a single attachment markdown" do
        dropzone_file Rails.root.join('spec', 'fixtures', 'banana_sample.gif')

        expect(page.find_field("issue_description").value).not_to match /\n\n$/
      end

159
      it "cancels a file upload correctly", :capybara_ignore_server_errors do
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
        slow_requests do
          dropzone_file([Rails.root.join('spec', 'fixtures', 'dk.png')], 0, false)

          click_button 'Cancel'
        end

        expect(page).to have_button('Attach a file')
        expect(page).not_to have_button('Cancel')
        expect(page).not_to have_selector('.uploading-progress-container', visible: true)
      end
    end

    context 'form filled by URL parameters' do
      let(:project) { create(:project, :public, :repository) }

      before do
        project.repository.create_file(
          user,
          '.gitlab/issue_templates/bug.md',
          'this is a test "bug" template',
          message: 'added issue template',
          branch_name: 'master')

        visit new_project_issue_path(project, issuable_template: 'bug')
      end

      it 'fills in template' do
        expect(find('.js-issuable-selector .dropdown-toggle-text')).to have_content('bug')
      end
    end

    context 'suggestions', :js do
      it 'displays list of related issues' do
        issue = create(:issue, project: project)
        create(:issue, project: project, title: 'test issue')

        visit new_project_issue_path(project)

        fill_in 'issue_title', with: issue.title

        expect(page).to have_selector('.suggestion-item', count: 1)
      end
    end

    it 'clears local storage after creating a new issue', :js do
      2.times do
        visit new_project_issue_path(project)
        wait_for_requests

        expect(page).to have_field('Title', with: '')

        fill_in 'issue_title', with: 'bug 345'
        fill_in 'issue_description', with: 'bug description'

        click_button 'Submit issue'
      end
    end
217
  end
218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235

  context "when signed in as user with special characters in their name" do
    let(:user_special) { create(:user, name: "Jon O'Shea") }

    before do
      project.add_developer(user_special)
      sign_in(user_special)

      visit(new_project_issue_path(project))
    end

    it "will correctly escape user names with an apostrophe when clicking 'Assign to me'", :js do
      first('.assign-to-me-link').click

      expect(page).to have_content(user_special.name)
      expect(page.find('input[name="issue[assignee_ids][]"]', visible: false)['data-meta']).to eq(user_special.name)
    end
  end
236
end