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
Tatuya Kamada
gitlab-ce
Commits
c1e2b02e
Commit
c1e2b02e
authored
May 31, 2016
by
Fatih Acet
Committed by
Z.J. van de Weg
Jun 06, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added tests for award emoji feature.
parent
63a54021
Changes
8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
1235 additions
and
24 deletions
+1235
-24
app/assets/javascripts/awards_handler.coffee
app/assets/javascripts/awards_handler.coffee
+10
-10
app/assets/stylesheets/pages/notes.scss
app/assets/stylesheets/pages/notes.scss
+1
-1
spec/javascripts/awards_handler_spec.js.coffee
spec/javascripts/awards_handler_spec.js.coffee
+202
-0
spec/javascripts/behaviors/quick_submit_spec.js.coffee
spec/javascripts/behaviors/quick_submit_spec.js.coffee
+11
-11
spec/javascripts/fixtures/awards_handler.html.haml
spec/javascripts/fixtures/awards_handler.html.haml
+52
-0
spec/javascripts/fixtures/behaviors/quick_submit.html.haml
spec/javascripts/fixtures/behaviors/quick_submit.html.haml
+1
-1
spec/javascripts/fixtures/emoji_menu.coffee
spec/javascripts/fixtures/emoji_menu.coffee
+957
-0
spec/javascripts/new_branch_spec.js.coffee
spec/javascripts/new_branch_spec.js.coffee
+1
-1
No files found.
app/assets/javascripts/awards_handler.coffee
View file @
c1e2b02e
...
@@ -202,7 +202,7 @@ class @AwardsHandler
...
@@ -202,7 +202,7 @@ class @AwardsHandler
getAwardTooltip
:
(
$awardBlock
)
->
getAwardTooltip
:
(
$awardBlock
)
->
return
$awardBlock
.
attr
(
'data-original-title'
)
or
$awardBlock
.
attr
(
'data-title'
)
return
$awardBlock
.
attr
(
'data-original-title'
)
or
$awardBlock
.
attr
(
'data-title'
)
or
''
removeMeFromUserList
:
(
$emojiButton
,
emoji
)
->
removeMeFromUserList
:
(
$emojiButton
,
emoji
)
->
...
@@ -222,7 +222,7 @@ class @AwardsHandler
...
@@ -222,7 +222,7 @@ class @AwardsHandler
.
attr
'data-original-title'
,
newAuthors
.
attr
'data-original-title'
,
newAuthors
.
attr
'data-title'
,
newAuthors
.
attr
'data-title'
,
newAuthors
@
resetTooltip
(
awardBlock
)
@
resetTooltip
awardBlock
addMeToUserList
:
(
votesBlock
,
emoji
)
->
addMeToUserList
:
(
votesBlock
,
emoji
)
->
...
@@ -232,21 +232,21 @@ class @AwardsHandler
...
@@ -232,21 +232,21 @@ class @AwardsHandler
users
=
[]
users
=
[]
if
origTitle
if
origTitle
users
=
origTitle
.
trim
().
split
(
', '
)
users
=
origTitle
.
trim
().
split
', '
users
.
push
(
'me'
)
users
.
push
'me'
awardBlock
.
attr
(
'title'
,
users
.
join
(
', '
))
awardBlock
.
attr
'title'
,
users
.
join
', '
@
resetTooltip
(
awardBlock
)
@
resetTooltip
awardBlock
resetTooltip
:
(
award
)
->
resetTooltip
:
(
award
)
->
award
.
tooltip
(
'destroy'
)
award
.
tooltip
'destroy'
# 'destroy' call is asynchronous and there is no appropriate callback on it, this is why we need to set timeout.
# 'destroy' call is asynchronous and there is no appropriate callback on it, this is why we need to set timeout.
setTimeout
(
->
cb
=
->
award
.
tooltip
()
award
.
tooltip
()
setTimeout
cb
,
200
),
200
createEmoji_
:
(
votesBlock
,
emoji
)
->
createEmoji_
:
(
votesBlock
,
emoji
)
->
...
...
app/assets/stylesheets/pages/notes.scss
View file @
c1e2b02e
...
@@ -122,7 +122,7 @@ ul.notes {
...
@@ -122,7 +122,7 @@ ul.notes {
.note-awards
{
.note-awards
{
.js-awards-block
{
.js-awards-block
{
padding
:
2px
0
;
padding
:
2px
;
margin-top
:
10px
;
margin-top
:
10px
;
}
}
...
...
spec/javascripts/awards_handler_spec.js.coffee
0 → 100644
View file @
c1e2b02e
#= require awards_handler
#= require jquery
#= require jquery.cookie
#= require ./fixtures/emoji_menu
awardsHandler
=
null
window
.
gl
or=
{}
window
.
gl
.
awardMenuUrl
=
'/emojis'
window
.
emojiAliases
=
->
return
{
'+1'
:
'thumbsup'
,
'-1'
:
'thumbsdown'
}
lazyAssert
=
(
done
,
assertFn
)
->
setTimeout
->
# Maybe jasmine.clock here?
assertFn
()
done
()
,
333
describe
'AwardsHandler'
,
->
fixture
.
preload
'awards_handler.html'
beforeEach
->
fixture
.
load
'awards_handler.html'
awardsHandler
=
new
AwardsHandler
spyOn
(
awardsHandler
,
'postEmoji'
).
and
.
callFake
(
url
,
emoji
,
cb
)
=>
cb
()
spyOn
(
jQuery
,
'get'
).
and
.
callFake
(
req
,
cb
)
->
expect
(
req
).
toBe
'/emojis'
cb
window
.
emojiMenu
describe
'::showEmojiMenu'
,
->
it
'should show emoji menu when Add emoji button clicked'
,
(
done
)
->
$
(
'.js-add-award'
).
eq
(
0
).
click
()
lazyAssert
done
,
->
$emojiMenu
=
$
'.emoji-menu'
expect
(
$emojiMenu
.
length
).
toBe
1
expect
(
$emojiMenu
.
hasClass
(
'is-visible'
)).
toBe
yes
expect
(
$emojiMenu
.
find
(
'#emoji_search'
).
length
).
toBe
1
expect
(
$
(
'.js-awards-block.current'
).
length
).
toBe
1
it
'should also show emoji menu for the smiley icon in notes'
,
(
done
)
->
$
(
'.note-action-button'
).
click
()
lazyAssert
done
,
->
$emojiMenu
=
$
'.emoji-menu'
expect
(
$emojiMenu
.
length
).
toBe
1
it
'should remove emoji menu when body is clicked'
,
(
done
)
->
$
(
'.js-add-award'
).
eq
(
0
).
click
()
lazyAssert
done
,
->
$emojiMenu
=
$
(
'.emoji-menu'
)
$
(
'body'
).
click
()
expect
(
$emojiMenu
.
length
).
toBe
1
expect
(
$emojiMenu
.
hasClass
(
'is-visible'
)).
toBe
no
expect
(
$
(
'.js-awards-block.current'
).
length
).
toBe
0
describe
'::addAwardToEmojiBar'
,
->
it
'should add emoji to votes block'
,
->
$votesBlock
=
$
(
'.js-awards-block'
).
eq
0
awardsHandler
.
addAwardToEmojiBar
$votesBlock
,
'heart'
,
no
$emojiButton
=
$votesBlock
.
find
'[data-emoji=heart]'
expect
(
$emojiButton
.
length
).
toBe
1
expect
(
$emojiButton
.
next
(
'.js-counter'
).
text
()).
toBe
'1'
expect
(
$votesBlock
.
hasClass
(
'hidden'
)).
toBe
no
it
'should remove the emoji when we click again'
,
->
$votesBlock
=
$
(
'.js-awards-block'
).
eq
0
awardsHandler
.
addAwardToEmojiBar
$votesBlock
,
'heart'
,
no
awardsHandler
.
addAwardToEmojiBar
$votesBlock
,
'heart'
,
no
$emojiButton
=
$votesBlock
.
find
'[data-emoji=heart]'
expect
(
$emojiButton
.
length
).
toBe
0
it
'should decrement the emoji counter'
,
->
$votesBlock
=
$
(
'.js-awards-block'
).
eq
0
awardsHandler
.
addAwardToEmojiBar
$votesBlock
,
'heart'
,
no
$emojiButton
=
$votesBlock
.
find
'[data-emoji=heart]'
$emojiButton
.
next
(
'.js-counter'
).
text
5
awardsHandler
.
addAwardToEmojiBar
$votesBlock
,
'heart'
,
no
expect
(
$emojiButton
.
length
).
toBe
1
expect
(
$emojiButton
.
next
(
'.js-counter'
).
text
()).
toBe
'4'
describe
'::getAwardUrl'
,
->
it
'should return the url for request'
,
->
expect
(
awardsHandler
.
getAwardUrl
()).
toBe
'/gitlab-org/gitlab-test/issues/8/toggle_award_emoji'
describe
'::addAward and ::checkMutuality'
,
->
it
'should handle :+1: and :-1: mutuality'
,
->
awardUrl
=
awardsHandler
.
getAwardUrl
()
$votesBlock
=
$
(
'.js-awards-block'
).
eq
0
$thumbsUpEmoji
=
$votesBlock
.
find
(
'[data-emoji=thumbsup]'
).
parent
()
$thumbsDownEmoji
=
$votesBlock
.
find
(
'[data-emoji=thumbsdown]'
).
parent
()
awardsHandler
.
addAward
$votesBlock
,
awardUrl
,
'thumbsup'
,
no
expect
(
$thumbsUpEmoji
.
hasClass
(
'active'
)).
toBe
yes
expect
(
$thumbsDownEmoji
.
hasClass
(
'active'
)).
toBe
no
$thumbsUpEmoji
.
tooltip
()
$thumbsDownEmoji
.
tooltip
()
awardsHandler
.
addAward
$votesBlock
,
awardUrl
,
'thumbsdown'
,
yes
expect
(
$thumbsUpEmoji
.
hasClass
(
'active'
)).
toBe
no
expect
(
$thumbsDownEmoji
.
hasClass
(
'active'
)).
toBe
yes
describe
'::removeEmoji'
,
->
it
'should remove emoji'
,
->
awardUrl
=
awardsHandler
.
getAwardUrl
()
$votesBlock
=
$
(
'.js-awards-block'
).
eq
0
awardsHandler
.
addAward
$votesBlock
,
awardUrl
,
'fire'
,
no
expect
(
$votesBlock
.
find
(
'[data-emoji=fire]'
).
length
).
toBe
1
awardsHandler
.
removeEmoji
$votesBlock
.
find
(
'[data-emoji=fire]'
).
closest
(
'button'
)
expect
(
$votesBlock
.
find
(
'[data-emoji=fire]'
).
length
).
toBe
0
describe
'search'
,
->
it
'should filter the emoji'
,
->
$
(
'.js-add-award'
).
eq
(
0
).
click
()
expect
(
$
(
'[data-emoji=angel]'
).
is
(
':visible'
)).
toBe
yes
expect
(
$
(
'[data-emoji=anger]'
).
is
(
':visible'
)).
toBe
yes
$
(
'#emoji_search'
).
val
(
'ali'
).
trigger
'keyup'
expect
(
$
(
'[data-emoji=angel]'
).
is
(
':visible'
)).
toBe
no
expect
(
$
(
'[data-emoji=anger]'
).
is
(
':visible'
)).
toBe
no
expect
(
$
(
'[data-emoji=alien]'
).
is
(
':visible'
)).
toBe
yes
expect
(
$
(
'h5.emoji-search'
).
is
(
':visible'
)).
toBe
yes
describe
'emoji menu'
,
->
selector
=
'[data-emoji=sunglasses]'
openEmojiMenuAndAddEmoji
=
->
$
(
'.js-add-award'
).
eq
(
0
).
click
()
$menu
=
$
'.emoji-menu'
$block
=
$
'.js-awards-block'
$emoji
=
$menu
.
find
".emoji-menu-list-item
#{
selector
}
"
expect
(
$emoji
.
length
).
toBe
1
expect
(
$block
.
find
(
selector
).
length
).
toBe
0
$emoji
.
click
()
expect
(
$menu
.
hasClass
(
'.is-visible'
)).
toBe
no
expect
(
$block
.
find
(
selector
).
length
).
toBe
1
it
'should add selected emoji to awards block'
,
->
openEmojiMenuAndAddEmoji
()
it
'should remove already selected emoji'
,
->
openEmojiMenuAndAddEmoji
()
$
(
'.js-add-award'
).
eq
(
0
).
click
()
$block
=
$
'.js-awards-block'
$emoji
=
$
(
'.emoji-menu'
).
find
".emoji-menu-list-item
#{
selector
}
"
$emoji
.
click
()
expect
(
$block
.
find
(
selector
).
length
).
toBe
0
spec/javascripts/behaviors/quick_submit_spec.js.coffee
View file @
c1e2b02e
...
@@ -14,17 +14,17 @@ describe 'Quick Submit behavior', ->
...
@@ -14,17 +14,17 @@ describe 'Quick Submit behavior', ->
}
}
it
'does not respond to other keyCodes'
,
->
it
'does not respond to other keyCodes'
,
->
$
(
'input'
).
trigger
(
keydownEvent
(
keyCode
:
32
))
$
(
'input
.quick-submit-input
'
).
trigger
(
keydownEvent
(
keyCode
:
32
))
expect
(
@
spies
.
submit
).
not
.
toHaveBeenTriggered
()
expect
(
@
spies
.
submit
).
not
.
toHaveBeenTriggered
()
it
'does not respond to Enter alone'
,
->
it
'does not respond to Enter alone'
,
->
$
(
'input'
).
trigger
(
keydownEvent
(
ctrlKey
:
false
,
metaKey
:
false
))
$
(
'input
.quick-submit-input
'
).
trigger
(
keydownEvent
(
ctrlKey
:
false
,
metaKey
:
false
))
expect
(
@
spies
.
submit
).
not
.
toHaveBeenTriggered
()
expect
(
@
spies
.
submit
).
not
.
toHaveBeenTriggered
()
it
'does not respond to repeated events'
,
->
it
'does not respond to repeated events'
,
->
$
(
'input'
).
trigger
(
keydownEvent
(
repeat
:
true
))
$
(
'input
.quick-submit-input
'
).
trigger
(
keydownEvent
(
repeat
:
true
))
expect
(
@
spies
.
submit
).
not
.
toHaveBeenTriggered
()
expect
(
@
spies
.
submit
).
not
.
toHaveBeenTriggered
()
...
@@ -38,26 +38,26 @@ describe 'Quick Submit behavior', ->
...
@@ -38,26 +38,26 @@ describe 'Quick Submit behavior', ->
# only run the tests that apply to the current platform
# only run the tests that apply to the current platform
if
navigator
.
userAgent
.
match
(
/Macintosh/
)
if
navigator
.
userAgent
.
match
(
/Macintosh/
)
it
'responds to Meta+Enter'
,
->
it
'responds to Meta+Enter'
,
->
$
(
'input'
).
trigger
(
keydownEvent
())
$
(
'input
.quick-submit-input
'
).
trigger
(
keydownEvent
())
expect
(
@
spies
.
submit
).
toHaveBeenTriggered
()
expect
(
@
spies
.
submit
).
toHaveBeenTriggered
()
it
'excludes other modifier keys'
,
->
it
'excludes other modifier keys'
,
->
$
(
'input'
).
trigger
(
keydownEvent
(
altKey
:
true
))
$
(
'input
.quick-submit-input
'
).
trigger
(
keydownEvent
(
altKey
:
true
))
$
(
'input'
).
trigger
(
keydownEvent
(
ctrlKey
:
true
))
$
(
'input
.quick-submit-input
'
).
trigger
(
keydownEvent
(
ctrlKey
:
true
))
$
(
'input'
).
trigger
(
keydownEvent
(
shiftKey
:
true
))
$
(
'input
.quick-submit-input
'
).
trigger
(
keydownEvent
(
shiftKey
:
true
))
expect
(
@
spies
.
submit
).
not
.
toHaveBeenTriggered
()
expect
(
@
spies
.
submit
).
not
.
toHaveBeenTriggered
()
else
else
it
'responds to Ctrl+Enter'
,
->
it
'responds to Ctrl+Enter'
,
->
$
(
'input'
).
trigger
(
keydownEvent
())
$
(
'input
.quick-submit-input
'
).
trigger
(
keydownEvent
())
expect
(
@
spies
.
submit
).
toHaveBeenTriggered
()
expect
(
@
spies
.
submit
).
toHaveBeenTriggered
()
it
'excludes other modifier keys'
,
->
it
'excludes other modifier keys'
,
->
$
(
'input'
).
trigger
(
keydownEvent
(
altKey
:
true
))
$
(
'input
.quick-submit-input
'
).
trigger
(
keydownEvent
(
altKey
:
true
))
$
(
'input'
).
trigger
(
keydownEvent
(
metaKey
:
true
))
$
(
'input
.quick-submit-input
'
).
trigger
(
keydownEvent
(
metaKey
:
true
))
$
(
'input'
).
trigger
(
keydownEvent
(
shiftKey
:
true
))
$
(
'input
.quick-submit-input
'
).
trigger
(
keydownEvent
(
shiftKey
:
true
))
expect
(
@
spies
.
submit
).
not
.
toHaveBeenTriggered
()
expect
(
@
spies
.
submit
).
not
.
toHaveBeenTriggered
()
...
...
spec/javascripts/fixtures/awards_handler.html.haml
0 → 100644
View file @
c1e2b02e
.issue-details.issuable-details
.detail-page-description.content-block
%h2
.title
Quibusdam sint officiis earum molestiae ipsa autem voluptatem nisi rem.
.description.js-task-list-container.is-task-list-enabled
.wiki
%p
Qui exercitationem magnam optio quae fuga earum odio.
%textarea
.hidden.js-task-list-field
Qui exercitationem magnam optio quae fuga earum odio.
%small
.edited-text
.content-block.content-block-small
.awards.js-awards-block
{
"data-award-url"
=>
"/gitlab-org/gitlab-test/issues/8/toggle_award_emoji"
}
%button
.award-control.btn.js-emoji-btn
{
"data-placement"
=>
"bottom"
,
"data-title"
=>
""
,
:type
=>
"button"
}
.icon.emoji-icon.emoji-1F44D
{
"data-aliases"
=>
""
,
"data-emoji"
=>
"thumbsup"
,
"data-unicode-name"
=>
"1F44D"
,
:title
=>
"thumbsup"
}
%span
.award-control-text.js-counter
0
%button
.award-control.btn.js-emoji-btn
{
"data-placement"
=>
"bottom"
,
"data-title"
=>
""
,
:type
=>
"button"
}
.icon.emoji-icon.emoji-1F44E
{
"data-aliases"
=>
""
,
"data-emoji"
=>
"thumbsdown"
,
"data-unicode-name"
=>
"1F44E"
,
:title
=>
"thumbsdown"
}
%span
.award-control-text.js-counter
0
.award-menu-holder.js-award-holder
%button
.btn.award-control.js-add-award
{
:type
=>
"button"
}
%i
.fa.fa-smile-o.award-control-icon.award-control-icon-normal
%i
.fa.fa-spinner.fa-spin.award-control-icon.award-control-icon-loading
%span
.award-control-text
Add
%section
.issuable-discussion
#notes
%ul
#notes-list
.notes.main-notes-list.timeline
%li
#note_348
.note.note-row-348.timeline-entry
{
"data-author-id"
=>
"18"
,
"data-editable"
=>
""
}
.timeline-entry-inner
.timeline-icon
%a
{
:href
=>
"/u/agustin"
}
%img
.avatar.s40
{
:alt
=>
""
,
:src
=>
"#"
}
/
.timeline-content
.note-header
%a
.author_link
{
:href
=>
"/u/agustin"
}
%span
.author
Brenna Stokes
.inline.note-headline-light
@agustin commented
%a
{
:href
=>
"#note_348"
}
%time
11 days ago
.note-actions
%span
.note-role
Reporter
%a
.note-action-button.note-emoji-button.js-add-award.js-note-emoji
{
"data-position"
=>
"right"
,
:href
=>
"#"
,
:title
=>
"Award Emoji"
}
%i
.fa.fa-spinner.fa-spin
%i
.fa.fa-smile-o
.js-task-list-container.note-body.is-task-list-enabled
.note-text
%p
Suscipit sunt quia quisquam sed eveniet ipsam.
.note-awards
.awards.hidden.js-awards-block
{
"data-award-url"
=>
"/gitlab-org/gitlab-test/notes/348/toggle_award_emoji"
}
.award-menu-holder.js-award-holder
%button
.btn.award-control.js-add-award
{
:type
=>
"button"
}
%i
.fa.fa-smile-o.award-control-icon.award-control-icon-normal
%i
.fa.fa-spinner.fa-spin.award-control-icon.award-control-icon-loading
%span
.award-control-text
Add
spec/javascripts/fixtures/behaviors/quick_submit.html.haml
View file @
c1e2b02e
%form
.js-quick-submit
{
action:
'/foo'
}
%form
.js-quick-submit
{
action:
'/foo'
}
%input
{
type:
'text'
}
%input
{
type:
'text'
,
class:
'quick-submit-input'
}
%textarea
%textarea
%input
{
type:
'submit'
}
Submit
%input
{
type:
'submit'
}
Submit
...
...
spec/javascripts/fixtures/emoji_menu.coffee
0 → 100644
View file @
c1e2b02e
This diff is collapsed.
Click to expand it.
spec/javascripts/new_branch_spec.js.coffee
View file @
c1e2b02e
#= require jquery-ui
#= require jquery-ui
/autocomplete
#= require new_branch_form
#= require new_branch_form
describe
'Branch'
,
->
describe
'Branch'
,
->
...
...
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