Commit 28545c9fa400136c462012d8902a779b05a5d94d

Authored by Leandro Santos
Committed by Antonio Terceiro
1 parent 47295de6

Adding scraps to communities.

(ActionItem1303)
app/controllers/public/profile_controller.rb
... ... @@ -9,13 +9,11 @@ class ProfileController < PublicController
9 9  
10 10 def index
11 11 @activities = @profile.tracked_actions.paginate(:per_page => 30, :page => params[:page])
12   - @network_activities = []
13 12 @wall_items = []
14   - if !@profile.is_a?(Person)
15   - @network_activities = @profile.tracked_notifications.paginate(:per_page => 30, :page => params[:page])
16   - elsif logged_in? && current_person.follows?(@profile)
17   - @network_activities = @profile.tracked_notifications.paginate(:per_page => 30, :page => params[:page])
18   - @wall_items = @profile.scraps_received.not_replies.paginate(:per_page => 30, :page => params[:page]) if @profile.is_a?(Person)
  13 + @network_activities = !@profile.is_a?(Person) ? @profile.tracked_notifications.paginate(:per_page => 30, :page => params[:page]) : []
  14 + if logged_in? && current_person.follows?(@profile)
  15 + @network_activities = @profile.tracked_notifications.paginate(:per_page => 30, :page => params[:page]) if @network_activities.empty?
  16 + @wall_items = @profile.scraps_received.not_replies.paginate(:per_page => 30, :page => params[:page])
19 17 end
20 18 @tags = profile.article_tags
21 19 unless profile.display_info_to?(user)
... ...
app/models/person.rb
... ... @@ -17,7 +17,6 @@ class Person < Profile
17 17  
18 18 has_many :mailings
19 19  
20   - has_many :scraps_received, :class_name => 'Scrap', :foreign_key => :receiver_id, :order => "updated_at DESC"
21 20 has_many :scraps_sent, :class_name => 'Scrap', :foreign_key => :sender_id
22 21  
23 22 named_scope :more_popular,
... ... @@ -35,11 +34,6 @@ class Person < Profile
35 34 self.user.destroy if self.user
36 35 end
37 36  
38   - def scraps(scrap=nil)
39   - scrap = scrap.is_a?(Scrap) ? scrap.id : scrap
40   - scrap.nil? ? Scrap.all_scraps(self) : Scrap.all_scraps(self).find(scrap)
41   - end
42   -
43 37 def can_control_scrap?(scrap)
44 38 begin
45 39 !self.scraps(scrap).nil?
... ...
app/models/profile.rb
... ... @@ -91,12 +91,18 @@ class Profile < ActiveRecord::Base
91 91  
92 92 has_many :action_tracker_notifications, :foreign_key => 'profile_id'
93 93 has_many :tracked_notifications, :through => :action_tracker_notifications, :source => :action_tracker, :order => 'updated_at DESC'
  94 + has_many :scraps_received, :class_name => 'Scrap', :foreign_key => :receiver_id, :order => "updated_at DESC"
94 95  
95 96 # FIXME ugly workaround
96 97 def self.human_attribute_name(attrib)
97 98 _(self.superclass.human_attribute_name(attrib))
98 99 end
99 100  
  101 + def scraps(scrap=nil)
  102 + scrap = scrap.is_a?(Scrap) ? scrap.id : scrap
  103 + scrap.nil? ? Scrap.all_scraps(self) : Scrap.all_scraps(self).find(scrap)
  104 + end
  105 +
100 106 class_inheritable_accessor :extra_index_methods
101 107 self.extra_index_methods = []
102 108  
... ...
app/models/scrap.rb
... ... @@ -2,7 +2,7 @@ class Scrap < ActiveRecord::Base
2 2 validates_presence_of :content
3 3 validates_presence_of :sender_id, :receiver_id
4 4  
5   - belongs_to :receiver, :class_name => 'Person', :foreign_key => 'receiver_id'
  5 + belongs_to :receiver, :class_name => 'Profile', :foreign_key => 'receiver_id'
