From 50a9212c76f69da2b7ca5cc351b61542c4f7baf4 Mon Sep 17 00:00:00 2001 From: Oren Kanner Date: Sun, 6 Oct 2019 15:48:48 -0400 Subject: [PATCH] Allow admins to administer personal snippets --- app/policies/personal_snippet_policy.rb | 2 +- .../unreleased/26380-personal-snippets.yml | 5 ++++ .../snippets/user_deletes_snippet_spec.rb | 29 +++++++++++++++---- spec/policies/personal_snippet_policy_spec.rb | 6 ++-- 4 files changed, 32 insertions(+), 10 deletions(-) create mode 100644 changelogs/unreleased/26380-personal-snippets.yml diff --git a/app/policies/personal_snippet_policy.rb b/app/policies/personal_snippet_policy.rb index 40dd49b4afd829..d5f49b900f1d75 100644 --- a/app/policies/personal_snippet_policy.rb +++ b/app/policies/personal_snippet_policy.rb @@ -2,7 +2,7 @@ class PersonalSnippetPolicy < BasePolicy condition(:public_snippet, scope: :subject) { @subject.public? } - condition(:is_author) { @user && @subject.author == @user } + condition(:is_author) { @user && (@subject.author == @user || @user.admin?) } condition(:internal_snippet, scope: :subject) { @subject.internal? } rule { public_snippet }.policy do diff --git a/changelogs/unreleased/26380-personal-snippets.yml b/changelogs/unreleased/26380-personal-snippets.yml new file mode 100644 index 00000000000000..60426961e92f4d --- /dev/null +++ b/changelogs/unreleased/26380-personal-snippets.yml @@ -0,0 +1,5 @@ +--- +title: Allow admins to administer personal snippets +merge_request: +author: Oren Kanner +type: fixed diff --git a/spec/features/snippets/user_deletes_snippet_spec.rb b/spec/features/snippets/user_deletes_snippet_spec.rb index 217419a220a075..b153ffdc315bee 100644 --- a/spec/features/snippets/user_deletes_snippet_spec.rb +++ b/spec/features/snippets/user_deletes_snippet_spec.rb @@ -4,18 +4,35 @@ describe 'User deletes snippet' do let(:user) { create(:user) } + let(:admin) { create(:admin) } let(:content) { 'puts "test"' } let(:snippet) { create(:personal_snippet, :public, content: content, author: user) } - before do - sign_in(user) + context 'as author' do + before do + sign_in(user) - visit snippet_path(snippet) + visit snippet_path(snippet) + end + + it 'deletes the snippet' do + first(:link, 'Delete').click + + expect(page).not_to have_content(snippet.title) + end end - it 'deletes the snippet' do - first(:link, 'Delete').click + context 'as admin' do + before do + sign_in(admin) + + visit snippet_path(snippet) + end + + it 'deletes the snippet' do + first(:link, 'Delete').click - expect(page).not_to have_content(snippet.title) + expect(page).not_to have_content(snippet.title) + end end end diff --git a/spec/policies/personal_snippet_policy_spec.rb b/spec/policies/personal_snippet_policy_spec.rb index 097000ceb6a4d9..418848525c1ea6 100644 --- a/spec/policies/personal_snippet_policy_spec.rb +++ b/spec/policies/personal_snippet_policy_spec.rb @@ -133,9 +133,9 @@ def permissions(user) it do is_expected.to be_allowed(:read_personal_snippet) - is_expected.to be_disallowed(:create_note) - is_expected.to be_disallowed(:award_emoji) - is_expected.to be_disallowed(*author_permissions) + is_expected.to be_allowed(:create_note) + is_expected.to be_allowed(:award_emoji) + is_expected.to be_allowed(*author_permissions) end end -- GitLab