diff --git a/app/views/projects/notes/_note.html.haml b/app/views/projects/notes/_note.html.haml
index ae5aae34326..bd478e315d1 100644
--- a/app/views/projects/notes/_note.html.haml
+++ b/app/views/projects/notes/_note.html.haml
@@ -9,13 +9,13 @@
= image_tag avatar_icon(note.author), alt: '', class: 'avatar s40'
.timeline-content
.note-header
- - if note_editable?(note)
- .note-actions
+ .note-actions
+ - if current_user
.award-menu-holder.note-action-award-holder.js-award-holder.js-award-action-btn{ data: { target: "##{dom_id(note)} .js-awards-block" } }
= link_to '#', title: 'Award emoji', class: 'note-award-control js-add-award', data: { award_menu_url: emojis_path } do
= icon('smile-o', {class: "award-control-icon award-control-icon-normal"})
= icon('spinner spin', {class: "award-control-icon award-control-icon-loading"})
-
+ - if note_editable?(note)
= link_to '#', title: 'Edit comment', class: 'js-note-edit' do
= icon('pencil-square-o')
diff --git a/spec/features/issues/award_spec.rb b/spec/features/issues/award_spec.rb
new file mode 100644
index 00000000000..46e1ed5d8cd
--- /dev/null
+++ b/spec/features/issues/award_spec.rb
@@ -0,0 +1,140 @@
+require 'rails_helper'
+
+feature 'Issue awards', js: true, feature: true do
+ let(:user) { create(:user) }
+ let(:project) { create(:project, :public) }
+ let(:issue) { create(:issue, project: project) }
+ let!(:note) { create(:note_on_issue, project: project, noteable: issue, note: 'Looks good!') }
+
+ describe 'logged in' do
+ before do
+ login_as(user)
+ visit namespace_project_issue_path(project.namespace, project, issue)
+ end
+
+ it 'should add award to issue' do
+ first('.js-emoji-btn').click
+ expect(page).to have_selector('.js-emoji-btn.active')
+ expect(first('.js-emoji-btn')).to have_content '1'
+ end
+
+ it 'should remove award from issue' do
+ first('.js-emoji-btn').click
+ find('.js-emoji-btn.active').click
+ expect(first('.js-emoji-btn')).to have_content '0'
+ end
+
+ it 'should show award menu button in notes' do
+ page.within('.note') do
+ expect(page).to have_selector('.js-award-action-btn')
+ end
+ end
+
+ it 'should not show award bar on note if no awards given' do
+ page.within('.note') do
+ expect(find('.js-awards-block', visible: false)).not_to be_visible
+ end
+ end
+
+ it 'should be able to show award menu when clicking add award button in note' do
+ show_note_award_menu
+ end
+
+ it 'should only have one menu on the page' do
+ first('.js-add-award').click
+ expect(page).to have_selector('.emoji-menu')
+
+ page.within('.note') do
+ find('.js-add-award').click
+ expect(page).to have_selector('.emoji-menu', count: 1)
+ end
+ end
+
+ it 'should add award to note' do
+ show_note_award_menu
+ award_on_note
+
+ page.within('.note') do
+ expect(find('.js-awards-block')).to be_visible
+ expect(find('.js-awards-block')).to have_selector('.active')
+ end
+ end
+
+ it 'should remove award from note' do
+ show_note_award_menu
+ award_on_note
+
+ page.within('.note') do
+ expect(find('.js-awards-block')).to be_visible
+ expect(find('.js-awards-block')).to have_selector('.active')
+ end
+
+ remove_award_on_note
+ sleep 0.5
+
+ page.within('.note') do
+ expect(find('.js-awards-block', visible: false)).not_to be_visible
+ expect(find('.js-awards-block', visible: false)).not_to have_selector('.active')
+ end
+ end
+
+ it 'should not hide award bar on notes with more than 1 award' do
+ show_note_award_menu
+ award_on_note
+
+ show_note_award_menu
+ award_on_note(2)
+
+ page.within('.note') do
+ expect(find('.js-awards-block')).to be_visible
+ expect(find('.js-awards-block')).to have_selector('.active')
+ end
+
+ remove_award_on_note
+
+ page.within('.note') do
+ expect(find('.js-awards-block')).to be_visible
+ end
+ end
+ end
+
+ describe 'logged out' do
+ before do
+ visit namespace_project_issue_path(project.namespace, project, issue)
+ end
+
+ it 'should not see award menu button' do
+ expect(page).not_to have_selector('.js-award-holder')
+ end
+
+ it 'should not see award menu button in note' do
+ page.within('.note') do
+ expect(page).not_to have_selector('.js-award-action-btn')
+ end
+ end
+ end
+
+ def show_note_award_menu
+ page.within('.note') do
+ find('.js-add-award').click
+ expect(page).to have_selector('.emoji-menu')
+ end
+ end
+
+ def award_on_note(index = 1)
+ page.within('.note') do
+ page.within('.emoji-menu') do
+ buttons = all('.js-emoji-btn')
+ buttons[index].click
+ end
+ end
+ end
+
+ def remove_award_on_note
+ page.within('.note') do
+ page.within('.js-awards-block') do
+ first('.js-emoji-btn').click
+ end
+ end
+ end
+end