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
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-31 15:08:33 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-31 15:08:33 +0300
commit1808454313ed75c92e1384466e8c83bfbc8ae25e (patch)
tree5c006c158fd796dc6d21e9bd771542f2fb0c24e2 /spec
parentfd3a95f07ae9cd78fecffcfa5de4494f933a7808 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/registrations_controller_spec.rb32
-rw-r--r--spec/features/markdown/copy_as_gfm_spec.rb28
-rw-r--r--spec/features/users/signup_spec.rb4
-rw-r--r--spec/finders/members_finder_spec.rb29
-rw-r--r--spec/frontend/diffs/components/diff_stats_spec.js3
-rw-r--r--spec/helpers/commits_helper_spec.rb13
-rw-r--r--spec/lib/gitlab/runtime_spec.rb17
-rw-r--r--spec/models/concerns/discussion_on_diff_spec.rb12
-rw-r--r--spec/models/project_group_link_spec.rb8
-rw-r--r--spec/services/projects/after_import_service_spec.rb48
-rw-r--r--spec/services/suggestions/apply_service_spec.rb18
11 files changed, 197 insertions, 15 deletions
diff --git a/spec/controllers/registrations_controller_spec.rb b/spec/controllers/registrations_controller_spec.rb
index 792219d830d..d7fe3e87056 100644
--- a/spec/controllers/registrations_controller_spec.rb
+++ b/spec/controllers/registrations_controller_spec.rb
@@ -415,4 +415,36 @@ describe RegistrationsController do
patch :update_registration, params: { user: { role: 'software_developer', setup_for_company: 'false' } }
end
end
+
+ describe '#welcome' do
+ subject { get :welcome }
+
+ before do
+ sign_in(create(:user))
+ end
+
+ context 'signup_flow experiment enabled' do
+ before do
+ stub_experiment_for_user(signup_flow: true)
+ end
+
+ it 'renders the devise_experimental_separate_sign_up_flow layout' do
+ expected_layout = Gitlab.ee? ? :checkout : :devise_experimental_separate_sign_up_flow
+
+ expect(subject).to render_template(expected_layout)
+ end
+ end
+
+ context 'signup_flow experiment disabled' do
+ before do
+ stub_experiment_for_user(signup_flow: false)
+ end
+
+ it 'renders the devise layout' do
+ expected_layout = Gitlab.ee? ? :checkout : :devise
+
+ expect(subject).to render_template(expected_layout)
+ end
+ end
+ end
end
diff --git a/spec/features/markdown/copy_as_gfm_spec.rb b/spec/features/markdown/copy_as_gfm_spec.rb
index ef3a36f3128..f85acc28645 100644
--- a/spec/features/markdown/copy_as_gfm_spec.rb
+++ b/spec/features/markdown/copy_as_gfm_spec.rb
@@ -172,18 +172,36 @@ describe 'Copy as GFM', :js do
'![Image](https://example.com/image.png)'
)
+ verify_media_with_partial_path(
+ '![Image](/uploads/a123/image.png)',
+
+ project_media_uri(@project, '/uploads/a123/image.png')
+ )
+
verify(
'VideoLinkFilter',
'![Video](https://example.com/video.mp4)'
)
+ verify_media_with_partial_path(
+ '![Video](/uploads/a123/video.mp4)',
+
+ project_media_uri(@project, '/uploads/a123/video.mp4')
+ )
+
verify(
'AudioLinkFilter',
'![Audio](https://example.com/audio.wav)'
)
+ verify_media_with_partial_path(
+ '![Audio](/uploads/a123/audio.wav)',
+
+ project_media_uri(@project, '/uploads/a123/audio.wav')
+ )
+
verify(
'MathFilter: math as converted from GFM to HTML',
@@ -647,6 +665,16 @@ describe 'Copy as GFM', :js do
end
end
+ def project_media_uri(project, media_path)
+ "#{project_path(project)}#{media_path}"
+ end
+
+ def verify_media_with_partial_path(gfm, media_uri)
+ html = gfm_to_html(gfm)
+ output_gfm = html_to_gfm(html)
+ expect(output_gfm).to include(media_uri)
+ end
+
# Fake a `current_user` helper
def current_user
@feat.user
diff --git a/spec/features/users/signup_spec.rb b/spec/features/users/signup_spec.rb
index 30f298b1fc3..3c82ae59cfa 100644
--- a/spec/features/users/signup_spec.rb
+++ b/spec/features/users/signup_spec.rb
@@ -445,8 +445,8 @@ end
describe 'With experimental flow' do
before do
- stub_experiment(signup_flow: true)
- stub_experiment_for_user(signup_flow: true)
+ stub_experiment(signup_flow: true, paid_signup_flow: false)
+ stub_experiment_for_user(signup_flow: true, paid_signup_flow: false)
end
it_behaves_like 'Signup'
diff --git a/spec/finders/members_finder_spec.rb b/spec/finders/members_finder_spec.rb
index 2bc37606a25..f7331f689ea 100644
--- a/spec/finders/members_finder_spec.rb
+++ b/spec/finders/members_finder_spec.rb
@@ -75,6 +75,15 @@ describe MembersFinder, '#execute' do
expect(result).to contain_exactly(member2, member3)
end
+ it 'returns only inherited members of a personal project' do
+ project = create(:project, namespace: user1.namespace)
+ member = project.members.first
+
+ result = described_class.new(project, user1).execute(include_relations: [:inherited])
+
+ expect(result).to contain_exactly(member)
+ end
+
it 'returns the members.access_level when the user is invited', :nested_groups do
member_invite = create(:project_member, :invited, project: project, invite_email: create(:user).email)
member1 = group.add_maintainer(user2)
@@ -96,6 +105,26 @@ describe MembersFinder, '#execute' do
expect(result.first.access_level).to eq(Gitlab::Access::DEVELOPER)
end
+ it 'returns searched members if requested' do
+ project.add_maintainer(user2)
+ project.add_maintainer(user3)
+ member3 = project.add_maintainer(user4)
+
+ result = described_class.new(project, user2).execute(params: { search: user4.name })
+
+ expect(result).to contain_exactly(member3)
+ end
+
+ it 'returns members sorted by id_desc' do
+ member1 = project.add_maintainer(user2)
+ member2 = project.add_maintainer(user3)
+ member3 = project.add_maintainer(user4)
+
+ result = described_class.new(project, user2).execute(params: { sort: 'id_desc' })
+
+ expect(result).to eq([member3, member2, member1])
+ end
+
context 'when include_invited_groups_members == true' do
subject { described_class.new(project, user2).execute(include_relations: [:inherited, :direct, :invited_groups_members]) }
diff --git a/spec/frontend/diffs/components/diff_stats_spec.js b/spec/frontend/diffs/components/diff_stats_spec.js
index 4482abf18c1..9073462a51f 100644
--- a/spec/frontend/diffs/components/diff_stats_spec.js
+++ b/spec/frontend/diffs/components/diff_stats_spec.js
@@ -3,11 +3,12 @@ import Icon from '~/vue_shared/components/icon.vue';
import DiffStats from '~/diffs/components/diff_stats.vue';
describe('diff_stats', () => {
- it('does not render a group if diffFileLengths is not passed in', () => {
+ it('does not render a group if diffFileLengths is not a number', () => {
const wrapper = shallowMount(DiffStats, {
propsData: {
addedLines: 1,
removedLines: 2,
+ diffFilesLength: Number.NaN,
},
});
const groups = wrapper.findAll('.diff-stats-group');
diff --git a/spec/helpers/commits_helper_spec.rb b/spec/helpers/commits_helper_spec.rb
index cbc5566979b..dd268c2411f 100644
--- a/spec/helpers/commits_helper_spec.rb
+++ b/spec/helpers/commits_helper_spec.rb
@@ -69,4 +69,17 @@ describe CommitsHelper do
expect(node[:href]).to eq('http://example.com/file.html')
end
end
+
+ describe '#commit_to_html' do
+ let(:project) { create(:project, :repository) }
+ let(:ref) { 'master' }
+ let(:commit) { project.commit(ref) }
+
+ it 'renders HTML representation of a commit' do
+ assign(:project, project)
+ allow(helper).to receive(:current_user).and_return(project.owner)
+
+ expect(helper.commit_to_html(commit, ref, project)).to include('<div class="commit-content')
+ end
+ end
end
diff --git a/spec/lib/gitlab/runtime_spec.rb b/spec/lib/gitlab/runtime_spec.rb
index 194ed49bb32..52976d925b9 100644
--- a/spec/lib/gitlab/runtime_spec.rb
+++ b/spec/lib/gitlab/runtime_spec.rb
@@ -5,6 +5,7 @@ require 'spec_helper'
describe Gitlab::Runtime do
before do
allow(described_class).to receive(:process_name).and_return('ruby')
+ stub_rails_env('production')
end
context "when unknown" do
@@ -47,7 +48,7 @@ describe Gitlab::Runtime do
expect(subject.sidekiq?).to be(false)
expect(subject.console?).to be(false)
expect(subject.rake?).to be(false)
- expect(subject.rspec?).to be(false)
+ expect(subject.test_suite?).to be(false)
end
it "reports its maximum concurrency" do
@@ -74,7 +75,7 @@ describe Gitlab::Runtime do
expect(subject.sidekiq?).to be(false)
expect(subject.console?).to be(false)
expect(subject.rake?).to be(false)
- expect(subject.rspec?).to be(false)
+ expect(subject.test_suite?).to be(false)
end
it "reports its maximum concurrency" do
@@ -106,7 +107,7 @@ describe Gitlab::Runtime do
expect(subject.puma?).to be(false)
expect(subject.console?).to be(false)
expect(subject.rake?).to be(false)
- expect(subject.rspec?).to be(false)
+ expect(subject.test_suite?).to be(false)
end
it "reports its maximum concurrency" do
@@ -131,7 +132,7 @@ describe Gitlab::Runtime do
expect(subject.sidekiq?).to be(false)
expect(subject.puma?).to be(false)
expect(subject.rake?).to be(false)
- expect(subject.rspec?).to be(false)
+ expect(subject.test_suite?).to be(false)
end
it "reports its maximum concurrency" do
@@ -139,14 +140,14 @@ describe Gitlab::Runtime do
end
end
- context "rspec" do
+ context "test suite" do
before do
- allow(described_class).to receive(:process_name).and_return('rspec')
+ stub_rails_env('test')
end
it "identifies itself" do
- expect(subject.identify).to eq(:rspec)
- expect(subject.rspec?).to be(true)
+ expect(subject.identify).to eq(:test_suite)
+ expect(subject.test_suite?).to be(true)
end
it "does not identify as others" do
diff --git a/spec/models/concerns/discussion_on_diff_spec.rb b/spec/models/concerns/discussion_on_diff_spec.rb
index baddca47dfa..f091861bd41 100644
--- a/spec/models/concerns/discussion_on_diff_spec.rb
+++ b/spec/models/concerns/discussion_on_diff_spec.rb
@@ -59,6 +59,18 @@ describe DiscussionOnDiff do
end
end
+ context "when the diff line does not exist on a corrupt diff note" do
+ subject { create(:diff_note_on_merge_request, line_number: 18).to_discussion }
+
+ before do
+ allow(subject).to receive(:diff_line) { nil }
+ end
+
+ it "returns an empty array" do
+ expect(truncated_lines).to eq([])
+ end
+ end
+
context 'when the discussion is on an image' do
subject { create(:image_diff_note_on_merge_request).to_discussion }
diff --git a/spec/models/project_group_link_spec.rb b/spec/models/project_group_link_spec.rb
index cd997224122..63ce08c4d30 100644
--- a/spec/models/project_group_link_spec.rb
+++ b/spec/models/project_group_link_spec.rb
@@ -47,4 +47,12 @@ describe ProjectGroupLink do
group_users.each { |user| expect(user.authorized_projects).not_to include(project) }
end
end
+
+ describe 'search by group name' do
+ let_it_be(:project_group_link) { create(:project_group_link) }
+ let_it_be(:group) { project_group_link.group }
+
+ it { expect(described_class.search(group.name)).to eq([project_group_link]) }
+ it { expect(described_class.search('not-a-group-name')).to be_empty }
+ end
end
diff --git a/spec/services/projects/after_import_service_spec.rb b/spec/services/projects/after_import_service_spec.rb
index 27e8f3c45ba..4f74a779cd5 100644
--- a/spec/services/projects/after_import_service_spec.rb
+++ b/spec/services/projects/after_import_service_spec.rb
@@ -20,7 +20,7 @@ describe Projects::AfterImportService do
allow(housekeeping_service)
.to receive(:execute).and_yield
- expect(housekeeping_service).to receive(:increment!)
+ allow(housekeeping_service).to receive(:increment!)
end
it 'performs housekeeping' do
@@ -58,6 +58,52 @@ describe Projects::AfterImportService do
end
end
+ context 'when after import action throw non-retriable exception' do
+ let(:exception) { StandardError.new('after import error') }
+
+ before do
+ allow(repository)
+ .to receive(:delete_all_refs_except)
+ .and_raise(exception)
+ end
+
+ it 'throws after import error' do
+ expect { subject.execute }.to raise_exception('after import error')
+ end
+ end
+
+ context 'when after import action throw retriable exception one time' do
+ let(:exception) { GRPC::DeadlineExceeded.new }
+
+ before do
+ call_count = 0
+
+ allow(repository).to receive(:delete_all_refs_except).and_wrap_original do |original_method, *args|
+ call_count += 1
+ call_count > 1 ? original_method.call(*args) : raise(exception)
+ end
+
+ subject.execute
+ end
+
+ it 'removes refs/pull/**/*' do
+ expect(rugged.references.map(&:name))
+ .not_to include(%r{\Arefs/pull/})
+ end
+
+ it 'records the failures in the database', :aggregate_failures do
+ import_failure = ImportFailure.last
+
+ expect(import_failure.source).to eq('delete_all_refs')
+ expect(import_failure.project_id).to eq(project.id)
+ expect(import_failure.relation_key).to be_nil
+ expect(import_failure.relation_index).to be_nil
+ expect(import_failure.exception_class).to eq('GRPC::DeadlineExceeded')
+ expect(import_failure.exception_message).to be_present
+ expect(import_failure.correlation_id_value).not_to be_empty
+ end
+ end
+
def rugged
rugged_repo(repository)
end
diff --git a/spec/services/suggestions/apply_service_spec.rb b/spec/services/suggestions/apply_service_spec.rb
index 84529af7187..b04c3278eaa 100644
--- a/spec/services/suggestions/apply_service_spec.rb
+++ b/spec/services/suggestions/apply_service_spec.rb
@@ -57,10 +57,22 @@ describe Suggestions::ApplyService do
end
context 'is not specified' do
- let(:message) { nil }
+ let(:expected_value) { "Apply suggestion to files/ruby/popen.rb" }
- it 'sets default commit message' do
- expect(project.repository.commit.message).to eq("Apply suggestion to files/ruby/popen.rb")
+ context 'is nil' do
+ let(:message) { nil }
+
+ it 'sets default commit message' do
+ expect(project.repository.commit.message).to eq(expected_value)
+ end
+ end
+
+ context 'is an empty string' do
+ let(:message) { '' }
+
+ it 'sets default commit message' do
+ expect(project.repository.commit.message).to eq(expected_value)
+ end
end
end