Commit a3c24add466eeea2cb2ba6c828298f9cee197805
Committed by
Larissa Reis
1 parent
955d5e2a
Exists in
federation-webfinger
Ticket #262: Fixed link to profile image
Showing
4 changed files
with
54 additions
and
0 deletions
Show diff stats
app/controllers/public/profile_controller.rb
... | ... | @@ -395,6 +395,17 @@ class ProfileController < PublicController |
395 | 395 | end |
396 | 396 | end |
397 | 397 | |
398 | + def icon | |
399 | + size = params[:size] || :portrait | |
400 | + image, mime = profile_icon(profile, size.to_sym, true) | |
401 | + | |
402 | + unless image.match(/^\/\/www\.gravatar\.com/).nil? | |
403 | + redirect_to 'https:' + image | |
404 | + else | |
405 | + @file = File.join(Rails.root, 'public', image) | |
406 | + send_file @file, type: mime, disposition: 'inline' | |
407 | + end | |
408 | + end | |
398 | 409 | |
399 | 410 | protected |
400 | 411 | ... | ... |
config/routes.rb
... | ... | @@ -86,6 +86,9 @@ Noosfero::Application.routes.draw do |
86 | 86 | |
87 | 87 | # comments |
88 | 88 | match 'profile/:profile/comment/:action/:id', controller: 'comment', profile: /#{Noosfero.identifier_format_in_url}/i, via: :all |
89 | + | |
90 | + # icon | |
91 | + match 'profile/:profile/icon(/:size)', controller: 'profile', action: 'icon', size: /(big|minor|thumb|portrait|icon)/, profile: /#{Noosfero.identifier_format_in_url}/i, via: :get | |
89 | 92 | |
90 | 93 | # public profile information |
91 | 94 | match 'profile/:profile(/:action(/:id))', controller: 'profile', action: 'index', id: /[^\/]*/, profile: /#{Noosfero.identifier_format_in_url}/i, as: :profile, via: :all | ... | ... |
test/functional/profile_controller_test.rb
... | ... | @@ -1932,4 +1932,37 @@ class ProfileControllerTest < ActionController::TestCase |
1932 | 1932 | assert_redirected_to :controller => 'account', :action => 'login' |
1933 | 1933 | end |
1934 | 1934 | |
1935 | + should 'return portrait icon if size is not provided and there is a profile image' do | |
1936 | + img = Image.create!(uploaded_data: fixture_file_upload('/files/rails.png', 'image/png')) | |
1937 | + profile = fast_create(Person, image_id: img.id) | |
1938 | + | |
1939 | + get :icon, profile: profile.identifier, size: nil | |
1940 | + assert_response :success | |
1941 | + assert_equal 'image/png', @response.header['Content-Type'] | |
1942 | + assert File.exists?(assigns(:file)) | |
1943 | + end | |
1944 | + | |
1945 | + should 'return icon in provided size if there is a profile image' do | |
1946 | + img = Image.create!(uploaded_data: fixture_file_upload('/files/rails.png', 'image/png')) | |
1947 | + profile = fast_create(Person, image_id: img.id) | |
1948 | + | |
1949 | + get :icon, profile: profile.identifier, size: :big | |
1950 | + assert_response :success | |
1951 | + assert_equal 'image/png', @response.header['Content-Type'] | |
1952 | + assert File.exists?(assigns(:file)) | |
1953 | + end | |
1954 | + | |
1955 | + should 'return icon from gravatar without size if there is no profile image' do | |
1956 | + profile = fast_create(Person) | |
1957 | + | |
1958 | + get :icon, profile: profile.identifier | |
1959 | + assert_redirected_to /^https:\/\/www\.gravatar\.com\/.*/ | |
1960 | + end | |
1961 | + | |
1962 | + should 'return icon from gravatar with size if there is no profile image' do | |
1963 | + profile = fast_create(Person) | |
1964 | + | |
1965 | + get :icon, profile: profile.identifier, size: :thumb | |
1966 | + assert_redirected_to /^https:\/\/www\.gravatar\.com\/.*/ | |
1967 | + end | |
1935 | 1968 | end | ... | ... |
test/integration/routing_test.rb
... | ... | @@ -276,4 +276,11 @@ class RoutingTest < ActionDispatch::IntegrationTest |
276 | 276 | assert_routing('/profile/~', :controller => 'profile', :profile => '~', :action => 'index') |
277 | 277 | end |
278 | 278 | |
279 | + should 'have route to profile icon without size' do | |
280 | + assert_routing('/profile/ze/icon', controller: 'profile', profile: 'ze', action: 'icon') | |
281 | + end | |
282 | + | |
283 | + should 'have route to profile icon with supported size' do | |
284 | + assert_routing('/profile/ze/icon/big', controller: 'profile', profile: 'ze', action: 'icon', size: 'big') | |
285 | + end | |
279 | 286 | end | ... | ... |