diff --git a/app/api/entities.rb b/app/api/entities.rb index 984ee04..6227b84 100644 --- a/app/api/entities.rb +++ b/app/api/entities.rb @@ -296,6 +296,8 @@ module Api class Activity < Entity root 'activities', 'activity' expose :id, :created_at, :updated_at + expose :user, :using => Profile + expose :target do |activity, opts| type_map = {Profile => ::Profile, ArticleBase => ::Article}.find {|h| activity.target.kind_of?(h.last)} type_map.first.represent(activity.target) unless type_map.nil? @@ -303,12 +305,9 @@ module Api expose :params, :if => lambda { |activity, options| activity.kind_of?(ActionTracker::Record)} expose :content, :if => lambda { |activity, options| activity.kind_of?(Scrap)} expose :verb do |activity, options| - activity.kind_of?(Scrap) ? 'scrap' : activity.verb + activity.kind_of?(Scrap) ? 'leave_scrap' : activity.verb end - expose :user, :using => Profile# do |activity, opts| -# activity.kind_of?(Scrap) ? activity.sender : activity.user -# end end class Role < Entity diff --git a/test/api/activities_test.rb b/test/api/activities_test.rb index eaf89ee..4b0d983 100644 --- a/test/api/activities_test.rb +++ b/test/api/activities_test.rb @@ -8,7 +8,7 @@ class ActivitiesTest < ActiveSupport::TestCase end should 'get own activities' do - create_activity(person) + create_activity(:target => person) get "/api/v1/profiles/#{person.id}/activities?#{params.to_query}" json = JSON.parse(last_response.body) @@ -19,7 +19,7 @@ class ActivitiesTest < ActiveSupport::TestCase should 'not get private community activities' do community = fast_create(Community, :public_profile => false) - create_activity(community) + create_activity(:target => community) get "/api/v1/profiles/#{community.id}/activities?#{params.to_query}" json = JSON.parse(last_response.body) @@ -40,7 +40,7 @@ class ActivitiesTest < ActiveSupport::TestCase should 'get community activities for member' do community = fast_create(Community) - create_activity(community) + create_activity(:target => community) community.add_member(person) get "/api/v1/profiles/#{community.id}/activities?#{params.to_query}" @@ -50,7 +50,7 @@ class ActivitiesTest < ActiveSupport::TestCase should 'not get other person activities' do other_person = fast_create(Person) - create_activity(other_person) + create_activity(:target => other_person) get "/api/v1/profiles/#{other_person.id}/activities?#{params.to_query}" json = JSON.parse(last_response.body) @@ -61,7 +61,7 @@ class ActivitiesTest < ActiveSupport::TestCase should 'get friend activities' do other_person = fast_create(Person) other_person.add_friend(person) - create_activity(other_person) + create_activity(:target => other_person) get "/api/v1/profiles/#{other_person.id}/activities?#{params.to_query}" json = JSON.parse(last_response.body) @@ -70,16 +70,70 @@ class ActivitiesTest < ActiveSupport::TestCase should 'get activities for non logged user in a public community' do community = fast_create(Community) - create_activity(community) + create_activity(:target => community) community.add_member(person) get "/api/v1/profiles/#{community.id}/activities?#{params.to_query}" json = JSON.parse(last_response.body) assert_equivalent community.activities.map(&:activity).map(&:id), json["activities"].map{|c| c["id"]} end - def create_activity(target) - activity = ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => target - ProfileActivity.create! profile_id: target.id, activity: activity + should 'not crash api if an scrap activity is in the list' do + create_activity(:target => person) + create(Scrap, :sender_id => person.id, :receiver_id => person.id) + + assert_nothing_raised NoMethodError do + get "/api/v1/profiles/#{person.id}/activities?#{params.to_query}" + end + end + + should 'scrap activity be returned in acitivities list' do + create_activity(:target => person) + create(Scrap, :sender_id => person.id, :receiver_id => person.id) + + get "/api/v1/profiles/#{person.id}/activities?#{params.to_query}" + json = JSON.parse(last_response.body) + + assert_equivalent person.activities.map(&:activity).map(&:id), json["activities"].map{|c| c["id"]} + end + + should 'always return the activity verb parameter' do + ActionTracker::Record.destroy_all + ProfileActivity.destroy_all + create_activity(:target => person) + get "/api/v1/profiles/#{person.id}/activities?#{params.to_query}" + json = JSON.parse(last_response.body) + assert_equal 'create_article', json["activities"].last['verb'] + end + + should 'scrap activity return leave_scrap verb' do + ActionTracker::Record.destroy_all + create(TinyMceArticle, :name => 'Tracked Article 1', :profile_id => person.id) + create(Scrap, :sender_id => person.id, :receiver_id => person.id) + get "/api/v1/profiles/#{person.id}/activities?#{params.to_query}" + json = JSON.parse(last_response.body) + assert_equivalent ['create_article', 'leave_scrap'], json["activities"].map{|a|a['verb']} + end + + should 'the content be returned in scrap activities' do + ActionTracker::Record.destroy_all + content = 'some content' + create(Scrap, :sender_id => person.id, :receiver_id => person.id, :content => content) + get "/api/v1/profiles/#{person.id}/activities?#{params.to_query}" + json = JSON.parse(last_response.body) + assert_equal content, json["activities"].last['content'] + end + + should 'not return the content in other kind of activities except scrap' do + ActionTracker::Record.destroy_all + create_activity(:target => person) + get "/api/v1/profiles/#{person.id}/activities?#{params.to_query}" + json = JSON.parse(last_response.body) + assert_nil json["activities"].last['content'] + end + + def create_activity(params = {}) + params[:verb] ||= 'create_article' + ActionTracker::Record.create! :verb => params[:verb], :user => person, :target => params[:target] end end -- libgit2 0.21.2