6 6 belongs_to :sender, :class_name => 'Person', :foreign_key => 'sender_id'
7 7 has_many :replies, :class_name => 'Scrap', :foreign_key => 'scrap_id', :dependent => :destroy
8 8 belongs_to :root, :class_name => 'Scrap', :foreign_key => 'scrap_id'
... ... @@ -11,12 +11,12 @@ class Scrap < ActiveRecord::Base
11 11  
12 12 named_scope :not_replies, :conditions => {:scrap_id => nil}
13 13  
14   - track_actions :leave_scrap, :after_create, :keep_params => ['sender.name', 'content', 'receiver.name', 'receiver.url'], :if => Proc.new{|s| s.receiver != s.sender}
  14 + track_actions :leave_scrap, :after_create, :keep_params => ['sender.name', 'content', 'receiver.name', 'receiver.url'], :if => Proc.new{|s| s.receiver != s.sender}, :custom_target => :action_tracker_target
15 15 track_actions :leave_scrap_to_self, :after_create, :keep_params => ['sender.name', 'content'], :if => Proc.new{|s| s.receiver == s.sender}
16 16  
17 17 after_create do |scrap|
18 18 scrap.root.update_attribute('updated_at', DateTime.now) unless scrap.root.nil?
19   - Scrap::Notifier.deliver_mail(scrap) unless scrap.sender == scrap.receiver
  19 + Scrap::Notifier.deliver_mail(scrap) if !scrap.receiver.is_a?(Community) && !(scrap.sender == scrap.receiver)
20 20 end
21 21  
22 22 before_validation :strip_all_html_tags
... ... @@ -26,6 +26,10 @@ class Scrap < ActiveRecord::Base
26 26 self.content = sanitizer.sanitize(self.content, :tags => [])
27 27 end
28 28  
  29 + def action_tracker_target
  30 + self.receiver.is_a?(Community) ? self.receiver : self
  31 + end
  32 +
29 33 class Notifier < ActionMailer::Base
30 34 def mail(scrap)
31 35 sender, receiver = scrap.sender, scrap.receiver
... ...
app/views/profile/_common.rhtml
1   - <% unless @action %>
2   - <% cache_timeout(profile.cache_key + '-profile-general-info', 4.hours.from_now) do %>
3   - <tr>
4   - <th colspan='2'>
5   - <%= _('Content') %>
6   - </th>
7   - </tr>
8 1  
9   - <% profile.blogs.each do |blog| %>
10   - <tr>
11   - <td><%= blog.name + ':' %></td>
12   - <td>
13   - <%= link_to(n_('One post', '%{num} posts', blog.posts.published.count) % { :num => blog.posts.published.count }, blog.url) %>
14   - </td>
15   - </tr>
16   - <% end %>
17   - <% profile.image_galleries.each do |gallery| %>
18   - <tr>
19   - <td><%= gallery.name + ':' %></td>
20   - <td>
21   - <%= link_to(n_('One picture', '%{num} pictures', gallery.images.published.count) % { :num => gallery.images.published.count }, gallery.url) %>
22   - </td>
23   - </tr>
24   - <% end %>
  2 +<script type="text/javascript">
  3 + jQuery( function() {
  4 + var parent_selector = '.profile-wall-description, .profile-activity-description, .profile-network-description';
  5 + var child_selector = '.icon-delete, .icon-reply, .icon-scrap';
  6 + jQuery(parent_selector).live('mouseover', function () { jQuery(this).find(child_selector).css('visibility', 'visible'); });
  7 + jQuery(parent_selector).live('mouseout', function () { jQuery(this).find(child_selector).css('visibility', 'hidden'); });
  8 + });
  9 +</script>
25 10  
  11 +<% unless @action %>
  12 + <% cache_timeout(profile.cache_key + '-profile-general-info', 4.hours.from_now) do %>
  13 + <tr>
  14 + <th colspan='2'>
  15 + <%= _('Content') %>
  16 + </th>
  17 + </tr>
  18 +
  19 + <% profile.blogs.each do |blog| %>
26 20 <tr>
27   - <td><%= _('Events:') %></td>
  21 + <td><%= blog.name + ':' %></td>
28 22 <td>
29   - <%= link_to profile.events.published.count, :controller => 'events', :action => 'events' %>
  23 + <%= link_to(n_('One post', '%{num} posts', blog.posts.published.count) % { :num => blog.posts.published.count }, blog.url) %>
