Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
55f76ce8
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
55f76ce8
编写于
3月 05, 2019
作者:
W
Winnie Hellmann
提交者:
Phil Hughes
3月 05, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Revert "Merge branch 'winh-dequarantine-labels-autocomplete' into 'master'"
This reverts merge request !25542
上级
83cb7482
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
85 addition
and
134 deletion
+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
未找到文件。
jest.config.js
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
已删除
100644 → 0
浏览文件 @
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
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录