Commit 1d5fb8d91aa61e047e8e07b6402cfc3171afed55

Authored by Evandro Junior
1 parent 6b8b1783

Fixed all tests for test/unit/api/helpers_test.rb

lib/noosfero/api/helpers.rb
@@ -243,26 +243,19 @@ require 'grape' @@ -243,26 +243,19 @@ require 'grape'
243 render_api_error!(_('Method Not Allowed'), 405) 243 render_api_error!(_('Method Not Allowed'), 405)
244 end 244 end
245 245
246 - # render_api_error!(message, status)  
247 - # error!({'message' => message, :code => status}, status)  
248 - # end  
249 -  
250 # javascript_console_message is supposed to be executed as console.log() 246 # javascript_console_message is supposed to be executed as console.log()
251 def render_api_error!(user_message, status, log_message = nil, javascript_console_message = nil) 247 def render_api_error!(user_message, status, log_message = nil, javascript_console_message = nil)
252 - status||= 400  
253 message_hash = {'message' => user_message, :code => status} 248 message_hash = {'message' => user_message, :code => status}
254 message_hash[:javascript_console_message] = javascript_console_message if javascript_console_message.present? 249 message_hash[:javascript_console_message] = javascript_console_message if javascript_console_message.present?
255 log_msg = "#{status}, User message: #{user_message}" 250 log_msg = "#{status}, User message: #{user_message}"
256 log_msg = "#{log_message}, #{log_msg}" if log_message.present? 251 log_msg = "#{log_message}, #{log_msg}" if log_message.present?
257 log_msg = "#{log_msg}, Javascript Console Message: #{javascript_console_message}" if javascript_console_message.present? 252 log_msg = "#{log_msg}, Javascript Console Message: #{javascript_console_message}" if javascript_console_message.present?
258 -# headers = { Grape::Http::Headers::CONTENT_TYPE => content_type }.merge(headers)  
259 -# rack_response(format_message(message, backtrace), status, headers)  
260 -# raise log_msg  
261 - #Since throw :error is not logging the errors I had to manually log it!  
262 - #log(log_msg)  
263 logger.error log_msg 253 logger.error log_msg
264 - error!(message_hash, status)  
265 -# throw :error, message: message_hash, status: status, headers: headers 254 + if javascript_console_message.present?
  255 + error!(message_hash, status)
  256 + else
  257 + error!(user_message, status)
  258 + end
266 end 259 end
267 260
268 def render_api_errors!(messages) 261 def render_api_errors!(messages)
@@ -331,11 +324,11 @@ require 'grape' @@ -331,11 +324,11 @@ require 'grape'
331 return true unless d[:enabled] == true 324 return true unless d[:enabled] == true
332 msg_icve = _('Internal captcha validation error') 325 msg_icve = _('Internal captcha validation error')
333 msg_eacs = 'Environment api_captcha_settings' 326 msg_eacs = 'Environment api_captcha_settings'
334 - s = 503 327 + s = 500
335 328
336 if d[:provider] == 'google' 329 if d[:provider] == 'google'
337 - render_api_error!(msg_icve, s, nil, "#{msg_eacs} private_key not defined") if d[:private_key].nil?  
338 - render_api_error!(msg_icve, s, nil, "#{msg_eacs} version not defined") unless d[:version] == 1 || d[:version] == 2 330 + return render_api_error!(msg_icve, s, nil, "#{msg_eacs} private_key not defined") if d[:private_key].nil?
  331 + return render_api_error!(msg_icve, s, nil, "#{msg_eacs} version not defined") unless d[:version] == 1 || d[:version] == 2