30 24 </td>
31 25 </tr>
  26 + <% end %>
  27 + <% profile.image_galleries.each do |gallery| %>
32 28 <tr>
  29 + <td><%= gallery.name + ':' %></td>
33 30 <td>
34   - <%= _('Tags:') %>
35   - </td>
36   - <td>
37   - <%= tag_cloud @tags, :id, { :action => 'tags' }, :max_size => 18, :min_size => 10%>
  31 + <%= link_to(n_('One picture', '%{num} pictures', gallery.images.published.count) % { :num => gallery.images.published.count }, gallery.url) %>
38 32 </td>
39 33 </tr>
  34 + <% end %>
  35 +
  36 + <tr>
  37 + <td><%= _('Events:') %></td>
  38 + <td>
  39 + <%= link_to profile.events.published.count, :controller => 'events', :action => 'events' %>
  40 + </td>
  41 + </tr>
  42 + <tr>
  43 + <td>
  44 + <%= _('Tags:') %>
  45 + </td>
  46 + <td>
  47 + <%= tag_cloud @tags, :id, { :action => 'tags' }, :max_size => 18, :min_size => 10%>
  48 + </td>
  49 + </tr>
40 50  
41   - <% if !environment.enabled?('disable_categories') && !profile.interests.empty? %>
  51 + <% if !environment.enabled?('disable_categories') && !profile.interests.empty? %>
  52 + <tr>
  53 + <th colspan='2'><%= _('Interests') %></th>
  54 + </tr>
  55 + <% profile.interests.each do |item| %>
42 56 <tr>
43   - <th colspan='2'><%= _('Interests') %></th>
  57 + <td></td>
  58 + <td><%= link_to item.name, :controller => 'search', :action => 'category_index', :category_path => item.explode_path %></td>
44 59 </tr>
45   - <% profile.interests.each do |item| %>
46   - <tr>
47   - <td></td>
48   - <td><%= link_to item.name, :controller => 'search', :action => 'category_index', :category_path => item.explode_path %></td>
49   - </tr>
50   - <% end %>
51 60 <% end %>
52 61 <% end %>
53 62 <% end %>
  63 +<% end %>
... ...
app/views/profile/_organization.rhtml
... ... @@ -4,10 +4,16 @@
4 4 <div class='ui-tabs'>
5 5  
6 6 <ul>
  7 + <% if logged_in? && current_person.follows?(@profile) %>
  8 + <li class='tab'><a href='#profile-wall'><%= _('Wall') %></a></li>
  9 + <% end %>
7 10 <li class='tab'><a href='#profile-network'><%= _('What\'s new') %></a></li>
8 11 <li class='tab'><a href='#community-profile'><%= _('Profile') %></a></li>
9 12 </ul>
10 13  
  14 + <% if logged_in? && current_person.follows?(@profile) %>
  15 + <%= render :partial => 'profile_wall' %>
  16 + <% end %>
11 17 <%= render :partial => 'profile_network' %>
12 18  
13 19 <div id='community-profile'>
... ...
app/views/profile/_person.rhtml
... ... @@ -22,15 +22,6 @@
22 22 <%= render :partial => 'profile_activity' %>
23 23 <% end %>
24 24  
25   - <script type="text/javascript">
26   - jQuery( function() {
27   - var parent_selector = '.profile-wall-description, .profile-activity-description, .profile-network-description';
28   - var child_selector = '.icon-delete, .icon-reply, .icon-scrap';
29   - jQuery(parent_selector).live('mouseover', function () { jQuery(this).find(child_selector).css('visibility', 'visible'); });
30   - jQuery(parent_selector).live('mouseout', function () { jQuery(this).find(child_selector).css('visibility', 'hidden'); });
31   - });
32   - </script>
33   -
34 25 <div id='person-profile'>
35 26 <table>
36 27 <tr>
... ...
test/functional/profile_controller_test.rb
... ... @@ -769,8 +769,7 @@ class ProfileControllerTest &lt; Test::Unit::TestCase
769 769  
770 770 should 'the network activity be paginated' do
771 771 p1= Person.first
772   - at = fast_create(ActionTracker::Record)
773   - 40.times{fast_create(ActionTrackerNotification, :action_tracker_id => at.id, :profile_id => p1.id)}
  772 + 40.times{fast_create(ActionTrackerNotification, :action_tracker_id => fast_create(ActionTracker::Record), :profile_id => p1.id)}
