Commit 28545c9fa400136c462012d8902a779b05a5d94d
Committed by
Antonio Terceiro
1 parent
47295de6
Exists in
master
and in
29 other branches
Adding scraps to communities.
(ActionItem1303)
Showing
12 changed files
with
243 additions
and
79 deletions
Show diff stats
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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 | ... | ... |