diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-09-12 03:13:31 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-09-12 03:13:31 +0000 |
commit | 721529ce185614db20618132eae45dc4aa3d9921 (patch) | |
tree | ffeb84f02cf42898e9a7dbd36ff474e43fc98890 /spec | |
parent | ec14b0b4f853fdb94b0b3fe720a8d8440b2e77eb (diff) | |
download | gitlab-ce-721529ce185614db20618132eae45dc4aa3d9921.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/helpers/projects/pages_helper_spec.rb | 68 | ||||
-rw-r--r-- | spec/lib/gitlab/github_import/importer/events/changed_assignee_spec.rb | 11 | ||||
-rw-r--r-- | spec/lib/gitlab/github_import/representation/issue_event_spec.rb | 16 | ||||
-rw-r--r-- | spec/lib/gitlab/github_import/user_finder_spec.rb | 6 | ||||
-rw-r--r-- | spec/models/application_setting_spec.rb | 8 | ||||
-rw-r--r-- | spec/models/pages_domain_spec.rb | 28 | ||||
-rw-r--r-- | spec/models/project_spec.rb | 19 |
7 files changed, 131 insertions, 25 deletions
diff --git a/spec/helpers/projects/pages_helper_spec.rb b/spec/helpers/projects/pages_helper_spec.rb new file mode 100644 index 00000000000..4a4cebc9d70 --- /dev/null +++ b/spec/helpers/projects/pages_helper_spec.rb @@ -0,0 +1,68 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Projects::PagesHelper do + let(:user) { create(:user) } + let(:project) { create(:project) } + + before do + stub_config(pages: { + access_control: true, + external_http: true, + external_https: true, + host: "new.domain.com" + }) + end + + context 'when the user have permission' do + before do + project.add_maintainer(user) + end + + context 'on custom domain' do + using RSpec::Parameterized::TableSyntax + + where(:external_http, :external_https, :can_create) do + false | false | false + false | true | true + true | false | true + true | true | true + end + + with_them do + it do + stub_config(pages: { external_http: external_http, external_https: external_https }) + + expect(can_create_pages_custom_domains?(user, project)).to be can_create + end + end + end + + context 'on domain limit' do + it 'can create new domains when the limit is 0' do + Gitlab::CurrentSettings.update!(max_pages_custom_domains_per_project: 0) + + expect(can_create_pages_custom_domains?(user, project)).to be true + end + + it 'validates custom domain creation is only allowed upto max value' do + Gitlab::CurrentSettings.update!(max_pages_custom_domains_per_project: 1) + + expect(can_create_pages_custom_domains?(user, project)).to be true + create(:pages_domain, project: project) + expect(can_create_pages_custom_domains?(user, project)).to be false + end + end + end + + context 'when the user does not have permission' do + before do + project.add_guest(user) + end + + it 'validates user cannot create domain' do + expect(can_create_pages_custom_domains?(user, project)).to be false + end + end +end diff --git a/spec/lib/gitlab/github_import/importer/events/changed_assignee_spec.rb b/spec/lib/gitlab/github_import/importer/events/changed_assignee_spec.rb index d840227992f..dbc72574ec2 100644 --- a/spec/lib/gitlab/github_import/importer/events/changed_assignee_spec.rb +++ b/spec/lib/gitlab/github_import/importer/events/changed_assignee_spec.rb @@ -6,8 +6,8 @@ RSpec.describe Gitlab::GithubImport::Importer::Events::ChangedAssignee do subject(:importer) { described_class.new(project, client) } let_it_be(:project) { create(:project, :repository) } + let_it_be(:author) { create(:user) } let_it_be(:assignee) { create(:user) } - let_it_be(:assigner) { create(:user) } let(:client) { instance_double('Gitlab::GithubImport::Client') } let(:issuable) { create(:issue, project: project) } @@ -15,11 +15,10 @@ RSpec.describe Gitlab::GithubImport::Importer::Events::ChangedAssignee do let(:issue_event) do Gitlab::GithubImport::Representation::IssueEvent.from_json_hash( 'id' => 6501124486, - 'actor' => { 'id' => 4, 'login' => 'alice' }, + 'actor' => { 'id' => author.id, 'login' => author.username }, 'event' => event_type, 'commit_id' => nil, 'created_at' => '2022-04-26 18:30:53 UTC', - 'assigner' => { 'id' => assigner.id, 'login' => assigner.username }, 'assignee' => { 'id' => assignee.id, 'login' => assignee.username }, 'issue' => { 'number' => issuable.iid, pull_request: issuable.is_a?(MergeRequest) } ) @@ -30,7 +29,7 @@ RSpec.describe Gitlab::GithubImport::Importer::Events::ChangedAssignee do noteable_id: issuable.id, noteable_type: issuable.class.name, project_id: project.id, - author_id: assigner.id, + author_id: author.id, system: true, created_at: issue_event.created_at, updated_at: issue_event.created_at @@ -77,7 +76,7 @@ RSpec.describe Gitlab::GithubImport::Importer::Events::ChangedAssignee do context 'when importing an unassigned event' do let(:event_type) { 'unassigned' } - let(:expected_note_attrs) { note_attrs.merge(note: "unassigned @#{assigner.username}") } + let(:expected_note_attrs) { note_attrs.merge(note: "unassigned @#{assignee.username}") } it_behaves_like 'create expected notes' end @@ -89,8 +88,8 @@ RSpec.describe Gitlab::GithubImport::Importer::Events::ChangedAssignee do allow(finder).to receive(:database_id).and_return(issuable.id) end allow_next_instance_of(Gitlab::GithubImport::UserFinder) do |finder| + allow(finder).to receive(:find).with(author.id, author.username).and_return(author.id) allow(finder).to receive(:find).with(assignee.id, assignee.username).and_return(assignee.id) - allow(finder).to receive(:find).with(assigner.id, assigner.username).and_return(assigner.id) end end diff --git a/spec/lib/gitlab/github_import/representation/issue_event_spec.rb b/spec/lib/gitlab/github_import/representation/issue_event_spec.rb index d3a98035e73..2414e46470a 100644 --- a/spec/lib/gitlab/github_import/representation/issue_event_spec.rb +++ b/spec/lib/gitlab/github_import/representation/issue_event_spec.rb @@ -91,26 +91,20 @@ RSpec.describe Gitlab::GithubImport::Representation::IssueEvent do end end - context 'when assignee and assigner data is present' do - it 'includes assignee and assigner details' do + context 'when assignee data is present' do + it 'includes assignee details' do expect(issue_event.assignee) .to be_an_instance_of(Gitlab::GithubImport::Representation::User) expect(issue_event.assignee.id).to eq(5) expect(issue_event.assignee.login).to eq('tom') - - expect(issue_event.assigner) - .to be_an_instance_of(Gitlab::GithubImport::Representation::User) - expect(issue_event.assigner.id).to eq(6) - expect(issue_event.assigner.login).to eq('jerry') end end - context 'when assignee and assigner data is empty' do + context 'when assignee data is empty' do let(:with_assignee) { false } it 'does not return such info' do expect(issue_event.assignee).to eq nil - expect(issue_event.assigner).to eq nil end end @@ -148,7 +142,7 @@ RSpec.describe Gitlab::GithubImport::Representation::IssueEvent do let(:response) do event_resource = Struct.new( :id, :node_id, :url, :actor, :event, :commit_id, :commit_url, :label, :rename, :milestone, - :source, :assignee, :assigner, :issue, :created_at, :performed_via_github_app, + :source, :assignee, :issue, :created_at, :performed_via_github_app, keyword_init: true ) user_resource = Struct.new(:id, :login, keyword_init: true) @@ -166,7 +160,6 @@ RSpec.describe Gitlab::GithubImport::Representation::IssueEvent do milestone: with_milestone ? { title: 'milestone title' } : nil, source: { type: 'issue', id: 123456 }, assignee: with_assignee ? user_resource.new(id: 5, login: 'tom') : nil, - assigner: with_assignee ? user_resource.new(id: 6, login: 'jerry') : nil, issue: { 'number' => 2, 'pull_request' => pull_request }, created_at: '2022-04-26 18:30:53 UTC', performed_via_github_app: nil @@ -203,7 +196,6 @@ RSpec.describe Gitlab::GithubImport::Representation::IssueEvent do 'milestone_title' => (with_milestone ? 'milestone title' : nil), 'source' => { 'type' => 'issue', 'id' => 123456 }, 'assignee' => (with_assignee ? { 'id' => 5, 'login' => 'tom' } : nil), - 'assigner' => (with_assignee ? { 'id' => 6, 'login' => 'jerry' } : nil), 'issue' => { 'number' => 2, 'pull_request' => pull_request }, 'created_at' => '2022-04-26 18:30:53 UTC', 'performed_via_github_app' => nil diff --git a/spec/lib/gitlab/github_import/user_finder_spec.rb b/spec/lib/gitlab/github_import/user_finder_spec.rb index d85e298785c..27426763232 100644 --- a/spec/lib/gitlab/github_import/user_finder_spec.rb +++ b/spec/lib/gitlab/github_import/user_finder_spec.rb @@ -67,12 +67,6 @@ RSpec.describe Gitlab::GithubImport::UserFinder, :clean_gitlab_redis_cache do it_behaves_like 'user ID finder', :assignee end - - context 'when the author_key parameter is :assigner' do - let(:issue_event) { double('Gitlab::GithubImport::Representation::IssueEvent', assigner: user) } - - it_behaves_like 'user ID finder', :assigner - end end end diff --git a/spec/models/application_setting_spec.rb b/spec/models/application_setting_spec.rb index 16e1d8fbc4d..b5f153e7add 100644 --- a/spec/models/application_setting_spec.rb +++ b/spec/models/application_setting_spec.rb @@ -116,12 +116,20 @@ RSpec.describe ApplicationSetting do it { is_expected.to validate_presence_of(:max_yaml_depth) } it { is_expected.to validate_numericality_of(:max_yaml_depth).only_integer.is_greater_than(0) } it { is_expected.to validate_presence_of(:max_pages_size) } + it { is_expected.to validate_presence_of(:max_pages_custom_domains_per_project) } it 'ensures max_pages_size is an integer greater than 0 (or equal to 0 to indicate unlimited/maximum)' do is_expected.to validate_numericality_of(:max_pages_size).only_integer.is_greater_than_or_equal_to(0) .is_less_than(::Gitlab::Pages::MAX_SIZE / 1.megabyte) end + it 'ensures max_pages_custom_domains_per_project is an integer greater than 0 (or equal to 0 to indicate unlimited/maximum)' do + is_expected + .to validate_numericality_of(:max_pages_custom_domains_per_project) + .only_integer + .is_greater_than_or_equal_to(0) + end + it { is_expected.to validate_presence_of(:jobs_per_stage_page_size) } it { is_expected.to validate_numericality_of(:jobs_per_stage_page_size).only_integer.is_greater_than_or_equal_to(0) } diff --git a/spec/models/pages_domain_spec.rb b/spec/models/pages_domain_spec.rb index 4691d38184a..644b2ce172a 100644 --- a/spec/models/pages_domain_spec.rb +++ b/spec/models/pages_domain_spec.rb @@ -62,7 +62,7 @@ RSpec.describe PagesDomain do let(:domain) { 'my.domain.com' } let(:project) do - instance_double(Project, pages_https_only?: pages_https_only) + instance_double(Project, pages_https_only?: pages_https_only, can_create_custom_domains?: true) end let(:pages_domain) do @@ -571,6 +571,32 @@ RSpec.describe PagesDomain do end end + describe '#validate_custom_domain_count_per_project' do + let_it_be(:project) { create(:project) } + + context 'when max custom domain setting is set to 0' do + it 'returns without an error' do + pages_domain = create(:pages_domain, project: project) + + expect(pages_domain).to be_valid + end + end + + context 'when max custom domain setting is not set to 0' do + it 'returns with an error for extra domains' do + Gitlab::CurrentSettings.update!(max_pages_custom_domains_per_project: 1) + + pages_domain = create(:pages_domain, project: project) + expect(pages_domain).to be_valid + + pages_domain = build(:pages_domain, project: project) + expect(pages_domain).not_to be_valid + expect(pages_domain.errors.full_messages) + .to contain_exactly('This project reached the limit of custom domains. (Max 1)') + end + end + end + describe '.find_by_domain_case_insensitive' do it 'lookup is case-insensitive' do pages_domain = create(:pages_domain, domain: "Pages.IO") diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 77abb7c4dae..664882fd782 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -8337,6 +8337,25 @@ RSpec.describe Project, factory_default: :keep do end end + describe '#can_create_custom_domains?' do + let_it_be(:project) { create(:project) } + let_it_be(:pages_domain) { create(:pages_domain, project: project) } + + subject { project.can_create_custom_domains? } + + context 'when max custom domain setting is set to 0' do + it { is_expected.to be true } + end + + context 'when max custom domain setting is not set to 0' do + before do + Gitlab::CurrentSettings.update!(max_pages_custom_domains_per_project: 1) + end + + it { is_expected.to be false } + end + end + private def finish_job(export_job) |