774 773  
775 774 @controller.stubs(:logged_in?).returns(true)
776 775 user = mock()
... ... @@ -838,8 +837,7 @@ class ProfileControllerTest &lt; Test::Unit::TestCase
838 837  
839 838 should 'the network activity be paginated on communities' do
840 839 community = fast_create(Community)
841   - at = fast_create(ActionTracker::Record, :user_id => profile.id)
842   - 40.times{ fast_create(ActionTrackerNotification, :profile_id => community.id, :action_tracker_id => at.id) }
  840 + 40.times{ fast_create(ActionTrackerNotification, :profile_id => community.id, :action_tracker_id => fast_create(ActionTracker::Record, :user_id => profile.id)) }
843 841 get :index, :profile => community.identifier
844 842 assert_equal 30, assigns(:network_activities).count
845 843 end
... ... @@ -872,7 +870,7 @@ class ProfileControllerTest &lt; Test::Unit::TestCase
872 870 assert_equal [], assigns(:wall_items)
873 871 end
874 872  
875   - should 'the wall_itens be the received scraps' do
  873 + should 'the wall_itens be the received scraps in people profile' do
876 874 p1 = ActionTracker::Record.current_user_from_model
877 875 p2 = fast_create(Person)
878 876 p3 = fast_create(Person)
... ... @@ -890,7 +888,26 @@ class ProfileControllerTest &lt; Test::Unit::TestCase
890 888 assert_equal [s2,s3], assigns(:wall_items)
891 889 end
892 890  
893   - should 'the wall_itens be paginated' do
  891 + should 'the wall_itens be the received scraps in community profile' do
  892 + c = fast_create(Community)
  893 + p1 = fast_create(Person)
  894 + p2 = fast_create(Person)
  895 + p3 = fast_create(Person)
  896 + s1 = fast_create(Scrap, :sender_id => p1.id, :receiver_id => p2.id)
  897 + s2 = fast_create(Scrap, :sender_id => p2.id, :receiver_id => c.id)
  898 + s3 = fast_create(Scrap, :sender_id => p3.id, :receiver_id => c.id)
  899 +
  900 + @controller.stubs(:logged_in?).returns(true)
  901 + user = mock()
  902 + user.stubs(:person).returns(p1)
  903 + user.stubs(:login).returns('some')
  904 + @controller.stubs(:current_user).returns(user)
  905 + Person.any_instance.stubs(:follows?).returns(true)
  906 + get :index, :profile => c.identifier
  907 + assert_equal [s2,s3], assigns(:wall_items)
  908 + end
  909 +
  910 + should 'the wall_itens be paginated in people profiles' do
894 911 p1 = Person.first
895 912 40.times{fast_create(Scrap, :sender_id => p1.id)}
896 913  
... ... @@ -905,6 +922,22 @@ class ProfileControllerTest &lt; Test::Unit::TestCase
905 922 assert_equal 30, assigns(:wall_items).count
906 923 end
907 924  
  925 + should 'the wall_itens be paginated in community profiles' do
  926 + p1 = Person.first
  927 + c = fast_create(Community)
  928 + 40.times{fast_create(Scrap, :receiver_id => c.id)}
  929 +
  930 + @controller.stubs(:logged_in?).returns(true)
  931 + user = mock()
  932 + user.stubs(:person).returns(p1)
  933 + user.stubs(:login).returns('some')
  934 + @controller.stubs(:current_user).returns(user)
  935 + Person.any_instance.stubs(:follows?).returns(true)
  936 + assert_equal 40, c.scraps_received.not_replies.count
  937 + get :index, :profile => c.identifier
  938 + assert_equal 30, assigns(:wall_items).count
  939 + end
  940 +
