diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-31 12:08:33 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-31 12:08:33 +0000 |
commit | 1808454313ed75c92e1384466e8c83bfbc8ae25e (patch) | |
tree | 5c006c158fd796dc6d21e9bd771542f2fb0c24e2 /spec | |
parent | fd3a95f07ae9cd78fecffcfa5de4494f933a7808 (diff) | |
download | gitlab-ce-1808454313ed75c92e1384466e8c83bfbc8ae25e.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/controllers/registrations_controller_spec.rb | 32 | ||||
-rw-r--r-- | spec/features/markdown/copy_as_gfm_spec.rb | 28 | ||||
-rw-r--r-- | spec/features/users/signup_spec.rb | 4 | ||||
-rw-r--r-- | spec/finders/members_finder_spec.rb | 29 | ||||
-rw-r--r-- | spec/frontend/diffs/components/diff_stats_spec.js | 3 | ||||
-rw-r--r-- | spec/helpers/commits_helper_spec.rb | 13 | ||||
-rw-r--r-- | spec/lib/gitlab/runtime_spec.rb | 17 | ||||
-rw-r--r-- | spec/models/concerns/discussion_on_diff_spec.rb | 12 | ||||
-rw-r--r-- | spec/models/project_group_link_spec.rb | 8 | ||||
-rw-r--r-- | spec/services/projects/after_import_service_spec.rb | 48 | ||||
-rw-r--r-- | spec/services/suggestions/apply_service_spec.rb | 18 |
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 |