Commit bb3c6485603dc5c1c31b775153e3d46c2b748f97

Authored by Rodrigo Souto
Committed by Joenio Costa
1 parent 64e4639c

Forgot password checks for the user in his environment

(ActionItem1578)
app/models/change_password.rb
@@ -5,7 +5,7 @@ class ChangePassword < Task @@ -5,7 +5,7 @@ class ChangePassword < Task
5 self[:data] ||= {} 5 self[:data] ||= {}
6 end 6 end
7 7
8 - attr_accessor :login, :email, :password, :password_confirmation 8 + attr_accessor :login, :email, :password, :password_confirmation, :environment_id
9 9
10 def self.human_attribute_name(attrib) 10 def self.human_attribute_name(attrib)
11 case attrib.to_sym 11 case attrib.to_sym
@@ -25,15 +25,15 @@ class ChangePassword < Task @@ -25,15 +25,15 @@ class ChangePassword < Task
25 ################################################### 25 ###################################################
26 # validations for creating a ChangePassword task 26 # validations for creating a ChangePassword task
27 27
28 - validates_presence_of :login, :email, :on => :create 28 + validates_presence_of :login, :email, :environment_id, :on => :create
29 29
30 validates_presence_of :requestor_id 30 validates_presence_of :requestor_id
31 31
32 validates_format_of :email, :on => :create, :with => Noosfero::Constants::EMAIL_FORMAT, :if => (lambda { |obj| !obj.email.blank? }) 32 validates_format_of :email, :on => :create, :with => Noosfero::Constants::EMAIL_FORMAT, :if => (lambda { |obj| !obj.email.blank? })
33 33
34 validates_each :login, :on => :create do |data,attr,value| 34 validates_each :login, :on => :create do |data,attr,value|
35 - unless data.login.blank?  
36 - user = User.find_by_login(data.login) 35 + unless data.login.blank? || data.email.blank?
  36 + user = User.find_by_login_and_environment_id(data.login, data.environment_id)
37 if user.nil? 37 if user.nil?
38 data.errors.add(:login, _('%{fn} is not a valid username.')) 38 data.errors.add(:login, _('%{fn} is not a valid username.'))
39 else 39 else
app/views/account/forgot_password.rhtml
@@ -9,6 +9,8 @@ @@ -9,6 +9,8 @@
9 9
10 <%= f.text_field :email %> 10 <%= f.text_field :email %>
11 11
  12 + <%= f.hidden_field :environment_id, :value => environment.id %>
  13 +
12 <div> 14 <div>
13 <% button_bar do %> 15 <% button_bar do %>
14 <%= submit_button('send', _('Send instructions')) %> 16 <%= submit_button('send', _('Send instructions')) %>
test/functional/account_controller_test.rb
@@ -265,7 +265,7 @@ class AccountControllerTest &lt; Test::Unit::TestCase @@ -265,7 +265,7 @@ class AccountControllerTest &lt; Test::Unit::TestCase
265 265
266 should 'require password confirmation correctly to enter new pasword' do 266 should 'require password confirmation correctly to enter new pasword' do
267 user = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test') 267 user = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test')
268 - change = ChangePassword.create!(:login => 'testuser', :email => 'testuser@example.com') 268 + change = ChangePassword.create!(:login => 'testuser', :email => 'testuser@example.com', :environment_id => Environment.default.id)
269 269
270 post :new_password, :code => change.code, :change_password => { :password => 'onepass', :password_confirmation => 'another_pass' } 270 post :new_password, :code => change.code, :change_password => { :password => 'onepass', :password_confirmation => 'another_pass' }
271 assert_response :success 271 assert_response :success
test/integration/forgot_password_test.rb
@@ -19,7 +19,7 @@ class ForgotPasswordTest &lt; ActionController::IntegrationTest @@ -19,7 +19,7 @@ class ForgotPasswordTest &lt; ActionController::IntegrationTest
19 assert_response :success 19 assert_response :success
20 assert_tag :tag => 'form', :attributes => { :action => '/account/forgot_password', :method => 'post' } 20 assert_tag :tag => 'form', :attributes => { :action => '/account/forgot_password', :method => 'post' }
21 21
22 - post '/account/forgot_password', :change_password => { :login => 'forgotten', :email => 'forgotten@localhost.localdomain' } 22 + post '/account/forgot_password', :change_password => { :login => 'forgotten', :email => 'forgotten@localhost.localdomain', :environment_id => Environment.default.id }
23 23
24 assert_response :success 24 assert_response :success
25 assert_template 'password_recovery_sent' 25 assert_template 'password_recovery_sent'
test/unit/change_password_test.rb
@@ -14,6 +14,8 @@ class ChangePasswordTest &lt; Test::Unit::TestCase @@ -14,6 +14,8 @@ class ChangePasswordTest &lt; Test::Unit::TestCase
14 14
15 data = ChangePassword.new 15 data = ChangePassword.new
16 data.login = 'unexisting' 16 data.login = 'unexisting'
  17 + data.email = 'example@example.com'
  18 + data.environment_id = Environment.default.id