908 941 should "the owner of activity could remove it" do
909 942 login_as(profile.identifier)
910 943 at = fast_create(ActionTracker::Record, :user_id => profile.id)
... ... @@ -993,7 +1026,7 @@ class ProfileControllerTest &lt; Test::Unit::TestCase
993 1026 assert_no_tag :tag => 'li', :attributes => {:id => "profile-activity-item-#{atn.id}"}
994 1027 end
995 1028  
996   - should "view more scraps paginate the scraps" do
  1029 + should "view more scraps paginate the scraps in people profiles" do
997 1030 login_as(profile.identifier)
998 1031 40.times{fast_create(Scrap, :receiver_id => profile.id)}
999 1032 get :view_more_scraps, :profile => profile.identifier, :page => 2
... ... @@ -1002,11 +1035,27 @@ class ProfileControllerTest &lt; Test::Unit::TestCase
1002 1035 assert_equal 10, assigns(:scraps).count
1003 1036 end
1004 1037  
1005   - should "be logged in to access the view_more_scraps action" do
  1038 + should "view more scraps paginate the scraps in community profiles" do
  1039 + login_as(profile.identifier)
  1040 + c = fast_create(Community)
  1041 + 40.times{fast_create(Scrap, :receiver_id => c.id)}
  1042 + get :view_more_scraps, :profile => c.identifier, :page => 2
  1043 + assert_response :success
  1044 + assert_template '_profile_scraps'
  1045 + assert_equal 10, assigns(:scraps).count
  1046 + end
  1047 +
  1048 + should "be logged in to access the view_more_scraps action in people profiles" do
1006 1049 get :view_more_scraps, :profile => profile.identifier
1007 1050 assert_redirected_to :controller => 'account', :action => 'login'
1008 1051 end
1009 1052  
  1053 + should "be logged in to access the view_more_scraps action in community profiles" do
  1054 + c = fast_create(Community)
  1055 + get :view_more_scraps, :profile => c.identifier
  1056 + assert_redirected_to :controller => 'account', :action => 'login'
  1057 + end
  1058 +
1010 1059 should "view more activities paginated" do
1011 1060 login_as(profile.identifier)
1012 1061 40.times{ fast_create(ActionTracker::Record, :user_id => profile.id)}
... ... @@ -1024,8 +1073,7 @@ class ProfileControllerTest &lt; Test::Unit::TestCase
1024 1073  
1025 1074 should "view more network activities paginated" do
1026 1075 login_as(profile.identifier)
1027   - at = fast_create(ActionTracker::Record, :user_id => profile.id)
1028   - 40.times{fast_create(ActionTrackerNotification, :profile_id => profile.id, :action_tracker_id => at.id) }
  1076 + 40.times{fast_create(ActionTrackerNotification, :profile_id => profile.id, :action_tracker_id => fast_create(ActionTracker::Record, :user_id => profile.id)) }
1029 1077 assert_equal 40, profile.tracked_notifications.count
1030 1078 get :view_more_network_activities, :profile => profile.identifier, :page => 2
1031 1079 assert_response :success
... ...
test/unit/action_tracker_notification_test.rb
... ... @@ -41,9 +41,9 @@ class ActionTrackerNotificationTest &lt; ActiveSupport::TestCase
41 41 should "destroy the notifications if the activity is destroyed" do
42 42 action_tracker = fast_create(ActionTracker::Record)
43 43 count = ActionTrackerNotification.count
44   - fast_create(ActionTrackerNotification, :action_tracker_id => action_tracker.id)
45   - fast_create(ActionTrackerNotification, :action_tracker_id => action_tracker.id)
46   - fast_create(ActionTrackerNotification, :action_tracker_id => action_tracker.id)
  44 + fast_create(ActionTrackerNotification, :action_tracker_id => action_tracker.id, :profile_id => 1)
  45 + fast_create(ActionTrackerNotification, :action_tracker_id => action_tracker.id, :profile_id => 2)
  46 + fast_create(ActionTrackerNotification, :action_tracker_id => action_tracker.id, :profile_id => 3)
