diff options
Diffstat (limited to 'spec/lib/api/entities/basic_project_details_spec.rb')
-rw-r--r-- | spec/lib/api/entities/basic_project_details_spec.rb | 47 |
1 files changed, 42 insertions, 5 deletions
diff --git a/spec/lib/api/entities/basic_project_details_spec.rb b/spec/lib/api/entities/basic_project_details_spec.rb index 8419eb0a932..425252ea315 100644 --- a/spec/lib/api/entities/basic_project_details_spec.rb +++ b/spec/lib/api/entities/basic_project_details_spec.rb @@ -2,14 +2,16 @@ require 'spec_helper' -RSpec.describe API::Entities::BasicProjectDetails do - let_it_be(:project) { create(:project) } - - let(:current_user) { project.first_owner } +RSpec.describe API::Entities::BasicProjectDetails, feature_category: :api do + let_it_be(:project_with_repository_restriction) { create(:project, :public, :repository_private) } + let(:member_user) { project_with_repository_restriction.first_owner } subject(:output) { described_class.new(project, current_user: current_user).as_json } describe '#default_branch' do + let(:current_user) { member_user } + let(:project) { project_with_repository_restriction } + it 'delegates to Project#default_branch_or_main' do expect(project).to receive(:default_branch_or_main).twice.and_call_original @@ -20,7 +22,42 @@ RSpec.describe API::Entities::BasicProjectDetails do let(:current_user) { nil } it 'is not included' do - expect(output.keys).not_to include(:default_branch) + expect(output).not_to include(:default_branch) + end + end + end + + describe '#readme_url #forks_count' do + using RSpec::Parameterized::TableSyntax + let_it_be(:non_member_user) { create(:user) } # Creates a fresh user that is why it is not the member of the project + + context 'public project with repository is accessible by the user' do + let_it_be(:project_without_restriction) { create(:project, :public) } + + where(:current_user, :project) do + ref(:member_user) | ref(:project_without_restriction) + ref(:non_member_user) | ref(:project_without_restriction) + nil | ref(:project_without_restriction) + ref(:member_user) | ref(:project_with_repository_restriction) + end + + with_them do + it 'exposes readme_url and forks_count' do + expect(output).to include readme_url: project.readme_url, forks_count: project.forks_count + end + end + end + + context 'public project with repository is not accessible by the user' do + where(:current_user, :project) do + ref(:non_member_user) | ref(:project_with_repository_restriction) + nil | ref(:project_with_repository_restriction) + end + + with_them do + it 'does not expose readme_url and forks_count' do + expect(output).not_to include :readme_url, :forks_count + end end end end |