Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Léo-Paul Géneau
gitlab-ce
Commits
55f76ce8
Commit
55f76ce8
authored
Mar 05, 2019
by
Winnie Hellmann
Committed by
Phil Hughes
Mar 05, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "Merge branch 'winh-dequarantine-labels-autocomplete' into 'master'"
This reverts merge request !25542
parent
83cb7482
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
85 additions
and
134 deletions
+85
-134
jest.config.js
jest.config.js
+0
-1
spec/features/issues/gfm_autocomplete_spec.rb
spec/features/issues/gfm_autocomplete_spec.rb
+83
-1
spec/frontend/gfm_auto_complete_spec.js
spec/frontend/gfm_auto_complete_spec.js
+2
-92
spec/javascripts/fixtures/autocomplete_sources.rb
spec/javascripts/fixtures/autocomplete_sources.rb
+0
-40
No files found.
jest.config.js
View file @
55f76ce8
...
@@ -18,7 +18,6 @@ module.exports = {
...
@@ -18,7 +18,6 @@ module.exports = {
moduleNameMapper
:
{
moduleNameMapper
:
{
'
^~(.*)$
'
:
'
<rootDir>/app/assets/javascripts$1
'
,
'
^~(.*)$
'
:
'
<rootDir>/app/assets/javascripts$1
'
,
'
^ee(.*)$
'
:
'
<rootDir>/ee/app/assets/javascripts$1
'
,
'
^ee(.*)$
'
:
'
<rootDir>/ee/app/assets/javascripts$1
'
,
'
^fixtures(.*)$
'
:
'
<rootDir>/spec/javascripts/fixtures$1
'
,
'
^helpers(.*)$
'
:
'
<rootDir>/spec/frontend/helpers$1
'
,
'
^helpers(.*)$
'
:
'
<rootDir>/spec/frontend/helpers$1
'
,
'
^vendor(.*)$
'
:
'
<rootDir>/vendor/assets/javascripts$1
'
,
'
^vendor(.*)$
'
:
'
<rootDir>/vendor/assets/javascripts$1
'
,
'
\\
.(jpg|jpeg|png|svg)$
'
:
'
<rootDir>/spec/frontend/__mocks__/file_mock.js
'
,
'
\\
.(jpg|jpeg|png|svg)$
'
:
'
<rootDir>/spec/frontend/__mocks__/file_mock.js
'
,
...
...
spec/features/issues/gfm_autocomplete_spec.rb
View file @
55f76ce8
...
@@ -278,7 +278,12 @@ describe 'GFM autocomplete', :js do
...
@@ -278,7 +278,12 @@ describe 'GFM autocomplete', :js do
end
end
end
end
context
'labels'
do
# This context has just one example in each contexts in order to improve spec performance.
context
'labels'
,
:quarantine
do
let!
(
:backend
)
{
create
(
:label
,
project:
project
,
title:
'backend'
)
}
let!
(
:bug
)
{
create
(
:label
,
project:
project
,
title:
'bug'
)
}
let!
(
:feature_proposal
)
{
create
(
:label
,
project:
project
,
title:
'feature proposal'
)
}
it
'opens autocomplete menu for Labels when field starts with text with item escaping HTML characters'
do
it
'opens autocomplete menu for Labels when field starts with text with item escaping HTML characters'
do
create
(
:label
,
project:
project
,
title:
label_xss_title
)
create
(
:label
,
project:
project
,
title:
label_xss_title
)
...
@@ -293,6 +298,83 @@ describe 'GFM autocomplete', :js do
...
@@ -293,6 +298,83 @@ describe 'GFM autocomplete', :js do
expect
(
find
(
'.atwho-view-ul'
).
text
).
to
have_content
(
'alert label'
)
expect
(
find
(
'.atwho-view-ul'
).
text
).
to
have_content
(
'alert label'
)
end
end
end
end
context
'when no labels are assigned'
do
it
'shows labels'
do
note
=
find
(
'#note-body'
)
# It should show all the labels on "~".
type
(
note
,
'~'
)
wait_for_requests
expect_labels
(
shown:
[
backend
,
bug
,
feature_proposal
])
# It should show all the labels on "/label ~".
type
(
note
,
'/label ~'
)
expect_labels
(
shown:
[
backend
,
bug
,
feature_proposal
])
# It should show all the labels on "/relabel ~".
type
(
note
,
'/relabel ~'
)
expect_labels
(
shown:
[
backend
,
bug
,
feature_proposal
])
# It should show no labels on "/unlabel ~".
type
(
note
,
'/unlabel ~'
)
expect_labels
(
not_shown:
[
backend
,
bug
,
feature_proposal
])
end
end
context
'when some labels are assigned'
do
before
do
issue
.
labels
<<
[
backend
]
end
it
'shows labels'
do
note
=
find
(
'#note-body'
)
# It should show all the labels on "~".
type
(
note
,
'~'
)
wait_for_requests
expect_labels
(
shown:
[
backend
,
bug
,
feature_proposal
])
# It should show only unset labels on "/label ~".
type
(
note
,
'/label ~'
)
expect_labels
(
shown:
[
bug
,
feature_proposal
],
not_shown:
[
backend
])
# It should show all the labels on "/relabel ~".
type
(
note
,
'/relabel ~'
)
expect_labels
(
shown:
[
backend
,
bug
,
feature_proposal
])
# It should show only set labels on "/unlabel ~".
type
(
note
,
'/unlabel ~'
)
expect_labels
(
shown:
[
backend
],
not_shown:
[
bug
,
feature_proposal
])
end
end
context
'when all labels are assigned'
do
before
do
issue
.
labels
<<
[
backend
,
bug
,
feature_proposal
]
end
it
'shows labels'
do
note
=
find
(
'#note-body'
)
# It should show all the labels on "~".
type
(
note
,
'~'
)
wait_for_requests
expect_labels
(
shown:
[
backend
,
bug
,
feature_proposal
])
# It should show no labels on "/label ~".
type
(
note
,
'/label ~'
)
expect_labels
(
not_shown:
[
backend
,
bug
,
feature_proposal
])
# It should show all the labels on "/relabel ~".
type
(
note
,
'/relabel ~'
)
expect_labels
(
shown:
[
backend
,
bug
,
feature_proposal
])
# It should show all the labels on "/unlabel ~".
type
(
note
,
'/unlabel ~'
)
expect_labels
(
shown:
[
backend
,
bug
,
feature_proposal
])
end
end
end
end
shared_examples
'autocomplete suggestions'
do
shared_examples
'autocomplete suggestions'
do
...
...
spec/frontend/gfm_auto_complete_spec.js
View file @
55f76ce8
...
@@ -6,21 +6,17 @@ import GfmAutoComplete from '~/gfm_auto_complete';
...
@@ -6,21 +6,17 @@ import GfmAutoComplete from '~/gfm_auto_complete';
import
'
vendor/jquery.caret
'
;
import
'
vendor/jquery.caret
'
;
import
'
vendor/jquery.atwho
'
;
import
'
vendor/jquery.atwho
'
;
import
{
TEST_HOST
}
from
'
helpers/test_constants
'
;
import
labelsFixture
from
'
fixtures/autocomplete_sources/labels.json
'
;
// eslint-disable-line import/no-unresolved
describe
(
'
GfmAutoComplete
'
,
()
=>
{
describe
(
'
GfmAutoComplete
'
,
()
=>
{
const
gfmAutoCompleteCallbacks
=
GfmAutoComplete
.
prototype
.
getDefaultCallbacks
.
call
({
const
gfmAutoCompleteCallbacks
=
GfmAutoComplete
.
prototype
.
getDefaultCallbacks
.
call
({
fetchData
:
()
=>
{},
fetchData
:
()
=>
{},
});
});
let
atwhoInstance
;
let
atwhoInstance
;
let
items
;
let
sorterValue
;
let
sorterValue
;
describe
(
'
DefaultOptions.sorter
'
,
()
=>
{
describe
(
'
DefaultOptions.sorter
'
,
()
=>
{
describe
(
'
assets loading
'
,
()
=>
{
describe
(
'
assets loading
'
,
()
=>
{
let
items
;
beforeEach
(()
=>
{
beforeEach
(()
=>
{
jest
.
spyOn
(
GfmAutoComplete
,
'
isLoading
'
).
mockReturnValue
(
true
);
jest
.
spyOn
(
GfmAutoComplete
,
'
isLoading
'
).
mockReturnValue
(
true
);
...
@@ -65,7 +61,7 @@ describe('GfmAutoComplete', () => {
...
@@ -65,7 +61,7 @@ describe('GfmAutoComplete', () => {
atwhoInstance
=
{
setting
:
{}
};
atwhoInstance
=
{
setting
:
{}
};
const
query
=
'
query
'
;
const
query
=
'
query
'
;
const
items
=
[];
items
=
[];
const
searchKey
=
'
searchKey
'
;
const
searchKey
=
'
searchKey
'
;
gfmAutoCompleteCallbacks
.
sorter
.
call
(
atwhoInstance
,
query
,
items
,
searchKey
);
gfmAutoCompleteCallbacks
.
sorter
.
call
(
atwhoInstance
,
query
,
items
,
searchKey
);
...
@@ -254,90 +250,4 @@ describe('GfmAutoComplete', () => {
...
@@ -254,90 +250,4 @@ describe('GfmAutoComplete', () => {
).
toBe
(
'
<li><small>grp/proj#5</small> Some Issue</li>
'
);
).
toBe
(
'
<li><small>grp/proj#5</small> Some Issue</li>
'
);
});
});
});
});
describe
(
'
labels
'
,
()
=>
{
const
dataSources
=
{
labels
:
`
${
TEST_HOST
}
/autocomplete_sources/labels`
,
};
const
allLabels
=
labelsFixture
;
const
assignedLabels
=
allLabels
.
filter
(
label
=>
label
.
set
);
const
unassignedLabels
=
allLabels
.
filter
(
label
=>
!
label
.
set
);
let
autocomplete
;
let
$textarea
;
beforeEach
(()
=>
{
autocomplete
=
new
GfmAutoComplete
(
dataSources
);
$textarea
=
$
(
'
<textarea></textarea>
'
);
autocomplete
.
setup
(
$textarea
,
{
labels
:
true
});
});
afterEach
(()
=>
{
autocomplete
.
destroy
();
});
const
triggerDropdown
=
text
=>
{
$textarea
.
trigger
(
'
focus
'
)
.
val
(
text
)
.
caret
(
'
pos
'
,
-
1
);
$textarea
.
trigger
(
'
keyup
'
);
return
new
Promise
(
window
.
requestAnimationFrame
);
};
const
getDropdownItems
=
()
=>
{
const
dropdown
=
document
.
getElementById
(
'
at-view-labels
'
);
const
items
=
dropdown
.
getElementsByTagName
(
'
li
'
);
return
[].
map
.
call
(
items
,
item
=>
item
.
textContent
.
trim
());
};
const
expectLabels
=
({
input
,
output
})
=>
triggerDropdown
(
input
).
then
(()
=>
{
expect
(
getDropdownItems
()).
toEqual
(
output
.
map
(
label
=>
label
.
title
));
});
describe
(
'
with no labels assigned
'
,
()
=>
{
beforeEach
(()
=>
{
autocomplete
.
cachedData
[
'
~
'
]
=
[...
unassignedLabels
];
});
it
.
each
`
input | output
${
'
~
'
}
|
${
unassignedLabels
}
${
'
/label ~
'
}
|
${
unassignedLabels
}
${
'
/relabel ~
'
}
|
${
unassignedLabels
}
${
'
/unlabel ~
'
}
|
${[]}
`
(
'
$input shows $output.length labels
'
,
expectLabels
);
});
describe
(
'
with some labels assigned
'
,
()
=>
{
beforeEach
(()
=>
{
autocomplete
.
cachedData
[
'
~
'
]
=
allLabels
;
});
it
.
each
`
input | output
${
'
~
'
}
|
${
allLabels
}
${
'
/label ~
'
}
|
${
unassignedLabels
}
${
'
/relabel ~
'
}
|
${
allLabels
}
${
'
/unlabel ~
'
}
|
${
assignedLabels
}
`
(
'
$input shows $output.length labels
'
,
expectLabels
);
});
describe
(
'
with all labels assigned
'
,
()
=>
{
beforeEach
(()
=>
{
autocomplete
.
cachedData
[
'
~
'
]
=
[...
assignedLabels
];
});
it
.
each
`
input | output
${
'
~
'
}
|
${
assignedLabels
}
${
'
/label ~
'
}
|
${[]}
${
'
/relabel ~
'
}
|
${
assignedLabels
}
${
'
/unlabel ~
'
}
|
${
assignedLabels
}
`
(
'
$input shows $output.length labels
'
,
expectLabels
);
});
});
});
});
spec/javascripts/fixtures/autocomplete_sources.rb
deleted
100644 → 0
View file @
83cb7482
# frozen_string_literal: true
require
'spec_helper'
describe
Projects
::
AutocompleteSourcesController
,
'(JavaScript fixtures)'
,
type: :controller
do
include
JavaScriptFixturesHelpers
set
(
:admin
)
{
create
(
:admin
)
}
set
(
:group
)
{
create
(
:group
,
name:
'frontend-fixtures'
)
}
set
(
:project
)
{
create
(
:project
,
namespace:
group
,
path:
'autocomplete-sources-project'
)
}
set
(
:issue
)
{
create
(
:issue
,
project:
project
)
}
before
(
:all
)
do
clean_frontend_fixtures
(
'autocomplete_sources/'
)
end
before
do
sign_in
(
admin
)
end
it
'autocomplete_sources/labels.json'
do
|
example
|
issue
.
labels
<<
create
(
:label
,
project:
project
,
title:
'bug'
)
issue
.
labels
<<
create
(
:label
,
project:
project
,
title:
'critical'
)
create
(
:label
,
project:
project
,
title:
'feature'
)
create
(
:label
,
project:
project
,
title:
'documentation'
)
get
:labels
,
format: :json
,
params:
{
namespace_id:
group
.
path
,
project_id:
project
.
path
,
type:
issue
.
class
.
name
,
type_id:
issue
.
id
}
expect
(
response
).
to
be_success
store_frontend_fixture
(
response
,
example
.
description
)
end
end
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