Commit 8e1ebf5b8a87dc8a8ad3f976ebfdc33c8cb967d4

Authored by Leandro Santos
1 parent f1587a22
Exists in fix_sign_up_form

adding more unit tests for activities api endpoint

Showing 2 changed files with 66 additions and 13 deletions   Show diff stats
app/api/entities.rb
@@ -296,6 +296,8 @@ module Api @@ -296,6 +296,8 @@ module Api
296 class Activity < Entity 296 class Activity < Entity
297 root 'activities', 'activity' 297 root 'activities', 'activity'
298 expose :id, :created_at, :updated_at 298 expose :id, :created_at, :updated_at
  299 + expose :user, :using => Profile
  300 +
299 expose :target do |activity, opts| 301 expose :target do |activity, opts|
300 type_map = {Profile => ::Profile, ArticleBase => ::Article}.find {|h| activity.target.kind_of?(h.last)} 302 type_map = {Profile => ::Profile, ArticleBase => ::Article}.find {|h| activity.target.kind_of?(h.last)}
301 type_map.first.represent(activity.target) unless type_map.nil? 303 type_map.first.represent(activity.target) unless type_map.nil?
@@ -303,12 +305,9 @@ module Api @@ -303,12 +305,9 @@ module Api
303 expose :params, :if => lambda { |activity, options| activity.kind_of?(ActionTracker::Record)} 305 expose :params, :if => lambda { |activity, options| activity.kind_of?(ActionTracker::Record)}
304 expose :content, :if => lambda { |activity, options| activity.kind_of?(Scrap)} 306 expose :content, :if => lambda { |activity, options| activity.kind_of?(Scrap)}
305 expose :verb do |activity, options| 307 expose :verb do |activity, options|
306 - activity.kind_of?(Scrap) ? 'scrap' : activity.verb 308 + activity.kind_of?(Scrap) ? 'leave_scrap' : activity.verb
307 end 309 end
308 310
309 - expose :user, :using => Profile# do |activity, opts|  
310 -# activity.kind_of?(Scrap) ? activity.sender : activity.user  
311 -# end  
312 end 311 end
313 312
314 class Role < Entity 313 class Role < Entity
test/api/activities_test.rb
@@ -8,7 +8,7 @@ class ActivitiesTest &lt; ActiveSupport::TestCase @@ -8,7 +8,7 @@ class ActivitiesTest &lt; ActiveSupport::TestCase
8 end 8 end
9 9
10 should 'get own activities' do 10 should 'get own activities' do
11 - create_activity(person) 11 + create_activity(:target => person)
12 12
13 get "/api/v1/profiles/#{person.id}/activities?#{params.to_query}" 13 get "/api/v1/profiles/#{person.id}/activities?#{params.to_query}"
14 json = JSON.parse(last_response.body) 14 json = JSON.parse(last_response.body)
@@ -19,7 +19,7 @@ class ActivitiesTest &lt; ActiveSupport::TestCase @@ -19,7 +19,7 @@ class ActivitiesTest &lt; ActiveSupport::TestCase
19 19
20 should 'not get private community activities' do 20 should 'not get private community activities' do
21 community = fast_create(Community, :public_profile => false) 21 community = fast_create(Community, :public_profile => false)
22 - create_activity(community) 22 + create_activity(:target => community)
23 23
24 get "/api/v1/profiles/#{community.id}/activities?#{params.to_query}" 24 get "/api/v1/profiles/#{community.id}/activities?#{params.to_query}"
25 json = JSON.parse(last_response.body) 25 json = JSON.parse(last_response.body)
@@ -40,7 +40,7 @@ class ActivitiesTest &lt; ActiveSupport::TestCase @@ -40,7 +40,7 @@ class ActivitiesTest &lt; ActiveSupport::TestCase
40 40
41 should 'get community activities for member' do 41 should 'get community activities for member' do
42 community = fast_create(Community) 42 community = fast_create(Community)
43 - create_activity(community) 43 + create_activity(:target => community)
44 community.add_member(person) 44 community.add_member(person)
45 45
46 get "/api/v1/profiles/#{community.id}/activities?#{params.to_query}" 46 get "/api/v1/profiles/#{community.id}/activities?#{params.to_query}"
@@ -50,7 +50,7 @@ class ActivitiesTest &lt; ActiveSupport::TestCase @@ -50,7 +50,7 @@ class ActivitiesTest &lt; ActiveSupport::TestCase
50 50
51 should 'not get other person activities' do 51 should 'not get other person activities' do
52 other_person = fast_create(Person) 52 other_person = fast_create(Person)
53 - create_activity(other_person) 53 + create_activity(:target => other_person)
54 54
55 get "/api/v1/profiles/#{other_person.id}/activities?#{params.to_query}" 55 get "/api/v1/profiles/#{other_person.id}/activities?#{params.to_query}"
56 json = JSON.parse(last_response.body) 56 json = JSON.parse(last_response.body)
@@ -61,7 +61,7 @@ class ActivitiesTest &lt; ActiveSupport::TestCase @@ -61,7 +61,7 @@ class ActivitiesTest &lt; ActiveSupport::TestCase
61 should 'get friend activities' do 61 should 'get friend activities' do
62 other_person = fast_create(Person) 62 other_person = fast_create(Person)
63 other_person.add_friend(person) 63 other_person.add_friend(person)
64 - create_activity(other_person) 64 + create_activity(:target => other_person)
65 65
66 get "/api/v1/profiles/#{other_person.id}/activities?#{params.to_query}" 66 get "/api/v1/profiles/#{other_person.id}/activities?#{params.to_query}"
67 json = JSON.parse(last_response.body) 67 json = JSON.parse(last_response.body)
@@ -70,16 +70,70 @@ class ActivitiesTest &lt; ActiveSupport::TestCase @@ -70,16 +70,70 @@ class ActivitiesTest &lt; ActiveSupport::TestCase
70 70
71 should 'get activities for non logged user in a public community' do 71 should 'get activities for non logged user in a public community' do
72 community = fast_create(Community) 72 community = fast_create(Community)
73 - create_activity(community) 73 + create_activity(:target => community)
74 community.add_member(person) 74 community.add_member(person)
75 get "/api/v1/profiles/#{community.id}/activities?#{params.to_query}" 75 get "/api/v1/profiles/#{community.id}/activities?#{params.to_query}"
76 json = JSON.parse(last_response.body) 76 json = JSON.parse(last_response.body)
77 assert_equivalent community.activities.map(&:activity).map(&:id), json["activities"].map{|c| c["id"]} 77 assert_equivalent community.activities.map(&:activity).map(&:id), json["activities"].map{|c| c["id"]}
78 end 78 end
79 79
80 - def create_activity(target)  
81 - activity = ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => target  
82 - ProfileActivity.create! profile_id: target.id, activity: activity 80 + should 'not crash api if an scrap activity is in the list' do
  81 + create_activity(:target => person)
  82 + create(Scrap, :sender_id => person.id, :receiver_id => person.id)
  83 +
  84 + assert_nothing_raised NoMethodError do
  85 + get "/api/v1/profiles/#{person.id}/activities?#{params.to_query}"
  86 + end
  87 + end
  88 +
  89 + should 'scrap activity be returned in acitivities list' do
  90 + create_activity(:target => person)
  91 + create(Scrap, :sender_id => person.id, :receiver_id => person.id)
  92 +
  93 + get "/api/v1/profiles/#{person.id}/activities?#{params.to_query}"
  94 + json = JSON.parse(last_response.body)
  95 +
  96 + assert_equivalent person.activities.map(&:activity).map(&:id), json["activities"].map{|c| c["id"]}
  97 + end
  98 +
  99 + should 'always return the activity verb parameter' do
  100 + ActionTracker::Record.destroy_all
  101 + ProfileActivity.destroy_all
  102 + create_activity(:target => person)
  103 + get "/api/v1/profiles/#{person.id}/activities?#{params.to_query}"
  104 + json = JSON.parse(last_response.body)
  105 + assert_equal 'create_article', json["activities"].last['verb']
  106 + end
  107 +
  108 + should 'scrap activity return leave_scrap verb' do
  109 + ActionTracker::Record.destroy_all
  110 + create(TinyMceArticle, :name => 'Tracked Article 1', :profile_id => person.id)
  111 + create(Scrap, :sender_id => person.id, :receiver_id => person.id)
  112 + get "/api/v1/profiles/#{person.id}/activities?#{params.to_query}"
  113 + json = JSON.parse(last_response.body)
  114 + assert_equivalent ['create_article', 'leave_scrap'], json["activities"].map{|a|a['verb']}
  115 + end
  116 +
  117 + should 'the content be returned in scrap activities' do
  118 + ActionTracker::Record.destroy_all
  119 + content = 'some content'
  120 + create(Scrap, :sender_id => person.id, :receiver_id => person.id, :content => content)
  121 + get "/api/v1/profiles/#{person.id}/activities?#{params.to_query}"
  122 + json = JSON.parse(last_response.body)
  123 + assert_equal content, json["activities"].last['content']
  124 + end
  125 +
  126 + should 'not return the content in other kind of activities except scrap' do
  127 + ActionTracker::Record.destroy_all
  128 + create_activity(:target => person)
  129 + get "/api/v1/profiles/#{person.id}/activities?#{params.to_query}"
  130 + json = JSON.parse(last_response.body)
  131 + assert_nil json["activities"].last['content']
  132 + end
  133 +
  134 + def create_activity(params = {})
  135 + params[:verb] ||= 'create_article'
  136 + ActionTracker::Record.create! :verb => params[:verb], :user => person, :target => params[:target]
83 end 137 end
84 138
85 end 139 end