17 data.valid? 19 data.valid?
18 assert data.errors.invalid?(:login) 20 assert data.errors.invalid?(:login)
19 end 21 end
@@ -35,6 +37,7 @@ class ChangePasswordTest &lt; Test::Unit::TestCase @@ -35,6 +37,7 @@ class ChangePasswordTest &lt; Test::Unit::TestCase
35 data = ChangePassword.new 37 data = ChangePassword.new
36 data.login = 'testuser' 38 data.login = 'testuser'
37 data.email = 'wrong@example.com' 39 data.email = 'wrong@example.com'
  40 + data.environment_id = Environment.default.id
38 41
39 data.valid? 42 data.valid?
40 assert !data.errors.invalid?(:login) 43 assert !data.errors.invalid?(:login)
@@ -48,6 +51,7 @@ class ChangePasswordTest &lt; Test::Unit::TestCase @@ -48,6 +51,7 @@ class ChangePasswordTest &lt; Test::Unit::TestCase
48 data = ChangePassword.new 51 data = ChangePassword.new
49 data.login = 'testuser' 52 data.login = 'testuser'
50 data.email = 'test@example.com' 53 data.email = 'test@example.com'
  54 + data.environment_id = Environment.default.id
51 55
52 data.valid? 56 data.valid?
53 assert !data.errors.invalid?(:login) 57 assert !data.errors.invalid?(:login)
@@ -60,6 +64,7 @@ class ChangePasswordTest &lt; Test::Unit::TestCase @@ -60,6 +64,7 @@ class ChangePasswordTest &lt; Test::Unit::TestCase
60 change = ChangePassword.new 64 change = ChangePassword.new
61 change.login = 'testuser' 65 change.login = 'testuser'
62 change.email = 'test@example.com' 66 change.email = 'test@example.com'
  67 + change.environment_id = Environment.default.id
63 change.save! 68 change.save!
64 69
65 change.status = Task::Status::FINISHED 70 change.status = Task::Status::FINISHED
@@ -80,6 +85,7 @@ class ChangePasswordTest &lt; Test::Unit::TestCase @@ -80,6 +85,7 @@ class ChangePasswordTest &lt; Test::Unit::TestCase
80 change = ChangePassword.new 85 change = ChangePassword.new
81 change.login = 'testuser' 86 change.login = 'testuser'
82 change.email = 'test@example.com' 87 change.email = 'test@example.com'
  88 + change.environment_id = Environment.default.id
83 change.save! 89 change.save!
84 90
85 change.expects(:requestor).returns(person).at_least_once 91 change.expects(:requestor).returns(person).at_least_once
@@ -98,6 +104,7 @@ class ChangePasswordTest &lt; Test::Unit::TestCase @@ -98,6 +104,7 @@ class ChangePasswordTest &lt; Test::Unit::TestCase
98 change = ChangePassword.new 104 change = ChangePassword.new
99 change.login = 'testuser' 105 change.login = 'testuser'
100 change.email = 'test@example.com' 106 change.email = 'test@example.com'
  107 + change.environment_id = Environment.default.id
101 change.save! 108 change.save!
102 109
103 assert_nothing_raised do 110 assert_nothing_raised do
@@ -111,4 +118,18 @@ class ChangePasswordTest &lt; Test::Unit::TestCase @@ -111,4 +118,18 @@ class ChangePasswordTest &lt; Test::Unit::TestCase
111 assert_equal t1.permission, t2.permission 118 assert_equal t1.permission, t2.permission
112 end 119 end
113 120
  121 + should 'search for user in the correct environment' do
  122 + e1 = Environment.create!(:id => 1, :name => "environment1")
  123 + e2 = Environment.create!(:id => 2, :name => "environment2")
  124 + p1 = create_user('sample-user', :password => 'test', :password_confirmation => 'test', :email => 'sample-user@e1.com', :environment => e1).person
  125 + p2 = create_user('sample-user', :password => 'test', :password_confirmation => 'test', :email => 'sample-user@e2.com', :environment => e2).person
  126 +
  127 + change = ChangePassword.new
  128 + change.login = 'sample-user'
  129 + change.email = 'sample-user@e2.com'
  130 + change.environment_id = e2.id
  131 +
  132 + assert change.valid?
  133 + end
  134 +
114 end 135 end