Commit e0a279d0b395cd24a236ea751e999f535f03d84f

Authored by Larissa Reis
1 parent 89a5dc27

Fixes failing tests

app/api/app.rb
... ... @@ -11,7 +11,30 @@ module Api
11 11 mount Federation::Webfinger
12 12 end
13 13  
14   - class BaseApi < Grape::API
  14 + class App < Grape::API
  15 + use Rack::JSONP
  16 +
  17 + logger = Logger.new(File.join(Rails.root, 'log', "#{ENV['RAILS_ENV'] || 'production'}_api.log"))
  18 + logger.formatter = GrapeLogging::Formatters::Default.new
  19 + #use GrapeLogging::Middleware::RequestLogger, { logger: logger }
  20 +
  21 + rescue_from :all do |e|
  22 + logger.error e
  23 + error! e.message, 500
  24 + end unless Rails.env.test?
  25 +
  26 + @@NOOSFERO_CONF = nil
  27 + def self.NOOSFERO_CONF
  28 + if @@NOOSFERO_CONF
  29 + @@NOOSFERO_CONF
  30 + else
  31 + file = Rails.root.join('config', 'noosfero.yml')
  32 + @@NOOSFERO_CONF = File.exists?(file) ? YAML.load_file(file)[Rails.env] || {} : {}
  33 + end
  34 + end
  35 +
  36 + mount NoosferoFederation
  37 +
15 38 before { set_locale }
16 39 before { setup_multitenancy }
17 40 before { detect_stuff_by_domain }
... ... @@ -43,31 +66,7 @@ module Api
43 66 mount V1::Blocks
44 67 mount V1::Profiles
45 68 mount V1::Activities
46   - end
47   -
48   - class App < Grape::API
49   - use Rack::JSONP
50   -
51   - logger = Logger.new(File.join(Rails.root, 'log', "#{ENV['RAILS_ENV'] || 'production'}_api.log"))
52   - logger.formatter = GrapeLogging::Formatters::Default.new
53   - #use GrapeLogging::Middleware::RequestLogger, { logger: logger }
54 69  
55   - rescue_from :all do |e|
56   - logger.error e
57   - error! e.message, 500
58   - end unless Rails.env.test?
59   -
60   - @@NOOSFERO_CONF = nil
61   - def self.NOOSFERO_CONF
62   - if @@NOOSFERO_CONF
63   - @@NOOSFERO_CONF
64   - else
65   - file = Rails.root.join('config', 'noosfero.yml')
66   - @@NOOSFERO_CONF = File.exists?(file) ? YAML.load_file(file)[Rails.env] || {} : {}
67   - end
68   - end
69   - mount BaseApi
70   - mount NoosferoFederation
71 70 # hook point which allow plugins to add Grape::API extensions to Api::App
72 71 #finds for plugins which has api mount points classes defined (the class should extends Grape::API)
73 72 @plugins = Noosfero::Plugin.all.map { |p| p.constantize }
... ...
app/api/federation/webfinger.rb
... ... @@ -44,7 +44,7 @@ def acct_hash
44 44 acct = Hash.new{|hash, key| hash[key] = Hash.new{|hash, key| hash[key] = Array.new}}
45 45 url = rails.options[:Host] + ':' + rails.options[:Port].to_s + '/'
46 46 person = Person.find_by_identifier(extract_person_identifier)
47   -
  47 +
48 48 if person.nil?
49 49 Rails.logger.error 'Person not found'
50 50 not_found!
... ...
app/api/v1/activities.rb
1 1 module Api
2 2 module V1
3 3 class Activities < Grape::API
4   -
  4 +
5 5 resource :profiles do
6 6  
7 7 get ':id/activities' do
... ... @@ -9,7 +9,7 @@ module Api
9 9  
10 10 not_found! if profile.blank? || profile.secret || !profile.visible
11 11 forbidden! if !profile.display_private_info_to?(current_person)
12   -
  12 +
