Commit 0ee6f0f6e009dd3750a87ba8980984569a8e1686

Authored by Michel Felipe
1 parent e073b436

Add new url request to activate a user in session end-point

lib/noosfero/api/session.rb
... ... @@ -57,6 +57,42 @@ module Noosfero
57 57 render_api_error!(message, 400)
58 58 end
59 59 end
  60 +
  61 + params do
  62 + requires :activation_code, type: String, desc: _("Activation token")
  63 + end
  64 +
  65 + # Activate a user.
  66 + #
  67 + # Parameter:
  68 + # activation_code (required) - Activation token
  69 + # Example Request:
  70 + # PATCH /activate?activation_code=28259abd12cc6a64ef9399cf3286cb998b96aeaf
  71 + patch "/activate" do
  72 + user = User.find_by_activation_code(params[:activation_code])
  73 + if user
  74 + unless user.environment.enabled?('admin_must_approve_new_users')
  75 + if user.activate
  76 + user.generate_private_token!
  77 + present user, :with => Entities::UserLogin
  78 + end
  79 + else
  80 + if user.create_moderate_task
  81 + user.activation_code = nil
  82 + user.save!
  83 +
  84 + # Waiting for admin moderate user registration
  85 + status 202
  86 + body({
  87 + :message => 'Waiting for admin moderate user registration'
  88 + })
  89 + end
  90 + end
  91 + else
  92 + # Token not found in database
  93 + render_api_error!(_('Token is invalid'), 412)
  94 + end
  95 + end
60 96 end
61 97 end
62 98 end
... ...
test/unit/api/session_test.rb
... ... @@ -54,5 +54,54 @@ class SessionTest < ActiveSupport::TestCase
54 54 assert_equal "Serpro captcha error: getaddrinfo: Name or service not known", JSON.parse(last_response.body)["message"]
55 55 end
56 56  
  57 + # TODO: Add another test cases to check register situations
  58 + should 'activate a user' do
  59 + params = {
  60 + :login => "newuserapi",
  61 + :password => "newuserapi",
  62 + :password_confirmation => "newuserapi",
  63 + :email => "newuserapi@email.com"
  64 + }
  65 + user = User.new(params)
  66 + user.save!
  67 +
  68 + params = { activation_code: user.activation_code}
  69 + patch "/api/v1/activate?#{params.to_query}"
  70 + assert_equal 200, last_response.status
  71 + end
  72 +
  73 + should 'do not activate a user if admin must approve him' do
  74 + params = {
  75 + :login => "newuserapi",
  76 + :password => "newuserapi",
  77 + :password_confirmation => "newuserapi",
  78 + :email => "newuserapi@email.com",
  79 + :environment => Environment.default
  80 + }
  81 + user = User.new(params)
  82 + user.environment.enable('admin_must_approve_new_users')
  83 + user.save!
  84 +
  85 + params = { activation_code: user.activation_code}
  86 + patch "/api/v1/activate?#{params.to_query}"
  87 + assert_equal 202, last_response.status
  88 + assert_equal 'Waiting for admin moderate user registration', JSON.parse(last_response.body)["message"]
  89 + end
  90 +
  91 + should 'do not activate a user if the token is invalid' do
  92 + params = {
  93 + :login => "newuserapi",
  94 + :password => "newuserapi",
  95 + :password_confirmation => "newuserapi",
  96 + :email => "newuserapi@email.com",
  97 + :environment => Environment.default
  98 + }
  99 + user = User.new(params)
  100 + user.save!
  101 +
  102 + params = { activation_code: '70250abe20cc6a67ef9399cf3286cb998b96aeaf'}
  103 + patch "/api/v1/activate?#{params.to_query}"
  104 + assert_equal 412, last_response.status
  105 + end
57 106  
58 107 end
... ...