Skip to content

Commit 7d89f3d

Browse files
committed
Fixed curators + admins etc. appearing as "approved editors"
1 parent 6b7b06b commit 7d89f3d

2 files changed

Lines changed: 47 additions & 8 deletions

File tree

app/models/user.rb

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -288,15 +288,12 @@ def created_resources
288288
end
289289

290290
def get_editable_providers
291-
result = self.editables
292-
ContentProvider.all.each do |prov|
293-
if !result.include?(prov)
294-
if prov.user == self or self.is_admin? or self.is_curator?
295-
result << prov
296-
end
297-
end
291+
relation = ContentProvider.order(:title)
292+
if is_admin? || is_curator?
293+
relation.all
294+
else
295+
relation.find(content_provider_ids | editable_ids)
298296
end
299-
result.sort_by { |obj| obj.title }
300297
end
301298

302299
def get_inviter

test/models/editor_test.rb

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,4 +215,46 @@ class EditorTest < ActiveSupport::TestCase
215215
assert_equal trainer, another_event.user
216216
assert_equal provider.user, event.user
217217
end
218+
219+
test 'get_editable_providers' do
220+
curator = users(:curator)
221+
admin = users(:admin)
222+
owner = users(:another_regular_user)
223+
editor = users(:collaborative_user)
224+
provider = content_providers(:goblet)
225+
provider2 = content_providers(:iann)
226+
provider3 = owner.content_providers.create!(title: 'Something', url: 'https://website.internet')
227+
provider.editors << editor
228+
229+
# Curator
230+
assert_includes curator.get_editable_providers, provider
231+
assert_includes curator.get_editable_providers, provider2
232+
assert_includes curator.get_editable_providers, provider3
233+
234+
# Admin
235+
assert_includes admin.get_editable_providers, provider
236+
assert_includes admin.get_editable_providers, provider2
237+
assert_includes admin.get_editable_providers, provider3
238+
239+
# ContentProvider owner
240+
assert_not_includes owner.get_editable_providers, provider
241+
assert_not_includes owner.get_editable_providers, provider2
242+
assert_includes owner.get_editable_providers, provider3
243+
244+
# Editor
245+
assert_includes editor.get_editable_providers, provider
246+
assert_not_includes editor.get_editable_providers, provider2
247+
assert_not_includes editor.get_editable_providers, provider3
248+
end
249+
250+
test 'get_editable_providers should not create records as a side-effect' do
251+
provider = content_providers(:goblet)
252+
curator = users(:curator)
253+
254+
assert_empty provider.editors
255+
assert_no_difference(-> { provider.editors.count }) do
256+
assert_includes curator.get_editable_providers, provider
257+
end
258+
assert_empty provider.reload.editors
259+
end
218260
end

0 commit comments

Comments
 (0)