13 13 activities = profile.activities.map(&:activity)
14 14 present activities, :with => Entities::Activity, :current_person => current_person
15 15 end
... ...
app/api/v1/articles.rb
... ... @@ -64,7 +64,7 @@ module Api
64 64 render_api_error!(_('The article couldn\'t be removed due to some problem. Please contact the administrator.'), 400)
65 65 end
66 66 end
67   -
  67 +
68 68 desc 'Report a abuse and/or violent content in a article by id' do
69 69 detail 'Submit a abuse (in general, a content violation) report about a specific article'
70 70 params Entities::Article.documentation
... ...
app/concerns/authenticated_system.rb
... ... @@ -27,8 +27,8 @@ module AuthenticatedSystem
27 27 @current_user ||= begin
28 28 user = nil
29 29 if session[:external]
30   - user = User.new #FIXME: User needs to have at least email
31   - external_person = ExternalPerson.where(id: session[:external]).last
  30 + user = User.new
  31 + external_person = ExternalPerson.find_by(id: session[:external])
32 32 if external_person
33 33 user.external_person_id = external_person.id
34 34 user.email = external_person.email
... ... @@ -36,8 +36,7 @@ module AuthenticatedSystem
36 36 session[:external] = nil
37 37 end
38 38 else
39   - id = session[:user]
40   - user = User.where(id: id).first if id
  39 + user = User.find_by(id: user_id) if user_id
41 40 end
42 41 user.session = session if user
43 42 User.current = user
... ...
app/controllers/public/profile_controller.rb
... ... @@ -398,7 +398,7 @@ class ProfileController &lt; PublicController
398 398 def icon
399 399 size = params[:size] || :portrait
400 400 image, mime = profile_icon(profile, size.to_sym, true)
401   -
  401 +
402 402 unless image.match(/^\/\/www\.gravatar\.com/).nil?
403 403 redirect_to 'https:' + image
404 404 else
... ...
app/helpers/theme_loader_helper.rb
... ... @@ -2,7 +2,7 @@ module ThemeLoaderHelper
2 2 def current_theme
3 3 @current_theme ||=
4 4 begin
5   - if !(defined?(session)).nil? && session[:user_theme]
  5 + if defined?(session).present? && session[:user_theme]
6 6 session[:user_theme]
7 7 else
8 8 # utility for developers: set the theme to 'random' in development mode and
... ... @@ -34,9 +34,9 @@ module ThemeLoaderHelper
34 34 end
35 35  
36 36 def theme_path
37   - if !(defined?(session)).nil? && session[:user_theme]
  37 + if defined?(session).present? && session[:user_theme]
38 38 '/user_themes/' + current_theme
39   - elsif session[:theme]
  39 + elsif defined?(session).present? && session[:theme]
40 40 '/designs/themes/' + session[:theme]
41 41 else
42 42 '/designs/themes/' + current_theme
... ...
app/models/concerns/external_user.rb
... ... @@ -19,7 +19,7 @@ module ExternalUser
19 19 def webfinger_lookup(login, domain, environment)
20 20 if login && domain && environment.has_federated_network?(domain)
21 21 url = URI.parse('https://'+ domain +'/.well-known/webfinger?resource=acct:'+
22   - login+'@'+Environment.default.external_environments.find_by_url(domain))
  22 + login+'@'+domain)
