Skip to content
Snippets Groups Projects
Commit 91f235df authored by Heinrich Lee Yu's avatar Heinrich Lee Yu
Browse files

Fix tests

parent ee4a7811
No related branches found
No related tags found
No related merge requests found
Showing
with 73 additions and 183 deletions
Loading
Loading
@@ -253,7 +253,6 @@ export class SearchAutocomplete {
}
 
getCategoryContents() {
const userId = gon.current_user_id;
const userName = gon.current_username;
const { projectOptions, groupOptions, dashboardOptions } = gl;
 
Loading
Loading
@@ -279,21 +278,21 @@ export class SearchAutocomplete {
const issueItems = [
{
text: s__('SearchAutocomplete|Issues assigned to me'),
url: `${issuesPath}/?assignee_id=${userId}`,
url: `${issuesPath}/?assignee_username=${userName}`,
},
{
text: s__("SearchAutocomplete|Issues I've created"),
url: `${issuesPath}/?author_id=${userId}`,
url: `${issuesPath}/?author_username=${userName}`,
},
];
const mergeRequestItems = [
{
text: s__('SearchAutocomplete|Merge requests assigned to me'),
url: `${mrPath}/?assignee_id=${userId}`,
url: `${mrPath}/?assignee_username=${userName}`,
},
{
text: s__("SearchAutocomplete|Merge requests I've created"),
url: `${mrPath}/?author_id=${userId}`,
url: `${mrPath}/?author_username=${userName}`,
},
];
 
Loading
Loading
Loading
Loading
@@ -5,6 +5,9 @@ class DashboardController < Dashboard::ApplicationController
include MergeRequestsAction
 
FILTER_PARAMS = [
# author_id and assignee_id are kept so old RSS links still work
:author_id,
:assignee_id,
:author_username,
:assignee_username,
:milestone_title,
Loading
Loading
Loading
Loading
@@ -45,9 +45,9 @@ class RootController < Dashboard::ProjectsController
when 'todos'
redirect_to(dashboard_todos_path)
when 'issues'
redirect_to(issues_dashboard_path(assignee_id: current_user.id))
redirect_to(issues_dashboard_path(assignee_username: current_user.username))
when 'merge_requests'
redirect_to(merge_requests_dashboard_path(assignee_id: current_user.id))
redirect_to(merge_requests_dashboard_path(assignee_username: current_user.username))
end
end
 
Loading
Loading
Loading
Loading
@@ -178,7 +178,9 @@ module ApplicationHelper
scope: params[:scope],
milestone_title: params[:milestone_title],
assignee_id: params[:assignee_id],
assignee_username: params[:assignee_username],
author_id: params[:author_id],
author_username: params[:author_username],
search: params[:search],
label_name: params[:label_name]
}
Loading
Loading
- @hide_top_links = true
- page_title _("Issues")
- @breadcrumb_link = issues_dashboard_path(assignee_id: current_user.id)
- @breadcrumb_link = issues_dashboard_path(assignee_username: current_user.username)
= content_for :meta_tags do
= auto_discovery_link_tag(:atom, safe_params.merge(rss_url_options).to_h, title: "#{current_user.name} issues")
 
Loading
Loading
- @hide_top_links = true
- page_title _("Merge Requests")
- @breadcrumb_link = merge_requests_dashboard_path(assignee_id: current_user.id)
- @breadcrumb_link = merge_requests_dashboard_path(assignee_username: current_user.username)
 
.page-title-holder
%h1.page-title= _('Merge Requests')
Loading
Loading
Loading
Loading
@@ -98,7 +98,7 @@ describe RootController do
it 'redirects to their assigned issues' do
get :index
 
expect(response).to redirect_to issues_dashboard_path(assignee_id: user.id)
expect(response).to redirect_to issues_dashboard_path(assignee_username: user.username)
end
end
 
Loading
Loading
@@ -110,7 +110,7 @@ describe RootController do
it 'redirects to their assigned merge requests' do
get :index
 
expect(response).to redirect_to merge_requests_dashboard_path(assignee_id: user.id)
expect(response).to redirect_to merge_requests_dashboard_path(assignee_username: user.username)
end
end
 
Loading
Loading
Loading
Loading
@@ -25,35 +25,35 @@ describe "Dashboard Issues Feed" do
it "renders atom feed via personal access token" do
personal_access_token = create(:personal_access_token, user: user)
 
visit issues_dashboard_path(:atom, private_token: personal_access_token.token, assignee_id: user.id)
visit issues_dashboard_path(:atom, private_token: personal_access_token.token, assignee_username: user.username)
 
expect(response_headers['Content-Type']).to have_content('application/atom+xml')
expect(body).to have_selector('title', text: "#{user.name} issues")
end
 
it "renders atom feed via feed token" do
visit issues_dashboard_path(:atom, feed_token: user.feed_token, assignee_id: user.id)
visit issues_dashboard_path(:atom, feed_token: user.feed_token, assignee_username: user.username)
 
expect(response_headers['Content-Type']).to have_content('application/atom+xml')
expect(body).to have_selector('title', text: "#{user.name} issues")
end
 
it "renders atom feed with url parameters" do
visit issues_dashboard_path(:atom, feed_token: user.feed_token, state: 'opened', assignee_id: user.id)
visit issues_dashboard_path(:atom, feed_token: user.feed_token, state: 'opened', assignee_username: user.username)
 
link = find('link[type="application/atom+xml"]')
params = CGI.parse(URI.parse(link[:href]).query)
 
expect(params).to include('feed_token' => [user.feed_token])
expect(params).to include('state' => ['opened'])
expect(params).to include('assignee_id' => [user.id.to_s])
expect(params).to include('assignee_username' => [user.username.to_s])
end
 
context "issue with basic fields" do
let!(:issue2) { create(:issue, author: user, assignees: [assignee], project: project2, description: 'test desc') }
 
it "renders issue fields" do
visit issues_dashboard_path(:atom, feed_token: user.feed_token, assignee_id: assignee.id)
visit issues_dashboard_path(:atom, feed_token: user.feed_token, assignee_username: assignee.username)
 
entry = find(:xpath, "//feed/entry[contains(summary/text(),'#{issue2.title}')]")
 
Loading
Loading
@@ -76,7 +76,7 @@ describe "Dashboard Issues Feed" do
end
 
it "renders issue label and milestone info" do
visit issues_dashboard_path(:atom, feed_token: user.feed_token, assignee_id: assignee.id)
visit issues_dashboard_path(:atom, feed_token: user.feed_token, assignee_username: assignee.username)
 
entry = find(:xpath, "//feed/entry[contains(summary/text(),'#{issue1.title}')]")
 
Loading
Loading
Loading
Loading
@@ -45,11 +45,11 @@ describe 'Navigation bar counter', :use_clean_rails_memory_store_caching do
end
 
def issues_path
issues_dashboard_path(assignee_id: user.id)
issues_dashboard_path(assignee_username: user.username)
end
 
def merge_requests_path
merge_requests_dashboard_path(assignee_id: user.id)
merge_requests_dashboard_path(assignee_username: user.username)
end
 
def expect_counters(issuable_type, count)
Loading
Loading
Loading
Loading
@@ -2,6 +2,7 @@ require 'spec_helper'
 
describe 'Dashboard Issues filtering', :js do
include Spec::Support::Helpers::Features::SortingHelpers
include FilteredSearchHelpers
 
let(:user) { create(:user) }
let(:project) { create(:project) }
Loading
Loading
@@ -25,27 +26,21 @@ describe 'Dashboard Issues filtering', :js do
 
context 'filtering by milestone' do
it 'shows all issues with no milestone' do
show_milestone_dropdown
click_link 'No Milestone'
input_filtered_search("milestone:none")
 
expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
expect(page).to have_selector('.issue', count: 1)
end
 
it 'shows all issues with the selected milestone' do
show_milestone_dropdown
page.within '.dropdown-content' do
click_link milestone.title
end
input_filtered_search("milestone:%\"#{milestone.title}\"")
 
expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
expect(page).to have_selector('.issue', count: 1)
end
 
it 'updates atom feed link' do
visit_issues(milestone_title: '', assignee_id: user.id)
visit_issues(milestone_title: '', assignee_username: user.username)
 
link = find('.nav-controls a[title="Subscribe to RSS feed"]')
params = CGI.parse(URI.parse(link[:href]).query)
Loading
Loading
@@ -54,10 +49,10 @@ describe 'Dashboard Issues filtering', :js do
 
expect(params).to include('feed_token' => [user.feed_token])
expect(params).to include('milestone_title' => [''])
expect(params).to include('assignee_id' => [user.id.to_s])
expect(params).to include('assignee_username' => [user.username.to_s])
expect(auto_discovery_params).to include('feed_token' => [user.feed_token])
expect(auto_discovery_params).to include('milestone_title' => [''])
expect(auto_discovery_params).to include('assignee_id' => [user.id.to_s])
expect(auto_discovery_params).to include('assignee_username' => [user.username.to_s])
end
end
 
Loading
Loading
@@ -66,10 +61,7 @@ describe 'Dashboard Issues filtering', :js do
let!(:label_link) { create(:label_link, label: label, target: issue) }
 
it 'shows all issues with the selected label' do
page.within '.labels-filter' do
find('.dropdown').click
click_link label.title
end
input_filtered_search("label:~#{label.title}")
 
page.within 'ul.content-list' do
expect(page).to have_content issue.title
Loading
Loading
@@ -80,12 +72,12 @@ describe 'Dashboard Issues filtering', :js do
 
context 'sorting' do
before do
visit_issues(assignee_id: user.id)
visit_issues(assignee_username: user.username)
end
 
it 'remembers last sorting value' do
sort_by('Created date')
visit_issues(assignee_id: user.id)
visit_issues(assignee_username: user.username)
 
expect(find('.issues-filters')).to have_content('Created date')
end
Loading
Loading
@@ -98,11 +90,6 @@ describe 'Dashboard Issues filtering', :js do
end
end
 
def show_milestone_dropdown
click_button 'Milestone'
expect(page).to have_selector('.dropdown-content', visible: true)
end
def visit_issues(*args)
visit issues_dashboard_path(*args)
end
Loading
Loading
require 'spec_helper'
 
RSpec.describe 'Dashboard Issues' do
include FilteredSearchHelpers
let(:current_user) { create :user }
let(:user) { current_user } # Shared examples depend on this being available
let!(:public_project) { create(:project, :public) }
Loading
Loading
@@ -14,7 +16,7 @@ RSpec.describe 'Dashboard Issues' do
before do
[project, project_with_issues_disabled].each { |project| project.add_maintainer(current_user) }
sign_in(current_user)
visit issues_dashboard_path(assignee_id: current_user.id)
visit issues_dashboard_path(assignee_username: current_user.username)
end
 
describe 'issues' do
Loading
Loading
@@ -24,26 +26,9 @@ RSpec.describe 'Dashboard Issues' do
expect(page).not_to have_content(other_issue.title)
end
 
it 'shows checkmark when unassigned is selected for assignee', :js do
find('.js-assignee-search').click
find('li', text: 'Unassigned').click
find('.js-assignee-search').click
expect(find('li[data-user-id="0"] a.is-active')).to be_visible
end
it 'shows issues when current user is author', :js do
execute_script("document.querySelector('#assignee_id').value=''")
find('.js-author-search', match: :first).click
expect(find('li[data-user-id="null"] a.is-active')).to be_visible
find('.dropdown-menu-author li a', match: :first, text: current_user.to_reference).click
find('.js-author-search', match: :first).click
page.within '.dropdown-menu-user' do
expect(find('.dropdown-menu-author li a.is-active', match: :first, text: current_user.to_reference)).to be_visible
end
reset_filters
input_filtered_search("author:#{current_user.to_reference}")
 
expect(page).to have_content(authored_issue.title)
expect(page).to have_content(authored_issue_on_public_project.title)
Loading
Loading
@@ -53,7 +38,7 @@ RSpec.describe 'Dashboard Issues' do
 
it 'state filter tabs work' do
find('#state-closed').click
expect(page).to have_current_path(issues_dashboard_url(assignee_id: current_user.id, state: 'closed'), url: true)
expect(page).to have_current_path(issues_dashboard_url(assignee_username: current_user.username, state: 'closed'), url: true)
end
 
it_behaves_like "it has an RSS button with current_user's feed token"
Loading
Loading
require 'spec_helper'
 
describe 'Dashboard > label filter', :js do
include FilteredSearchHelpers
let(:filtered_search) { find('.filtered-search') }
let(:filter_dropdown) { find("#js-dropdown-label .filter-dropdown") }
let(:user) { create(:user) }
let(:project) { create(:project, name: 'test', namespace: user.namespace) }
let(:project2) { create(:project, name: 'test2', path: 'test2', namespace: user.namespace) }
Loading
Loading
@@ -13,17 +18,15 @@ describe 'Dashboard > label filter', :js do
 
sign_in(user)
visit issues_dashboard_path
init_label_search
end
 
context 'duplicate labels' do
it 'removes duplicate labels' do
page.within('.labels-filter') do
click_button 'Label'
end
filtered_search.send_keys('bu')
 
page.within('.dropdown-menu-labels') do
expect(page).to have_selector('.dropdown-content a', text: 'bug', count: 1)
end
expect(filter_dropdown).to have_selector('.filter-dropdown-item', text: 'bug', count: 1)
end
end
end
Loading
Loading
@@ -2,7 +2,7 @@ require 'spec_helper'
 
describe 'Dashboard Merge Requests' do
include Spec::Support::Helpers::Features::SortingHelpers
include FilterItemSelectHelper
include FilteredSearchHelpers
include ProjectForksHelper
 
let(:current_user) { create :user }
Loading
Loading
@@ -36,7 +36,7 @@ describe 'Dashboard Merge Requests' do
 
context 'no merge requests exist' do
it 'shows an empty state' do
visit merge_requests_dashboard_path(assignee_id: current_user.id)
visit merge_requests_dashboard_path(assignee_username: current_user.username)
 
expect(page).to have_selector('.empty-state')
end
Loading
Loading
@@ -79,7 +79,7 @@ describe 'Dashboard Merge Requests' do
end
 
before do
visit merge_requests_dashboard_path(assignee_id: current_user.id)
visit merge_requests_dashboard_path(assignee_username: current_user.username)
end
 
it 'shows assigned merge requests' do
Loading
Loading
@@ -92,8 +92,8 @@ describe 'Dashboard Merge Requests' do
end
 
it 'shows authored merge requests', :js do
filter_item_select('Any Assignee', '.js-assignee-search')
filter_item_select(current_user.to_reference, '.js-author-search')
reset_filters
input_filtered_search("author:#{current_user.to_reference}")
 
expect(page).to have_content(authored_merge_request.title)
expect(page).to have_content(authored_merge_request_from_fork.title)
Loading
Loading
@@ -104,8 +104,7 @@ describe 'Dashboard Merge Requests' do
end
 
it 'shows error message without filter', :js do
filter_item_select('Any Assignee', '.js-assignee-search')
filter_item_select('Any Author', '.js-author-search')
reset_filters
 
expect(page).to have_content('Please select at least one filter to see results')
end
Loading
Loading
@@ -113,7 +112,7 @@ describe 'Dashboard Merge Requests' do
it 'shows sorted merge requests' do
sort_by('Created date')
 
visit merge_requests_dashboard_path(assignee_id: current_user.id)
visit merge_requests_dashboard_path(assignee_username: current_user.username)
 
expect(find('.issues-filters')).to have_content('Created date')
end
Loading
Loading
require 'spec_helper'
describe 'Dashboard > milestone filter', :js do
include FilterItemSelectHelper
let(:user) { create(:user) }
let(:project) { create(:project, name: 'test', namespace: user.namespace) }
let(:milestone) { create(:milestone, title: 'v1.0', project: project) }
let(:milestone2) { create(:milestone, title: 'v2.0', project: project) }
let!(:issue) { create :issue, author: user, project: project, milestone: milestone }
let!(:issue2) { create :issue, author: user, project: project, milestone: milestone2 }
dropdown_toggle_button = '.js-milestone-select'
before do
sign_in(user)
end
context 'default state' do
it 'shows issues with Any Milestone' do
visit issues_dashboard_path(author_id: user.id)
page.all('.issue-info').each do |issue_info|
expect(issue_info.text).to match(/v\d.0/)
end
end
end
context 'filtering by milestone' do
before do
visit issues_dashboard_path(author_id: user.id)
filter_item_select('v1.0', dropdown_toggle_button)
find(dropdown_toggle_button).click
wait_for_requests
end
it 'shows issues with Milestone v1.0' do
expect(find('.issues-list')).to have_selector('.issue', count: 1)
expect(find('.milestone-filter .dropdown-content')).to have_selector('a.is-active', count: 1)
end
it 'should not change active Milestone unless clicked' do
page.within '.milestone-filter' do
expect(find('.dropdown-content')).to have_selector('a.is-active', count: 1)
find('.dropdown-menu-close').click
expect(page).not_to have_selector('.dropdown.open')
find(dropdown_toggle_button).click
expect(find('.dropdown-content')).to have_selector('a.is-active', count: 1)
expect(find('.dropdown-content a.is-active')).to have_content('v1.0')
end
end
end
context 'with milestone filter in URL' do
before do
visit issues_dashboard_path(author_id: user.id, milestone_title: milestone.title)
find(dropdown_toggle_button).click
wait_for_requests
end
it 'has milestone selected' do
expect(find('.milestone-filter .dropdown-content')).to have_css('.is-active', text: milestone.title)
end
it 'removes milestone filter from URL after clicking "Any Milestone"' do
expect(current_url).to include("milestone_title=#{milestone.title}")
find('.milestone-filter .dropdown-content li', text: 'Any Milestone').click
expect(current_url).not_to include('milestone_title')
end
end
end
Loading
Loading
@@ -26,7 +26,7 @@ describe "User sorts issues" do
click_link('Milestone')
end
 
visit(issues_dashboard_path(assignee_id: user.id))
visit(issues_dashboard_path(assignee_username: user.username))
 
expect(find('.issues-filters a.is-active')).to have_content('Milestone')
 
Loading
Loading
Loading
Loading
@@ -25,7 +25,7 @@ describe 'User sorts merge requests' do
click_link('Milestone')
end
 
visit(merge_requests_dashboard_path(assignee_id: user.id))
visit(merge_requests_dashboard_path(assignee_username: user.username))
 
expect(find('.issues-filters a.is-active')).to have_content('Milestone')
 
Loading
Loading
@@ -41,7 +41,7 @@ describe 'User sorts merge requests' do
it 'fallbacks to issuable_sort cookie key when remembering the sorting option' do
set_cookie('issuable_sort', 'milestone')
 
visit(merge_requests_dashboard_path(assignee_id: user.id))
visit(merge_requests_dashboard_path(assignee_username: user.username))
 
expect(find('.issues-filters a.is-active')).to have_content('Milestone')
end
Loading
Loading
Loading
Loading
@@ -21,13 +21,17 @@ describe 'User uses header search field' do
it 'shows assigned issues' do
find('.search-input-container .dropdown-menu').click_link('Issues assigned to me')
 
expect(find('.js-assignee-search')).to have_content(user.name)
expect(page).to have_selector('.filtered-search')
expect_tokens([assignee_token(user.name)])
expect_filtered_search_input_empty
end
 
it 'shows created issues' do
find('.search-input-container .dropdown-menu').click_link("Issues I've created")
 
expect(find('.js-author-search')).to have_content(user.name)
expect(page).to have_selector('.filtered-search')
expect_tokens([author_token(user.name)])
expect_filtered_search_input_empty
end
end
 
Loading
Loading
@@ -37,13 +41,17 @@ describe 'User uses header search field' do
it 'shows assigned merge requests' do
find('.search-input-container .dropdown-menu').click_link('Merge requests assigned to me')
 
expect(find('.js-assignee-search')).to have_content(user.name)
expect(page).to have_selector('.filtered-search')
expect_tokens([assignee_token(user.name)])
expect_filtered_search_input_empty
end
 
it 'shows created merge requests' do
find('.search-input-container .dropdown-menu').click_link("Merge requests I've created")
 
expect(find('.js-author-search')).to have_content(user.name)
expect(page).to have_selector('.filtered-search')
expect_tokens([author_token(user.name)])
expect_filtered_search_input_empty
end
end
end
Loading
Loading
Loading
Loading
@@ -109,16 +109,16 @@ describe('Search autocomplete dropdown', () => {
 
assertLinks = function(list, issuesPath, mrsPath) {
if (issuesPath) {
const issuesAssignedToMeLink = `a[href="${issuesPath}/?assignee_id=${userId}"]`;
const issuesIHaveCreatedLink = `a[href="${issuesPath}/?author_id=${userId}"]`;
const issuesAssignedToMeLink = `a[href="${issuesPath}/?assignee_username=${userName}"]`;
const issuesIHaveCreatedLink = `a[href="${issuesPath}/?author_username=${userName}"]`;
 
expect(list.find(issuesAssignedToMeLink).length).toBe(1);
expect(list.find(issuesAssignedToMeLink).text()).toBe('Issues assigned to me');
expect(list.find(issuesIHaveCreatedLink).length).toBe(1);
expect(list.find(issuesIHaveCreatedLink).text()).toBe("Issues I've created");
}
const mrsAssignedToMeLink = `a[href="${mrsPath}/?assignee_id=${userId}"]`;
const mrsIHaveCreatedLink = `a[href="${mrsPath}/?author_id=${userId}"]`;
const mrsAssignedToMeLink = `a[href="${mrsPath}/?assignee_username=${userName}"]`;
const mrsIHaveCreatedLink = `a[href="${mrsPath}/?author_username=${userName}"]`;
 
expect(list.find(mrsAssignedToMeLink).length).toBe(1);
expect(list.find(mrsAssignedToMeLink).text()).toBe('Merge requests assigned to me');
Loading
Loading
# Helper allows you to select value from filter-items
#
# Params
# value - value for select
# selector - css selector of item
#
# Usage:
#
# filter_item_select('Any Author', '.js-author-search')
#
module FilterItemSelectHelper
def filter_item_select(value, selector)
find(selector).click
wait_for_requests
page.within('.dropdown-content') do
click_link value
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment