diff options
-rw-r--r-- | app/models/concerns/awardable.rb | 10 | ||||
-rw-r--r-- | app/models/note.rb | 4 | ||||
-rw-r--r-- | app/models/user.rb | 2 | ||||
-rw-r--r-- | app/services/notes/create_service.rb | 2 | ||||
-rw-r--r-- | app/services/toggle_award_emoji_service.rb | 12 | ||||
-rw-r--r-- | app/views/award_emoji/_awards_block.html.haml | 4 | ||||
-rw-r--r-- | app/views/projects/issues/_issue.html.haml | 14 | ||||
-rw-r--r-- | app/views/projects/merge_requests/_merge_request.html.haml | 14 | ||||
-rw-r--r-- | db/migrate/20160416182152_convert_award_note_to_emoji_award.rb | 10 | ||||
-rw-r--r-- | lib/api/entities.rb | 3 | ||||
-rw-r--r-- | spec/controllers/projects/issues_controller_spec.rb | 6 | ||||
-rw-r--r-- | spec/features/issues/award_emoji_spec.rb | 2 | ||||
-rw-r--r-- | spec/models/concerns/issuable_spec.rb | 35 | ||||
-rw-r--r-- | spec/requests/api/issues_spec.rb | 1 | ||||
-rw-r--r-- | spec/requests/api/merge_requests_spec.rb | 1 |
15 files changed, 23 insertions, 97 deletions
diff --git a/app/models/concerns/awardable.rb b/app/models/concerns/awardable.rb index b4e3e9eb3dd..aa4b4201250 100644 --- a/app/models/concerns/awardable.rb +++ b/app/models/concerns/awardable.rb @@ -34,23 +34,23 @@ module Awardable end end - def grouped_awards(with_thumbs = true) + def grouped_awards(with_thumbs: true) awards = award_emoji.group_by(&:name) if with_thumbs - awards[AwardEmoji::UPVOTE_NAME] ||= AwardEmoji.none - awards[AwardEmoji::DOWNVOTE_NAME] ||= AwardEmoji.none + awards[AwardEmoji::UPVOTE_NAME] ||= [] + awards[AwardEmoji::DOWNVOTE_NAME] ||= [] end awards end def downvotes - award_emoji.where(name: AwardEmoji::DOWNVOTE_NAME).count + award_emoji.downvotes.count end def upvotes - award_emoji.where(name: AwardEmoji::UPVOTE_NAME).count + award_emoji.upvotes.count end def emoji_awardable? diff --git a/app/models/note.rb b/app/models/note.rb index 0b038edb47b..f9040f9f364 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -323,10 +323,6 @@ class Note < ActiveRecord::Base award_emoji_supported? && contains_emoji_only? end - def create_award_emoji - self.noteable.award_emoji(award_emoji_name, author) - end - def clear_blank_line_code! self.line_code = nil if self.line_code.blank? end diff --git a/app/models/user.rb b/app/models/user.rb index 5ca53e7c64a..52847212619 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -79,7 +79,7 @@ class User < ActiveRecord::Base has_many :builds, dependent: :nullify, class_name: 'Ci::Build' has_many :todos, dependent: :destroy has_many :notification_settings, dependent: :destroy - has_many :award_emoji, as: :awardable, dependent: :destroy + has_many :award_emoji, as: :awardable, dependent: :destroy # # Validations diff --git a/app/services/notes/create_service.rb b/app/services/notes/create_service.rb index da2a774b70d..bbf7889166d 100644 --- a/app/services/notes/create_service.rb +++ b/app/services/notes/create_service.rb @@ -7,7 +7,7 @@ module Notes if note.award_emoji? return ToggleAwardEmojiService.new(project, current_user, params). - execute(note.noteable, note.note) + execute(note.award_emoji_name, note.note) end return unless valid_project?(note) diff --git a/app/services/toggle_award_emoji_service.rb b/app/services/toggle_award_emoji_service.rb index b77b4e79bf2..1820f57f564 100644 --- a/app/services/toggle_award_emoji_service.rb +++ b/app/services/toggle_award_emoji_service.rb @@ -1,21 +1,9 @@ require_relative 'base_service' class ToggleAwardEmojiService < BaseService - # For an award emoji being posted we should: - # - Mark the TODO as done for this issuable (skip on snippets) - # - Save the award emoji def execute(awardable, emoji) todo_service.new_award_emoji(awardable, current_user) - # Needed if its posted as a note containing only :+1: - emoji = award_emoji_name(emoji) if emoji.start_with? ':' awardable.toggle_award_emoji(emoji, current_user) end - - private - - def award_emoji_name(emoji) - original_name = emoji.match(Banzai::Filter::EmojiFilter.emoji_pattern)[1] - Gitlab::AwardEmoji.normalize_emoji_name(original_name) - end end diff --git a/app/views/award_emoji/_awards_block.html.haml b/app/views/award_emoji/_awards_block.html.haml index b57c9afcbd2..86931c70f33 100644 --- a/app/views/award_emoji/_awards_block.html.haml +++ b/app/views/award_emoji/_awards_block.html.haml @@ -1,7 +1,7 @@ -- grouped_emojis = awardable.grouped_awards(inline) +- grouped_emojis = awardable.grouped_awards(with_thumbs: inline) .awards.js-awards-block{ class: ("hidden" if !inline && grouped_emojis.size == 0), data: { award_url: url_for([:toggle_award_emoji, @project.namespace.becomes(Namespace), @project, awardable]) } } - awards_sort(grouped_emojis).each do |emoji, awards| - %button.btn.award-control.js-emoji-btn.has-tooltip{ type: "button", class: (award_active_class(awards, current_user)),data: { placement: "bottom", original_title: award_user_list(awards, current_user)} } + %button.btn.award-control.js-emoji-btn.has-tooltip{ type: "button", class: (award_active_class(awards, current_user)),data: { placement: "bottom", title: award_user_list(awards, current_user) } } = emoji_icon(emoji) %span.award-control-text.js-counter = awards.count diff --git a/app/views/projects/issues/_issue.html.haml b/app/views/projects/issues/_issue.html.haml index 57ad2ec1852..dec3e8809ce 100644 --- a/app/views/projects/issues/_issue.html.haml +++ b/app/views/projects/issues/_issue.html.haml @@ -28,16 +28,10 @@ = downvotes - note_count = issue.notes.user.count - - if note_count > 0 - %li - = link_to issue_path(issue) + "#notes" do - = icon('comments') - = note_count - - else - %li - = link_to issue_path(issue) + "#notes", class: "issue-no-comments" do - = icon('comments') - = note_count + %li + = link_to issue_path(issue, anchor: 'notes'), class: ('issue-no-comments' if note_count.zero?) do + = icon('comments') + = note_count .issue-info #{issue.to_reference} · diff --git a/app/views/projects/merge_requests/_merge_request.html.haml b/app/views/projects/merge_requests/_merge_request.html.haml index 391193eed6c..eaee5180176 100644 --- a/app/views/projects/merge_requests/_merge_request.html.haml +++ b/app/views/projects/merge_requests/_merge_request.html.haml @@ -36,16 +36,10 @@ = downvotes - note_count = merge_request.mr_and_commit_notes.user.count - - if note_count > 0 - %li - = link_to merge_request_path(merge_request) + "#notes" do - = icon('comments') - = note_count - - else - %li - = link_to merge_request_path(merge_request) + "#notes", class: "merge-request-no-comments" do - = icon('comments') - = note_count + %li + = link_to merge_request_path(merge_request, anchor: 'notes'), class: ('merge-request-no-comments' if note_count.zero?) do + = icon('comments') + = note_count .merge-request-info #{merge_request.to_reference} · diff --git a/db/migrate/20160416182152_convert_award_note_to_emoji_award.rb b/db/migrate/20160416182152_convert_award_note_to_emoji_award.rb index 76f4a3aa6ae..d2efbd0abea 100644 --- a/db/migrate/20160416182152_convert_award_note_to_emoji_award.rb +++ b/db/migrate/20160416182152_convert_award_note_to_emoji_award.rb @@ -3,15 +3,5 @@ class ConvertAwardNoteToEmojiAward < ActiveRecord::Migration def up execute "INSERT INTO award_emoji (awardable_type, awardable_id, user_id, name, created_at, updated_at) (SELECT noteable_type, noteable_id, author_id, note, created_at, updated_at FROM notes WHERE is_award = true)" end - - def down - execute <<-SQL - INSERT INTO notes (noteable_type, noteable_id, author_id, note, created_at, updated_at, is_award) - (SELECT awardable_type, awardable_id, user_id, name, created_at, updated_at, TRUE - FROM award_emoji - WHERE awardable_type IN ('Issue', 'MergeRequest') - ) - SQL - end end end diff --git a/lib/api/entities.rb b/lib/api/entities.rb index f91ca9d5805..c210cfe513f 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -174,7 +174,7 @@ module API expose :subscribed do |issue, options| issue.subscribed?(options[:current_user]) end - expose :user_notes_count + expose :upvotes, :downvotes end class MergeRequest < ProjectEntity @@ -191,7 +191,6 @@ module API expose :subscribed do |merge_request, options| merge_request.subscribed?(options[:current_user]) end - expose :user_notes_count end class MergeRequestChanges < MergeRequest diff --git a/spec/controllers/projects/issues_controller_spec.rb b/spec/controllers/projects/issues_controller_spec.rb index 30d296fdad0..706f538f262 100644 --- a/spec/controllers/projects/issues_controller_spec.rb +++ b/spec/controllers/projects/issues_controller_spec.rb @@ -257,9 +257,9 @@ describe Projects::IssuesController do project.team << [user, :developer] end - it "yields status code 200" do - post(:toggle_award_emoji, namespace_id: project.namespace.path, - project_id: project.path, id: issue.iid, name: "thumbsup") + it "toggles the award emoji" do + expect { post(:toggle_award_emoji, namespace_id: project.namespace.path, + project_id: project.path, id: issue.iid, name: "thumbsup") }.to change { AwardEmoji.count }.by(1) expect(response.status).to eq(200) end diff --git a/spec/features/issues/award_emoji_spec.rb b/spec/features/issues/award_emoji_spec.rb index 41af789aae2..07a854ea014 100644 --- a/spec/features/issues/award_emoji_spec.rb +++ b/spec/features/issues/award_emoji_spec.rb @@ -28,7 +28,6 @@ describe 'Awards Emoji', feature: true do end context 'click the thumbsup emoji' do - it 'should increment the thumbsup emoji', js: true do find('[data-emoji="thumbsup"]').click sleep 2 @@ -41,7 +40,6 @@ describe 'Awards Emoji', feature: true do end context 'click the thumbsdown emoji' do - it 'should increment the thumbsdown emoji', js: true do find('[data-emoji="thumbsdown"]').click sleep 2 diff --git a/spec/models/concerns/issuable_spec.rb b/spec/models/concerns/issuable_spec.rb index 568bf4c9324..ebc3968023d 100644 --- a/spec/models/concerns/issuable_spec.rb +++ b/spec/models/concerns/issuable_spec.rb @@ -203,11 +203,10 @@ describe Issue, "Issuable" do end end - # TODO ZJ describe "votes" do before do - create!(:award_emoji, :upvote, awardable: issue) - create!(:award_emoji, :downvote, awardable: issue) + create(:award_emoji, :upvote, awardable: issue) + create(:award_emoji, :downvote, awardable: issue) end it "returns correct values" do @@ -215,34 +214,4 @@ describe Issue, "Issuable" do expect(issue.downvotes).to eq(1) end end - - describe ".with_label" do - let(:project) { create(:project, :public) } - let(:bug) { create(:label, project: project, title: 'bug') } - let(:feature) { create(:label, project: project, title: 'feature') } - let(:enhancement) { create(:label, project: project, title: 'enhancement') } - let(:issue1) { create(:issue, title: "Bugfix1", project: project) } - let(:issue2) { create(:issue, title: "Bugfix2", project: project) } - let(:issue3) { create(:issue, title: "Feature1", project: project) } - - before(:each) do - issue1.labels << bug - issue1.labels << feature - issue2.labels << bug - issue2.labels << enhancement - issue3.labels << feature - end - - it 'finds the correct issue containing just enhancement label' do - expect(Issue.with_label(enhancement.title)).to match_array([issue2]) - end - - it 'finds the correct issues containing the same label' do - expect(Issue.with_label(bug.title)).to match_array([issue1, issue2]) - end - - it 'finds the correct issues containing only both labels' do - expect(Issue.with_label([bug.title, enhancement.title])).to match_array([issue2]) - end - end end diff --git a/spec/requests/api/issues_spec.rb b/spec/requests/api/issues_spec.rb index 9dd43f4fab3..7bc7e319ff1 100644 --- a/spec/requests/api/issues_spec.rb +++ b/spec/requests/api/issues_spec.rb @@ -249,7 +249,6 @@ describe API::API, api: true do expect(json_response['milestone']).to be_a Hash expect(json_response['assignee']).to be_a Hash expect(json_response['author']).to be_a Hash - expect(json_response['user_notes_count']).to be(1) end it "should return a project issue by id" do diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb index 4b0111df149..6392bdb1c91 100644 --- a/spec/requests/api/merge_requests_spec.rb +++ b/spec/requests/api/merge_requests_spec.rb @@ -138,7 +138,6 @@ describe API::API, api: true do expect(json_response['work_in_progress']).to be_falsy expect(json_response['merge_when_build_succeeds']).to be_falsy expect(json_response['merge_status']).to eq('can_be_merged') - expect(json_response['user_notes_count']).to be(2) end it "should return merge_request" do |