Commit 9d7da7aad987b7a36bfa4d57ef24e2eced510bb7

Authored by AntonioTerceiro
1 parent 691dced5

ActionItem78: finishing requirement



git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@648 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/controllers/public/account_controller.rb
@@ -75,6 +75,7 @@ class AccountController < PublicController @@ -75,6 +75,7 @@ class AccountController < PublicController
75 # Posts back. 75 # Posts back.
76 def forgot_password 76 def forgot_password
77 @change_password = ChangePassword.new(params[:change_password]) 77 @change_password = ChangePassword.new(params[:change_password])
  78 +
78 if request.post? 79 if request.post?
79 begin 80 begin
80 @change_password.save! 81 @change_password.save!
app/models/change_password.rb
@@ -72,9 +72,10 @@ class ChangePassword < Task @@ -72,9 +72,10 @@ class ChangePassword < Task
72 def create_message 72 def create_message
73 hostname = self.requestor.environment.default_hostname 73 hostname = self.requestor.environment.default_hostname
74 code = self.code 74 code = self.code
  75 + url = generate_url(:host => hostname, :controller => 'account', :action => 'new_password', :code => code)
75 76
76 lambda do 77 lambda do
77 - _("In order to change your password, please visit the following address:\n\n%s") % url_for(:host => hostname, :controller => 'account', :action => 'new_password', :code => code) 78 + _("In order to change your password, please visit the following address:\n\n%s") % url
78 end 79 end
79 end 80 end
80 81
lib/noosfero/url.rb
@@ -45,11 +45,11 @@ module Noosfero::URL @@ -45,11 +45,11 @@ module Noosfero::URL
45 Noosfero::URL.config['path'] 45 Noosfero::URL.config['path']
46 end 46 end
47 47
48 - def url_for(options) 48 + def generate_url(options)
49 local_options = {} 49 local_options = {}
50 local_options[:port] = self.port unless self.port.nil? 50 local_options[:port] = self.port unless self.port.nil?
51 51
52 - url = super(local_options.merge(options)) 52 + url = url_for(local_options.merge(options))
53 53
54 if self.path.blank? 54 if self.path.blank?
55 url 55 url
test/functional/account_controller_test.rb
@@ -184,10 +184,10 @@ class AccountControllerTest < Test::Unit::TestCase @@ -184,10 +184,10 @@ class AccountControllerTest < Test::Unit::TestCase
184 184
185 should 'respond to forgotten password change request' do 185 should 'respond to forgotten password change request' do
186 change = ChangePassword.new 186 change = ChangePassword.new
187 - ChangePassword.expects(:new).returns(change) 187 + ChangePassword.expects(:new).with('login' => 'test', 'email' => 'test@localhost.localdomain').returns(change)
188 change.expects(:save!).returns(true) 188 change.expects(:save!).returns(true)
189 189
190 - post :forgot_password 190 + post :forgot_password, :change_password => { :login => 'test', :email => 'test@localhost.localdomain' }
191 assert_template 'password_recovery_sent' 191 assert_template 'password_recovery_sent'
192 end 192 end
193 193
test/integration/forgot_password_test.rb 0 → 100644
@@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
  1 +require "#{File.dirname(__FILE__)}/../test_helper"
  2 +
  3 +class ForgotPasswordTest < ActionController::IntegrationTest
  4 +
  5 + def test_forgot_password
  6 +
  7 + User.destroy_all
  8 + Profile.destroy_all
  9 + ChangePassword.destroy_all
  10 +
  11 + User.create!(:login => 'forgotten', :password => 'test', :password_confirmation => 'test', :email => 'forgotten@localhost.localdomain')
  12 +
  13 + get '/account/forgot_password'
  14 +
  15 + assert_response :success
  16 + assert_tag :tag => 'form', :attributes => { :action => '/account/forgot_password', :method => 'post' }
  17 +
  18 + post '/account/forgot_password', :change_password => { :login => 'forgotten', :email => 'forgotten@localhost.localdomain' }
  19 +
  20 + assert_response :success
  21 + assert_template 'password_recovery_sent'
  22 +
  23 + assert_equal 1, ChangePassword.count
  24 + code = ChangePassword.find(:first).code
  25 +
  26 + get "/account/new_password/#{code}"
  27 + assert_response :success
  28 + assert_tag :tag => 'form', :attributes => { :action => "/account/new_password/#{code}" }
  29 +
  30 + post "/account/new_password/#{code}", :change_password => { :password => 'newpass', :password_confirmation => 'newpass'}
  31 + assert_response :success
  32 + assert_template 'new_password_ok'
  33 + assert_tag :tag => 'a', :attributes => { :href => "/account/login" }
  34 +
  35 + assert User.find_by_login('forgotten').authenticated?('newpass')
  36 + end
  37 +
  38 +end
test/unit/noosfero_url_test.rb
@@ -37,13 +37,13 @@ class NoosferoURLTest &lt; Test::Unit::TestCase @@ -37,13 +37,13 @@ class NoosferoURLTest &lt; Test::Unit::TestCase
37 should 'add path when needed' do 37 should 'add path when needed' do
38 self.stubs(:path).returns('/somepath') 38 self.stubs(:path).returns('/somepath')
39 self.stubs(:port).returns(nil) 39 self.stubs(:port).returns(nil)
40 - assert_equal('http://example.com/somepath/', url_for(:host => 'example.com', :controller => 'home')) 40 + assert_equal('http://example.com/somepath/', generate_url(:host => 'example.com', :controller => 'home'))
41 end 41 end
42 42
43 should 'not add path when it is not needed' do 43 should 'not add path when it is not needed' do
44 self.stubs(:path).returns(nil) 44 self.stubs(:path).returns(nil)
45 self.stubs(:port).returns(nil) 45 self.stubs(:port).returns(nil)
46 - assert_equal('http://example.com/', url_for(:host => 'example.com', :controller => 'home')) 46 + assert_equal('http://example.com/', generate_url(:host => 'example.com', :controller => 'home'))
47 end 47 end
48 48
49 end 49 end