Skip to content
Snippets Groups Projects
Commit 18084543 authored by GitLab Bot's avatar GitLab Bot
Browse files

Add latest changes from gitlab-org/gitlab@master

parent fd3a95f0
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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
Loading
Loading
@@ -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',
 
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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'
Loading
Loading
Loading
Loading
@@ -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)
Loading
Loading
@@ -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]) }
 
Loading
Loading
Loading
Loading
@@ -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');
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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 }
 
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment