summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Mathiesen <marius@shortcut.no>2009-12-09 16:06:57 +0100
committerMarius Mathiesen <marius@shortcut.no>2009-12-09 16:06:57 +0100
commitd0d267d27c3cdbf96859f9c58d55a5e37516f9f9 (patch)
tree53dfadec016e675101520ca9a43b042a974150ac
parent437b9f2fb795f3b9fc405b9e85a65aaf7dfc3ae4 (diff)
downloadgitorious-mainline-outdated-d0d267d27c3cdbf96859f9c58d55a5e37516f9f9.zip
gitorious-mainline-outdated-d0d267d27c3cdbf96859f9c58d55a5e37516f9f9.tar.gz
gitorious-mainline-outdated-d0d267d27c3cdbf96859f9c58d55a5e37516f9f9.tar.bz2
When a merge request is created (confirmed_by_user), each reviewer will have a favorite created.
- Support creation of favorites without creating an event.
-rw-r--r--app/models/favorite.rb14
-rw-r--r--app/models/merge_request.rb13
-rw-r--r--test/unit/favorite_test.rb8
-rw-r--r--test/unit/merge_request_test.rb33
4 files changed, 65 insertions, 3 deletions
diff --git a/app/models/favorite.rb b/app/models/favorite.rb
index 04467ec..1cec3f9 100644
--- a/app/models/favorite.rb
+++ b/app/models/favorite.rb
@@ -45,7 +45,19 @@ class Favorite < ActiveRecord::Base
end
end
+ def skip_events=(skip)
+ @skip_events = skip
+ end
+
+ def skip_events?
+ @skip_events
+ end
+
+ def event_should_be_created?
+ !event_exists? && !skip_events?
+ end
+
def create_event
- user.events.create(event_options) unless event_exists?
+ user.events.create(event_options) if event_should_be_created?
end
end
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 67ea0a0..6fdb4e8 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -372,10 +372,10 @@ class MergeRequest < ActiveRecord::Base
def notify_subscribers_about_creation
return unless target_repository.notify_committers_on_new_merge_request?
- target_repository.reviewers.uniq.reject{|c| c == user }.each do |committer|
+ reviewers.each do |reviewer|
message = messages.build({
:sender => user,
- :recipient => committer,
+ :recipient => reviewer,
:subject => I18n.t("mailer.request_notification",
:login => user.login,
:title => target_repository.project.title),
@@ -383,9 +383,18 @@ class MergeRequest < ActiveRecord::Base
:notifiable => self
})
message.save
+ add_to_reviewers_favorites(reviewer)
end
end
+ def reviewers
+ target_repository.reviewers.uniq.reject{|r| r == user}
+ end
+
+ def add_to_reviewers_favorites(reviewer)
+ reviewer.favorites.create(:watchable => self, :skip_events => true)
+ end
+
def oauth_request_token=(token)
self.oauth_token = token.token
self.oauth_secret = token.secret
diff --git a/test/unit/favorite_test.rb b/test/unit/favorite_test.rb
index 837095e..6970c3c 100644
--- a/test/unit/favorite_test.rb
+++ b/test/unit/favorite_test.rb
@@ -83,6 +83,14 @@ class FavoriteTest < ActiveSupport::TestCase
assert new_favorite.save
end
end
+
+ should "support a skip_events setter" do
+ favorite = @user.favorites.build(:skip_events => true, :watchable => @repo)
+ assert favorite.skip_events?
+ assert !favorite.event_should_be_created?
+ assert favorite.save
+ assert !favorite.event_exists?
+ end
end
context "Watching merge requests" do
diff --git a/test/unit/merge_request_test.rb b/test/unit/merge_request_test.rb
index f037c7b..60d5c5a 100644
--- a/test/unit/merge_request_test.rb
+++ b/test/unit/merge_request_test.rb
@@ -794,4 +794,37 @@ class MergeRequestTest < ActiveSupport::TestCase
end
end
+ context "Reviewers" do
+ setup do
+ @source_repository = repositories(:johans)
+ @user = @source_repository.user
+ @target_repository = repositories(:moes)
+ @merge_request = @target_repository.merge_requests.build(
+ :source_repository => @source_repository,
+ :summary => "Please merge",
+ :sha_snapshot => "ffac",
+ :ending_commit => "caff",
+ :user => @user
+ )
+ end
+
+ should "be accessible from the merge request" do
+ assert_equal(@merge_request.target_repository.reviewers.uniq.reject{|r|r == @merge_request.user},
+ @merge_request.reviewers)
+ end
+
+ should "add a favorite for each reviewer" do
+ @merge_request.expects(:add_to_reviewers_favorites).times(@merge_request.reviewers.size)
+ @merge_request.notify_subscribers_about_creation
+ end
+
+ should "add self to reviewer's favorites" do
+ reviewer = users(:johan)
+ assert_incremented_by(reviewer.favorites, :size, 1) do
+ @merge_request.add_to_reviewers_favorites(reviewer)
+ end
+ end
+
+ end
+
end