From 9659f7bf83ba2ef0824a2e2c7e9eead42cc56d2f Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Mon, 6 Feb 2017 19:00:15 -0500 Subject: Fixes ajax requests when current URL has a trailing slash --- .../filtered_search/filtered_search_dropdown_manager.js.es6 | 7 ++++--- .../javascripts/filtered_search/filtered_search_manager.js.es6 | 2 +- app/views/shared/issuable/_search_bar.html.haml | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js.es6 b/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js.es6 index 547989a6ff5..8ce4cf4fc36 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js.es6 +++ b/app/assets/javascripts/filtered_search/filtered_search_dropdown_manager.js.es6 @@ -2,7 +2,8 @@ (() => { class FilteredSearchDropdownManager { - constructor() { + constructor(baseEndpoint = '') { + this.baseEndpoint = baseEndpoint.replace(/\/$/, ''); this.tokenizer = gl.FilteredSearchTokenizer; this.filteredSearchInput = document.querySelector('.filtered-search'); @@ -38,13 +39,13 @@ milestone: { reference: null, gl: 'DropdownNonUser', - extraArguments: ['milestones.json', '%'], + extraArguments: [`${this.baseEndpoint}/milestones.json`, '%'], element: document.querySelector('#js-dropdown-milestone'), }, label: { reference: null, gl: 'DropdownNonUser', - extraArguments: ['labels.json', '~'], + extraArguments: [`${this.baseEndpoint}/labels.json`, '~'], element: document.querySelector('#js-dropdown-label'), }, hint: { diff --git a/app/assets/javascripts/filtered_search/filtered_search_manager.js.es6 b/app/assets/javascripts/filtered_search/filtered_search_manager.js.es6 index 4e02ab7c8c1..bd558a7c2e3 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_manager.js.es6 +++ b/app/assets/javascripts/filtered_search/filtered_search_manager.js.es6 @@ -6,7 +6,7 @@ if (this.filteredSearchInput) { this.tokenizer = gl.FilteredSearchTokenizer; - this.dropdownManager = new gl.FilteredSearchDropdownManager(); + this.dropdownManager = new gl.FilteredSearchDropdownManager(this.filteredSearchInput.getAttribute('data-base-endpoint')); this.bindEvents(); this.loadSearchParamsFromURL(); diff --git a/app/views/shared/issuable/_search_bar.html.haml b/app/views/shared/issuable/_search_bar.html.haml index 173fa922f56..6e417aa2251 100644 --- a/app/views/shared/issuable/_search_bar.html.haml +++ b/app/views/shared/issuable/_search_bar.html.haml @@ -11,7 +11,7 @@ class: "check_all_issues left" .issues-other-filters.filtered-search-container .filtered-search-input-container - %input.form-control.filtered-search{ placeholder: 'Search or filter results...', 'data-id' => 'filtered-search', 'data-project-id' => @project.id, 'data-username-params' => @users.to_json(only: [:id, :username]) } + %input.form-control.filtered-search{ placeholder: 'Search or filter results...', 'data-id' => 'filtered-search', 'data-project-id' => @project.id, 'data-username-params' => @users.to_json(only: [:id, :username]), 'data-base-endpoint' => namespace_project_path(@project.namespace, @project) } = icon('filter') %button.clear-search.hidden{ type: 'button' } = icon('times') -- cgit v1.2.1 From 7b16c01dab61975cab6a018e6b82be148a10dd2f Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Tue, 7 Feb 2017 17:41:32 -0500 Subject: Add tests --- .../filtered_search/filtered_search_manager.js.es6 | 2 +- .../issues/filtered_search/filter_issues_spec.rb | 24 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/filtered_search/filtered_search_manager.js.es6 b/app/assets/javascripts/filtered_search/filtered_search_manager.js.es6 index bd558a7c2e3..ffc7d29e4c5 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_manager.js.es6 +++ b/app/assets/javascripts/filtered_search/filtered_search_manager.js.es6 @@ -6,7 +6,7 @@ if (this.filteredSearchInput) { this.tokenizer = gl.FilteredSearchTokenizer; - this.dropdownManager = new gl.FilteredSearchDropdownManager(this.filteredSearchInput.getAttribute('data-base-endpoint')); + this.dropdownManager = new gl.FilteredSearchDropdownManager(this.filteredSearchInput.getAttribute('data-base-endpoint') || ''); this.bindEvents(); this.loadSearchParamsFromURL(); diff --git a/spec/features/issues/filtered_search/filter_issues_spec.rb b/spec/features/issues/filtered_search/filter_issues_spec.rb index 3f70a6aa75f..ca47e5ab8a5 100644 --- a/spec/features/issues/filtered_search/filter_issues_spec.rb +++ b/spec/features/issues/filtered_search/filter_issues_spec.rb @@ -801,4 +801,28 @@ describe 'Filter issues', js: true, feature: true do expect(auto_discovery_params).to include('assignee_id' => [user.id.to_s]) end end + + context 'URL has a trailing slash' do + before do + visit "#{namespace_project_issues_path(project.namespace, project)}/" + end + + it 'milestone dropdown loads milestones' do + input_filtered_search("milestone:", submit: false) + sleep 1 + + within('#js-dropdown-milestone') do + expect(page).to have_selector('.filter-dropdown .filter-dropdown-item', count: 2) + end + end + + it 'label dropdown load labels' do + input_filtered_search("label:", submit: false) + sleep 1 + + within('#js-dropdown-label') do + expect(page).to have_selector('.filter-dropdown .filter-dropdown-item', count: 5) + end + end + end end -- cgit v1.2.1 From 73bcfe324884aba19bc9d806514e8e9b910dfd8d Mon Sep 17 00:00:00 2001 From: Clement Ho Date: Wed, 8 Feb 2017 12:03:15 -0600 Subject: Remove sleep from tests --- spec/features/issues/filtered_search/filter_issues_spec.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/spec/features/issues/filtered_search/filter_issues_spec.rb b/spec/features/issues/filtered_search/filter_issues_spec.rb index ca47e5ab8a5..6f7046c8461 100644 --- a/spec/features/issues/filtered_search/filter_issues_spec.rb +++ b/spec/features/issues/filtered_search/filter_issues_spec.rb @@ -809,7 +809,6 @@ describe 'Filter issues', js: true, feature: true do it 'milestone dropdown loads milestones' do input_filtered_search("milestone:", submit: false) - sleep 1 within('#js-dropdown-milestone') do expect(page).to have_selector('.filter-dropdown .filter-dropdown-item', count: 2) @@ -818,7 +817,6 @@ describe 'Filter issues', js: true, feature: true do it 'label dropdown load labels' do input_filtered_search("label:", submit: false) - sleep 1 within('#js-dropdown-label') do expect(page).to have_selector('.filter-dropdown .filter-dropdown-item', count: 5) -- cgit v1.2.1