[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