Updated specs
This commit is contained in:
parent
382fea7b59
commit
809bba7d02
|
@ -62,7 +62,7 @@ $(() => {
|
|||
created () {
|
||||
gl.boardService = new BoardService(this.endpoint, this.bulkUpdatePath, this.boardId);
|
||||
|
||||
new FilteredSearchBoards(Store.filter, true);
|
||||
gl.boardsFilterManager = new FilteredSearchBoards(Store.filter, true);
|
||||
},
|
||||
mounted () {
|
||||
Store.disabled = this.disabled;
|
||||
|
@ -85,7 +85,7 @@ $(() => {
|
|||
});
|
||||
|
||||
gl.IssueBoardsSearch = new Vue({
|
||||
el: document.getElementById('js-boards-search'),
|
||||
el: document.getElementById('js-add-list'),
|
||||
data: {
|
||||
filters: Store.state.filters
|
||||
},
|
||||
|
|
|
@ -31,29 +31,22 @@
|
|||
return !this.list.label || label.id !== this.list.label.id;
|
||||
},
|
||||
filterByLabel(label, e) {
|
||||
let labelToggleText = label.title;
|
||||
const labelIndex = Store.state.filters.label_name.indexOf(label.title);
|
||||
const filterPath = gl.issueBoards.BoardsStore.filter.path.split('&');
|
||||
const labelTitle = encodeURIComponent(label.title);
|
||||
const param = `label_name[]=${labelTitle}`;
|
||||
const labelIndex = filterPath.indexOf(param);
|
||||
$(e.currentTarget).tooltip('hide');
|
||||
|
||||
if (labelIndex === -1) {
|
||||
Store.state.filters.label_name.push(label.title);
|
||||
$('.labels-filter').prepend(`<input type="hidden" name="label_name[]" value="${label.title}" />`);
|
||||
filterPath.push(param);
|
||||
} else {
|
||||
Store.state.filters.label_name.splice(labelIndex, 1);
|
||||
labelToggleText = Store.state.filters.label_name[0];
|
||||
$(`.labels-filter input[name="label_name[]"][value="${label.title}"]`).remove();
|
||||
filterPath.splice(labelIndex, 1);
|
||||
}
|
||||
|
||||
const selectedLabels = Store.state.filters.label_name;
|
||||
if (selectedLabels.length === 0) {
|
||||
labelToggleText = 'Label';
|
||||
} else if (selectedLabels.length > 1) {
|
||||
labelToggleText = `${selectedLabels[0]} + ${selectedLabels.length - 1} more`;
|
||||
}
|
||||
|
||||
$('.labels-filter .dropdown-toggle-text').text(labelToggleText);
|
||||
gl.issueBoards.BoardsStore.filter.path = filterPath.join('&');
|
||||
|
||||
Store.updateFiltersUrl();
|
||||
gl.boardsFilterManager.updateTokens();
|
||||
},
|
||||
labelStyle(label) {
|
||||
return {
|
||||
|
|
|
@ -14,4 +14,18 @@ export default class FilteredSearchBoards extends gl.FilteredSearchManager {
|
|||
gl.issueBoards.BoardsStore.updateFiltersUrl();
|
||||
}
|
||||
}
|
||||
|
||||
updateTokens() {
|
||||
const tokens = document.querySelectorAll('.js-visual-token');
|
||||
|
||||
// Remove all the tokens as they will be replaced by the search manager
|
||||
[].forEach.call(tokens, (el) => {
|
||||
el.parentNode.removeChild(el);
|
||||
});
|
||||
|
||||
this.loadSearchParamsFromURL();
|
||||
|
||||
// Get the placeholder back if search is empty
|
||||
this.filteredSearchInput.dispatchEvent(new Event('input'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@ class List {
|
|||
this.title = obj.title;
|
||||
this.type = obj.list_type;
|
||||
this.preset = ['done', 'blank'].indexOf(this.type) > -1;
|
||||
this.filterPath = gl.issueBoards.BoardsStore.filter.path;
|
||||
this.page = 1;
|
||||
this.loading = true;
|
||||
this.loadingMore = false;
|
||||
|
@ -67,18 +66,20 @@ class List {
|
|||
getIssues (emptyIssues = true) {
|
||||
const data = { page: this.page };
|
||||
gl.issueBoards.BoardsStore.filter.path.split('&').forEach((filterParam) => {
|
||||
if (filterParam === '') return;
|
||||
const paramSplit = filterParam.split('=');
|
||||
const paramKeyNormalized = paramSplit[0].replace('[]', '');
|
||||
const isArray = paramSplit[0].indexOf('[]');
|
||||
const value = decodeURIComponent(paramSplit[1]);
|
||||
|
||||
if (isArray >= 0) {
|
||||
if (!data[paramKeyNormalized]) {
|
||||
data[paramKeyNormalized] = [];
|
||||
}
|
||||
|
||||
data[paramKeyNormalized].push(paramSplit[1]);
|
||||
data[paramKeyNormalized].push(value);
|
||||
} else {
|
||||
data[paramKeyNormalized] = paramSplit[1];
|
||||
data[paramKeyNormalized] = value;
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -101,6 +102,7 @@ class List {
|
|||
}
|
||||
|
||||
this.createIssues(data.issues);
|
||||
console.log(this.issues.length);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -156,7 +156,6 @@
|
|||
width: 100%;
|
||||
border: 1px solid $border-color;
|
||||
background-color: $white-light;
|
||||
max-width: 87%;
|
||||
|
||||
@media (max-width: $screen-xs-min) {
|
||||
-webkit-flex: 1 1 100%;
|
||||
|
|
|
@ -88,7 +88,7 @@
|
|||
.filter-dropdown-container
|
||||
- if type == :boards
|
||||
- if can?(current_user, :admin_list, @project)
|
||||
.dropdown.prepend-left-10
|
||||
.dropdown.prepend-left-10#js-add-list
|
||||
%button.btn.btn-create.btn-inverted.js-new-board-list{ type: "button", data: { toggle: "dropdown", labels: labels_filter_path, namespace_path: @project.try(:namespace).try(:path), project_path: @project.try(:path) } }
|
||||
Add list
|
||||
.dropdown-menu.dropdown-menu-paging.dropdown-menu-align-right.dropdown-menu-issues-board-new.dropdown-menu-selectable
|
||||
|
|
|
@ -51,7 +51,7 @@ describe 'Issue Boards add issue modal', :feature, :js do
|
|||
end
|
||||
|
||||
it 'does not show tooltip on add issues button' do
|
||||
button = page.find('.issue-boards-search button', text: 'Add issues')
|
||||
button = page.find('.filter-dropdown-container button', text: 'Add issues')
|
||||
|
||||
expect(button[:title]).not_to eq("Please add a list to your board first")
|
||||
end
|
||||
|
|
|
@ -359,17 +359,9 @@ describe 'Issue Boards', feature: true, js: true do
|
|||
|
||||
context 'filtering' do
|
||||
it 'filters by author' do
|
||||
page.within '.issues-filters' do
|
||||
click_button('Author')
|
||||
wait_for_ajax
|
||||
|
||||
page.within '.dropdown-menu-author' do
|
||||
click_link(user2.name)
|
||||
end
|
||||
wait_for_vue_resource
|
||||
|
||||
expect(find('.js-author-search')).to have_content(user2.name)
|
||||
end
|
||||
set_filter("author", user2.username)
|
||||
click_filter_link(user2.username)
|
||||
submit_filter
|
||||
|
||||
wait_for_vue_resource
|
||||
wait_for_board_cards(1, 1)
|
||||
|
@ -377,17 +369,9 @@ describe 'Issue Boards', feature: true, js: true do
|
|||
end
|
||||
|
||||
it 'filters by assignee' do
|
||||
page.within '.issues-filters' do
|
||||
click_button('Assignee')
|
||||
wait_for_ajax
|
||||
|
||||
page.within '.dropdown-menu-assignee' do
|
||||
click_link(user.name)
|
||||
end
|
||||
wait_for_vue_resource
|
||||
|
||||
expect(find('.js-assignee-search')).to have_content(user.name)
|
||||
end
|
||||
set_filter("assignee", user.username)
|
||||
click_filter_link(user.username)
|
||||
submit_filter
|
||||
|
||||
wait_for_vue_resource
|
||||
|
||||
|
@ -396,17 +380,9 @@ describe 'Issue Boards', feature: true, js: true do
|
|||
end
|
||||
|
||||
it 'filters by milestone' do
|
||||
page.within '.issues-filters' do
|
||||
click_button('Milestone')
|
||||
wait_for_ajax
|
||||
|
||||
page.within '.milestone-filter' do
|
||||
click_link(milestone.title)
|
||||
end
|
||||
wait_for_vue_resource
|
||||
|
||||
expect(find('.js-milestone-select')).to have_content(milestone.title)
|
||||
end
|
||||
set_filter("milestone", "\"#{milestone.title}\"")
|
||||
click_filter_link(milestone.title)
|
||||
submit_filter
|
||||
|
||||
wait_for_vue_resource
|
||||
wait_for_board_cards(1, 1)
|
||||
|
@ -415,16 +391,9 @@ describe 'Issue Boards', feature: true, js: true do
|
|||
end
|
||||
|
||||
it 'filters by label' do
|
||||
page.within '.issues-filters' do
|
||||
click_button('Label')
|
||||
wait_for_ajax
|
||||
|
||||
page.within '.dropdown-menu-labels' do
|
||||
click_link(testing.title)
|
||||
wait_for_vue_resource
|
||||
find('.dropdown-menu-close').click
|
||||
end
|
||||
end
|
||||
set_filter("label", testing.title)
|
||||
click_filter_link(testing.title)
|
||||
submit_filter
|
||||
|
||||
wait_for_vue_resource
|
||||
wait_for_board_cards(1, 1)
|
||||
|
@ -432,19 +401,14 @@ describe 'Issue Boards', feature: true, js: true do
|
|||
end
|
||||
|
||||
it 'filters by label with space after reload' do
|
||||
page.within '.issues-filters' do
|
||||
click_button('Label')
|
||||
wait_for_ajax
|
||||
|
||||
page.within '.dropdown-menu-labels' do
|
||||
click_link(accepting.title)
|
||||
wait_for_vue_resource(spinner: false)
|
||||
find('.dropdown-menu-close').click
|
||||
end
|
||||
end
|
||||
set_filter("label", "\"#{accepting.title}\"")
|
||||
click_filter_link(accepting.title)
|
||||
submit_filter
|
||||
|
||||
# Test after reload
|
||||
page.evaluate_script 'window.location.reload()'
|
||||
wait_for_board_cards(1, 1)
|
||||
wait_for_empty_boards((2..3))
|
||||
|
||||
wait_for_vue_resource
|
||||
|
||||
|
@ -460,26 +424,16 @@ describe 'Issue Boards', feature: true, js: true do
|
|||
end
|
||||
|
||||
it 'removes filtered labels' do
|
||||
wait_for_vue_resource
|
||||
set_filter("label", testing.title)
|
||||
click_filter_link(testing.title)
|
||||
submit_filter
|
||||
|
||||
page.within '.labels-filter' do
|
||||
click_button('Label')
|
||||
wait_for_ajax
|
||||
wait_for_board_cards(1, 1)
|
||||
|
||||
page.within '.dropdown-menu-labels' do
|
||||
click_link(testing.title)
|
||||
wait_for_vue_resource(spinner: false)
|
||||
end
|
||||
find('.clear-search').click
|
||||
submit_filter
|
||||
|
||||
expect(page).to have_css('input[name="label_name[]"]', visible: false)
|
||||
|
||||
page.within '.dropdown-menu-labels' do
|
||||
click_link(testing.title)
|
||||
wait_for_vue_resource(spinner: false)
|
||||
end
|
||||
|
||||
expect(page).not_to have_css('input[name="label_name[]"]', visible: false)
|
||||
end
|
||||
wait_for_board_cards(1, 8)
|
||||
end
|
||||
|
||||
it 'infinite scrolls list with label filter' do
|
||||
|
@ -487,16 +441,9 @@ describe 'Issue Boards', feature: true, js: true do
|
|||
create(:labeled_issue, project: project, labels: [planning, testing])
|
||||
end
|
||||
|
||||
page.within '.issues-filters' do
|
||||
click_button('Label')
|
||||
wait_for_ajax
|
||||
|
||||
page.within '.dropdown-menu-labels' do
|
||||
click_link(testing.title)
|
||||
wait_for_vue_resource
|
||||
find('.dropdown-menu-close').click
|
||||
end
|
||||
end
|
||||
set_filter("label", testing.title)
|
||||
click_filter_link(testing.title)
|
||||
submit_filter
|
||||
|
||||
wait_for_vue_resource
|
||||
|
||||
|
@ -518,18 +465,13 @@ describe 'Issue Boards', feature: true, js: true do
|
|||
end
|
||||
|
||||
it 'filters by multiple labels' do
|
||||
page.within '.issues-filters' do
|
||||
click_button('Label')
|
||||
wait_for_ajax
|
||||
set_filter("label", testing.title)
|
||||
click_filter_link(testing.title)
|
||||
|
||||
page.within(find('.dropdown-menu-labels')) do
|
||||
click_link(testing.title)
|
||||
wait_for_vue_resource
|
||||
click_link(bug.title)
|
||||
wait_for_vue_resource
|
||||
find('.dropdown-menu-close').click
|
||||
end
|
||||
end
|
||||
set_filter("label", bug.title)
|
||||
click_filter_link(bug.title)
|
||||
|
||||
submit_filter
|
||||
|
||||
wait_for_vue_resource
|
||||
|
||||
|
@ -545,14 +487,14 @@ describe 'Issue Boards', feature: true, js: true do
|
|||
wait_for_vue_resource
|
||||
end
|
||||
|
||||
page.within('.tokens-container') do
|
||||
expect(page).to have_content(bug.title)
|
||||
end
|
||||
|
||||
wait_for_vue_resource
|
||||
|
||||
wait_for_board_cards(1, 1)
|
||||
wait_for_empty_boards((2..3))
|
||||
|
||||
page.within('.labels-filter') do
|
||||
expect(find('.dropdown-toggle-text')).to have_content(bug.title)
|
||||
end
|
||||
end
|
||||
|
||||
it 'removes label filter by clicking label button on issue' do
|
||||
|
@ -560,16 +502,13 @@ describe 'Issue Boards', feature: true, js: true do
|
|||
page.within(find('.card', match: :first)) do
|
||||
click_button(bug.title)
|
||||
end
|
||||
|
||||
wait_for_vue_resource
|
||||
|
||||
expect(page).to have_selector('.card', count: 1)
|
||||
end
|
||||
|
||||
wait_for_vue_resource
|
||||
|
||||
page.within('.labels-filter') do
|
||||
expect(find('.dropdown-toggle-text')).to have_content(bug.title)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -643,4 +582,20 @@ describe 'Issue Boards', feature: true, js: true do
|
|||
wait_for_board_cards(board, 0)
|
||||
end
|
||||
end
|
||||
|
||||
def set_filter(type, text)
|
||||
find('.filtered-search').native.send_keys("#{type}:#{text}")
|
||||
end
|
||||
|
||||
def submit_filter
|
||||
find('.filtered-search').native.send_keys(:enter)
|
||||
end
|
||||
|
||||
def click_filter_link(link_text)
|
||||
page.within('.filtered-search-input-container') do
|
||||
expect(page).to have_button(link_text)
|
||||
|
||||
click_button(link_text)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -176,7 +176,7 @@ describe 'Projects > Issuables > Default sort order', feature: true do
|
|||
end
|
||||
|
||||
def selected_sort_order
|
||||
find('.pull-right .dropdown button').text.downcase
|
||||
find('.filter-dropdown-container .dropdown button').text.downcase
|
||||
end
|
||||
|
||||
def visit_merge_requests_with_state(project, state)
|
||||
|
|
Loading…
Reference in New Issue