summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/issue.rb5
-rw-r--r--app/models/note.rb24
-rw-r--r--app/views/issues/_show.html.haml2
-rw-r--r--app/views/issues/show.html.haml3
-rw-r--r--spec/models/issue_spec.rb31
-rw-r--r--spec/models/note_spec.rb31
6 files changed, 81 insertions, 15 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 4210297c763..632e6537aad 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -45,6 +45,11 @@ class Issue < ActiveRecord::Base
def new?
today? && created_at == updated_at
end
+
+ # Return the number of +1 comments (upvotes)
+ def upvotes
+ notes.select(&:upvote?).size
+ end
end
# == Schema Information
#
diff --git a/app/models/note.rb b/app/models/note.rb
index 581f78335cf..cee726ea0e5 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -47,27 +47,27 @@ class Note < ActiveRecord::Base
end
def target
- if noteable_type == "Commit"
+ if noteable_type == "Commit"
project.commit(noteable_id)
- else
+ else
noteable
end
# Temp fix to prevent app crash
# if note commit id doesnt exist
- rescue
+ rescue
nil
end
# Check if we can notify commit author
# with email about our comment
#
- # If commit author email exist in project
- # and commit author is not passed user we can
+ # If commit author email exist in project
+ # and commit author is not passed user we can
# send email to him
#
# params:
# user - current user
- #
+ #
# return:
# Boolean
#
@@ -81,12 +81,18 @@ class Note < ActiveRecord::Base
end
def commit_author
- @commit_author ||=
- project.users.find_by_email(target.author_email) ||
+ @commit_author ||=
+ project.users.find_by_email(target.author_email) ||
project.users.find_by_name(target.author_name)
- rescue
+ rescue
nil
end
+
+ # Returns true if this is an upvote note,
+ # otherwise false is returned
+ def upvote?
+ note =~ /^\+1/ ? true : false
+ end
end
# == Schema Information
#
diff --git a/app/views/issues/_show.html.haml b/app/views/issues/_show.html.haml
index b8031e929b6..505fa81e6c5 100644
--- a/app/views/issues/_show.html.haml
+++ b/app/views/issues/_show.html.haml
@@ -14,6 +14,8 @@
%span.label.important critical
- if issue.today?
%span.label.success today
+ - if issue.upvotes > 0
+ %span.label.success= "+#{issue.upvotes}"
diff --git a/app/views/issues/show.html.haml b/app/views/issues/show.html.haml
index 13292d4e096..fc0d3498fb7 100644
--- a/app/views/issues/show.html.haml
+++ b/app/views/issues/show.html.haml
@@ -35,6 +35,9 @@
%cite.cgray and currently assigned to
= image_tag gravatar_icon(@issue.assignee_email), :width => 16, :class => "lil_av"
%strong.author= link_to_issue_assignee(@issue)
+
+ - if @issue.upvotes > 0
+ %span.label.success= "+#{@issue.upvotes}"
%hr
diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb
index 74eb5b93f21..d76adff3dae 100644
--- a/spec/models/issue_spec.rb
+++ b/spec/models/issue_spec.rb
@@ -24,6 +24,37 @@ describe Issue do
:assignee => Factory(:user),
: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
# == Schema Information
#
diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb
index f36f12dd6ec..c74f7277810 100644
--- a/spec/models/note_spec.rb
+++ b/spec/models/note_spec.rb
@@ -20,10 +20,29 @@ describe Note do
Note.today.where_values.should == ["created_at >= '#{Date.today}'"]
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,
:project => project,
:noteable_id => commit.id,
@@ -36,12 +55,12 @@ describe Note do
end
end
- describe "Pre-line commit notes" do
- before do
+ describe "Pre-line commit notes" do
+ before do
@note = Factory :note,
:project => project,
:noteable_id => commit.id,
- :noteable_type => "Commit",
+ :noteable_type => "Commit",
:line_code => "0_16_1"
end