debian-mirror-gitlab/spec/features/dashboard/todos/todos_filtering_spec.rb

184 lines
5.6 KiB
Ruby
Raw Normal View History

2019-10-12 21:52:04 +05:30
# frozen_string_literal: true
2016-09-29 09:46:39 +05:30
require 'spec_helper'
2018-11-08 19:23:39 +05:30
describe 'Dashboard > User filters todos', :js do
2016-09-29 09:46:39 +05:30
let(:user_1) { create(:user, username: 'user_1', name: 'user_1') }
let(:user_2) { create(:user, username: 'user_2', name: 'user_2') }
2019-10-12 21:52:04 +05:30
let(:group1) { create(:group) }
let(:group2) { create(:group) }
let(:project_1) { create(:project, name: 'project_1', namespace: group1) }
let(:project_2) { create(:project, name: 'project_2', namespace: group1) }
let(:project_3) { create(:project, name: 'project_3', namespace: group2) }
2016-09-29 09:46:39 +05:30
2019-10-12 21:52:04 +05:30
let(:issue1) { create(:issue, title: 'issue', project: project_1) }
let(:issue2) { create(:issue, title: 'issue', project: project_3) }
2016-09-29 09:46:39 +05:30
let!(:merge_request) { create(:merge_request, source_project: project_2, title: 'merge_request') }
before do
2019-10-12 21:52:04 +05:30
create(:todo, user: user_1, author: user_2, project: project_1, target: issue1, action: 1)
create(:todo, user: user_1, author: user_2, project: project_3, target: issue2, action: 1)
2016-09-29 09:46:39 +05:30
create(:todo, user: user_1, author: user_1, project: project_2, target: merge_request, action: 2)
2018-03-17 18:26:18 +05:30
project_1.add_developer(user_1)
project_2.add_developer(user_1)
2019-10-12 21:52:04 +05:30
project_3.add_developer(user_1)
2017-09-10 17:25:29 +05:30
sign_in(user_1)
2016-09-29 09:46:39 +05:30
visit dashboard_todos_path
end
2019-10-12 21:52:04 +05:30
it 'displays all todos without a filter' do
2019-12-04 20:38:33 +05:30
expect(page).to have_content issue1.to_reference(full: false)
expect(page).to have_content merge_request.to_reference(full: false)
expect(page).to have_content issue2.to_reference(full: false)
2019-10-12 21:52:04 +05:30
end
2016-09-29 09:46:39 +05:30
it 'filters by project' do
click_button 'Project'
within '.dropdown-menu-project' do
2018-03-27 19:54:05 +05:30
fill_in 'Search projects', with: project_1.full_name
click_link project_1.full_name
2016-09-29 09:46:39 +05:30
end
2017-09-10 17:25:29 +05:30
wait_for_requests
2016-09-29 09:46:39 +05:30
2018-03-27 19:54:05 +05:30
expect(page).to have_content project_1.full_name
expect(page).not_to have_content project_2.full_name
2016-09-29 09:46:39 +05:30
end
2019-10-12 21:52:04 +05:30
it 'filters by group' do
click_button 'Group'
within '.dropdown-menu-group' do
fill_in 'Search groups', with: group1.full_name
click_link group1.full_name
end
wait_for_requests
2019-12-04 20:38:33 +05:30
expect(page).to have_content "issue #{issue1.to_reference} \"issue\" at #{group1.name} / project_1"
expect(page).to have_content "merge request #{merge_request.to_reference}"
expect(page).not_to have_content "issue #{issue2.to_reference} \"issue\" at #{group2.name} / project_3"
2019-10-12 21:52:04 +05:30
end
2017-09-10 17:25:29 +05:30
context 'Author filter' do
2017-08-17 22:00:37 +05:30
it 'filters by author' do
click_button 'Author'
within '.dropdown-menu-author' do
fill_in 'Search authors', with: user_1.name
click_link user_1.name
end
2017-09-10 17:25:29 +05:30
wait_for_requests
2017-08-17 22:00:37 +05:30
expect(find('.todos-list')).to have_content 'merge request'
expect(find('.todos-list')).not_to have_content 'issue'
2016-09-29 09:46:39 +05:30
end
2017-09-10 17:25:29 +05:30
it 'shows only authors of existing todos' do
2017-08-17 22:00:37 +05:30
click_button 'Author'
within '.dropdown-menu-author' do
2017-09-10 17:25:29 +05:30
# It should contain two users + 'Any Author'
2017-08-17 22:00:37 +05:30
expect(page).to have_selector('.dropdown-menu-user-link', count: 3)
expect(page).to have_content(user_1.name)
expect(page).to have_content(user_2.name)
end
end
2016-09-29 09:46:39 +05:30
2017-09-10 17:25:29 +05:30
it 'shows only authors of existing done todos' do
2017-08-17 22:00:37 +05:30
user_3 = create :user
user_4 = create :user
2019-10-12 21:52:04 +05:30
create(:todo, user: user_1, author: user_3, project: project_1, target: issue1, action: 1, state: :done)
2017-08-17 22:00:37 +05:30
create(:todo, user: user_1, author: user_4, project: project_2, target: merge_request, action: 2, state: :done)
2018-03-17 18:26:18 +05:30
project_1.add_developer(user_3)
project_2.add_developer(user_4)
2017-08-17 22:00:37 +05:30
visit dashboard_todos_path(state: 'done')
click_button 'Author'
within '.dropdown-menu-author' do
2017-09-10 17:25:29 +05:30
# It should contain two users + 'Any Author'
2017-08-17 22:00:37 +05:30
expect(page).to have_selector('.dropdown-menu-user-link', count: 3)
expect(page).to have_content(user_3.name)
expect(page).to have_content(user_4.name)
expect(page).not_to have_content(user_1.name)
expect(page).not_to have_content(user_2.name)
end
end
2016-09-29 09:46:39 +05:30
end
it 'filters by type' do
click_button 'Type'
within '.dropdown-menu-type' do
click_link 'Issue'
end
2017-09-10 17:25:29 +05:30
wait_for_requests
2016-09-29 09:46:39 +05:30
2019-10-12 21:52:04 +05:30
expect(find('.todos-list')).to have_content issue1.to_reference
expect(find('.todos-list')).to have_content issue2.to_reference
2016-09-29 09:46:39 +05:30
expect(find('.todos-list')).not_to have_content merge_request.to_reference
end
2017-08-17 22:00:37 +05:30
describe 'filter by action' do
before do
create(:todo, :build_failed, user: user_1, author: user_2, project: project_1)
2019-10-12 21:52:04 +05:30
create(:todo, :marked, user: user_1, author: user_2, project: project_1, target: issue1)
2016-09-29 09:46:39 +05:30
end
2017-08-17 22:00:37 +05:30
it 'filters by Assigned' do
filter_action('Assigned')
expect_to_see_action(:assigned)
end
it 'filters by Mentioned' do
filter_action('Mentioned')
expect_to_see_action(:mentioned)
end
it 'filters by Added' do
filter_action('Added')
expect_to_see_action(:marked)
end
2016-09-29 09:46:39 +05:30
2017-08-17 22:00:37 +05:30
it 'filters by Pipelines' do
filter_action('Pipelines')
expect_to_see_action(:build_failed)
end
def filter_action(name)
click_button 'Action'
within '.dropdown-menu-action' do
click_link name
end
2017-09-10 17:25:29 +05:30
wait_for_requests
2017-08-17 22:00:37 +05:30
end
def expect_to_see_action(action_name)
action_names = {
assigned: ' assigned you ',
mentioned: ' mentioned ',
marked: ' added a todo for ',
build_failed: ' build failed for '
}
action_name_text = action_names.delete(action_name)
expect(find('.todos-list')).to have_content action_name_text
action_names.each_value do |other_action_text|
expect(find('.todos-list')).not_to have_content other_action_text
end
end
2016-09-29 09:46:39 +05:30
end
end