[Git][noosfero/noosfero][master] 2 commits: api: add/remove friend endpoint

Victor Costa gitlab at mg.gitlab.com
Thu Mar 23 12:54:00 BRT 2017


Victor Costa pushed to branch master at Noosfero / noosfero


Commits:
c827f4f8 by Josafá Souza Jr at 2017-03-23T15:53:50+00:00
api: add/remove friend endpoint

- - - - -
1c18761c by Victor Costa at 2017-03-23T15:53:50+00:00
Merge branch 'add-friend-button' into 'master'

api: add/remove friend endpoint

See merge request !1146
- - - - -


2 changed files:

- app/api/v1/people.rb
- test/api/people_test.rb


Changes:

=====================================
app/api/v1/people.rb
=====================================
--- a/app/api/v1/people.rb
+++ b/app/api/v1/people.rb
@@ -93,6 +93,42 @@ module Api
           present_partial friends, :with => Entities::Person, :current_person => current_person
         end
 
+        desc "Return the person friend by id"
+        get ':id/friends/:friend_id' do
+          person = environment.people.visible.find_by(id: params[:id])
+          friend = person.friends.visible.find_by(id: params[:friend_id])
+          return not_found! if friend.blank?
+          present(friend, :with => Entities::Person, :current_person => current_person)
+        end
+
+        desc "Add a new friend"
+        post ':id/friends' do
+          authenticate!
+          person = environment.people.visible.find_by(id: params[:id])
+          return not_found! if person.blank?
+          return bad_request!(('You are already a friend of %s.').html_safe % person.name) if current_person.memberships.include?(person)
+          add_friend = AddFriend.new(:person => current_person, :friend => person)
+          begin
+            add_friend.save!
+            present({ message: 'WAITING_APPROVAL' })            
+          rescue ActiveRecord::RecordInvalid
+            render_api_error!(add_friend.errors.details, Api::Status::BAD_REQUEST)
+          end
+        end
+
+        desc "Remove a friend"
+        delete ':id/friends' do
+          authenticate!
+          person = environment.people.visible.find_by(id: params[:id])
+          return not_found! if person.blank?
+          begin
+            current_person.remove_friend(person);
+            present({ message: 'Friend successfuly removed' })            
+          rescue ActiveRecord::RecordInvalid
+            bad_request!
+          end
+        end
+
         desc "Return the person permissions on other profiles"
         get ":id/permissions" do
           authenticate!


=====================================
test/api/people_test.rb
=====================================
--- a/test/api/people_test.rb
+++ b/test/api/people_test.rb
@@ -633,6 +633,36 @@ class PeopleTest < ActiveSupport::TestCase
     assert_equal 3, json['count']
   end
 
+  should 'add a new person friend' do
+    login_api
+    friend = create_user('friend').person
+    person.add_friend(friend)
+    friend.add_friend(person)
+    post "/api/v1/people/#{friend.id}/friends?#{params.to_query}"
+    json = JSON.parse(last_response.body)
+    assert_equal json['message'], 'WAITING_APPROVAL'
+  end
+  
+  should 'remove person friend' do
+    login_api
+    friend = fast_create(Person)
+    person.add_friend(friend)
+    friend.add_friend(person)
+    delete "/api/v1/people/#{friend.id}/friends?#{params.to_query}"
+    json = JSON.parse(last_response.body)
+    assert_equal json['message'], "Friend successfuly removed"
+  end  
+
+  should 'list a person friend' do
+    login_api
+    friend = fast_create(Person)
+    person.add_friend(friend)
+    friend.add_friend(person)
+    get "/api/v1/people/#{friend.id}/friends/#{person.id}?#{params.to_query}"
+    json = JSON.parse(last_response.body)
+    assert_equal json['id'], person.id
+  end  
+  
   #####
   
   ATTRIBUTES = [:email, :country, :state, :city, :nationality, :formation, :schooling]



View it on GitLab: https://gitlab.com/noosfero/noosfero/compare/b773897f59460343b807bdea217fbe7f670d75f5...1c18761c95bb95c3458dcf699e50a0f39a2d7b36
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.softwarelivre.org/pipermail/noosfero-dev/attachments/20170323/b8cc895c/attachment-0001.html>


More information about the Noosfero-dev mailing list