47 47 action_tracker.destroy
48 48 assert_equal count, ActionTrackerNotification.count
49 49 end
... ...
test/unit/community_test.rb
... ... @@ -274,4 +274,48 @@ class CommunityTest &lt; Test::Unit::TestCase
274 274 end
275 275 end
276 276  
  277 + should "see get all received scraps" do
  278 + c = fast_create(Community)
  279 + assert_equal [], c.scraps_received
  280 + fast_create(Scrap, :receiver_id => c.id)
  281 + fast_create(Scrap, :receiver_id => c.id)
  282 + assert_equal 2, c.scraps_received.count
  283 + c2 = fast_create(Community)
  284 + fast_create(Scrap, :receiver_id => c2.id)
  285 + assert_equal 2, c.scraps_received.count
  286 + fast_create(Scrap, :receiver_id => c.id)
  287 + assert_equal 3, c.scraps_received.count
  288 + end
  289 +
  290 + should "see get all received scraps that are not replies" do
  291 + c = fast_create(Community)
  292 + s1 = fast_create(Scrap, :receiver_id => c.id)
  293 + s2 = fast_create(Scrap, :receiver_id => c.id)
  294 + s3 = fast_create(Scrap, :receiver_id => c.id, :scrap_id => s1.id)
  295 + assert_equal 3, c.scraps_received.count
  296 + assert_equal [s1,s2], c.scraps_received.not_replies
  297 + c2 = fast_create(Community)
  298 + s4 = fast_create(Scrap, :receiver_id => c2.id)
  299 + s5 = fast_create(Scrap, :receiver_id => c2.id, :scrap_id => s4.id)
  300 + assert_equal 2, c2.scraps_received.count
  301 + assert_equal [s4], c2.scraps_received.not_replies
  302 + end
  303 +
  304 + should "the community browse for a scrap with a Scrap object" do
  305 + c = fast_create(Community)
  306 + s1 = fast_create(Scrap, :receiver_id => c.id)
  307 + s2 = fast_create(Scrap, :receiver_id => c.id)
  308 + s3 = fast_create(Scrap, :receiver_id => c.id)
  309 + assert_equal s2, c.scraps(s2)
  310 + end
  311 +
  312 + should "the person browse for a scrap with an integer and string id" do
  313 + c = fast_create(Community)
  314 + s1 = fast_create(Scrap, :receiver_id => c.id)
  315 + s2 = fast_create(Scrap, :receiver_id => c.id)
  316 + s3 = fast_create(Scrap, :receiver_id => c.id)
  317 + assert_equal s2, c.scraps(s2.id)
  318 + assert_equal s2, c.scraps(s2.id.to_s)
  319 + end
  320 +
277 321 end
... ...
test/unit/person_test.rb
... ... @@ -777,7 +777,7 @@ class PersonTest &lt; Test::Unit::TestCase
777 777 assert_equal s2, person.scraps(s2)
778 778 end
779 779  
780   - should "the person browse for a scrap with an inter and string id" do
  780 + should "the person browse for a scrap with an integer and string id" do
781 781 person = fast_create(Person)
782 782 s1 = fast_create(Scrap, :sender_id => person.id)
783 783 s2 = fast_create(Scrap, :sender_id => person.id)
... ... @@ -918,11 +918,10 @@ class PersonTest &lt; Test::Unit::TestCase
918 918 a2 = fast_create(ActionTracker::Record, :user_id => person.id )
919 919 a3 = fast_create(ActionTracker::Record)
920 920 assert_equal 3, ActionTracker::Record.count
921   - fast_create(ActionTrackerNotification, :action_tracker_id => a1.id)
922   - fast_create(ActionTrackerNotification, :action_tracker_id => a1.id)
  921 + fast_create(ActionTrackerNotification, :action_tracker_id => a1.id, :profile_id => person.id)
923 922 fast_create(ActionTrackerNotification, :action_tracker_id => a3.id)
924   - fast_create(ActionTrackerNotification, :action_tracker_id => a2.id)
925   - assert_equal 4, ActionTrackerNotification.count
  923 + fast_create(ActionTrackerNotification, :action_tracker_id => a2.id, :profile_id => person.id)
  924 + assert_equal 3, ActionTrackerNotification.count
926 925 person.destroy
927 926 assert_equal 1, ActionTracker::Record.count
928 927 assert_equal 1, ActionTrackerNotification.count
... ...
test/unit/scrap_test.rb
... ... @@ -51,6 +51,14 @@ class ScrapTest &lt; ActiveSupport::TestCase
51 51 end
52 52 end
53 53  
  54 + should "be associated to Community as receiver" do
  55 + community = fast_create(Community)
  56 + s = Scrap.new
  57 + assert_nothing_raised do
  58 + s.receiver = community
  59 + end
  60 + end
  61 +
