BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
809bba7d
Commit
809bba7d
authored
Mar 08, 2017
by
Phil Hughes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updated specs
parent
382fea7b
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
86 additions
and
123 deletions
+86
-123
boards_bundle.js
app/assets/javascripts/boards/boards_bundle.js
+2
-2
issue_card_inner.js
app/assets/javascripts/boards/components/issue_card_inner.js
+8
-15
filtered_search_boards.js
app/assets/javascripts/boards/filtered_search_boards.js
+14
-0
list.js
app/assets/javascripts/boards/models/list.js
+5
-3
filters.scss
app/assets/stylesheets/framework/filters.scss
+0
-1
_search_bar.html.haml
app/views/shared/issuable/_search_bar.html.haml
+1
-1
add_issues_modal_spec.rb
spec/features/boards/add_issues_modal_spec.rb
+1
-1
boards_spec.rb
spec/features/boards/boards_spec.rb
+54
-99
default_sort_order_spec.rb
spec/features/issuables/default_sort_order_spec.rb
+1
-1
No files found.
app/assets/javascripts/boards/boards_bundle.js
View file @
809bba7d
...
...
@@ -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
},
...
...
app/assets/javascripts/boards/components/issue_card_inner.js
View file @
809bba7d
...
...
@@ -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
{
...
...
app/assets/javascripts/boards/filtered_search_boards.js
View file @
809bba7d
...
...
@@ -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'
));
}
}
app/assets/javascripts/boards/models/list.js
View file @
809bba7d
...
...
@@ -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
);
});
}
...
...
app/assets/stylesheets/framework/filters.scss
View file @
809bba7d
...
...
@@ -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%
;
...
...
app/views/shared/issuable/_search_bar.html.haml
View file @
809bba7d
...
...
@@ -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
...
...
spec/features/boards/add_issues_modal_spec.rb
View file @
809bba7d
...
...
@@ -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
...
...
spec/features/boards/boards_spec.rb
View file @
809bba7d
...
...
@@ -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
page
.
within
'.labels-filter'
do
click_button
(
'Label'
)
wait_for_ajax
page
.
within
'.dropdown-menu-labels'
do
click_link
(
testing
.
title
)
wait_for_vue_resource
(
spinner:
false
)
end
set_filter
(
"label"
,
testing
.
title
)
click_filter_link
(
testing
.
title
)
submit_filter
expect
(
page
).
to
have_css
(
'input[name="label_name[]"]'
,
visible:
false
)
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
).
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
spec/features/issuables/default_sort_order_spec.rb
View file @
809bba7d
...
...
@@ -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
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment