Fix Error 500 when forking projects with Gravatar disabled

When Gravatar is disabled, the "no avatar" is used, which failed
to revert to the colorful identity icons for namespaces.

Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/50254
This commit is contained in:
Stan Hu 2018-09-28 06:58:30 -04:00
parent 790eabcaf4
commit b49e6b419a
6 changed files with 28 additions and 40 deletions

View file

@ -1,12 +1,12 @@
# frozen_string_literal: true # frozen_string_literal: true
module AvatarsHelper module AvatarsHelper
def project_icon(project_id, options = {}) def project_icon(project, options = {})
source_icon(Project, project_id, options) source_icon(project, options)
end end
def group_icon(group_id, options = {}) def group_icon(group, options = {})
source_icon(Group, group_id, options) source_icon(group, options)
end end
# Takes both user and email and returns the avatar_icon by # Takes both user and email and returns the avatar_icon by
@ -110,16 +110,11 @@ module AvatarsHelper
private private
def source_icon(klass, source_id, options = {}) def source_icon(source, options = {})
source = avatar_url = source.try(:avatar_url)
if source_id.respond_to?(:avatar_url)
source_id
else
klass.find_by_full_path(source_id)
end
if source.avatar_url if avatar_url
image_tag source.avatar_url, options image_tag avatar_url, options
else else
source_identicon(source, options) source_identicon(source, options)
end end

View file

@ -47,7 +47,7 @@
.form-group .form-group
- if @project.avatar? - if @project.avatar?
.avatar-container.s160.append-bottom-15 .avatar-container.s160.append-bottom-15
= project_icon(@project.full_path, alt: '', class: 'avatar project-avatar s160', width: 160, height: 160) = project_icon(@project, alt: '', class: 'avatar project-avatar s160', width: 160, height: 160)
- if @project.avatar_in_git - if @project.avatar_in_git
%p.light %p.light
= _("Project avatar in repository: %{link}").html_safe % { link: @project.avatar_in_git } = _("Project avatar in repository: %{link}").html_safe % { link: @project.avatar_in_git }

View file

@ -5,7 +5,7 @@
.bordered-box.fork-thumbnail.text-center.prepend-left-default.append-right-default.prepend-top-default.append-bottom-default.forked .bordered-box.fork-thumbnail.text-center.prepend-left-default.append-right-default.prepend-top-default.append-bottom-default.forked
= link_to project_path(forked_project) do = link_to project_path(forked_project) do
- if /no_((\w*)_)*avatar/.match(avatar) - if /no_((\w*)_)*avatar/.match(avatar)
= project_icon(namespace, class: "avatar s100 identicon") = group_icon(namespace, class: "avatar s100 identicon")
- else - else
.avatar-container.s100 .avatar-container.s100
= image_tag(avatar, class: "avatar s100") = image_tag(avatar, class: "avatar s100")
@ -18,7 +18,7 @@
class: ("disabled has-tooltip" unless can_create_project), class: ("disabled has-tooltip" unless can_create_project),
title: (_('You have reached your project limit') unless can_create_project) do title: (_('You have reached your project limit') unless can_create_project) do
- if /no_((\w*)_)*avatar/.match(avatar) - if /no_((\w*)_)*avatar/.match(avatar)
= project_icon(namespace, class: "avatar s100 identicon") = group_icon(namespace, class: "avatar s100 identicon")
- else - else
.avatar-container.s100 .avatar-container.s100
= image_tag(avatar, class: "avatar s100") = image_tag(avatar, class: "avatar s100")

View file

@ -0,0 +1,5 @@
---
title: Fix Error 500 when forking projects with Gravatar disabled
merge_request:
author:
type: fixed

View file

@ -53,6 +53,18 @@ describe 'Project fork' do
expect(current_path).to have_content(/#{user.namespace.name}/i) expect(current_path).to have_content(/#{user.namespace.name}/i)
end end
it 'shows avatars when Gravatar is disabled' do
stub_application_setting(gravatar_enabled: false)
visit project_path(project)
click_link 'Fork'
page.within('.fork-thumbnail-container') do
expect(page).to have_css('div.identicon')
end
end
it 'shows the forked project on the list' do it 'shows the forked project on the list' do
visit project_path(project) visit project_path(project)

View file

@ -32,18 +32,6 @@ describe AvatarsHelper do
end end
end end
context 'when providing a project path' do
it_behaves_like 'resource with a default avatar', 'project' do
let(:resource) { create(:project, name: 'foo') }
let(:helper_args) { [resource.full_path] }
end
it_behaves_like 'resource with a custom avatar', 'project' do
let(:resource) { create(:project, :public, avatar: File.open(uploaded_image_temp_path)) }
let(:helper_args) { [resource.full_path] }
end
end
context 'when providing a group' do context 'when providing a group' do
it_behaves_like 'resource with a default avatar', 'group' do it_behaves_like 'resource with a default avatar', 'group' do
let(:resource) { create(:group, name: 'foo') } let(:resource) { create(:group, name: 'foo') }
@ -55,18 +43,6 @@ describe AvatarsHelper do
let(:helper_args) { [resource] } let(:helper_args) { [resource] }
end end
end end
context 'when providing a group path' do
it_behaves_like 'resource with a default avatar', 'group' do
let(:resource) { create(:group, name: 'foo') }
let(:helper_args) { [resource.full_path] }
end
it_behaves_like 'resource with a custom avatar', 'group' do
let(:resource) { create(:group, avatar: File.open(uploaded_image_temp_path)) }
let(:helper_args) { [resource.full_path] }
end
end
end end
describe '#avatar_icon_for' do describe '#avatar_icon_for' do