23 23 req = Net::HTTP::Get.new(url.to_s)
24 24 res = Net::HTTP.start(url.host, url.port) { |http| http.request(req) }
25 25 JSON.parse(res.body)
... ... @@ -67,26 +67,29 @@ module ExternalUser
67 67  
68 68 # Authenticates a user from an external social network
69 69 def external_authenticate(username, password, environment)
70   - login, domain = username.split('@')
71   - webfinger = User.webfinger_lookup(login, domain, environment)
72   - if webfinger
73   - user = User.external_login(login, password, domain)
74   - if user
75   - u = User.new
76   - u.email = user['user']['email']
77   - u.login = login
78   - webfinger = OpenStruct.new(
79   - identifier: webfinger['properties']['identifier'],
80   - name: webfinger['titles']['name'],
81   - created_at: webfinger['properties']['created_at'],
82   - domain: domain,
83   - email: user['user']['email']
84   - )
85   - u.external_person_id = ExternalPerson.get_or_create(webfinger).id
86   - return u
  70 + if username && username.include?('@')
  71 + login, domain = username.split('@')
  72 + webfinger = User.webfinger_lookup(login, domain, environment)
  73 + if webfinger
  74 + user = User.external_login(login, password, domain)
  75 + if user
  76 + u = User.new
  77 + u.email = user['user']['email']
  78 + u.login = login
  79 + webfinger = OpenStruct.new(
  80 + identifier: webfinger['properties']['identifier'],
  81 + name: webfinger['titles']['name'],
  82 + created_at: webfinger['properties']['created_at'],
  83 + domain: domain,
  84 + email: user['user']['email']
  85 + )
  86 + u.external_person_id = ExternalPerson.get_or_create(webfinger).id
  87 + return u
  88 + end
87 89 end
88 90 end
89 91 nil
90 92 end
  93 +
91 94 end
92 95 end
... ...
config/routes.rb
... ... @@ -86,7 +86,7 @@ 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   -
  89 +
90 90 # icon
91 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
92 92  
... ...
features/external_login.feature
... ... @@ -6,7 +6,7 @@ Feature: external login
6 6 @selenium
7 7 Scenario: login from portal homepage
8 8 Given feature "allow_change_of_redirection_after_login" is disabled on environment
9   - And the following federated networks
  9 + And the following external environments
10 10 | identifier | name | url |
11 11 | test | Test | http://federated.noosfero.org |
12 12 And the following external users
... ... @@ -25,7 +25,7 @@ Feature: external login
25 25 @selenium
26 26 Scenario: not login from portal homepage
27 27 Given feature "allow_change_of_redirection_after_login" is disabled on environment
28   - And the following federated networks
  28 + And the following external environments
29 29 | identifier | name | url |
30 30 | test | Test | http://federated.noosfero.org |
31 31 And I am not logged in
... ...
plugins/organization_ratings/test/functional/organization_ratings_plugin_profile_controller_test.rb
... ... @@ -173,6 +173,7 @@ class OrganizationRatingsPluginProfileControllerTest &lt; ActionController::TestCas
173 173  
174 174 logout
175 175 @controller.stubs(:logged_in?).returns(false)
  176 + @controller.stubs(:current_user).returns(nil)
176 177  
177 178 get :new_rating, profile: @community.identifier
178 179 assert_no_tag :tag => 'p', :content => /Report waiting for approval/, :attributes => {:class =>/comment-rejected-msg/}
... ...
plugins/organization_ratings/views/shared/_make_report_block.html.erb
1 1 <% logged_in_image = link_to profile_image(current_person, :portrait), current_person.url if current_user %>
2 2 <% logged_in_name = link_to current_person.name, current_person.url if current_user %>
3   -<% logged_out_image = image_tag('plugins/organization_ratings/images/user-not-logged.png') %>
  3 +<% logged_out_image = image_tag('plugins/organization_ratings/public/images/user-not-logged.png') %>
4 4  
5 5 <div class="make-report-block">
6 6 <div class="star-profile-information">
... ...
test/api/federation/webfinger_test.rb
... ... @@ -4,7 +4,7 @@ class WebfingerTest &lt; ActiveSupport::TestCase
4 4 def setup
5 5 Domain.create(name: 'example.com')
6 6 Environment.default.domains << Domain.last
7   - User.create(login: 'ze', email: 'ze@localdomain.localdomain',
  7 + User.create(login: 'ze', email: 'ze@localdomain.localdomain',
8 8 password: 'zeze', password_confirmation: 'zeze')
9 9 end
10 10  
... ...
test/api/people_test.rb
... ... @@ -376,7 +376,7 @@ class PeopleTest &lt; ActiveSupport::TestCase
376 376 get "/api/v1/people/#{profile.id}/icon?#{params.to_query}"
377 377 assert_equal 200, last_response.status
378 378 json = JSON.parse(last_response.body)
379   - assert_match /^https?:\/\/.*portrait\.png$/, json['icon']
  379 + assert_match(/^https?:\/\/.*portrait\.png$/, json['icon'])
380 380 end
381 381  
382 382 should 'return icon in provided size if there is a profile image' do
... ... @@ -386,7 +386,7 @@ class PeopleTest &lt; ActiveSupport::TestCase
386 386 get "/api/v1/people/#{profile.id}/icon?#{params.to_query}&size=big"
387 387 assert_equal 200, last_response.status
388 388 json = JSON.parse(last_response.body)
389   - assert_match /^https?:\/\/.*big\.png$/, json['icon']
  389 + assert_match(/^https?:\/\/.*big\.png$/, json['icon'])
390 390 end
391 391  
392 392 should 'return icon from gravatar without size if there is no profile image' do
... ... @@ -395,7 +395,7 @@ class PeopleTest &lt; ActiveSupport::TestCase
395 395 get "/api/v1/people/#{profile.id}/icon?#{params.to_query}"
396 396 assert_equal 200, last_response.status
397 397 json = JSON.parse(last_response.body)
398   - assert_match /^https:\/\/www\.gravatar\.com.*size=64/, json['icon']
  398 + assert_match(/^https:\/\/www\.gravatar\.com.*size=64/, json['icon'])
399 399 end
400 400  
401 401 should 'return icon from gravatar with size if there is no profile image' do
... ... @@ -404,7 +404,7 @@ class PeopleTest &lt; ActiveSupport::TestCase
404 404 get "/api/v1/people/#{profile.id}/icon?#{params.to_query}&size=big"
405 405 assert_equal 200, last_response.status
406 406 json = JSON.parse(last_response.body)
407   - assert_match /^https:\/\/www\.gravatar\.com.*size=150/, json['icon']
  407 + assert_match(/^https:\/\/www\.gravatar\.com.*size=150/, json['icon'])
408 408 end
409 409  
410 410 PERSON_ATTRIBUTES = %w(vote_count comments_count articles_count following_articles_count)
... ...
test/functional/profile_controller_test.rb
... ... @@ -1935,7 +1935,7 @@ class ProfileControllerTest &lt; ActionController::TestCase
1935 1935 should 'return portrait icon if size is not provided and there is a profile image' do
1936 1936 img = Image.create!(uploaded_data: fixture_file_upload('/files/rails.png', 'image/png'))
1937 1937 profile = fast_create(Person, image_id: img.id)
1938   -
  1938 +
1939 1939 get :icon, profile: profile.identifier, size: nil
1940 1940 assert_response :success
1941 1941 assert_equal 'image/png', @response.header['Content-Type']
... ... @@ -1945,7 +1945,7 @@ class ProfileControllerTest &lt; ActionController::TestCase
1945 1945 should 'return icon in provided size if there is a profile image' do
1946 1946 img = Image.create!(uploaded_data: fixture_file_upload('/files/rails.png', 'image/png'))
1947 1947 profile = fast_create(Person, image_id: img.id)
1948   -
  1948 +
1949 1949 get :icon, profile: profile.identifier, size: :big
1950 1950 assert_response :success
1951 1951 assert_equal 'image/png', @response.header['Content-Type']
... ... @@ -1954,14 +1954,14 @@ class ProfileControllerTest &lt; ActionController::TestCase
1954 1954  
1955 1955 should 'return icon from gravatar without size if there is no profile image' do
1956 1956 profile = fast_create(Person)
1957   -
  1957 +
1958 1958 get :icon, profile: profile.identifier
1959 1959 assert_redirected_to /^https:\/\/www\.gravatar\.com\/.*/
1960 1960 end
1961 1961  
1962 1962 should 'return icon from gravatar with size if there is no profile image' do
1963 1963 profile = fast_create(Person)
1964   -
  1964 +
1965 1965 get :icon, profile: profile.identifier, size: :thumb
1966 1966 assert_redirected_to /^https:\/\/www\.gravatar\.com\/.*/
1967 1967 end
... ...