/spec/finders/access_requests_finder_spec.rb

https://gitlab.com/tnir/gitlab-ce · Ruby · 96 lines · 77 code · 18 blank · 1 comment · 0 complexity · d6770c3603cff27ade42b569e11c0a7e MD5 · raw file

  1. # frozen_string_literal: true
  2. require 'spec_helper'
  3. describe AccessRequestsFinder do
  4. let(:user) { create(:user) }
  5. let(:access_requester) { create(:user) }
  6. let(:project) do
  7. create(:project, :public) do |project|
  8. project.request_access(access_requester)
  9. end
  10. end
  11. let(:group) do
  12. create(:group, :public) do |group|
  13. group.request_access(access_requester)
  14. end
  15. end
  16. shared_examples 'a finder returning access requesters' do |method_name|
  17. it 'returns access requesters' do
  18. access_requesters = described_class.new(source).public_send(method_name, user)
  19. expect(access_requesters.size).to eq(1)
  20. expect(access_requesters.first).to be_a "#{source.class}Member".constantize
  21. expect(access_requesters.first.user).to eq(access_requester)
  22. end
  23. end
  24. shared_examples 'a finder returning no results' do |method_name|
  25. it 'raises Gitlab::Access::AccessDeniedError' do
  26. expect(described_class.new(source).public_send(method_name, user)).to be_empty
  27. end
  28. end
  29. shared_examples 'a finder raising Gitlab::Access::AccessDeniedError' do |method_name|
  30. it 'raises Gitlab::Access::AccessDeniedError' do
  31. expect { described_class.new(source).public_send(method_name, user) }.to raise_error(Gitlab::Access::AccessDeniedError)
  32. end
  33. end
  34. describe '#execute' do
  35. context 'when current user cannot see project access requests' do
  36. it_behaves_like 'a finder returning no results', :execute do
  37. let(:source) { project }
  38. end
  39. it_behaves_like 'a finder returning no results', :execute do
  40. let(:source) { group }
  41. end
  42. end
  43. context 'when current user can see access requests' do
  44. before do
  45. project.add_maintainer(user)
  46. group.add_owner(user)
  47. end
  48. it_behaves_like 'a finder returning access requesters', :execute do
  49. let(:source) { project }
  50. end
  51. it_behaves_like 'a finder returning access requesters', :execute do
  52. let(:source) { group }
  53. end
  54. end
  55. end
  56. describe '#execute!' do
  57. context 'when current user cannot see access requests' do
  58. it_behaves_like 'a finder raising Gitlab::Access::AccessDeniedError', :execute! do
  59. let(:source) { project }
  60. end
  61. it_behaves_like 'a finder raising Gitlab::Access::AccessDeniedError', :execute! do
  62. let(:source) { group }
  63. end
  64. end
  65. context 'when current user can see access requests' do
  66. before do
  67. project.add_maintainer(user)
  68. group.add_owner(user)
  69. end
  70. it_behaves_like 'a finder returning access requesters', :execute! do
  71. let(:source) { project }
  72. end
  73. it_behaves_like 'a finder returning access requesters', :execute! do
  74. let(:source) { group }
  75. end
  76. end
  77. end
  78. end