diff options
Diffstat (limited to 'spec/graphql/types/project_type_spec.rb')
-rw-r--r-- | spec/graphql/types/project_type_spec.rb | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/spec/graphql/types/project_type_spec.rb b/spec/graphql/types/project_type_spec.rb index f6e178f5b28..96201f0827f 100644 --- a/spec/graphql/types/project_type_spec.rb +++ b/spec/graphql/types/project_type_spec.rb @@ -42,7 +42,7 @@ RSpec.describe GitlabSchema.types['Project'], feature_category: :groups_and_proj timelog_categories fork_targets branch_rules ci_config_variables pipeline_schedules languages incident_management_timeline_event_tags visible_forks inherited_ci_variables autocomplete_users ci_cd_settings detailed_import_status value_streams ml_models - allows_multiple_merge_request_assignees allows_multiple_merge_request_reviewers + allows_multiple_merge_request_assignees allows_multiple_merge_request_reviewers is_forked ] expect(described_class).to include_graphql_fields(*expected_fields) @@ -771,6 +771,57 @@ RSpec.describe GitlabSchema.types['Project'], feature_category: :groups_and_proj end end + describe 'is_forked' do + let_it_be(:user) { create(:user) } + let_it_be(:unforked_project) { create(:project, :public) } + let!(:forked_project) { fork_project(unforked_project) } + let(:project) { nil } + + let(:query) do + %( + query { + project(fullPath: "#{project.full_path}") { + isForked + } + } + ) + end + + let(:response) { GitlabSchema.execute(query).as_json } + + subject(:is_forked) { response.dig('data', 'project', 'isForked') } + + context 'when project has a fork network' do + context 'when fork is itself' do + let(:project) { unforked_project } + + it { is_expected.to be false } + end + + context 'when fork is not itself' do + let(:project) { forked_project } + + it { is_expected.to be true } + + it 'avoids N+1 queries' do + query_count = ActiveRecord::QueryRecorder.new { response } + + expect(query_count).not_to exceed_query_limit(8) + end + end + end + + context 'when project does not have a fork network' do + let(:project) { unforked_project } + + before do + allow(project).to receive(:fork_network).and_return(nil) + end + + it { is_expected.to be false } + end + end + describe 'branch_rules' do let_it_be(:user) { create(:user) } let_it_be(:project, reload: true) { create(:project, :public) } |