54 62 should "collect all scraps sent and received of a person" do
55 63 person = fast_create(Person)
56 64 s1 = fast_create(Scrap, :sender_id => person.id)
... ... @@ -61,6 +69,17 @@ class ScrapTest &lt; ActiveSupport::TestCase
61 69 assert_equal [s1,s2,s3], Scrap.all_scraps(person)
62 70 end
63 71  
  72 + should "collect all scraps sent and received of a community" do
  73 + community = fast_create(Community)
  74 + person = fast_create(Person)
  75 + s1 = fast_create(Scrap, :sender_id => person.id)
  76 + assert_equal [], Scrap.all_scraps(community)
  77 + s2 = fast_create(Scrap, :receiver_id => community.id, :sender_id => person.id)
  78 + assert_equal [s2], Scrap.all_scraps(community)
  79 + s3 = fast_create(Scrap, :receiver_id => community.id)
  80 + assert_equal [s2,s3], Scrap.all_scraps(community)
  81 + end
  82 +
64 83 should "create the leave_scrap action tracker verb on scrap creation of one user to another" do
65 84 p1 = ActionTracker::Record.current_user_from_model
66 85 p2 = fast_create(Person)
... ... @@ -78,6 +97,24 @@ class ScrapTest &lt; ActiveSupport::TestCase
78 97 assert_equal p1, ta.user
79 98 end
80 99  
  100 + should "create the leave_scrap action tracker verb on scrap creation of one user to community" do
  101 + p = Person.first
  102 + c = fast_create(Community)
  103 + s = Scrap.new
  104 + s.sender= p
  105 + s.receiver= c
  106 + s.content = 'some content'
  107 + s.save!
  108 + ta = ActionTracker::Record.last
  109 + assert_equal s.content, ta.params['content']
  110 + assert_equal s.sender.name, ta.params['sender_name']
  111 + assert_equal s.receiver.name, ta.params['receiver_name']
  112 + assert_equal s.receiver.url, ta.params['receiver_url']
  113 + assert_equal 'leave_scrap', ta.verb
  114 + assert_equal p, ta.user
  115 + assert_equal c, ta.target
  116 + end
  117 +
81 118 should "notify leave_scrap action tracker verb to friends and itself" do
82 119 p1 = ActionTracker::Record.current_user_from_model
83 120 p2 = fast_create(Person)
... ... @@ -96,6 +133,24 @@ class ScrapTest &lt; ActiveSupport::TestCase
96 133 end
97 134 end
98 135  
  136 + should "notify leave_scrap action tracker verb to members of the communities and the community itself" do
  137 + p = Person.first
  138 + c = fast_create(Community)
  139 + c.add_member(p)
  140 + ActionTrackerNotification.destroy_all
  141 + Delayed::Job.destroy_all
  142 + s = Scrap.new
  143 + s.sender= p
  144 + s.receiver= c
  145 + s.content = 'some content'
  146 + s.save!
  147 + process_delayed_job_queue
  148 + assert_equal 2, ActionTrackerNotification.count
  149 + ActionTrackerNotification.all.map{|a|a.profile}.map do |profile|
  150 + assert [p,c].include?(profile)
  151 + end
  152 + end
  153 +
99 154 should "create the leave_scrap_to_self action tracker verb on scrap creation of one user to itself" do
100 155 p1 = Person.first
101 156 s = Scrap.new
... ... @@ -194,4 +249,13 @@ class ScrapTest &lt; ActiveSupport::TestCase
194 249 assert s.valid?
195 250 end
196 251  
  252 + should 'the action_tracker_target be the community when the scraps has the community as receiver' do
  253 + scrap = Scrap.new
  254 + assert_equal scrap, scrap.action_tracker_target
  255 +
  256 + community = fast_create(Community)
  257 + scrap.receiver = community
  258 + assert_equal community, scrap.action_tracker_target
  259 + end
  260 +
197 261 end
... ...