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:
authorRobert Speicher <rspeicher@gmail.com>2021-01-20 22:34:23 +0300
committerRobert Speicher <rspeicher@gmail.com>2021-01-20 22:34:23 +0300
commit6438df3a1e0fb944485cebf07976160184697d72 (patch)
tree00b09bfd170e77ae9391b1a2f5a93ef6839f2597 /spec/serializers
parent42bcd54d971da7ef2854b896a7b34f4ef8601067 (diff)
Add latest changes from gitlab-org/gitlab@13-8-stable-eev13.8.0-rc42
Diffstat (limited to 'spec/serializers')
-rw-r--r--spec/serializers/analytics_stage_serializer_spec.rb56
-rw-r--r--spec/serializers/build_details_entity_spec.rb39
-rw-r--r--spec/serializers/deploy_key_entity_spec.rb8
-rw-r--r--spec/serializers/diffs_metadata_entity_spec.rb1
-rw-r--r--spec/serializers/environment_entity_spec.rb22
-rw-r--r--spec/serializers/member_entity_spec.rb71
-rw-r--r--spec/serializers/member_serializer_spec.rb32
-rw-r--r--spec/serializers/member_user_entity_spec.rb38
-rw-r--r--spec/serializers/merge_request_poll_cached_widget_entity_spec.rb12
-rw-r--r--spec/serializers/merge_request_widget_entity_spec.rb11
-rw-r--r--spec/serializers/merge_requests/pipeline_entity_spec.rb4
-rw-r--r--spec/serializers/pipeline_details_entity_spec.rb2
-rw-r--r--spec/serializers/runner_entity_spec.rb2
13 files changed, 223 insertions, 75 deletions
diff --git a/spec/serializers/analytics_stage_serializer_spec.rb b/spec/serializers/analytics_stage_serializer_spec.rb
deleted file mode 100644
index 0f2de262188..00000000000
--- a/spec/serializers/analytics_stage_serializer_spec.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe AnalyticsStageSerializer do
- subject do
- described_class.new.represent(resource)
- end
-
- let(:resource) do
- Gitlab::CycleAnalytics::CodeStage.new(options: { project: double })
- end
-
- before do
- allow_any_instance_of(Gitlab::CycleAnalytics::BaseStage).to receive(:project_median).and_return(1.12)
- allow_any_instance_of(Gitlab::CycleAnalytics::BaseEventFetcher).to receive(:event_result).and_return({})
- end
-
- it 'generates payload for single object' do
- expect(subject).to be_kind_of Hash
- end
-
- it 'contains important elements of AnalyticsStage' do
- expect(subject).to include(:title, :description, :value)
- end
-
- context 'when median is equal 0' do
- before do
- allow_any_instance_of(Gitlab::CycleAnalytics::BaseStage).to receive(:project_median).and_return(0)
- end
-
- it 'sets the value to nil' do
- expect(subject.fetch(:value)).to be_nil
- end
- end
-
- context 'when median is below 1' do
- before do
- allow_any_instance_of(Gitlab::CycleAnalytics::BaseStage).to receive(:project_median).and_return(0.12)
- end
-
- it 'sets the value to equal to median' do
- expect(subject.fetch(:value)).to eq('less than a minute')
- end
- end
-
- context 'when median is above 1' do
- before do
- allow_any_instance_of(Gitlab::CycleAnalytics::BaseStage).to receive(:project_median).and_return(60.12)
- end
-
- it 'sets the value to equal to median' do
- expect(subject.fetch(:value)).to eq('1 minute')
- end
- end
-end
diff --git a/spec/serializers/build_details_entity_spec.rb b/spec/serializers/build_details_entity_spec.rb
index 5d29452e91c..4a58f341658 100644
--- a/spec/serializers/build_details_entity_spec.rb
+++ b/spec/serializers/build_details_entity_spec.rb
@@ -5,14 +5,13 @@ require 'spec_helper'
RSpec.describe BuildDetailsEntity do
include ProjectForksHelper
- let_it_be(:user) { create(:admin) }
-
it 'inherits from JobEntity' do
expect(described_class).to be < JobEntity
end
describe '#as_json' do
let(:project) { create(:project, :repository) }
+ let(:user) { project.owner }
let(:pipeline) { create(:ci_pipeline, project: project) }
let(:build) { create(:ci_build, :failed, pipeline: pipeline) }
let(:request) { double('request', project: project) }
@@ -66,6 +65,7 @@ RSpec.describe BuildDetailsEntity do
before do
allow(build).to receive(:merge_request).and_return(merge_request)
+ forked_project.add_developer(user)
end
let(:merge_request) do
@@ -186,7 +186,7 @@ RSpec.describe BuildDetailsEntity do
end
context 'when the build has expired artifacts' do
- let!(:build) { create(:ci_build, :artifacts, artifacts_expire_at: 7.days.ago) }
+ let!(:build) { create(:ci_build, :artifacts, pipeline: pipeline, artifacts_expire_at: 7.days.ago) }
context 'when pipeline is unlocked' do
before do
@@ -218,12 +218,43 @@ RSpec.describe BuildDetailsEntity do
end
context 'when the build has archive type artifacts' do
- let!(:build) { create(:ci_build, :artifacts, artifacts_expire_at: 7.days.from_now) }
+ let!(:build) { create(:ci_build, :artifacts, pipeline: pipeline, artifacts_expire_at: 7.days.from_now) }
let!(:report) { create(:ci_job_artifact, :codequality, job: build) }
it 'exposes artifact details' do
expect(subject[:artifact].keys).to include(:download_path, :browse_path, :keep_path, :expire_at, :expired, :locked)
end
end
+
+ context 'when the project is public and the user is a guest' do
+ let(:project) { create(:project, :repository, :public) }
+ let(:user) { create(:project_member, :guest, project: project).user }
+
+ context 'when the build has public archive type artifacts' do
+ let(:build) { create(:ci_build, :artifacts) }
+
+ it 'exposes public artifact details' do
+ expect(subject[:artifact].keys).to include(:download_path, :browse_path, :locked)
+ end
+ end
+
+ context 'when the build has non public archive type artifacts' do
+ let(:build) { create(:ci_build, :artifacts, :non_public_artifacts, pipeline: pipeline) }
+
+ it 'does not expose non public artifacts' do
+ expect(subject.keys).not_to include(:artifact)
+ end
+
+ context 'with the non_public_artifacts feature flag disabled' do
+ before do
+ stub_feature_flags(non_public_artifacts: false)
+ end
+
+ it 'exposes artifact details' do
+ expect(subject[:artifact].keys).to include(:download_path, :browse_path, :locked)
+ end
+ end
+ end
+ end
end
end
diff --git a/spec/serializers/deploy_key_entity_spec.rb b/spec/serializers/deploy_key_entity_spec.rb
index 3404d27a23c..e8d9701be67 100644
--- a/spec/serializers/deploy_key_entity_spec.rb
+++ b/spec/serializers/deploy_key_entity_spec.rb
@@ -52,7 +52,13 @@ RSpec.describe DeployKeyEntity do
context 'user is an admin' do
let(:user) { create(:user, :admin) }
- it { expect(entity.as_json).to include(can_edit: true) }
+ context 'when admin mode is enabled', :enable_admin_mode do
+ it { expect(entity.as_json).to include(can_edit: true) }
+ end
+
+ context 'when admin mode is disabled' do
+ it { expect(entity.as_json).not_to include(can_edit: true) }
+ end
end
context 'user is a project maintainer' do
diff --git a/spec/serializers/diffs_metadata_entity_spec.rb b/spec/serializers/diffs_metadata_entity_spec.rb
index e8cbc2076d7..f6993d4652e 100644
--- a/spec/serializers/diffs_metadata_entity_spec.rb
+++ b/spec/serializers/diffs_metadata_entity_spec.rb
@@ -31,6 +31,7 @@ RSpec.describe DiffsMetadataEntity do
:merge_request_diffs, :context_commits,
:definition_path_prefix, :source_branch_exists,
:can_merge, :conflict_resolution_path, :has_conflicts,
+ :project_name, :project_path, :user_full_name, :username,
# Attributes
:diff_files
)
diff --git a/spec/serializers/environment_entity_spec.rb b/spec/serializers/environment_entity_spec.rb
index 5b83507b4ec..a6101f825e9 100644
--- a/spec/serializers/environment_entity_spec.rb
+++ b/spec/serializers/environment_entity_spec.rb
@@ -3,9 +3,10 @@
require 'spec_helper'
RSpec.describe EnvironmentEntity do
+ include KubernetesHelpers
include Gitlab::Routing.url_helpers
- let(:request) { double('request') }
+ let(:request) { double('request', current_user: user, project: project) }
let(:entity) do
described_class.new(environment, request: request)
end
@@ -167,4 +168,23 @@ RSpec.describe EnvironmentEntity do
end
end
end
+
+ context 'with deployment service ready' do
+ before do
+ allow(environment).to receive(:has_terminals?).and_return(true)
+ allow(environment).to receive(:rollout_status).and_return(kube_deployment_rollout_status)
+ end
+
+ it 'exposes rollout_status' do
+ expect(subject).to include(:rollout_status)
+ end
+ end
+
+ context 'with deployment service not ready' do
+ let(:user) { create(:user) }
+
+ it 'does not expose rollout_status' do
+ expect(subject).not_to include(:rollout_status)
+ end
+ end
end
diff --git a/spec/serializers/member_entity_spec.rb b/spec/serializers/member_entity_spec.rb
new file mode 100644
index 00000000000..f34434188c1
--- /dev/null
+++ b/spec/serializers/member_entity_spec.rb
@@ -0,0 +1,71 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe MemberEntity do
+ let_it_be(:current_user) { create(:user) }
+ let(:entity) { described_class.new(member, { current_user: current_user, group: group }) }
+ let(:entity_hash) { entity.as_json }
+
+ shared_examples 'member.json' do
+ it 'matches json schema' do
+ expect(entity.to_json).to match_schema('entities/member')
+ end
+
+ it 'correctly exposes `can_update`' do
+ allow(member).to receive(:can_update?).and_return(true)
+
+ expect(entity_hash[:can_update]).to be(true)
+ end
+
+ it 'correctly exposes `can_remove`' do
+ allow(member).to receive(:can_remove?).and_return(true)
+
+ expect(entity_hash[:can_remove]).to be(true)
+ end
+ end
+
+ shared_examples 'invite' do
+ it 'correctly exposes `invite.avatar_url`' do
+ avatar_url = 'https://www.gravatar.com/avatar/c4637cb869d5f94c3193bde4f23d4cdc?s=80&d=identicon'
+ allow(entity).to receive(:avatar_icon_for_email).with(member.invite_email, Member::AVATAR_SIZE).and_return(avatar_url)
+
+ expect(entity_hash[:invite][:avatar_url]).to match(avatar_url)
+ end
+
+ it 'correctly exposes `invite.can_resend`' do
+ allow(member).to receive(:can_resend_invite?).and_return(true)
+
+ expect(entity_hash[:invite][:can_resend]).to be(true)
+ end
+ end
+
+ context 'group member' do
+ let(:group) { create(:group) }
+ let(:member) { GroupMemberPresenter.new(create(:group_member, group: group), current_user: current_user) }
+
+ it_behaves_like 'member.json'
+
+ context 'invite' do
+ let(:member) { GroupMemberPresenter.new(create(:group_member, :invited, group: group), current_user: current_user) }
+
+ it_behaves_like 'member.json'
+ it_behaves_like 'invite'
+ end
+ end
+
+ context 'project member' do
+ let(:project) { create(:project) }
+ let(:group) { project.group }
+ let(:member) { ProjectMemberPresenter.new(create(:project_member, project: project), current_user: current_user) }
+
+ it_behaves_like 'member.json'
+
+ context 'invite' do
+ let(:member) { ProjectMemberPresenter.new(create(:project_member, :invited, project: project), current_user: current_user) }
+
+ it_behaves_like 'member.json'
+ it_behaves_like 'invite'
+ end
+ end
+end
diff --git a/spec/serializers/member_serializer_spec.rb b/spec/serializers/member_serializer_spec.rb
new file mode 100644
index 00000000000..d3ec45fe9c4
--- /dev/null
+++ b/spec/serializers/member_serializer_spec.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe MemberSerializer do
+ include MembersPresentation
+
+ let_it_be(:current_user) { create(:user) }
+
+ subject { described_class.new.represent(members, { current_user: current_user, group: group }) }
+
+ shared_examples 'members.json' do
+ it 'matches json schema' do
+ expect(subject.to_json).to match_schema('members')
+ end
+ end
+
+ context 'group member' do
+ let(:group) { create(:group) }
+ let(:members) { present_members(create_list(:group_member, 1, group: group)) }
+
+ it_behaves_like 'members.json'
+ end
+
+ context 'project member' do
+ let(:project) { create(:project) }
+ let(:group) { project.group }
+ let(:members) { present_members(create_list(:project_member, 1, project: project)) }
+
+ it_behaves_like 'members.json'
+ end
+end
diff --git a/spec/serializers/member_user_entity_spec.rb b/spec/serializers/member_user_entity_spec.rb
new file mode 100644
index 00000000000..1c000c06bb6
--- /dev/null
+++ b/spec/serializers/member_user_entity_spec.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe MemberUserEntity do
+ let_it_be(:user) { create(:user) }
+ let_it_be(:emoji) { 'slight_smile' }
+ let_it_be(:user_status) { create(:user_status, user: user, emoji: emoji) }
+ let(:entity) { described_class.new(user) }
+ let(:entity_hash) { entity.as_json }
+
+ it 'matches json schema' do
+ expect(entity.to_json).to match_schema('entities/member_user')
+ end
+
+ it 'correctly exposes `avatar_url`' do
+ avatar_url = 'https://www.gravatar.com/avatar/c4637cb869d5f94c3193bde4f23d4cdc?s=80&d=identicon'
+ allow(user).to receive(:avatar_url).and_return(avatar_url)
+
+ expect(entity_hash[:avatar_url]).to match(avatar_url)
+ end
+
+ it 'correctly exposes `blocked`' do
+ allow(user).to receive(:blocked?).and_return(true)
+
+ expect(entity_hash[:blocked]).to be(true)
+ end
+
+ it 'correctly exposes `two_factor_enabled`' do
+ allow(user).to receive(:two_factor_enabled?).and_return(true)
+
+ expect(entity_hash[:two_factor_enabled]).to be(true)
+ end
+
+ it 'correctly exposes `status.emoji`' do
+ expect(entity_hash[:status][:emoji]).to match(emoji)
+ end
+end
diff --git a/spec/serializers/merge_request_poll_cached_widget_entity_spec.rb b/spec/serializers/merge_request_poll_cached_widget_entity_spec.rb
index 031dc729a79..8c72430ff5c 100644
--- a/spec/serializers/merge_request_poll_cached_widget_entity_spec.rb
+++ b/spec/serializers/merge_request_poll_cached_widget_entity_spec.rb
@@ -8,6 +8,7 @@ RSpec.describe MergeRequestPollCachedWidgetEntity do
let_it_be(:project, refind: true) { create :project, :repository }
let_it_be(:resource, refind: true) { create(:merge_request, source_project: project, target_project: project) }
let_it_be(:user) { create(:user) }
+ let(:pipeline) { create(:ci_empty_pipeline, project: project) }
let(:request) { double('request', current_user: user, project: project) }
@@ -25,6 +26,17 @@ RSpec.describe MergeRequestPollCachedWidgetEntity do
expect(subject[:merge_status]).to eq 'checking'
end
+ it 'has blob path data' do
+ allow(resource).to receive_messages(
+ base_pipeline: pipeline,
+ head_pipeline: pipeline
+ )
+
+ expect(subject).to include(:blob_path)
+ expect(subject[:blob_path]).to include(:base_path)
+ expect(subject[:blob_path]).to include(:head_path)
+ end
+
describe 'diverged_commits_count' do
context 'when MR open and its diverging' do
it 'returns diverged commits count' do
diff --git a/spec/serializers/merge_request_widget_entity_spec.rb b/spec/serializers/merge_request_widget_entity_spec.rb
index 9f734c08ef4..42d843af596 100644
--- a/spec/serializers/merge_request_widget_entity_spec.rb
+++ b/spec/serializers/merge_request_widget_entity_spec.rb
@@ -76,17 +76,6 @@ RSpec.describe MergeRequestWidgetEntity do
.to eq("/#{resource.project.full_path}/-/merge_requests/#{resource.iid}.diff")
end
- it 'has blob path data' do
- allow(resource).to receive_messages(
- base_pipeline: pipeline,
- head_pipeline: pipeline
- )
-
- expect(subject).to include(:blob_path)
- expect(subject[:blob_path]).to include(:base_path)
- expect(subject[:blob_path]).to include(:head_path)
- end
-
describe 'codequality report artifacts', :request_store do
let(:merge_base_pipeline) { create(:ci_pipeline, :with_codequality_report, project: project) }
diff --git a/spec/serializers/merge_requests/pipeline_entity_spec.rb b/spec/serializers/merge_requests/pipeline_entity_spec.rb
index 8685d4bb846..b91d5e7679f 100644
--- a/spec/serializers/merge_requests/pipeline_entity_spec.rb
+++ b/spec/serializers/merge_requests/pipeline_entity_spec.rb
@@ -30,7 +30,7 @@ RSpec.describe MergeRequests::PipelineEntity do
)
expect(subject[:commit]).to include(:short_id, :commit_path)
expect(subject[:ref]).to include(:branch)
- expect(subject[:details]).to include(:name, :status, :stages)
+ expect(subject[:details]).to include(:artifacts, :name, :status, :stages)
expect(subject[:details][:status]).to include(:icon, :favicon, :text, :label, :tooltip)
expect(subject[:flags]).to include(:merge_request_pipeline)
end
@@ -42,4 +42,6 @@ RSpec.describe MergeRequests::PipelineEntity do
expect(entity.as_json).not_to include(:coverage)
end
end
+
+ it_behaves_like 'public artifacts'
end
diff --git a/spec/serializers/pipeline_details_entity_spec.rb b/spec/serializers/pipeline_details_entity_spec.rb
index 1357836cb89..74e91cc9cdd 100644
--- a/spec/serializers/pipeline_details_entity_spec.rb
+++ b/spec/serializers/pipeline_details_entity_spec.rb
@@ -183,5 +183,7 @@ RSpec.describe PipelineDetailsEntity do
expect(source_jobs[child_pipeline.id][:name]).to eq('child')
end
end
+
+ it_behaves_like 'public artifacts'
end
end
diff --git a/spec/serializers/runner_entity_spec.rb b/spec/serializers/runner_entity_spec.rb
index 84c7d1720e2..e864b52c0f2 100644
--- a/spec/serializers/runner_entity_spec.rb
+++ b/spec/serializers/runner_entity_spec.rb
@@ -7,7 +7,7 @@ RSpec.describe RunnerEntity do
let(:runner) { create(:ci_runner, :project, projects: [project]) }
let(:entity) { described_class.new(runner, request: request, current_user: user) }
let(:request) { double('request') }
- let(:user) { create(:admin) }
+ let(:user) { project.owner }
before do
allow(request).to receive(:current_user).and_return(user)