2019-02-15 15:39:39 +05:30
# frozen_string_literal: true
2018-05-09 12:01:36 +05:30
require " spec_helper "
2023-03-04 22:38:38 +05:30
RSpec . describe " User creates issue " , feature_category : :team_planning do
2020-03-13 15:44:24 +05:30
include DropzoneHelper
let_it_be ( :project ) { create ( :project_empty_repo , :public ) }
let_it_be ( :user ) { create ( :user ) }
2023-07-09 08:55:56 +05:30
let ( :visible_label_selection_on_metadata ) { false }
2020-03-13 15:44:24 +05:30
context " when unauthenticated " do
before do
sign_out ( :user )
end
2023-07-09 08:55:56 +05:30
it " redirects to signin then back to new issue after signin " , :js , quarantine : 'https://gitlab.com/gitlab-org/quality/engineering-productivity/master-broken-incidents/-/issues/1486' do
2020-03-13 15:44:24 +05:30
create ( :issue , project : project )
visit project_issues_path ( project )
2023-07-09 08:55:56 +05:30
wait_for_all_requests
2020-03-13 15:44:24 +05:30
page . within " .nav-controls " do
click_link " New issue "
end
2022-05-07 20:08:51 +05:30
expect ( page ) . to have_current_path new_user_session_path , ignore_query : true
2020-03-13 15:44:24 +05:30
gitlab_sign_in ( create ( :user ) )
2022-05-07 20:08:51 +05:30
expect ( page ) . to have_current_path new_project_issue_path ( project ) , ignore_query : true
2020-03-13 15:44:24 +05:30
end
end
2018-05-09 12:01:36 +05:30
2021-09-04 01:27:46 +05:30
context " when signed in as guest " , :js do
2018-05-09 12:01:36 +05:30
before do
2023-07-09 08:55:56 +05:30
stub_feature_flags ( visible_label_selection_on_metadata : visible_label_selection_on_metadata )
2018-05-09 12:01:36 +05:30
project . add_guest ( user )
sign_in ( user )
visit ( new_project_issue_path ( project ) )
end
2021-09-04 01:27:46 +05:30
context 'available metadata' do
it 'allows guest to set issue metadata' do
page . within ( " .issue-form " ) do
expect ( page ) . to have_content ( " Title " )
. and have_content ( " Description " )
. and have_content ( " Type " )
. and have_content ( " Assignee " )
. and have_content ( " Milestone " )
. and have_content ( " Labels " )
. and have_content ( " Due date " )
. and have_content ( " This issue is confidential and should only be visible to team members with at least Reporter access. " )
end
2018-05-09 12:01:36 +05:30
end
end
context " when previewing " do
it " previews content " do
form = first ( " .gfm-form " )
textarea = first ( " .gfm-form textarea " )
page . within ( form ) do
2023-07-09 08:55:56 +05:30
click_button ( " Preview " )
2018-05-09 12:01:36 +05:30
2023-06-20 00:43:36 +05:30
preview = find ( " .js-vue-md-preview " ) # this element is findable only when the "Preview" link is clicked.
2018-05-09 12:01:36 +05:30
expect ( preview ) . to have_content ( " Nothing to preview. " )
2023-07-09 08:55:56 +05:30
click_button ( " Continue editing " )
2018-05-09 12:01:36 +05:30
fill_in ( " Description " , with : " Bug fixed :smile: " )
2023-07-09 08:55:56 +05:30
click_button ( " Preview " )
2018-05-09 12:01:36 +05:30
expect ( preview ) . to have_css ( " gl-emoji " )
expect ( textarea ) . not_to be_visible
2022-06-21 17:19:12 +05:30
2023-07-09 08:55:56 +05:30
click_button ( " Continue editing " )
2022-06-21 17:19:12 +05:30
fill_in ( " Description " , with : " /confidential " )
2023-07-09 08:55:56 +05:30
click_button ( " Preview " )
2022-06-21 17:19:12 +05:30
expect ( form ) . to have_content ( 'Makes this issue confidential.' )
2018-05-09 12:01:36 +05:30
end
end
end
context " with labels " do
2019-02-15 15:39:39 +05:30
let ( :label_titles ) { %w( bug feature enhancement ) }
2018-05-09 12:01:36 +05:30
before do
2019-02-15 15:39:39 +05:30
label_titles . each do | title |
2018-05-09 12:01:36 +05:30
create ( :label , project : project , title : title )
end
end
2023-07-09 08:55:56 +05:30
context 'with the visible_label_selection_on_metadata feature flag enabled' do
let ( :visible_label_selection_on_metadata ) { true }
it " creates issue " do
issue_title = " 500 error on profile "
fill_in ( " Title " , with : issue_title )
click_button _ ( 'Select label' )
wait_for_all_requests
page . within '[data-testid="sidebar-labels"]' do
click_button label_titles . first
click_button _ ( 'Close' )
wait_for_requests
end
2018-05-09 12:01:36 +05:30
2023-07-09 08:55:56 +05:30
click_button ( " Create issue " )
2018-05-09 12:01:36 +05:30
2023-07-09 08:55:56 +05:30
expect ( page ) . to have_content ( issue_title )
. and have_content ( user . name )
. and have_content ( project . name )
. and have_content ( label_titles . first )
end
end
context 'with the visible_label_selection_on_metadata feature flag disabled' do
let ( :visible_label_selection_on_metadata ) { false }
it " creates issue " do
issue_title = " 500 error on profile "
fill_in ( " Title " , with : issue_title )
click_button ( " Label " )
click_link ( label_titles . first )
click_button ( " Create issue " )
expect ( page ) . to have_content ( issue_title )
. and have_content ( user . name )
. and have_content ( project . name )
. and have_content ( label_titles . first )
end
2018-05-09 12:01:36 +05:30
end
end
2020-03-13 15:44:24 +05:30
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
2021-04-29 21:17:54 +05:30
click_button 'Create issue'
2020-03-13 15:44:24 +05:30
page . within '.issuable-sidebar' do
expect ( page ) . to have_content date . to_s ( :medium )
end
end
end
2023-06-20 00:43:36 +05:30
it_behaves_like 'edits content using the content editor'
2020-03-13 15:44:24 +05:30
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
2020-04-08 14:13:33 +05:30
it " cancels a file upload correctly " , :capybara_ignore_server_errors do
2020-03-13 15:44:24 +05:30
slow_requests do
dropzone_file ( [ Rails . root . join ( 'spec' , 'fixtures' , 'dk.png' ) ] , 0 , false )
click_button 'Cancel'
end
2022-08-27 11:52:29 +05:30
expect ( page ) . to have_selector ( '[data-testid="button-attach-file"]' )
2020-03-13 15:44:24 +05:30
expect ( page ) . not_to have_button ( 'Cancel' )
expect ( page ) . not_to have_selector ( '.uploading-progress-container' , visible : true )
end
end
2023-04-23 21:23:45 +05:30
context 'form filled by URL parameters' , :use_null_store_as_repository_cache do
2020-03-13 15:44:24 +05:30
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
2020-11-24 15:15:51 +05:30
context 'form create handles issue creation by default' do
2021-12-11 22:18:48 +05:30
let_it_be ( :project ) { create ( :project ) }
2020-11-24 15:15:51 +05:30
before do
visit new_project_issue_path ( project )
end
it 'pre-fills the issue type dropdown with issue type' do
2023-06-20 00:43:36 +05:30
expect ( find ( '.js-issuable-type-filter-dropdown-wrap .gl-button-text' ) ) . to have_content ( 'Issue' )
2020-11-24 15:15:51 +05:30
end
it 'does not hide the milestone select' do
2023-01-13 00:05:48 +05:30
expect ( page ) . to have_button 'Select milestone'
2020-11-24 15:15:51 +05:30
end
end
context 'form create handles incident creation' do
2021-12-11 22:18:48 +05:30
let_it_be ( :project ) { create ( :project ) }
2020-11-24 15:15:51 +05:30
before do
visit new_project_issue_path ( project , { issuable_template : 'incident' , issue : { issue_type : 'incident' } } )
end
2021-12-11 22:18:48 +05:30
it 'does not pre-fill the issue type dropdown with incident type' do
2023-06-20 00:43:36 +05:30
expect ( find ( '.js-issuable-type-filter-dropdown-wrap .gl-button-text' ) ) . not_to have_content ( 'Incident' )
2020-11-24 15:15:51 +05:30
end
2021-03-08 18:12:59 +05:30
it 'shows the milestone select' do
2023-01-13 00:05:48 +05:30
expect ( page ) . to have_button 'Select milestone'
2020-11-24 15:15:51 +05:30
end
2021-12-11 22:18:48 +05:30
it 'hides the incident help text' do
expect ( page ) . not_to have_text ( 'A modified issue to guide the resolution of incidents.' )
2020-11-24 15:15:51 +05:30
end
end
2020-03-13 15:44:24 +05:30
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 : '' )
2023-06-20 00:43:36 +05:30
expect ( page ) . to have_field ( 'Description' , with : '' )
2020-03-13 15:44:24 +05:30
fill_in 'issue_title' , with : 'bug 345'
fill_in 'issue_description' , with : 'bug description'
2021-04-29 21:17:54 +05:30
click_button 'Create issue'
2020-03-13 15:44:24 +05:30
end
end
2023-06-20 00:43:36 +05:30
it 'clears local storage after cancelling a new issue creation' , :js do
2 . times do
visit new_project_issue_path ( project )
wait_for_requests
expect ( page ) . to have_field ( 'Title' , with : '' )
expect ( page ) . to have_field ( 'Description' , with : '' )
fill_in 'issue_title' , with : 'bug 345'
fill_in 'issue_description' , with : 'bug description'
click_link 'Cancel'
end
end
2018-05-09 12:01:36 +05:30
end
2019-07-07 11:18:12 +05:30
2021-12-11 22:18:48 +05:30
context 'when signed in as reporter' , :js do
let_it_be ( :project ) { create ( :project ) }
before_all do
project . add_reporter ( user )
end
before do
sign_in ( user )
end
context 'form create handles incident creation' do
before do
visit new_project_issue_path ( project , { issuable_template : 'incident' , issue : { issue_type : 'incident' } } )
end
it 'pre-fills the issue type dropdown with incident type' do
2023-06-20 00:43:36 +05:30
expect ( find ( '.js-issuable-type-filter-dropdown-wrap .gl-button-text' ) ) . to have_content ( 'Incident' )
2021-12-11 22:18:48 +05:30
end
it 'hides the epic select' do
expect ( page ) . not_to have_selector ( '.epic-dropdown-container' )
end
it 'shows the milestone select' do
2023-01-13 00:05:48 +05:30
expect ( page ) . to have_button 'Select milestone'
2021-12-11 22:18:48 +05:30
end
it 'hides the weight input' do
2022-10-11 01:57:18 +05:30
expect ( page ) . not_to have_selector ( '[data-testid="issuable-weight-input"]' )
2021-12-11 22:18:48 +05:30
end
it 'shows the incident help text' do
expect ( page ) . to have_text ( 'A modified issue to guide the resolution of incidents.' )
end
end
end
2019-07-07 11:18:12 +05:30
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
2018-05-09 12:01:36 +05:30
end