diff options
author | Robert Speicher <rspeicher@gmail.com> | 2021-01-20 22:34:23 +0300 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2021-01-20 22:34:23 +0300 |
commit | 6438df3a1e0fb944485cebf07976160184697d72 (patch) | |
tree | 00b09bfd170e77ae9391b1a2f5a93ef6839f2597 /spec/serializers | |
parent | 42bcd54d971da7ef2854b896a7b34f4ef8601067 (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.rb | 56 | ||||
-rw-r--r-- | spec/serializers/build_details_entity_spec.rb | 39 | ||||
-rw-r--r-- | spec/serializers/deploy_key_entity_spec.rb | 8 | ||||
-rw-r--r-- | spec/serializers/diffs_metadata_entity_spec.rb | 1 | ||||
-rw-r--r-- | spec/serializers/environment_entity_spec.rb | 22 | ||||
-rw-r--r-- | spec/serializers/member_entity_spec.rb | 71 | ||||
-rw-r--r-- | spec/serializers/member_serializer_spec.rb | 32 | ||||
-rw-r--r-- | spec/serializers/member_user_entity_spec.rb | 38 | ||||
-rw-r--r-- | spec/serializers/merge_request_poll_cached_widget_entity_spec.rb | 12 | ||||
-rw-r--r-- | spec/serializers/merge_request_widget_entity_spec.rb | 11 | ||||
-rw-r--r-- | spec/serializers/merge_requests/pipeline_entity_spec.rb | 4 | ||||
-rw-r--r-- | spec/serializers/pipeline_details_entity_spec.rb | 2 | ||||
-rw-r--r-- | spec/serializers/runner_entity_spec.rb | 2 |
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) |