diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-19 15:44:42 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-19 15:44:42 +0000 |
commit | 4555e1b21c365ed8303ffb7a3325d773c9b8bf31 (patch) | |
tree | 5423a1c7516cffe36384133ade12572cf709398d /spec/presenters | |
parent | e570267f2f6b326480d284e0164a6464ba4081bc (diff) | |
download | gitlab-ce-4555e1b21c365ed8303ffb7a3325d773c9b8bf31.tar.gz |
Add latest changes from gitlab-org/gitlab@13-12-stable-eev13.12.0-rc42
Diffstat (limited to 'spec/presenters')
19 files changed, 163 insertions, 75 deletions
diff --git a/spec/presenters/alert_management/alert_presenter_spec.rb b/spec/presenters/alert_management/alert_presenter_spec.rb index 243301502ce..21c0cb3fead 100644 --- a/spec/presenters/alert_management/alert_presenter_spec.rb +++ b/spec/presenters/alert_management/alert_presenter_spec.rb @@ -20,6 +20,7 @@ RSpec.describe AlertManagement::AlertPresenter do end let_it_be(:alert) { create(:alert_management_alert, project: project, payload: payload) } + let(:alert_url) { "http://localhost/#{project.full_path}/-/alert_management/#{alert.iid}/details" } subject(:presenter) { described_class.new(alert) } diff --git a/spec/presenters/blob_presenter_spec.rb b/spec/presenters/blob_presenter_spec.rb index 47402fea2b5..38bdf3b9364 100644 --- a/spec/presenters/blob_presenter_spec.rb +++ b/spec/presenters/blob_presenter_spec.rb @@ -2,52 +2,96 @@ require 'spec_helper' -RSpec.describe BlobPresenter, :seed_helper do - let(:repository) { Gitlab::Git::Repository.new('default', TEST_REPO_PATH, '', 'group/project') } - - let(:git_blob) do - Gitlab::Git::Blob.find( - repository, - 'fa1b1e6c004a68b7d8763b86455da9e6b23e36d6', - 'files/ruby/regex.rb' - ) +RSpec.describe BlobPresenter do + let_it_be(:project) { create(:project, :repository) } + let_it_be(:user) { project.owner } + + let(:repository) { project.repository } + let(:blob) { repository.blob_at('HEAD', 'files/ruby/regex.rb') } + + subject(:presenter) { described_class.new(blob, current_user: user) } + + describe '#web_url' do + it { expect(presenter.web_url).to eq("http://localhost/#{project.full_path}/-/blob/#{blob.commit_id}/#{blob.path}") } + end + + describe '#web_path' do + it { expect(presenter.web_path).to eq("/#{project.full_path}/-/blob/#{blob.commit_id}/#{blob.path}") } end - let(:blob) { Blob.new(git_blob) } + describe '#edit_blob_path' do + it { expect(presenter.edit_blob_path).to eq("/#{project.full_path}/-/edit/#{blob.commit_id}/#{blob.path}") } + end - describe '.web_url' do - let(:project) { create(:project, :repository) } - let(:repository) { project.repository } - let(:blob) { Gitlab::Graphql::Representation::TreeEntry.new(repository.tree.blobs.first, repository) } + describe '#raw_path' do + it { expect(presenter.raw_path).to eq("/#{project.full_path}/-/raw/#{blob.commit_id}/#{blob.path}") } + end - subject { described_class.new(blob) } + describe '#replace_path' do + it { expect(presenter.replace_path).to eq("/#{project.full_path}/-/create/#{blob.commit_id}/#{blob.path}") } + end - it { expect(subject.web_url).to eq("http://localhost/#{project.full_path}/-/blob/#{blob.commit_id}/#{blob.path}") } + describe '#ide_edit_path' do + it { expect(presenter.ide_edit_path).to eq("/-/ide/project/#{project.full_path}/edit/HEAD/-/files/ruby/regex.rb") } end - describe '#web_path' do - let(:project) { create(:project, :repository) } - let(:repository) { project.repository } - let(:blob) { Gitlab::Graphql::Representation::TreeEntry.new(repository.tree.blobs.first, repository) } + describe '#fork_and_edit_path' do + it 'generates expected URI + query' do + uri = URI.parse(presenter.fork_and_edit_path) + query = Rack::Utils.parse_query(uri.query) + + expect(uri.path).to eq("/#{project.full_path}/-/forks") + expect(query).to include('continue[to]' => presenter.edit_blob_path, 'namespace_key' => user.namespace_id.to_s) + end - subject { described_class.new(blob) } + context 'current_user is nil' do + let(:user) { nil } - it { expect(subject.web_path).to eq("/#{project.full_path}/-/blob/#{blob.commit_id}/#{blob.path}") } + it { expect(presenter.fork_and_edit_path).to be_nil } + end + end + + describe '#ide_fork_and_edit_path' do + it 'generates expected URI + query' do + uri = URI.parse(presenter.ide_fork_and_edit_path) + query = Rack::Utils.parse_query(uri.query) + + expect(uri.path).to eq("/#{project.full_path}/-/forks") + expect(query).to include('continue[to]' => presenter.ide_edit_path, 'namespace_key' => user.namespace_id.to_s) + end + + context 'current_user is nil' do + let(:user) { nil } + + it { expect(presenter.ide_fork_and_edit_path).to be_nil } + end + end + + context 'given a Gitlab::Graphql::Representation::TreeEntry' do + let(:blob) { Gitlab::Graphql::Representation::TreeEntry.new(super(), repository) } + + describe '#web_url' do + it { expect(presenter.web_url).to eq("http://localhost/#{project.full_path}/-/blob/#{blob.commit_id}/#{blob.path}") } + end + + describe '#web_path' do + it { expect(presenter.web_path).to eq("/#{project.full_path}/-/blob/#{blob.commit_id}/#{blob.path}") } + end end describe '#highlight' do - subject { described_class.new(blob) } + let(:git_blob) { blob.__getobj__ } it 'returns highlighted content' do expect(Gitlab::Highlight).to receive(:highlight).with('files/ruby/regex.rb', git_blob.data, plain: nil, language: nil) - subject.highlight + presenter.highlight end it 'returns plain content when :plain is true' do expect(Gitlab::Highlight).to receive(:highlight).with('files/ruby/regex.rb', git_blob.data, plain: true, language: nil) - subject.highlight(plain: true) + presenter.highlight(plain: true) end context '"to" param is present' do @@ -60,7 +104,7 @@ RSpec.describe BlobPresenter, :seed_helper do it 'returns limited highlighted content' do expect(Gitlab::Highlight).to receive(:highlight).with('files/ruby/regex.rb', "line one\n", plain: nil, language: nil) - subject.highlight(to: 1) + presenter.highlight(to: 1) end end @@ -72,7 +116,46 @@ RSpec.describe BlobPresenter, :seed_helper do it 'passes language to inner call' do expect(Gitlab::Highlight).to receive(:highlight).with('files/ruby/regex.rb', git_blob.data, plain: nil, language: 'ruby') - subject.highlight + presenter.highlight + end + end + end + + describe '#plain_data' do + let(:blob) { repository.blob_at('HEAD', file) } + + subject { described_class.new(blob).plain_data } + + context 'when blob is binary' do + let(:file) { 'files/images/logo-black.png' } + + it 'returns nil' do + expect(subject).to be_nil + end + end + + context 'when blob is markup' do + let(:file) { 'README.md' } + + it 'returns plain content' do + expect(subject).to include('<span id="LC1" class="line" lang="markdown">') + end + end + + context 'when blob has syntax' do + let(:file) { 'files/ruby/regex.rb' } + + it 'returns highlighted syntax content' do + expect(subject) + .to include '<span id="LC1" class="line" lang="ruby"><span class="k">module</span> <span class="nn">Gitlab</span>' + end + end + + context 'when blob has plain data' do + let(:file) { 'LICENSE' } + + it 'returns plain text highlighted content' do + expect(subject).to include('<span id="LC1" class="line" lang="plaintext">The MIT License (MIT)</span>') end end end diff --git a/spec/presenters/ci/pipeline_artifacts/code_quality_mr_diff_presenter_spec.rb b/spec/presenters/ci/pipeline_artifacts/code_quality_mr_diff_presenter_spec.rb index 06d5422eed3..94a743d4d89 100644 --- a/spec/presenters/ci/pipeline_artifacts/code_quality_mr_diff_presenter_spec.rb +++ b/spec/presenters/ci/pipeline_artifacts/code_quality_mr_diff_presenter_spec.rb @@ -4,11 +4,12 @@ require 'spec_helper' RSpec.describe Ci::PipelineArtifacts::CodeQualityMrDiffPresenter do let(:pipeline_artifact) { create(:ci_pipeline_artifact, :with_codequality_mr_diff_report) } + let(:merge_request) { double(id: 123456789, new_paths: filenames) } subject(:presenter) { described_class.new(pipeline_artifact) } describe '#for_files' do - subject(:quality_data) { presenter.for_files(filenames) } + subject(:quality_data) { presenter.for_files(merge_request) } context 'when code quality has data' do context 'when filenames is empty' do diff --git a/spec/presenters/ci/pipeline_presenter_spec.rb b/spec/presenters/ci/pipeline_presenter_spec.rb index 5cb9d340e06..2d3c0d85eda 100644 --- a/spec/presenters/ci/pipeline_presenter_spec.rb +++ b/spec/presenters/ci/pipeline_presenter_spec.rb @@ -8,6 +8,7 @@ RSpec.describe Ci::PipelinePresenter do let_it_be(:user) { create(:user) } let_it_be_with_reload(:project) { create(:project, :test_repo) } let_it_be_with_reload(:pipeline) { create(:ci_pipeline, project: project) } + let(:current_user) { user } subject(:presenter) do @@ -246,6 +247,7 @@ RSpec.describe Ci::PipelinePresenter do context 'permissions' do let_it_be_with_refind(:merge_request) { create(:merge_request, :with_detached_merge_request_pipeline, source_project: project) } + let(:pipeline) { merge_request.all_pipelines.take } shared_examples 'private merge requests' do diff --git a/spec/presenters/group_member_presenter_spec.rb b/spec/presenters/group_member_presenter_spec.rb index 6bd3005fbb6..352f81356e0 100644 --- a/spec/presenters/group_member_presenter_spec.rb +++ b/spec/presenters/group_member_presenter_spec.rb @@ -142,7 +142,7 @@ RSpec.describe GroupMemberPresenter do let(:expected_roles) { { 'Developer' => 30, 'Maintainer' => 40, 'Owner' => 50, 'Reporter' => 20 } } before do - entity.parent = group + entity.update!(parent: group) end end end diff --git a/spec/presenters/label_presenter_spec.rb b/spec/presenters/label_presenter_spec.rb index 44c68a6102f..bab0d9a1065 100644 --- a/spec/presenters/label_presenter_spec.rb +++ b/spec/presenters/label_presenter_spec.rb @@ -7,6 +7,7 @@ RSpec.describe LabelPresenter do let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, group: group) } + let(:label) { build_stubbed(:label, project: project).present(issuable_subject: project) } let(:group_label) { build_stubbed(:group_label, group: group).present(issuable_subject: project) } diff --git a/spec/presenters/packages/composer/packages_presenter_spec.rb b/spec/presenters/packages/composer/packages_presenter_spec.rb index c1d8c9816a6..1f638e5b935 100644 --- a/spec/presenters/packages/composer/packages_presenter_spec.rb +++ b/spec/presenters/packages/composer/packages_presenter_spec.rb @@ -9,6 +9,7 @@ RSpec.describe ::Packages::Composer::PackagesPresenter do let_it_be(:json) { { 'name' => package_name } } let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, :custom_repo, files: { 'composer.json' => json.to_json }, group: group) } + let!(:package1) { create(:composer_package, :with_metadatum, project: project, name: package_name, version: '1.0.0', json: json) } let!(:package2) { create(:composer_package, :with_metadatum, project: project, name: package_name, version: '2.0.0', json: json) } diff --git a/spec/presenters/packages/conan/package_presenter_spec.rb b/spec/presenters/packages/conan/package_presenter_spec.rb index dad9460c8eb..6d82c5ef547 100644 --- a/spec/presenters/packages/conan/package_presenter_spec.rb +++ b/spec/presenters/packages/conan/package_presenter_spec.rb @@ -7,6 +7,7 @@ RSpec.describe ::Packages::Conan::PackagePresenter do let_it_be(:package) { create(:conan_package) } let_it_be(:project) { package.project } let_it_be(:conan_package_reference) { '123456789'} + let(:params) { { package_scope: :instance } } shared_examples 'no existing package' do diff --git a/spec/presenters/packages/detail/package_presenter_spec.rb b/spec/presenters/packages/detail/package_presenter_spec.rb index 4c3e0228583..d8f1c98e762 100644 --- a/spec/presenters/packages/detail/package_presenter_spec.rb +++ b/spec/presenters/packages/detail/package_presenter_spec.rb @@ -50,6 +50,7 @@ RSpec.describe ::Packages::Detail::PackagePresenter do name: package.name, package_files: expected_package_files, package_type: package.package_type, + status: package.status, project_id: package.project_id, tags: package.tags.as_json, updated_at: package.updated_at, @@ -125,6 +126,7 @@ RSpec.describe ::Packages::Detail::PackagePresenter do context 'with nuget_metadatum' do let_it_be(:package) { create(:nuget_package, project: project) } let_it_be(:nuget_metadatum) { create(:nuget_metadatum, package: package) } + let(:expected_package_details) { super().merge(nuget_metadatum: nuget_metadatum) } it 'returns nuget_metadatum' do diff --git a/spec/presenters/packages/npm/package_presenter_spec.rb b/spec/presenters/packages/npm/package_presenter_spec.rb index 0e8cda5bafd..e524edaadc6 100644 --- a/spec/presenters/packages/npm/package_presenter_spec.rb +++ b/spec/presenters/packages/npm/package_presenter_spec.rb @@ -5,6 +5,7 @@ require 'spec_helper' RSpec.describe ::Packages::Npm::PackagePresenter do let_it_be(:project) { create(:project) } let_it_be(:package_name) { "@#{project.root_namespace.path}/test" } + let!(:package1) { create(:npm_package, version: '1.0.4', project: project, name: package_name) } let!(:package2) { create(:npm_package, version: '1.0.6', project: project, name: package_name) } let!(:latest_package) { create(:npm_package, version: '1.0.11', project: project, name: package_name) } @@ -16,8 +17,8 @@ RSpec.describe ::Packages::Npm::PackagePresenter do context 'for packages without dependencies' do it { is_expected.to be_a(Hash) } - it { expect(subject[package1.version]).to match_schema('public_api/v4/packages/npm_package_version') } - it { expect(subject[package2.version]).to match_schema('public_api/v4/packages/npm_package_version') } + it { expect(subject[package1.version].with_indifferent_access).to match_schema('public_api/v4/packages/npm_package_version') } + it { expect(subject[package2.version].with_indifferent_access).to match_schema('public_api/v4/packages/npm_package_version') } described_class::NPM_VALID_DEPENDENCY_TYPES.each do |dependency_type| it { expect(subject.dig(package1.version, dependency_type)).to be nil } @@ -31,8 +32,8 @@ RSpec.describe ::Packages::Npm::PackagePresenter do end it { is_expected.to be_a(Hash) } - it { expect(subject[package1.version]).to match_schema('public_api/v4/packages/npm_package_version') } - it { expect(subject[package2.version]).to match_schema('public_api/v4/packages/npm_package_version') } + it { expect(subject[package1.version].with_indifferent_access).to match_schema('public_api/v4/packages/npm_package_version') } + it { expect(subject[package2.version].with_indifferent_access).to match_schema('public_api/v4/packages/npm_package_version') } described_class::NPM_VALID_DEPENDENCY_TYPES.each do |dependency_type| it { expect(subject.dig(package1.version, dependency_type.to_s)).to be_any } end diff --git a/spec/presenters/packages/nuget/search_results_presenter_spec.rb b/spec/presenters/packages/nuget/search_results_presenter_spec.rb index fed20c8e39d..39ec7251dfd 100644 --- a/spec/presenters/packages/nuget/search_results_presenter_spec.rb +++ b/spec/presenters/packages/nuget/search_results_presenter_spec.rb @@ -11,6 +11,7 @@ RSpec.describe Packages::Nuget::SearchResultsPresenter do let_it_be(:packages_c) { create_list(:nuget_package, 5, project: project, name: 'DummyPackageC') } let_it_be(:search_results) { OpenStruct.new(total_count: 3, results: [package_a, packages_b, packages_c].flatten) } let_it_be(:presenter) { described_class.new(search_results) } + let(:total_count) { presenter.total_count } let(:data) { presenter.data } diff --git a/spec/presenters/project_presenter_spec.rb b/spec/presenters/project_presenter_spec.rb index a9a5ecb3299..c834e183e5e 100644 --- a/spec/presenters/project_presenter_spec.rb +++ b/spec/presenters/project_presenter_spec.rb @@ -72,6 +72,7 @@ RSpec.describe ProjectPresenter do context 'when repository is not empty' do let_it_be(:project) { create(:project, :public, :repository) } + let(:release) { create(:release, project: project, author: user) } it 'returns files and readme if user has repository access' do @@ -271,6 +272,7 @@ RSpec.describe ProjectPresenter do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, :repository) } let_it_be(:release) { create(:release, project: project, author: user) } + let(:presenter) { described_class.new(project, current_user: user) } describe '#files_anchor_data' do @@ -792,6 +794,12 @@ RSpec.describe ProjectPresenter do end end + describe '#add_code_quality_ci_yml_path' do + subject { presenter.add_code_quality_ci_yml_path } + + it { is_expected.to match(/code_quality_walkthrough=true.*template=Code-Quality/) } + end + describe 'empty_repo_upload_experiment?' do subject { presenter.empty_repo_upload_experiment? } diff --git a/spec/presenters/prometheus_alert_presenter_spec.rb b/spec/presenters/prometheus_alert_presenter_spec.rb index b9f18e2be28..739bbaeb98f 100644 --- a/spec/presenters/prometheus_alert_presenter_spec.rb +++ b/spec/presenters/prometheus_alert_presenter_spec.rb @@ -12,6 +12,7 @@ RSpec.describe PrometheusAlertPresenter do subject { presenter.humanized_text } let_it_be(:prometheus_metric) { create(:prometheus_metric, project: project) } + let(:prometheus_alert) { create(:prometheus_alert, operator: operator, project: project, environment: environment, prometheus_metric: prometheus_metric) } let(:operator) { :gt } diff --git a/spec/presenters/release_presenter_spec.rb b/spec/presenters/release_presenter_spec.rb index 4bf12183eff..97c05a1b7a2 100644 --- a/spec/presenters/release_presenter_spec.rb +++ b/spec/presenters/release_presenter_spec.rb @@ -6,6 +6,7 @@ RSpec.describe ReleasePresenter do include Gitlab::Routing.url_helpers let_it_be(:project) { create(:project, :repository) } + let(:developer) { create(:user) } let(:guest) { create(:user) } let(:user) { developer } diff --git a/spec/presenters/service_hook_presenter_spec.rb b/spec/presenters/service_hook_presenter_spec.rb index adef34a882b..bc6e505d9e1 100644 --- a/spec/presenters/service_hook_presenter_spec.rb +++ b/spec/presenters/service_hook_presenter_spec.rb @@ -4,7 +4,7 @@ require 'spec_helper' RSpec.describe ServiceHookPresenter do let(:web_hook_log) { create(:web_hook_log, web_hook: service_hook) } - let(:service_hook) { create(:service_hook, service: service) } + let(:service_hook) { create(:service_hook, integration: service) } let(:service) { create(:drone_ci_service, project: project) } let(:project) { create(:project) } diff --git a/spec/presenters/snippet_blob_presenter_spec.rb b/spec/presenters/snippet_blob_presenter_spec.rb index 83fe37effc0..42eca6b5a49 100644 --- a/spec/presenters/snippet_blob_presenter_spec.rb +++ b/spec/presenters/snippet_blob_presenter_spec.rb @@ -80,45 +80,6 @@ RSpec.describe SnippetBlobPresenter do end end - describe '#plain_data' do - let(:blob) { blob_at(file) } - - subject { described_class.new(blob).plain_data } - - context 'when blob is binary' do - let(:file) { 'files/images/logo-black.png' } - - it 'returns nil' do - expect(subject).to be_nil - end - end - - context 'when blob is markup' do - let(:file) { 'README.md' } - - it 'returns plain content' do - expect(subject).to include('<span id="LC1" class="line" lang="markdown">') - end - end - - context 'when blob has syntax' do - let(:file) { 'files/ruby/regex.rb' } - - it 'returns highlighted syntax content' do - expect(subject) - .to include '<span id="LC1" class="line" lang="ruby"><span class="k">module</span> <span class="nn">Gitlab</span>' - end - end - - context 'when blob has plain data' do - let(:file) { 'LICENSE' } - - it 'returns plain text highlighted content' do - expect(subject).to include('<span id="LC1" class="line" lang="plaintext">The MIT License (MIT)</span>') - end - end - end - describe 'route helpers' do let_it_be(:project) { create(:project) } let_it_be(:user) { create(:user) } diff --git a/spec/presenters/terraform/modules_presenter_spec.rb b/spec/presenters/terraform/modules_presenter_spec.rb new file mode 100644 index 00000000000..f5ad53e16ca --- /dev/null +++ b/spec/presenters/terraform/modules_presenter_spec.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe ::Terraform::ModulesPresenter do + let_it_be(:project) { create(:project) } + let_it_be(:module_system) { 'my-system' } + let_it_be(:package_name) { "my-module/#{module_system}" } + let_it_be(:package1) { create(:terraform_module_package, version: '1.0.1', project: project, name: package_name) } + let_it_be(:package2) { create(:terraform_module_package, version: '1.0.10', project: project, name: package_name) } + + let(:packages) { project.packages.terraform_module.with_name(package_name) } + let(:presenter) { described_class.new(packages, module_system) } + + describe '#modules' do + subject { presenter.modules } + + it { is_expected.to be_an(Array) } + it { expect(subject.first).to be_a(Hash) } + it { expect(subject).to match_schema('public_api/v4/packages/terraform/modules/v1/modules') } + end +end diff --git a/spec/presenters/user_presenter_spec.rb b/spec/presenters/user_presenter_spec.rb index fdc20216a02..9c51c0b0078 100644 --- a/spec/presenters/user_presenter_spec.rb +++ b/spec/presenters/user_presenter_spec.rb @@ -4,6 +4,7 @@ require 'spec_helper' RSpec.describe UserPresenter do let_it_be(:user) { create(:user) } + subject(:presenter) { described_class.new(user) } describe '#web_path' do diff --git a/spec/presenters/web_hook_log_presenter_spec.rb b/spec/presenters/web_hook_log_presenter_spec.rb index 68c8c6e2a1b..ec930be266d 100644 --- a/spec/presenters/web_hook_log_presenter_spec.rb +++ b/spec/presenters/web_hook_log_presenter_spec.rb @@ -18,7 +18,7 @@ RSpec.describe WebHookLogPresenter do end context 'service hook' do - let(:web_hook) { create(:service_hook, service: service) } + let(:web_hook) { create(:service_hook, integration: service) } let(:service) { create(:drone_ci_service, project: project) } it { is_expected.to eq(project_service_hook_log_path(project, service, web_hook_log)) } @@ -38,7 +38,7 @@ RSpec.describe WebHookLogPresenter do end context 'service hook' do - let(:web_hook) { create(:service_hook, service: service) } + let(:web_hook) { create(:service_hook, integration: service) } let(:service) { create(:drone_ci_service, project: project) } it { is_expected.to eq(retry_project_service_hook_log_path(project, service, web_hook_log)) } |