339 if d[:version] == 1 332 if d[:version] == 1
340 d[:verify_uri] ||= 'https://www.google.com/recaptcha/api/verify' 333 d[:verify_uri] ||= 'https://www.google.com/recaptcha/api/verify'
341 return verify_recaptcha_v1(remote_ip, d[:private_key], d[:verify_uri], params[:recaptcha_challenge_field], params[:recaptcha_response_field]) 334 return verify_recaptcha_v1(remote_ip, d[:private_key], d[:verify_uri], params[:recaptcha_challenge_field], params[:recaptcha_response_field])
@@ -346,15 +339,15 @@ require 'grape' @@ -346,15 +339,15 @@ require 'grape'
346 end 339 end
347 end 340 end
348 if d[:provider] == 'serpro' 341 if d[:provider] == 'serpro'
349 - render_api_error!(msg_icve, s, nil, "#{msg_eacs} verify_uri not defined") if d[:verify_uri].nil? 342 + return render_api_error!(msg_icve, s, nil, "#{msg_eacs} verify_uri not defined") if d[:verify_uri].nil?
350 return verify_serpro_captcha(d[:serpro_client_id], params[:txtToken_captcha_serpro_gov_br], params[:captcha_text], d[:verify_uri]) 343 return verify_serpro_captcha(d[:serpro_client_id], params[:txtToken_captcha_serpro_gov_br], params[:captcha_text], d[:verify_uri])
351 end 344 end
352 - render_api_error!(msg_icve, s, nil, "#{msg_eacs} provider not defined") 345 + return render_api_error!(msg_icve, s, nil, "#{msg_eacs} provider not defined")
353 end 346 end
354 347
355 def verify_recaptcha_v1(remote_ip, private_key, api_recaptcha_verify_uri, recaptcha_challenge_field, recaptcha_response_field) 348 def verify_recaptcha_v1(remote_ip, private_key, api_recaptcha_verify_uri, recaptcha_challenge_field, recaptcha_response_field)
356 if recaptcha_challenge_field == nil || recaptcha_response_field == nil 349 if recaptcha_challenge_field == nil || recaptcha_response_field == nil
357 - render_api_error!(_('Captcha validation error'), 503, nil, _('Missing captcha data')) 350 + return render_api_error!(_('Captcha validation error'), 500, nil, _('Missing captcha data'))
358 end 351 end
359 352
360 verify_hash = { 353 verify_hash = {
@@ -371,16 +364,14 @@ require 'grape' @@ -371,16 +364,14 @@ require 'grape'
371 begin 364 begin
372 body = https.request(request).body 365 body = https.request(request).body
373 rescue Exception => e 366 rescue Exception => e
374 - logger = Logger.new(File.join(Rails.root, 'log', "#{ENV['RAILS_ENV'] || 'production'}_api.log"))  
375 - logger.error e  
376 - render_api_error!(_('Internal captcha validation error'), 503, nil, "recaptcha error: #{e.message}") 367 + return render_api_error!(_('Internal captcha validation error'), 500, nil, "recaptcha error: #{e.message}")
377 end 368 end
378 body = JSON.parse(body) 369 body = JSON.parse(body)
379 body == "true\nsuccess" ? true : body 370 body == "true\nsuccess" ? true : body
380 end 371 end
381 372
382 def verify_recaptcha_v2(remote_ip, private_key, api_recaptcha_verify_uri, g_recaptcha_response) 373 def verify_recaptcha_v2(remote_ip, private_key, api_recaptcha_verify_uri, g_recaptcha_response)
383 - render_api_error!(_('Captcha validation error'), 503, nil, _('Missing captcha data')) if g_recaptcha_response == nil 374 + return render_api_error!(_('Captcha validation error'), 500, nil, _('Missing captcha data')) if g_recaptcha_response == nil
384 verify_hash = { 375 verify_hash = {
385 "secret" => private_key, 376 "secret" => private_key,
386 "remoteip" => remote_ip, 377 "remoteip" => remote_ip,
@@ -394,15 +385,15 @@ require 'grape' @@ -394,15 +385,15 @@ require 'grape'
394 begin 385 begin
395 body = https.request(request).body 386 body = https.request(request).body
396 rescue Exception => e 387 rescue Exception => e
397 - render_api_error!(_('Internal captcha validation error'), 503, nil, "recaptcha error: #{e.message}") 388 + return render_api_error!(_('Internal captcha validation error'), 500, nil, "recaptcha error: #{e.message}")
398 end 389 end
399 captcha_result = JSON.parse(body) 390 captcha_result = JSON.parse(body)
400 captcha_result["success"] ? true : captcha_result 391 captcha_result["success"] ? true : captcha_result
401 end 392 end
402 393
403 def verify_serpro_captcha(client_id, token, captcha_text, verify_uri) 394 def verify_serpro_captcha(client_id, token, captcha_text, verify_uri)
404 - return _('Missing Serpro Captcha token') if token == nil  
405 - return _('Captcha text has not been filled') if captcha_text == nil 395 + return render_api_error!(_("Error processing token validation"), 500, nil, _("Missing Serpro's Captcha token")) unless token
  396 + return render_api_error!(_('Captcha text has not been filled'), 403) unless captcha_text
406 uri = URI(verify_uri) 397 uri = URI(verify_uri)
407 http = Net::HTTP.new(uri.host, uri.port) 398 http = Net::HTTP.new(uri.host, uri.port)
408 request = Net::HTTP::Post.new(uri.path) 399 request = Net::HTTP::Post.new(uri.path)
@@ -411,28 +402,14 @@ require 'grape' @@ -411,28 +402,14 @@ require 'grape'
411 begin 402 begin
412 body = http.request(request).body 403 body = http.request(request).body
413 rescue Exception => e 404 rescue Exception => e
414 - render_api_error!(_('Internal captcha validation error'), 503, nil, "Serpro captcha error: #{e.message}") 405 + return render_api_error!(_('Internal captcha validation error'), 500, nil, "Serpro captcha error: #{e.message}")
415 end 406 end
416 - render_api_error!("Wrong captcha text, please try again") if body == 0  
417 - render_api_error!("Token not found") if body == 2 407 + return render_api_error!(_("Wrong captcha text, please try again"), 403) if body == 0
  408 + return render_api_error!(_("Token not found"), 500) if body == 2
  409 + return render_api_error!(_("No data sent to validation server or other serious problem"), 500) if body == -1
418 body == '1' ? true : body 410 body == '1' ? true : body
419 end 411 end
420 412
421 - # custom_message[:prepend2log] -> Prepend2log gives more details to the application log  
422 - def log_exception(e, prepend_message2log=nil)  
423 - logger = Logger.new(File.join(Rails.root, 'log', "#{ENV['RAILS_ENV'] || 'production'}_api.log"))  
424 - logger.formatter = GrapeLogging::Formatters::Default.new  
425 - e.message = "#{prepend_message2log} e.message" if prepend_message2log.present?  
426 - puts e.message  
427 - logger.error e  
428 - end  
429 -  
430 - def log(message)  
431 - logger = Logger.new(File.join(Rails.root, 'log', "#{ENV['RAILS_ENV'] || 'production'}_api.log"))  
432 - logger.formatter = GrapeLogging::Formatters::Default.new  
433 - logger.error message  
434 - end  
435 -  
436 end 413 end
437 end 414 end
438 end 415 end
test/unit/api/helpers_test.rb
@@ -113,7 +113,6 @@ class APIHelpersTest < ActiveSupport::TestCase @@ -113,7 +113,6 @@ class APIHelpersTest < ActiveSupport::TestCase
113 p = fast_create(Profile) 113 p = fast_create(Profile)
114 a = fast_create(Article, :published => false, :profile_id => p.id) 114 a = fast_create(Article, :published => false, :profile_id => p.id)
115 fast_create(Article, :profile_id => p.id) 115 fast_create(Article, :profile_id => p.id)
116 -  
117 user.generate_private_token! 116 user.generate_private_token!
118 User.expects(:find_by_private_token).returns(user) 117 User.expects(:find_by_private_token).returns(user)
119 assert_equal 403, find_article(p.articles, a.id).last 118 assert_equal 403, find_article(p.articles, a.id).last
@@ -162,61 +161,6 @@ class APIHelpersTest < ActiveSupport::TestCase @@ -162,61 +161,6 @@ class APIHelpersTest < ActiveSupport::TestCase
162 assert_nil make_conditions_with_parameter[:type] 161 assert_nil make_conditions_with_parameter[:type]
163 end 162 end
164 163
165 - should 'do not test captcha when there are no settings' do  
166 - environment = Environment.new  
167 - assert test_captcha("127.0.0.1", {}, environment)  
168 - end  
169 -  
170 - should 'do not test captcha when captcha is disabled on settings' do  
171 - environment = Environment.new  
172 - environment.api_captcha_settings = {  
173 - enabled: false,  
174 - }  
175 - assert test_captcha("127.0.0.1", {}, environment)  
176 - end  
177 -  
178 - should 'fail display recaptcha v1' do  
179 - environment = Environment.new  
180 - environment.api_captcha_settings = {  
181 - enabled: true,  
182 - provider: 'google',  
183 - version: 1,  
184 - private_key: '6LdsWAcTAAAAAB6maB_HalVyCc4asDAxPxloIMvY',  
185 - public_key: '6LdsWAcTAAAAAChTUUD6yu9fCDhdIZzNd7F53zf-',  
186 - verify_uri: 'https://www.google.com/recaptcha/api/verify',  
187 - }  
188 - r = test_captcha('127.0.0.1', params, environment)  
189 - assert_equal 'Missing captcha data', JSON.parse(r)['console_message']  
190 - end  
191 -  
192 - should 'fail display recaptcha v2' do  
193 - environment = Environment.new  
194 - environment.api_captcha_settings = {  
195 - enabled: true,  
196 - provider: 'google',  
197 - version: 2,  
198 - private_key: '6LdsWAcTAAAAAB6maB_HalVyCc4asDAxPxloIMvY',  
199 - public_key: '6LdsWAcTAAAAAChTUUD6yu9fCDhdIZzNd7F53zf-',  
200 - verify_uri: 'https://www.google.com/recaptcha/api/siteverify',  
201 - }  
202 - r = test_captcha('127.0.0.1', params, environment)  
203 - assert_equal 'Missing captcha data', JSON.parse(r)['console_message']  
204 - end  
205 -  
206 -  
207 -  
208 - should 'fail display Serpro captcha' do  
209 - environment = Environment.new  
210 - environment.api_captcha_settings = {  
211 - enabled: true,  
212 - provider: 'serpro',  
213 - serpro_client_id: '0000000000000000',  
214 - verify_uri: 'http://localhost/api/verify',  
215 - }  
216 - params = {}  
217 - params[:txtToken_captcha_serpro_gov_br] = '4324343'  
218 - assert_equal test_captcha("127.0.0.1", params, environment), _('Captcha text has not been filled')  
219 - end  
220 164
221 should 'render not_found if endpoint is unavailable' do 165 should 'render not_found if endpoint is unavailable' do
222 Noosfero::API::API.stubs(:endpoint_unavailable?).returns(true) 166 Noosfero::API::API.stubs(:endpoint_unavailable?).returns(true)
@@ -238,7 +182,77 @@ class APIHelpersTest < ActiveSupport::TestCase @@ -238,7 +182,77 @@ class APIHelpersTest < ActiveSupport::TestCase
238 #assert_equals [article1, article2], present_articles 182 #assert_equals [article1, article2], present_articles
239 end 183 end
240 184
241 - should 'captcha serpro say name or service not known' do 185 +###### Captcha tests ######
  186 +
  187 +should 'do not test captcha when there are no settings' do
  188 + environment = Environment.new
  189 + assert test_captcha("127.0.0.1", {}, environment)
  190 +end
  191 +
  192 +should 'do not test captcha when captcha is disabled on settings' do
  193 + environment = Environment.new
  194 + environment.api_captcha_settings = {
  195 + enabled: false,
  196 + }
  197 + assert test_captcha("127.0.0.1", {}, environment)
  198 +end
  199 +
  200 +should 'fail display recaptcha v1' do
  201 + environment = Environment.new
  202 + environment.api_captcha_settings = {
  203 + enabled: true,
  204 + provider: 'google',
  205 + version: 1,
  206 + private_key: '6LdsWAcTAAAAAB6maB_HalVyCc4asDAxPxloIMvY',
  207 + public_key: '6LdsWAcTAAAAAChTUUD6yu9fCDhdIZzNd7F53zf-',
  208 + verify_uri: 'https://www.google.com/recaptcha/api/verify',
  209 + }
  210 + r = test_captcha('127.0.0.1', params, environment)
  211 + assert_equal(_("Missing captcha data"), r[0][:javascript_console_message])
  212 +end
  213 +
  214 +should 'fail display recaptcha v2' do
  215 + environment = Environment.new
  216 + environment.api_captcha_settings = {
  217 + enabled: true,
  218 + provider: 'google',
  219 + version: 2,
  220 + private_key: '6LdsWAcTAAAAAB6maB_HalVyCc4asDAxPxloIMvY',
  221 + public_key: '6LdsWAcTAAAAAChTUUD6yu9fCDhdIZzNd7F53zf-',
  222 + verify_uri: 'https://www.google.com/recaptcha/api/siteverify',
  223 + }
  224 + r = test_captcha('127.0.0.1', params, environment)
  225 + assert_equal(_("Missing captcha data"), r[0][:javascript_console_message])
  226 +end
  227 +
  228 +should 'verify if user filled Serpro\' captcha text' do
  229 + environment = Environment.new
  230 + environment.api_captcha_settings = {
  231 + enabled: true,
  232 + provider: 'serpro',
  233 + serpro_client_id: '0000000000000000',
  234 + verify_uri: 'http://localhost/api/verify',
  235 + }
  236 + params = {}
  237 + params[:txtToken_captcha_serpro_gov_br] = '4324343'
  238 + assert_equal(_('Captcha text has not been filled'), test_captcha('127.0.0.1', params, environment)[0])
  239 +end
  240 +
  241 +should 'verify if Serpro\' captcha token has been sent' do
  242 + environment = Environment.new
  243 + environment.api_captcha_settings = {
  244 + enabled: true,
  245 + provider: 'serpro',
  246 + serpro_client_id: '0000000000000000',
  247 + verify_uri: 'http://localhost/api/verify',
  248 + }
  249 + params = {}
  250 + params[:captcha_text] = '4324343'
  251 + r = test_captcha('127.0.0.1', params, environment)
  252 + assert_equal(_("Missing Serpro's Captcha token"), r[0][:javascript_console_message])
  253 +end
  254 +
  255 +should 'captcha serpro say name or service not known' do
242 environment = Environment.new 256 environment = Environment.new
243 environment.api_captcha_settings = { 257 environment.api_captcha_settings = {
244 enabled: true, 258 enabled: true,
@@ -249,19 +263,11 @@ class APIHelpersTest < ActiveSupport::TestCase @@ -249,19 +263,11 @@ class APIHelpersTest < ActiveSupport::TestCase
249 params = {} 263 params = {}
250 params[:txtToken_captcha_serpro_gov_br] = '4324343' 264 params[:txtToken_captcha_serpro_gov_br] = '4324343'
251 params[:captcha_text] = '4324343' 265 params[:captcha_text] = '4324343'
252 - binding.pry  
253 - expects(:render_api_error!).with(_('Internal captcha validation error'), 503, nil, "recaptcha error: #{e.message}")  
254 -# r = test_captcha('127.0.0.1', params, environment)  
255 -# assert_equal 'Serpro captcha error: getaddrinfo: Name or service not known', JSON.parse(r)['console_message']  
256 - end  
257 - 266 + r = test_captcha('127.0.0.1', params, environment)
  267 + assert_equal(_("Serpro captcha error: getaddrinfo: Name or service not known"), r[0][:javascript_console_message])
  268 +end
258 269
259 - # def render_api_error!(user_message, status, log_message = nil, javascript_console_message = nil)  
260 - # message_hash = {'message' => user_message, :code => status}  
261 - # message_hash[:javascript_console_message] = javascript_console_message if javascript_console_message.present?  
262 - # self.status(status || namespace_inheritable(:default_error_status))  
263 - # throw :error, message: message_hash, status: self.status, headers: headers  
264 - # end 270 +###### END Captcha tests ######
265 271
266 protected 272 protected
267 273
@@ -277,13 +283,4 @@ class APIHelpersTest < ActiveSupport::TestCase @@ -277,13 +283,4 @@ class APIHelpersTest < ActiveSupport::TestCase
277 @params = value 283 @params = value
278 end 284 end
279 285
280 - def render_api_error!(user_message, status, log_message = nil, javascript_console_message = nil)  
281 - status||= 400  
282 - log_msg = "#{status}, User message: #{user_message}"  
283 - log_msg = "#{log_message}, #{log_msg}" if log_message.present?  
284 - log_msg = "#{log_msg}, Javascript Console Message: #{javascript_console_message}" if javascript_console_message.present?  
285 - return log_msg  
286 - end  
287 -  
288 -  
289 end 286 end