summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/helpers/event_rendering_helper.rb3
-rw-r--r--app/helpers/favorites_helper.rb20
-rw-r--r--app/helpers/users_helper.rb1
-rw-r--r--app/models/favorite.rb10
-rw-r--r--app/models/merge_request.rb1
-rw-r--r--app/views/merge_requests/show.html.erb5
-rw-r--r--app/views/users/show.html.erb5
-rw-r--r--test/functional/favorites_controller_test.rb19
8 files changed, 57 insertions, 7 deletions
diff --git a/app/helpers/event_rendering_helper.rb b/app/helpers/event_rendering_helper.rb
index 27f6d5c..24e7638 100644
--- a/app/helpers/event_rendering_helper.rb
+++ b/app/helpers/event_rendering_helper.rb
@@ -381,8 +381,7 @@ module EventRenderingHelper
favorite_class = event.body.constantize
repo = favorite_class.find(event.data)
action = action_for_event(:event_added_favorite) do
- link_to(repo_title(repo, repo.project), repo_owner_path(repo, [repo.project, repo]))
-
+ link_to_watchable(repo)
end
body = event.body
diff --git a/app/helpers/favorites_helper.rb b/app/helpers/favorites_helper.rb
index d2881f0..9d78fa8 100644
--- a/app/helpers/favorites_helper.rb
+++ b/app/helpers/favorites_helper.rb
@@ -26,7 +26,7 @@ module FavoritesHelper
content_tag(:div, link, :class => "white-button round-10 small-button favorite")
end
-
+
def create_favorite_link_to(watchable)
class_name = watchable.class.name
link_to("Start watching",
@@ -42,4 +42,22 @@ module FavoritesHelper
:method => :delete, :"data-request-method" => "delete",
:class => "watch-link enabled round-10")
end
+
+ # Builds a link to the target of a favorite event
+ def link_to_watchable(watchable)
+ case watchable
+ when Repository
+ link_to(repo_title(watchable, watchable.project), repo_owner_path(watchable, [watchable.project, watchable]))
+ when MergeRequest
+ link_to(h(truncate(watchable.summary, :length => 32)),
+ repo_owner_path(watchable.target_repository,
+ [watchable.source_repository.project,
+ watchable.target_repository,
+ watchable]))
+ else
+ link_to(favorite.inspect, "/")
+ end
+ end
+
+
end
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index b77aa7d..94c5020 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -20,6 +20,7 @@
#++
module UsersHelper
+ include FavoritesHelper
def encoded_mail_to(email)
mail_to(email, nil, :replace_at => "AT@NOSPAM@",
:replace_dot => "DOT", :encode => "javascript")
diff --git a/app/models/favorite.rb b/app/models/favorite.rb
index ac22006..58c3bc0 100644
--- a/app/models/favorite.rb
+++ b/app/models/favorite.rb
@@ -29,9 +29,17 @@ class Favorite < ActiveRecord::Base
def event_options
{:action => Action::ADD_FAVORITE, :data => watchable.id,
- :body => watchable.class.name, :project_id => watchable.project.id,
+ :body => watchable.class.name, :project_id => project.id,
:target_type => "User", :target_id => user.id}
end
+
+ def project
+ if MergeRequest === watchable
+ watchable.target_repository.project
+ else
+ watchable.project
+ end
+ end
def create_event
user.events.create(event_options)
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index a72c326..67ea0a0 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -22,6 +22,7 @@
class MergeRequest < ActiveRecord::Base
include ActiveMessaging::MessageSender
+ include Watchable
belongs_to :user
belongs_to :source_repository, :class_name => 'Repository'
diff --git a/app/views/merge_requests/show.html.erb b/app/views/merge_requests/show.html.erb
index 5b43913..ca58daa 100644
--- a/app/views/merge_requests/show.html.erb
+++ b/app/views/merge_requests/show.html.erb
@@ -52,6 +52,11 @@
[@merge_request.source_repository.project, @merge_request.target_repository]) -%>
</li>
<li>Created at: <%= @merge_request.created_at.to_s(:long_ordinal) -%></li>
+ <% if logged_in? %>
+ <li>
+ <%= favorite_link_to(@merge_request) -%>
+ </li>
+ <% end %>
</ul>
</div>
diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb
index c891354..d48b0b1 100644
--- a/app/views/users/show.html.erb
+++ b/app/views/users/show.html.erb
@@ -107,9 +107,8 @@
<% pull_box(favorites_heading_for(@user)) do %>
<ul class="with_icons">
<% @favorites.each do |favorite| %>
- <li class="favorite <%= favorite.class.name.downcase -%>">
- <%= link_to(repo_title(favorite, favorite.project),
- repo_owner_path(favorite, [favorite.project, favorite])) %>
+ <li class="favorite <%= favorite.class.name.underscore -%>">
+ <%= link_to_watchable(favorite) -%>
</li>
<% end %>
<p class="hint"><%= no_watchings_notice_for(@user) if @favorites.blank? %></p>
diff --git a/test/functional/favorites_controller_test.rb b/test/functional/favorites_controller_test.rb
index 8b92d77..fc58185 100644
--- a/test/functional/favorites_controller_test.rb
+++ b/test/functional/favorites_controller_test.rb
@@ -86,6 +86,25 @@ class FavoritesControllerTest < ActionController::TestCase
end
end
+ context "Watching a merge request" do
+ setup {
+ login_as :johan
+ @merge_request = merge_requests(:moes_to_johans)
+ }
+
+ should "create it" do
+ do_create_post(@merge_request.class.name, @merge_request.id,
+ {:format => "js"})
+ assert_response :created
+ end
+
+ should "destroy it" do
+ favorite = users(:johan).favorites.create(:watchable => @merge_request)
+ delete :destroy, :id => favorite, :format => "js"
+ assert_response :ok
+ end
+ end
+
context "Deleting a favorite" do
setup {
login_as :johan