Commit 06c36ffd7e9d48f97ed49570201029a1c7beabad
1 parent
27f11bf7
Exists in
send_email_to_admins
and in
5 other branches
Adds delete endpoint to profiles API
Showing
2 changed files
with
61 additions
and
0 deletions
Show diff stats
lib/noosfero/api/v1/profiles.rb
| ... | ... | @@ -19,6 +19,19 @@ module Noosfero |
| 19 | 19 | profile = profiles.find_by id: params[:id] |
| 20 | 20 | present profile, :with => Entities::Profile, :current_person => current_person |
| 21 | 21 | end |
| 22 | + | |
| 23 | + delete ':id' do | |
| 24 | + profiles = environment.profiles | |
| 25 | + profile = profiles.find_by id: params[:id] | |
| 26 | + | |
| 27 | + not_found! if profile.blank? | |
| 28 | + | |
| 29 | + if current_person.has_permission?(:destroy_profile, profile) | |
| 30 | + profile.destroy | |
| 31 | + else | |
| 32 | + forbidden! | |
| 33 | + end | |
| 34 | + end | |
| 22 | 35 | end |
| 23 | 36 | end |
| 24 | 37 | end | ... | ... |
test/api/profiles_test.rb
| ... | ... | @@ -29,4 +29,52 @@ class ProfilesTest < ActiveSupport::TestCase |
| 29 | 29 | json = JSON.parse(last_response.body) |
| 30 | 30 | assert_equal community.id, json['id'] |
| 31 | 31 | end |
| 32 | + | |
| 33 | + group_kinds = %w(community enterprise) | |
| 34 | + group_kinds.each do |kind| | |
| 35 | + should "delete #{kind} from profile id with permission" do | |
| 36 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
| 37 | + give_permission(@person, 'destroy_profile', profile) | |
| 38 | + assert_not_nil Profile.find_by_id profile.id | |
| 39 | + | |
| 40 | + delete "/api/v1/profiles/#{profile.id}?#{params.to_query}" | |
| 41 | + | |
| 42 | + assert_equal 200, last_response.status | |
| 43 | + assert_nil Profile.find_by_id profile.id | |
| 44 | + end | |
| 45 | + | |
| 46 | + should "not delete #{kind} from profile id without permission" do | |
| 47 | + profile = fast_create(kind.camelcase.constantize, :environment_id => environment.id) | |
| 48 | + assert_not_nil Profile.find_by_id profile.id | |
| 49 | + | |
| 50 | + delete "/api/v1/profiles/#{profile.id}?#{params.to_query}" | |
| 51 | + | |
| 52 | + assert_equal 403, last_response.status | |
| 53 | + assert_not_nil Profile.find_by_id profile.id | |
| 54 | + end | |
| 55 | + end | |
| 56 | + | |
| 57 | + should 'person delete itself' do | |
| 58 | + delete "/api/v1/profiles/#{@person.id}?#{params.to_query}" | |
| 59 | + assert_equal 200, last_response.status | |
| 60 | + assert_nil Profile.find_by_id @person.id | |
| 61 | + end | |
| 62 | + | |
| 63 | + should 'only admin delete other people' do | |
| 64 | + profile = fast_create(Person, :environment_id => environment.id) | |
| 65 | + assert_not_nil Profile.find_by_id profile.id | |
| 66 | + | |
| 67 | + delete "/api/v1/profiles/#{profile.id}?#{params.to_query}" | |
| 68 | + | |
| 69 | + assert_equal 403, last_response.status | |
| 70 | + assert_not_nil Profile.find_by_id profile.id | |
| 71 | + | |
| 72 | + environment.add_admin(@person) | |
| 73 | + | |
| 74 | + delete "/api/v1/profiles/#{profile.id}?#{params.to_query}" | |
| 75 | + | |
| 76 | + assert_equal 200, last_response.status | |
| 77 | + assert_nil Profile.find_by_id profile.id | |
| 78 | + | |
| 79 | + end | |
| 32 | 80 | end | ... | ... |
-
mentioned in commit f80df4d26ee4368a1329da228d7ee2453f64afa1