Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/projects/create_service_spec.rb')
-rw-r--r--spec/services/projects/create_service_spec.rb98
1 files changed, 59 insertions, 39 deletions
diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb
index d5fbf96ce74..10f694827e1 100644
--- a/spec/services/projects/create_service_spec.rb
+++ b/spec/services/projects/create_service_spec.rb
@@ -7,9 +7,10 @@ RSpec.describe Projects::CreateService, '#execute' do
include GitHelpers
let(:user) { create :user }
+ let(:project_name) { 'GitLab' }
let(:opts) do
{
- name: 'GitLab',
+ name: project_name,
namespace_id: user.namespace.id
}
end
@@ -144,6 +145,12 @@ RSpec.describe Projects::CreateService, '#execute' do
subject { create_project(user, opts) }
end
+
+ it 'logs creation' do
+ expect(Gitlab::AppLogger).to receive(:info).with(/#{user.name} created a new project/)
+
+ create_project(user, opts)
+ end
end
context "admin creates project with other user's namespace_id" do
@@ -183,9 +190,13 @@ RSpec.describe Projects::CreateService, '#execute' do
user.refresh_authorized_projects # Ensure cache is warm
end
- it do
- project = create_project(user, opts.merge!(namespace_id: group.id))
+ subject(:project) { create_project(user, opts.merge!(namespace_id: group.id)) }
+ shared_examples 'has sync-ed traversal_ids' do
+ specify { expect(project.reload.project_namespace.traversal_ids).to eq([project.namespace.traversal_ids, project.project_namespace.id].flatten.compact) }
+ end
+
+ it 'creates the project' do
expect(project).to be_valid
expect(project.owner).to eq(group)
expect(project.namespace).to eq(group)
@@ -193,6 +204,18 @@ RSpec.describe Projects::CreateService, '#execute' do
expect(user.authorized_projects).to include(project)
expect(project.project_namespace).to be_in_sync_with_project(project)
end
+
+ context 'with before_commit callback' do
+ it_behaves_like 'has sync-ed traversal_ids'
+ end
+
+ context 'with after_create callback' do
+ before do
+ stub_feature_flags(sync_traversal_ids_before_commit: false)
+ end
+
+ it_behaves_like 'has sync-ed traversal_ids'
+ end
end
context 'group sharing', :sidekiq_inline do
@@ -202,7 +225,7 @@ RSpec.describe Projects::CreateService, '#execute' do
let(:opts) do
{
- name: 'GitLab',
+ name: project_name,
namespace_id: shared_group.id
}
end
@@ -237,7 +260,7 @@ RSpec.describe Projects::CreateService, '#execute' do
let(:share_max_access_level) { Gitlab::Access::MAINTAINER }
let(:opts) do
{
- name: 'GitLab',
+ name: project_name,
namespace_id: subgroup_for_projects.id
}
end
@@ -583,58 +606,55 @@ RSpec.describe Projects::CreateService, '#execute' do
opts[:initialize_with_readme] = '1'
end
- shared_examples 'creates README.md' do
+ shared_examples 'a repo with a README.md' do
it { expect(project.repository.commit_count).to be(1) }
it { expect(project.repository.readme.name).to eql('README.md') }
- it { expect(project.repository.readme.data).to include('# GitLab') }
+ it { expect(project.repository.readme.data).to include(expected_content) }
end
- it_behaves_like 'creates README.md'
+ it_behaves_like 'a repo with a README.md' do
+ let(:expected_content) do
+ <<~MARKDOWN
+ cd existing_repo
+ git remote add origin #{project.http_url_to_repo}
+ git branch -M master
+ git push -uf origin master
+ MARKDOWN
+ end
+ end
- context 'and a default_branch_name is specified' do
+ context 'and a readme_template is specified' do
before do
- allow(Gitlab::CurrentSettings)
- .to receive(:default_branch_name)
- .and_return('example_branch')
+ opts[:readme_template] = "# GitLab\nThis is customized readme."
end
- it_behaves_like 'creates README.md'
+ it_behaves_like 'a repo with a README.md' do
+ let(:expected_content) { "# GitLab\nThis is customized readme." }
+ end
+ end
+
+ context 'and a default_branch_name is specified' do
+ before do
+ allow(Gitlab::CurrentSettings).to receive(:default_branch_name).and_return('example_branch')
+ end
- it 'creates README.md within the specified branch rather than master' do
+ it 'creates the correct branch' do
branches = project.repository.branches
expect(branches.size).to eq(1)
expect(branches.collect(&:name)).to contain_exactly('example_branch')
end
- describe 'advanced readme content', experiment: :new_project_readme_content do
- before do
- stub_experiments(new_project_readme_content: :advanced)
- end
-
- it_behaves_like 'creates README.md'
-
- it 'includes advanced content in the README.md' do
- content = project.repository.readme.data
- expect(content).to include <<~MARKDOWN
+ it_behaves_like 'a repo with a README.md' do
+ let(:expected_content) do
+ <<~MARKDOWN
+ cd existing_repo
git remote add origin #{project.http_url_to_repo}
git branch -M example_branch
git push -uf origin example_branch
MARKDOWN
end
end
-
- context 'and readme_template is specified' do
- before do
- opts[:readme_template] = "# GitLab\nThis is customized template."
- end
-
- it_behaves_like 'creates README.md'
-
- it 'creates README.md with specified template' do
- expect(project.repository.readme.data).to include('This is customized template.')
- end
- end
end
end
@@ -676,7 +696,7 @@ RSpec.describe Projects::CreateService, '#execute' do
let(:opts) do
{
- name: 'GitLab',
+ name: project_name,
namespace_id: group.id
}
end
@@ -697,7 +717,7 @@ RSpec.describe Projects::CreateService, '#execute' do
let(:opts) do
{
- name: 'GitLab',
+ name: project_name,
namespace_id: subgroup.id
}
end
@@ -808,7 +828,7 @@ RSpec.describe Projects::CreateService, '#execute' do
let(:opts) do
{
- name: 'GitLab',
+ name: project_name,
namespace_id: group.id
}
end