summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorClement Ho <ClemMakesApps@gmail.com>2016-11-10 16:49:12 -0600
committerClement Ho <ClemMakesApps@gmail.com>2017-01-09 16:00:53 -0600
commit9c8a86f60d2d36b628c5275004e4c17aa07aeeeb (patch)
tree5e44bd811593636a9ad1e63ffb72fa464e7b577a /spec
parent8b4e4e333db0cf47080aa8577b4351b9e00525ea (diff)
downloadgitlab-ce-9c8a86f60d2d36b628c5275004e4c17aa07aeeeb.tar.gz
Update filter issue specs
Diffstat (limited to 'spec')
-rw-r--r--spec/features/issues/filter_issues_spec.rb506
1 files changed, 271 insertions, 235 deletions
diff --git a/spec/features/issues/filter_issues_spec.rb b/spec/features/issues/filter_issues_spec.rb
index 0d19563d628..7d681742045 100644
--- a/spec/features/issues/filter_issues_spec.rb
+++ b/spec/features/issues/filter_issues_spec.rb
@@ -4,147 +4,236 @@ describe 'Filter issues', feature: true do
include WaitForAjax
let!(:group) { create(:group) }
- let!(:project) { create(:project, group: group) }
+ let!(:project) { create(:project) }
let!(:user) { create(:user)}
+ let!(:user) { create(:user) }
+ let!(:user2) { create(:user) }
let!(:milestone) { create(:milestone, project: project) }
let!(:label) { create(:label, project: project) }
let!(:wontfix) { create(:label, project: project, title: "Won't fix") }
+ let!(:bug_label) { create(:label, project: project, title: 'bug') }
+ let!(:caps_sensitive_label) { create(:label, project: project, title: 'CAPS_sensitive') }
+ let!(:milestone) { create(:milestone, title: "8", project: project) }
+
+ def input_filtered_search(search_term)
+ filtered_search = find('.filtered-search')
+ filtered_search.set(search_term)
+ filtered_search.send_keys(:enter)
+ end
+
+ def expect_no_issues_list
+ page.within '.issues-list' do
+ expect(page).not_to have_selector('.issue')
+ end
+ end
+
+ def expect_issues_list_count(open_count, closed_count = 0)
+ all_count = open_count + closed_count
+
+ expect(page).to have_issuable_counts(open: open_count, closed: closed_count, all: all_count)
+ page.within '.issues-list' do
+ expect(page).to have_selector('.issue', count: open_count)
+ end
+ end
+
before do
project.team << [user, :master]
+ project.team << [user2, :master]
group.add_developer(user)
+ group.add_developer(user2)
login_as(user)
create(:issue, project: project)
- end
- describe 'for assignee from issues#index' do
- before do
- visit namespace_project_issues_path(project.namespace, project)
+ create(:issue, title: "Bug report 1", project: project)
+ create(:issue, title: "Bug report 2", project: project)
+ create(:issue, title: "issue with 'single quotes'", project: project)
+ create(:issue, title: "issue with \"double quotes\"", project: project)
+ create(:issue, title: "issue with !@\#{$%^&*()-+", project: project)
+ create(:issue, title: "issue by assignee", project: project, milestone: milestone, author: user, assignee: user)
+ create(:issue, title: "issue by assignee with searchTerm", project: project, milestone: milestone, author: user, assignee: user)
+
+ issue = create(:issue,
+ title: "Bug 2",
+ project: project,
+ milestone: milestone,
+ author: user,
+ assignee: user)
+ issue.labels << bug_label
+
+ issue_with_caps_label = create(:issue,
+ title: "issue by assignee with searchTerm and label",
+ project: project,
+ milestone: milestone,
+ author: user,
+ assignee: user)
+ issue_with_caps_label.labels << caps_sensitive_label
+
+ issue_with_everything = create(:issue,
+ title: "Bug report with everything you thought was possible",
+ project: project,
+ milestone: milestone,
+ author: user,
+ assignee: user)
+ issue_with_everything.labels << bug_label
+ issue_with_everything.labels << caps_sensitive_label
+
+ visit namespace_project_issues_path(project.namespace, project)
+ end
- find('.js-assignee-search').click
+ describe 'filter issues by author' do
+ context 'only author', js: true do
+ it 'filters issues by searched author' do
+ input_filtered_search("author:#{user.username}")
+ expect_issues_list_count(5)
+ end
- find('.dropdown-menu-user-link', text: user.username).click
+ it 'filters issues by invalid author' do
+ # YOLO
+ end
- wait_for_ajax
+ it 'filters issues by multiple authors' do
+ # YOLO
+ end
end
- context 'assignee', js: true do
- it 'updates to current user' do
- expect(find('.js-assignee-search .dropdown-toggle-text')).to have_content(user.name)
+ context 'author with other filters', js: true do
+ it 'filters issues by searched author and text' do
+ input_filtered_search("author:#{user.username} issue")
+ expect_issues_list_count(3)
end
- it 'does not change when closed link is clicked' do
- find('.issues-state-filters a', text: "Closed").click
-
- expect(find('.js-assignee-search .dropdown-toggle-text')).to have_content(user.name)
+ it 'filters issues by searched author, assignee and text' do
+ input_filtered_search("author:#{user.username} assignee:#{user.username} issue")
+ expect_issues_list_count(3)
end
- it 'does not change when all link is clicked' do
- find('.issues-state-filters a', text: "All").click
+ it 'filters issues by searched author, assignee, label, and text' do
+ input_filtered_search("author:#{user.username} assignee:#{user.username} label:#{caps_sensitive_label.title} issue")
+ expect_issues_list_count(1)
+ end
- expect(find('.js-assignee-search .dropdown-toggle-text')).to have_content(user.name)
+ it 'filters issues by searched author, assignee, label, milestone and text' do
+ input_filtered_search("author:#{user.username} assignee:#{user.username} label:#{caps_sensitive_label.title} milestone:#{milestone.title} issue")
+ expect_issues_list_count(1)
end
end
+
+ context 'sorting', js: true do
+ # TODO
+ end
end
- describe 'for milestone from issues#index' do
- before do
- visit namespace_project_issues_path(project.namespace, project)
+ describe 'filter issues by assignee' do
+ context 'only assignee', js: true do
+ it 'filters issues by searched assignee' do
+ input_filtered_search("assignee:#{user.username}")
+ expect_issues_list_count(5)
+ end
- find('.js-milestone-select').click
+ it 'filters issues by no assignee' do
+ # TODO
+ end
- find('.milestone-filter .dropdown-content a', text: milestone.title).click
+ it 'filters issues by invalid assignee' do
+ # YOLO
+ end
- wait_for_ajax
+ it 'filters issues by multiple assignees' do
+ # YOLO
+ end
end
- context 'milestone', js: true do
- it 'updates to current milestone' do
- expect(find('.js-milestone-select .dropdown-toggle-text')).to have_content(milestone.title)
+ context 'assignee with other filters', js: true do
+ it 'filters issues by searched assignee and text' do
+ input_filtered_search("assignee:#{user.username} searchTerm")
+ expect_issues_list_count(2)
end
- it 'does not change when closed link is clicked' do
- find('.issues-state-filters a', text: "Closed").click
-
- expect(find('.js-milestone-select .dropdown-toggle-text')).to have_content(milestone.title)
+ it 'filters issues by searched assignee, author and text' do
+ input_filtered_search("assignee:#{user.username} author:#{user.username} searchTerm")
+ expect_issues_list_count(2)
end
- it 'does not change when all link is clicked' do
- find('.issues-state-filters a', text: "All").click
-
- expect(find('.js-milestone-select .dropdown-toggle-text')).to have_content(milestone.title)
+ it 'filters issues by searched assignee, author, label, text' do
+ input_filtered_search("assignee:#{user.username} author:#{user.username} label:#{caps_sensitive_label.title} searchTerm")
+ expect_issues_list_count(1)
end
- end
- end
- describe 'for label from issues#index', js: true do
- before do
- visit namespace_project_issues_path(project.namespace, project)
- find('.js-label-select').click
- wait_for_ajax
+ it 'filters issues by searched assignee, author, label, milestone and text' do
+ input_filtered_search("assignee:#{user.username} author:#{user.username} label:#{caps_sensitive_label.title} milestone:#{milestone.title} searchTerm")
+ expect_issues_list_count(1)
+ end
end
- it 'filters by any label' do
- find('.dropdown-menu-labels a', text: 'Any Label').click
- page.first('.labels-filter .dropdown-title .dropdown-menu-close-icon').click
- wait_for_ajax
-
- expect(find('.labels-filter')).to have_content 'Label'
+ context 'sorting', js: true do
+ # TODO
end
+ end
- it 'filters by no label' do
- find('.dropdown-menu-labels a', text: 'No Label').click
- page.first('.labels-filter .dropdown-title .dropdown-menu-close-icon').click
- wait_for_ajax
-
- page.within '.labels-filter' do
- expect(page).to have_content 'Labels'
+ describe 'filter issues by label' do
+ context 'only label', js: true do
+ it 'filters issues by searched label' do
+ input_filtered_search("label:#{bug_label.title}")
+ expect_issues_list_count(2)
end
- expect(find('.js-label-select .dropdown-toggle-text')).to have_content('Labels')
- end
- it 'filters by a label' do
- find('.dropdown-menu-labels a', text: label.title).click
- page.within '.labels-filter' do
- expect(page).to have_content label.title
+ it 'filters issues by no label' do
+ # TODO
end
- expect(find('.js-label-select .dropdown-toggle-text')).to have_content(label.title)
- end
- it "filters by `won't fix` and another label" do
- page.within '.labels-filter' do
- click_link wontfix.title
- expect(page).to have_content wontfix.title
- click_link label.title
+ it 'filters issues by invalid label' do
+ # YOLO
end
- expect(find('.js-label-select .dropdown-toggle-text')).to have_content("#{wontfix.title} +1 more")
+ it 'filters issues by multiple labels' do
+ input_filtered_search("label:#{bug_label.title} label:#{caps_sensitive_label.title}")
+ expect_issues_list_count(1)
+ end
end
- it "filters by `won't fix` label followed by another label after page load" do
- page.within '.labels-filter' do
- click_link wontfix.title
- expect(page).to have_content wontfix.title
+ context 'label with other filters', js: true do
+ it 'filters issues by searched label and text' do
+ input_filtered_search("label:#{caps_sensitive_label.title} bug")
+ expect_issues_list_count(1)
end
- find('.dropdown-menu-close-icon').click
+ it 'filters issues by searched label, author and text' do
+ input_filtered_search("label:#{caps_sensitive_label.title} author:#{user.username} bug")
+ expect_issues_list_count(1)
+ end
- expect(find('.filtered-labels')).to have_content(wontfix.title)
+ it 'filters issues by searched label, author, assignee and text' do
+ input_filtered_search("label:#{caps_sensitive_label.title} author:#{user.username} assignee:#{user.username} bug")
+ expect_issues_list_count(1)
+ end
- find('.js-label-select').click
- wait_for_ajax
- find('.dropdown-menu-labels a', text: label.title).click
+ it 'filters issues by searched label, author, assignee, milestone and text' do
+ input_filtered_search("label:#{caps_sensitive_label.title} author:#{user.username} assignee:#{user.username} milestone:#{milestone.title} bug")
+ expect_issues_list_count(1)
+ end
+ end
- find('.dropdown-menu-close-icon').click
+ context 'multiple labels with other filters', js: true do
+ it 'filters issues by searched label, label2, and text' do
+ input_filtered_search("label:#{bug_label.title} label:#{caps_sensitive_label.title} bug")
+ expect_issues_list_count(1)
+ end
- expect(find('.filtered-labels')).to have_content(wontfix.title)
- expect(find('.filtered-labels')).to have_content(label.title)
+ it 'filters issues by searched label, label2, author and text' do
+ input_filtered_search("label:#{bug_label.title} label:#{caps_sensitive_label.title} author:#{user.username} bug")
+ expect_issues_list_count(1)
+ end
- find('.js-label-select').click
- wait_for_ajax
+ it 'filters issues by searched label, label2, author, assignee and text' do
+ input_filtered_search("label:#{bug_label.title} label:#{caps_sensitive_label.title} author:#{user.username} assignee:#{user.username} bug")
+ expect_issues_list_count(1)
+ end
- expect(find('.dropdown-menu-labels li', text: wontfix.title)).to have_css('.is-active')
- expect(find('.dropdown-menu-labels li', text: label.title)).to have_css('.is-active')
+ it 'filters issues by searched label, label2, author, assignee, milestone and text' do
+ input_filtered_search("label:#{bug_label.title} label:#{caps_sensitive_label.title} author:#{user.username} assignee:#{user.username} milestone:#{milestone.title} bug")
+ expect_issues_list_count(1)
+ end
end
it "selects and unselects `won't fix`" do
@@ -153,211 +242,160 @@ describe 'Filter issues', feature: true do
find('.dropdown-menu-close-icon').click
expect(page).not_to have_css('.filtered-labels')
+ context 'sorting', js: true do
+ # TODO
end
end
- describe 'for assignee and label from issues#index' do
- before do
- visit namespace_project_issues_path(project.namespace, project)
-
- find('.js-assignee-search').click
-
- find('.dropdown-menu-user-link', text: user.username).click
+ describe 'filter issues by milestone' do
+ context 'only milestone', js: true do
+ it 'filters issues by searched milestone' do
+ input_filtered_search("milestone:#{milestone.title}")
+ expect_issues_list_count(5)
+ end
- expect(page).not_to have_selector('.issues-list .issue')
+ it 'filters issues by no milestone' do
+ # TODO
+ end
- find('.js-label-select').click
+ it 'filters issues by upcoming milestones' do
+ # TODO
+ end
- find('.dropdown-menu-labels .dropdown-content a', text: label.title).click
- page.first('.labels-filter .dropdown-title .dropdown-menu-close-icon').click
+ it 'filters issues by invalid milestones' do
+ # YOLO
+ end
- wait_for_ajax
+ it 'filters issues by multiple milestones' do
+ # YOLO
+ end
end
- context 'assignee and label', js: true do
- it 'updates to current assignee and label' do
- expect(find('.js-assignee-search .dropdown-toggle-text')).to have_content(user.name)
- expect(find('.js-label-select .dropdown-toggle-text')).to have_content(label.title)
+ context 'milestone with other filters', js: true do
+ it 'filters issues by searched milestone and text' do
end
- it 'does not change when closed link is clicked' do
- find('.issues-state-filters a', text: "Closed").click
-
- expect(find('.js-assignee-search .dropdown-toggle-text')).to have_content(user.name)
- expect(find('.js-label-select .dropdown-toggle-text')).to have_content(label.title)
+ it 'filters issues by searched milestone, author and text' do
end
- it 'does not change when all link is clicked' do
- find('.issues-state-filters a', text: "All").click
+ it 'filters issues by searched milestone, author, assignee and text' do
+ end
- expect(find('.js-assignee-search .dropdown-toggle-text')).to have_content(user.name)
- expect(find('.js-label-select .dropdown-toggle-text')).to have_content(label.title)
+ it 'filters issues by searched milestone, author, assignee, label and text' do
end
end
- end
-
- describe 'filter issues by text' do
- before do
- create(:issue, title: "Bug", project: project)
-
- bug_label = create(:label, project: project, title: 'bug')
- milestone = create(:milestone, title: "8", project: project)
-
- issue = create(:issue,
- title: "Bug 2",
- project: project,
- milestone: milestone,
- author: user,
- assignee: user)
- issue.labels << bug_label
- visit namespace_project_issues_path(project.namespace, project)
+ context 'sorting', js: true do
+ # TODO
end
+ end
+ describe 'filter issues by text' do
context 'only text', js: true do
it 'filters issues by searched text' do
- fill_in 'issuable_search', with: 'Bug'
-
- page.within '.issues-list' do
- expect(page).to have_selector('.issue', count: 2)
- end
+ input_filtered_search('Bug')
+ expect_issues_list_count(4)
end
- it 'does not show any issues' do
- fill_in 'issuable_search', with: 'testing'
-
- page.within '.issues-list' do
- expect(page).not_to have_selector('.issue')
- end
+ it 'filters issues by multiple searched text' do
+ input_filtered_search('Bug report')
+ expect_issues_list_count(3)
end
- end
- context 'text and dropdown options', js: true do
- it 'filters by text and label' do
- fill_in 'issuable_search', with: 'Bug'
-
- expect(page).to have_issuable_counts(open: 2, closed: 0, all: 2)
- page.within '.issues-list' do
- expect(page).to have_selector('.issue', count: 2)
- end
-
- click_button 'Label'
- page.within '.labels-filter' do
- click_link 'bug'
- end
- find('.dropdown-menu-close-icon').click
-
- expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
- page.within '.issues-list' do
- expect(page).to have_selector('.issue', count: 1)
- end
+ it 'filters issues by case insensitive searched text' do
+ input_filtered_search('bug report')
+ expect_issues_list_count(3)
end
- it 'filters by text and milestone' do
- fill_in 'issuable_search', with: 'Bug'
-
- expect(page).to have_issuable_counts(open: 2, closed: 0, all: 2)
- page.within '.issues-list' do
- expect(page).to have_selector('.issue', count: 2)
- end
-
- click_button 'Milestone'
- page.within '.milestone-filter' do
- click_link '8'
- end
-
- expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
- page.within '.issues-list' do
- expect(page).to have_selector('.issue', count: 1)
- end
+ it 'filters issues by searched text containing single quotes' do
+ input_filtered_search('\'single quotes\'')
+ expect_issues_list_count(1)
end
- it 'filters by text and assignee' do
- fill_in 'issuable_search', with: 'Bug'
-
- expect(page).to have_issuable_counts(open: 2, closed: 0, all: 2)
- page.within '.issues-list' do
- expect(page).to have_selector('.issue', count: 2)
- end
+ it 'filters issues by searched text containing double quotes' do
+ input_filtered_search('"double quotes"')
+ expect_issues_list_count(1)
+ end
- click_button 'Assignee'
- page.within '.dropdown-menu-assignee' do
- click_link user.name
- end
+ it 'filters issues by searched text containing special characters' do
+ input_filtered_search('!@#{$%^&*()-+')
+ expect_issues_list_count(1)
+ end
- expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
- page.within '.issues-list' do
- expect(page).to have_selector('.issue', count: 1)
- end
+ it 'does not show any issues' do
+ input_filtered_search('testing')
+ expect_no_issues_list()
end
+ end
- it 'filters by text and author' do
- fill_in 'issuable_search', with: 'Bug'
+ context 'searched text with other filters', js: true do
+ it 'filters issues by searched text and author' do
+ input_filtered_search("bug author:#{user.username}")
+ expect_issues_list_count(2)
+ end
- expect(page).to have_issuable_counts(open: 2, closed: 0, all: 2)
- page.within '.issues-list' do
- expect(page).to have_selector('.issue', count: 2)
- end
+ it 'filters issues by searched text, author and more text' do
+ input_filtered_search("bug author:#{user.username} report")
+ expect_issues_list_count(1)
+ end
- click_button 'Author'
- page.within '.dropdown-menu-author' do
- click_link user.name
- end
+ it 'filters issues by searched text, author and assignee' do
+ input_filtered_search("bug author:#{user.username} assignee:#{user.username}")
+ expect_issues_list_count(2)
+ end
- expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
- page.within '.issues-list' do
- expect(page).to have_selector('.issue', count: 1)
- end
+ it 'filters issues by searched text, author, more text and assignee' do
+ input_filtered_search("bug author:#{user.username} report assignee:#{user.username}")
+ expect_issues_list_count(1)
end
- end
- end
- describe 'filter issues and sort', js: true do
- before do
- bug_label = create(:label, project: project, title: 'bug')
- bug_one = create(:issue, title: "Frontend", project: project)
- bug_two = create(:issue, title: "Bug 2", project: project)
+ it 'filters issues by searched text, author, more text, assignee and even more text' do
+ input_filtered_search("bug author:#{user.username} report assignee:#{user.username} with")
+ expect_issues_list_count(1)
+ end
- bug_one.labels << bug_label
- bug_two.labels << bug_label
+ it 'filters issues by searched text, author, assignee and label' do
+ input_filtered_search("bug author:#{user.username} assignee:#{user.username} label:#{bug_label.title}")
+ expect_issues_list_count(2)
+ end
- visit namespace_project_issues_path(project.namespace, project)
- end
+ it 'filters issues by searched text, author, text, assignee, text, label and text' do
+ input_filtered_search("bug author:#{user.username} report assignee:#{user.username} with label:#{bug_label.title} everything")
+ expect_issues_list_count(1)
+ end
- it 'is able to filter and sort issues' do
- click_button 'Label'
- wait_for_ajax
- page.within '.labels-filter' do
- click_link 'bug'
+ it 'filters issues by searched text, author, assignee, label and milestone' do
+ input_filtered_search("bug author:#{user.username} assignee:#{user.username} label:#{bug_label.title} milestone:#{milestone.title}")
+ expect_issues_list_count(2)
end
- find('.dropdown-menu-close-icon').click
- wait_for_ajax
- expect(page).to have_issuable_counts(open: 2, closed: 0, all: 2)
- page.within '.issues-list' do
- expect(page).to have_selector('.issue', count: 2)
+ it 'filters issues by searched text, author, text, assignee, text, label, text, milestone and text' do
+ input_filtered_search("bug author:#{user.username} report assignee:#{user.username} with label:#{bug_label.title} everything milestone:#{milestone.title} you")
+ expect_issues_list_count(1)
end
- click_button 'Last created'
- page.within '.dropdown-menu-sort' do
- click_link 'Oldest created'
+ it 'filters issues by searched text, author, assignee, multiple labels and milestone' do
+ input_filtered_search("bug author:#{user.username} assignee:#{user.username} label:#{bug_label.title} label:#{caps_sensitive_label.title} milestone:#{milestone.title}")
+ expect_issues_list_count(1)
end
- wait_for_ajax
- page.within '.issues-list' do
- expect(page).to have_content('Frontend')
+ it 'filters issues by searched text, author, text, assignee, text, label1, text, label2, text, milestone and text' do
+ input_filtered_search("bug author:#{user.username} report assignee:#{user.username} with label:#{bug_label.title} everything label:#{caps_sensitive_label.title} you milestone:#{milestone.title} thought")
+ expect_issues_list_count(1)
end
end
+
+ context 'sorting', js: true do
+ # TODO
+ end
end
it 'updates atom feed link for project issues' do
visit namespace_project_issues_path(project.namespace, project, milestone_title: '', assignee_id: user.id)
-
link = find('.nav-controls a', text: 'Subscribe')
params = CGI::parse(URI.parse(link[:href]).query)
auto_discovery_link = find('link[type="application/atom+xml"]', visible: false)
auto_discovery_params = CGI::parse(URI.parse(auto_discovery_link[:href]).query)
-
expect(params).to include('private_token' => [user.private_token])
expect(params).to include('milestone_title' => [''])
expect(params).to include('assignee_id' => [user.id.to_s])
@@ -368,12 +406,10 @@ describe 'Filter issues', feature: true do
it 'updates atom feed link for group issues' do
visit issues_group_path(group, milestone_title: '', assignee_id: user.id)
-
link = find('.nav-controls a', text: 'Subscribe')
params = CGI::parse(URI.parse(link[:href]).query)
auto_discovery_link = find('link[type="application/atom+xml"]', visible: false)
auto_discovery_params = CGI::parse(URI.parse(auto_discovery_link[:href]).query)
-
expect(params).to include('private_token' => [user.private_token])
expect(params).to include('milestone_title' => [''])
expect(params).to include('assignee_id' => [user.id.to_s])