Commit a3c24add466eeea2cb2ba6c828298f9cee197805

Authored by Caio Almeida
Committed by Larissa Reis
1 parent 955d5e2a

Ticket #262: Fixed link to profile image

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
... ...