Count +1 votes in issue notes.
This commit is contained in:
parent
ed11ca13e8
commit
8d8b82127f
6 changed files with 81 additions and 15 deletions
|
@ -45,6 +45,11 @@ class Issue < ActiveRecord::Base
|
||||||
def new?
|
def new?
|
||||||
today? && created_at == updated_at
|
today? && created_at == updated_at
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Return the number of +1 comments (upvotes)
|
||||||
|
def upvotes
|
||||||
|
notes.select(&:upvote?).size
|
||||||
|
end
|
||||||
end
|
end
|
||||||
# == Schema Information
|
# == Schema Information
|
||||||
#
|
#
|
||||||
|
|
|
@ -47,27 +47,27 @@ class Note < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def target
|
def target
|
||||||
if noteable_type == "Commit"
|
if noteable_type == "Commit"
|
||||||
project.commit(noteable_id)
|
project.commit(noteable_id)
|
||||||
else
|
else
|
||||||
noteable
|
noteable
|
||||||
end
|
end
|
||||||
# Temp fix to prevent app crash
|
# Temp fix to prevent app crash
|
||||||
# if note commit id doesnt exist
|
# if note commit id doesnt exist
|
||||||
rescue
|
rescue
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
# Check if we can notify commit author
|
# Check if we can notify commit author
|
||||||
# with email about our comment
|
# with email about our comment
|
||||||
#
|
#
|
||||||
# If commit author email exist in project
|
# If commit author email exist in project
|
||||||
# and commit author is not passed user we can
|
# and commit author is not passed user we can
|
||||||
# send email to him
|
# send email to him
|
||||||
#
|
#
|
||||||
# params:
|
# params:
|
||||||
# user - current user
|
# user - current user
|
||||||
#
|
#
|
||||||
# return:
|
# return:
|
||||||
# Boolean
|
# Boolean
|
||||||
#
|
#
|
||||||
|
@ -81,12 +81,18 @@ class Note < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def commit_author
|
def commit_author
|
||||||
@commit_author ||=
|
@commit_author ||=
|
||||||
project.users.find_by_email(target.author_email) ||
|
project.users.find_by_email(target.author_email) ||
|
||||||
project.users.find_by_name(target.author_name)
|
project.users.find_by_name(target.author_name)
|
||||||
rescue
|
rescue
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns true if this is an upvote note,
|
||||||
|
# otherwise false is returned
|
||||||
|
def upvote?
|
||||||
|
note =~ /^\+1/ ? true : false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
# == Schema Information
|
# == Schema Information
|
||||||
#
|
#
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
%span.label.important critical
|
%span.label.important critical
|
||||||
- if issue.today?
|
- if issue.today?
|
||||||
%span.label.success today
|
%span.label.success today
|
||||||
|
- if issue.upvotes > 0
|
||||||
|
%span.label.success= "+#{issue.upvotes}"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,9 @@
|
||||||
%cite.cgray and currently assigned to
|
%cite.cgray and currently assigned to
|
||||||
= image_tag gravatar_icon(@issue.assignee_email), :width => 16, :class => "lil_av"
|
= image_tag gravatar_icon(@issue.assignee_email), :width => 16, :class => "lil_av"
|
||||||
%strong.author= link_to_issue_assignee(@issue)
|
%strong.author= link_to_issue_assignee(@issue)
|
||||||
|
|
||||||
|
- if @issue.upvotes > 0
|
||||||
|
%span.label.success= "+#{@issue.upvotes}"
|
||||||
|
|
||||||
%hr
|
%hr
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,37 @@ describe Issue do
|
||||||
:assignee => Factory(:user),
|
:assignee => Factory(:user),
|
||||||
:project => Factory.create(:project)).should be_valid }
|
:project => Factory.create(:project)).should be_valid }
|
||||||
|
|
||||||
|
describe "plus 1" do
|
||||||
|
let(:project) { Factory(:project) }
|
||||||
|
subject {
|
||||||
|
Factory.create(:issue,
|
||||||
|
:author => Factory(:user),
|
||||||
|
:assignee => Factory(:user),
|
||||||
|
:project => project)
|
||||||
|
}
|
||||||
|
|
||||||
|
it "with no notes has a 0/0 score" do
|
||||||
|
subject.upvotes.should == 0
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should recognize non-+1 notes" do
|
||||||
|
subject.notes << Factory(:note, note: "No +1 here", project: Factory(:project, path: 'plusone', code: 'plusone'))
|
||||||
|
subject.should have(1).note
|
||||||
|
subject.notes.first.upvote?.should be_false
|
||||||
|
subject.upvotes.should == 0
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should recognize a single +1 note" do
|
||||||
|
subject.notes << Factory(:note, note: "+1 This is awesome", project: Factory(:project, path: 'plusone', code: 'plusone'))
|
||||||
|
subject.upvotes.should == 1
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should recognize a multiple +1 notes" do
|
||||||
|
subject.notes << Factory(:note, note: "+1 This is awesome", project: Factory(:project, path: 'plusone', code: 'plusone'))
|
||||||
|
subject.notes << Factory(:note, note: "+1 I want this", project: Factory(:project, path: 'plustwo', code: 'plustwo'))
|
||||||
|
subject.upvotes.should == 2
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
# == Schema Information
|
# == Schema Information
|
||||||
#
|
#
|
||||||
|
|
|
@ -20,10 +20,29 @@ describe Note do
|
||||||
Note.today.where_values.should == ["created_at >= '#{Date.today}'"]
|
Note.today.where_values.should == ["created_at >= '#{Date.today}'"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "Commit notes" do
|
|
||||||
|
|
||||||
before do
|
describe "Voting score" do
|
||||||
|
let(:project) { Factory(:project) }
|
||||||
|
|
||||||
|
it "recognizes a neutral note" do
|
||||||
|
note = Factory(:note, project: project, note: "This is not a +1 note")
|
||||||
|
note.should_not be_upvote
|
||||||
|
end
|
||||||
|
|
||||||
|
it "recognizes a +1 note" do
|
||||||
|
note = Factory(:note, project: project, note: "+1 for this")
|
||||||
|
note.should be_upvote
|
||||||
|
end
|
||||||
|
|
||||||
|
it "recognizes a -1 note as no vote" do
|
||||||
|
note = Factory(:note, project: project, note: "-1 for this")
|
||||||
|
note.should_not be_upvote
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "Commit notes" do
|
||||||
|
|
||||||
|
before do
|
||||||
@note = Factory :note,
|
@note = Factory :note,
|
||||||
:project => project,
|
:project => project,
|
||||||
:noteable_id => commit.id,
|
:noteable_id => commit.id,
|
||||||
|
@ -36,12 +55,12 @@ describe Note do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "Pre-line commit notes" do
|
describe "Pre-line commit notes" do
|
||||||
before do
|
before do
|
||||||
@note = Factory :note,
|
@note = Factory :note,
|
||||||
:project => project,
|
:project => project,
|
||||||
:noteable_id => commit.id,
|
:noteable_id => commit.id,
|
||||||
:noteable_type => "Commit",
|
:noteable_type => "Commit",
|
||||||
:line_code => "0_16_1"
|
:line_code => "0_16_1"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue