diff options
author | Marius Mathiesen <marius@shortcut.no> | 2009-12-09 16:06:57 +0100 |
---|---|---|
committer | Marius Mathiesen <marius@shortcut.no> | 2009-12-09 16:06:57 +0100 |
commit | d0d267d27c3cdbf96859f9c58d55a5e37516f9f9 (patch) | |
tree | 53dfadec016e675101520ca9a43b042a974150ac | |
parent | 437b9f2fb795f3b9fc405b9e85a65aaf7dfc3ae4 (diff) | |
download | gitorious-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.rb | 14 | ||||
-rw-r--r-- | app/models/merge_request.rb | 13 | ||||
-rw-r--r-- | test/unit/favorite_test.rb | 8 | ||||
-rw-r--r-- | test/unit/merge_request_test.rb | 33 |
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 |