Commit 7bac7ef7dcdee879741ea74da7f334be2e5bc8ca

Authored by Leandro Nunes dos Santos
Committed by Daniela Feitosa
1 parent 54151a76

adding some hotspots to make the openid plugin works.

app/controllers/public/account_controller.rb
@@ -25,11 +25,13 @@ class AccountController < ApplicationController @@ -25,11 +25,13 @@ class AccountController < ApplicationController
25 25
26 # action to perform login to the application 26 # action to perform login to the application
27 def login 27 def login
28 - @user = User.new  
29 - @person = @user.build_person  
30 store_location(request.referer) unless session[:return_to] 28 store_location(request.referer) unless session[:return_to]
31 return unless request.post? 29 return unless request.post?
32 - self.current_user = User.authenticate(params[:user][:login], params[:user][:password], environment) if params[:user] 30 +
  31 + self.current_user = plugins_alternative_authentication
  32 +
  33 + self.current_user ||= User.authenticate(params[:user][:login], params[:user][:password], environment) if params[:user]
  34 +
33 if logged_in? 35 if logged_in?
34 if params[:remember_me] == "1" 36 if params[:remember_me] == "1"
35 self.current_user.remember_me 37 self.current_user.remember_me
@@ -41,7 +43,6 @@ class AccountController < ApplicationController @@ -41,7 +43,6 @@ class AccountController < ApplicationController
41 end 43 end
42 else 44 else
43 session[:notice] = _('Incorrect username or password') if redirect? 45 session[:notice] = _('Incorrect username or password') if redirect?
44 - redirect_to :back if redirect?  
45 end 46 end
46 end 47 end
47 48
@@ -56,6 +57,10 @@ class AccountController < ApplicationController @@ -56,6 +57,10 @@ class AccountController < ApplicationController
56 57
57 # action to register an user to the application 58 # action to register an user to the application
58 def signup 59 def signup
  60 + if @plugins.dispatch(:allow_user_registration).include?(false)
  61 + redirect_back_or_default(:controller => 'home')
  62 + end
  63 +
59 @invitation_code = params[:invitation_code] 64 @invitation_code = params[:invitation_code]
60 begin 65 begin
61 if params[:user] 66 if params[:user]
@@ -125,6 +130,9 @@ class AccountController < ApplicationController @@ -125,6 +130,9 @@ class AccountController < ApplicationController
125 # 130 #
126 # Posts back. 131 # Posts back.
127 def forgot_password 132 def forgot_password
  133 + if @plugins.dispatch(:allow_password_recovery).include?(false)
  134 + redirect_back_or_default(:controller => 'home')
  135 + end
128 @change_password = ChangePassword.new(params[:change_password]) 136 @change_password = ChangePassword.new(params[:change_password])
129 137
130 if request.post? 138 if request.post?
@@ -316,4 +324,13 @@ class AccountController < ApplicationController @@ -316,4 +324,13 @@ class AccountController < ApplicationController
316 end 324 end
317 end 325 end
318 326
  327 + def plugins_alternative_authentication
  328 + user = nil
  329 + @plugins.each do |plugin|
  330 + user = plugin.alternative_authentication
  331 + break unless user.nil?
  332 + end
  333 + user
  334 + end
  335 +
319 end 336 end
app/models/person.rb
@@ -71,10 +71,7 @@ class Person < Profile @@ -71,10 +71,7 @@ class Person < Profile
71 Friendship.find(:all, :conditions => { :friend_id => person.id}).each { |friendship| friendship.destroy } 71 Friendship.find(:all, :conditions => { :friend_id => person.id}).each { |friendship| friendship.destroy }
72 end 72 end
73 73
74 - after_destroy :destroy_user  
75 - def destroy_user  
76 - self.user.destroy if self.user  
77 - end 74 + belongs_to :user, :dependent => :delete
78 75
79 def can_control_scrap?(scrap) 76 def can_control_scrap?(scrap)
80 begin 77 begin
app/models/user.rb
@@ -30,7 +30,7 @@ class User < ActiveRecord::Base @@ -30,7 +30,7 @@ class User < ActiveRecord::Base
30 30
31 after_create do |user| 31 after_create do |user|
32 user.person ||= Person.new 32 user.person ||= Person.new
33 - user.person.attributes = user.person_data.merge(:identifier => user.login, :user_id => user.id, :environment_id => user.environment_id) 33 + user.person.attributes = user.person_data.merge(:identifier => user.login, :user => user, :environment_id => user.environment_id)
34 user.person.name ||= user.login 34 user.person.name ||= user.login
35 user.person.visible = false unless user.activated? 35 user.person.visible = false unless user.activated?
36 user.person.save! 36 user.person.save!
@@ -88,13 +88,13 @@ class User < ActiveRecord::Base @@ -88,13 +88,13 @@ class User < ActiveRecord::Base
88 attr_protected :activated_at 88 attr_protected :activated_at
89 89
90 # Virtual attribute for the unencrypted password 90 # Virtual attribute for the unencrypted password
91 - attr_accessor :password 91 + attr_accessor :password, :name
92 92
93 validates_presence_of :login, :email 93 validates_presence_of :login, :email
94 validates_format_of :login, :with => Profile::IDENTIFIER_FORMAT, :if => (lambda {|user| !user.login.blank?}) 94 validates_format_of :login, :with => Profile::IDENTIFIER_FORMAT, :if => (lambda {|user| !user.login.blank?})
95 validates_presence_of :password, :if => :password_required? 95 validates_presence_of :password, :if => :password_required?
96 - validates_presence_of :password_confirmation, :if => :password_required?, :if => (lambda {|user| !user.password.blank?})  
97 - validates_length_of :password, :within => 4..40, :if => :password_required?, :if => (lambda {|user| !user.password.blank?}) 96 + validates_presence_of :password_confirmation, :if => :password_required?
  97 + validates_length_of :password, :within => 4..40, :if => :password_required?
98 validates_confirmation_of :password, :if => :password_required? 98 validates_confirmation_of :password, :if => :password_required?
99 validates_length_of :login, :within => 2..40, :if => (lambda {|user| !user.login.blank?}) 99 validates_length_of :login, :within => 2..40, :if => (lambda {|user| !user.login.blank?})
100 validates_length_of :email, :within => 3..100, :if => (lambda {|user| !user.email.blank?}) 100 validates_length_of :email, :within => 3..100, :if => (lambda {|user| !user.email.blank?})
@@ -228,7 +228,12 @@ class User < ActiveRecord::Base @@ -228,7 +228,12 @@ class User < ActiveRecord::Base
228 end 228 end
229 229
230 def name 230 def name
231 - person ? person.name : login 231 + name = (self[:name] || login)
  232 + person.nil? ? name : (person.name || name)
  233 + end
  234 +
  235 + def name= name
  236 + self[:name] = name
232 end 237 end
233 238
234 def enable_email! 239 def enable_email!
@@ -274,6 +279,11 @@ class User < ActiveRecord::Base @@ -274,6 +279,11 @@ class User < ActiveRecord::Base
274 15 # in minutes 279 15 # in minutes
275 end 280 end
276 281
  282 +
  283 + def not_require_password!
  284 + @is_password_required = false
  285 + end
  286 +
277 protected 287 protected
278 # before filter 288 # before filter
279 def encrypt_password 289 def encrypt_password
@@ -282,9 +292,13 @@ class User < ActiveRecord::Base @@ -282,9 +292,13 @@ class User < ActiveRecord::Base
282 self.password_type ||= User.system_encryption_method.to_s 292 self.password_type ||= User.system_encryption_method.to_s
283 self.crypted_password = encrypt(password) 293 self.crypted_password = encrypt(password)
284 end 294 end
285 - 295 +
286 def password_required? 296 def password_required?
287 - crypted_password.blank? || !password.blank? 297 + (crypted_password.blank? || !password.blank?) && is_password_required?
  298 + end
  299 +
  300 + def is_password_required?
  301 + @is_password_required.nil? ? true : @is_password_required
288 end 302 end
289 303
290 def make_activation_code 304 def make_activation_code
app/views/account/login.rhtml
@@ -13,6 +13,8 @@ @@ -13,6 +13,8 @@
13 13
14 <%= f.password_field :password %> 14 <%= f.password_field :password %>
15 15
  16 + <%= @plugins.dispatch(:login_extra_contents).collect { |content| instance_eval(&content) }.join("") %>
  17 +
16 <% button_bar do %> 18 <% button_bar do %>
17 <%= submit_button( 'login', _('Log in') )%> 19 <%= submit_button( 'login', _('Log in') )%>
18 <% if is_thickbox %> 20 <% if is_thickbox %>
@@ -23,8 +25,13 @@ @@ -23,8 +25,13 @@
23 <% end %> 25 <% end %>
24 26
25 <% button_bar do %> 27 <% button_bar do %>
26 - <%= button :add, _("New user"), :controller => 'account', :action => 'signup' %>  
27 - <%= button :help, _("I forgot my password!"), :controller => 'account', :action => 'forgot_password' %> 28 + <% unless @plugins.dispatch(:allow_user_registration).include?(false) %>
  29 + <%= button :add, _("New user"), :controller => 'account', :action => 'signup' %>
  30 + <% end %>
  31 +
  32 + <% unless @plugins.dispatch(:allow_password_recovery).include?(false) %>
  33 + <%= button :help, _("I forgot my password!"), :controller => 'account', :action => 'forgot_password' %>
  34 + <% end %>
28 <% end %> 35 <% end %>
29 36
30 </div><!-- end class="login-box" --> 37 </div><!-- end class="login-box" -->
app/views/layouts/application-ng.rhtml
@@ -56,10 +56,18 @@ @@ -56,10 +56,18 @@
56 <%= usermenu_logged_in %> 56 <%= usermenu_logged_in %>
57 </span> 57 </span>
58 <span class='not-logged-in' style='display: none'> 58 <span class='not-logged-in' style='display: none'>
59 - <%= _("<span class='login'>%s</span> <span class='or'>or</span> <span class='signup'>%s</span>") % [thickbox_inline_popup_link('<i class="icon-menu-login"></i><strong>' + _('Login') + '</strong>', login_url, 'inlineLoginBox', :id => 'link_login'), link_to('<strong>' + _('Sign up') + '</strong>', :controller => 'account', :action => 'signup') ] %> 59 +
  60 + <%= _("<span class='login'>%s</span>") % thickbox_inline_popup_link('<i class="icon-menu-login"></i><strong>' + _('Login') + '</strong>', login_url, 'inlineLoginBox', :id => 'link_login') %>
  61 + <%= @plugins.dispatch(:alternative_authentication_link).collect { |content| instance_eval(&content) }.join("") %>
  62 +
60 <div id='inlineLoginBox' style='display: none;'> 63 <div id='inlineLoginBox' style='display: none;'>
61 <%= render :file => 'account/login', :locals => { :is_thickbox => true } %> 64 <%= render :file => 'account/login', :locals => { :is_thickbox => true } %>
62 </div> 65 </div>
  66 +
  67 + <% unless @plugins.dispatch(:allow_user_registration).include?(false) %>
  68 + <%= _("<span class='or'>or</span> <span class='signup'>%s</span>") % link_to('<strong>' + _('Sign up') + '</strong>', :controller => 'account', :action => 'signup')%>
  69 + <% end %>
  70 +
63 </span> 71 </span>
64 <form action="/search" class="search_form" method="get" class="clean"> 72 <form action="/search" class="search_form" method="get" class="clean">
65 <input name="query" size="15" title="<%=_('Search...')%>" onfocus="this.form.className='focused';" onblur="this.form.className=''" /> 73 <input name="query" size="15" title="<%=_('Search...')%>" onfocus="this.form.className='focused';" onblur="this.form.className=''" />
config/routes.rb
@@ -19,6 +19,7 @@ ActionController::Routing::Routes.draw do |map| @@ -19,6 +19,7 @@ ActionController::Routing::Routes.draw do |map|
19 19
20 # -- just remember to delete public/index.html. 20 # -- just remember to delete public/index.html.
21 # You can have the root of your site routed by hooking up '' 21 # You can have the root of your site routed by hooking up ''
  22 + map.root :controller => "home", :conditions => { :if => lambda { |env| !Domain.hosting_profile_at(env[:host]) } }
22 map.connect '', :controller => "home", :conditions => { :if => lambda { |env| !Domain.hosting_profile_at(env[:host]) } } 23 map.connect '', :controller => "home", :conditions => { :if => lambda { |env| !Domain.hosting_profile_at(env[:host]) } }
23 map.home 'site/:action', :controller => 'home' 24 map.home 'site/:action', :controller => 'home'
24 25
lib/noosfero/plugin.rb
@@ -320,6 +320,37 @@ class Noosfero::Plugin @@ -320,6 +320,37 @@ class Noosfero::Plugin
320 nil 320 nil
321 end 321 end
322 322
  323 + # -> Add an alternative authentication method.
  324 + # Your plugin have to make the access control and return the logged user.
  325 + # returns = User
  326 + def alternative_authentication
  327 + nil
  328 + end
  329 +
  330 + # -> Adds adicional link to make the user authentication
  331 + # returns = lambda block that creates html code
  332 + def alternative_authentication_link
  333 + nil
  334 + end
  335 +
  336 + # -> Allow or not user registration
  337 + # returns = boolean
  338 + def allow_user_registration
  339 + true
  340 + end
  341 +
  342 + # -> Allow or not password recovery by users
  343 + # returns = boolean
  344 + def allow_password_recovery
  345 + true
  346 + end
  347 +
  348 + # -> Adds fields to the login form
  349 + # returns = lambda block that creates html code
  350 + def login_extra_contents
  351 + nil
  352 + end
  353 +
323 def method_missing(method, *args, &block) 354 def method_missing(method, *args, &block)
324 # This is a generic hotspot for all controllers on Noosfero. 355 # This is a generic hotspot for all controllers on Noosfero.
325 # If any plugin wants to define filters to run on any controller, the name of 356 # If any plugin wants to define filters to run on any controller, the name of
test/functional/account_controller_test.rb
@@ -11,6 +11,10 @@ class AccountControllerTest &lt; ActionController::TestCase @@ -11,6 +11,10 @@ class AccountControllerTest &lt; ActionController::TestCase
11 11
12 all_fixtures 12 all_fixtures
13 13
  14 + def teardown
  15 + Thread.current[:enabled_plugins] = nil
  16 + end
  17 +
14 def setup 18 def setup
15 @controller = AccountController.new 19 @controller = AccountController.new
16 @request = ActionController::TestRequest.new 20 @request = ActionController::TestRequest.new
@@ -31,13 +35,11 @@ class AccountControllerTest &lt; ActionController::TestCase @@ -31,13 +35,11 @@ class AccountControllerTest &lt; ActionController::TestCase
31 assert_response :redirect 35 assert_response :redirect
32 end 36 end
33 37
34 - should 'redirect to where user was on login' do  
35 - @request.env["HTTP_REFERER"] = '/bli'  
36 - u = new_user 38 + should 'display notice message if the login fail' do
37 @controller.stubs(:logged_in?).returns(false) 39 @controller.stubs(:logged_in?).returns(false)
38 post :login, :user => {:login => 'quire', :password => 'quire'} 40 post :login, :user => {:login => 'quire', :password => 'quire'}
39 41
40 - assert_redirected_to '/bli' 42 + assert session[:notice].include?('Incorrect')
41 end 43 end
42 44
43 should 'authenticate on the current environment' do 45 should 'authenticate on the current environment' do
@@ -46,23 +48,11 @@ class AccountControllerTest &lt; ActionController::TestCase @@ -46,23 +48,11 @@ class AccountControllerTest &lt; ActionController::TestCase
46 post :login, :user => { :login => 'fake', :password => 'fake' } 48 post :login, :user => { :login => 'fake', :password => 'fake' }
47 end 49 end
48 50
49 - should 'redirect to where was when login on other environment' do  
50 - e = fast_create(Environment, :name => 'other_environment')  
51 - e.domains << Domain.new(:name => 'other.environment')  
52 - e.save!  
53 - u = create_user('test_user', :environment => e).person  
54 -  
55 - @request.env["HTTP_REFERER"] = '/bli'  
56 - post :login, :user => {:login => 'test_user', :password => 'test_user'}  
57 -  
58 - assert_redirected_to '/bli'  
59 - end  
60 -  
61 def test_should_fail_login_and_not_redirect 51 def test_should_fail_login_and_not_redirect
62 @request.env["HTTP_REFERER"] = 'bli' 52 @request.env["HTTP_REFERER"] = 'bli'
63 post :login, :user => {:login => 'johndoe', :password => 'bad password'} 53 post :login, :user => {:login => 'johndoe', :password => 'bad password'}
64 assert_nil session[:user] 54 assert_nil session[:user]
65 - assert_response :redirect 55 + assert_response :success
66 end 56 end
67 57
68 def test_should_allow_signup 58 def test_should_allow_signup
@@ -697,7 +687,6 @@ class AccountControllerTest &lt; ActionController::TestCase @@ -697,7 +687,6 @@ class AccountControllerTest &lt; ActionController::TestCase
697 assert_nil assigns(:message) 687 assert_nil assigns(:message)
698 post :login, :user => {:login => 'testuser', :password => 'test123'} 688 post :login, :user => {:login => 'testuser', :password => 'test123'}
699 assert_nil session[:user] 689 assert_nil session[:user]
700 - assert_redirected_to '/bli'  
701 end 690 end
702 691
703 should 'not activate user when activation code is incorrect' do 692 should 'not activate user when activation code is incorrect' do
@@ -707,7 +696,6 @@ class AccountControllerTest &lt; ActionController::TestCase @@ -707,7 +696,6 @@ class AccountControllerTest &lt; ActionController::TestCase
707 assert_nil assigns(:message) 696 assert_nil assigns(:message)
708 post :login, :user => {:login => 'testuser', :password => 'test123'} 697 post :login, :user => {:login => 'testuser', :password => 'test123'}
709 assert_nil session[:user] 698 assert_nil session[:user]
710 - assert_redirected_to '/bli'  
711 end 699 end
712 700
713 should 'be able to upload an image' do 701 should 'be able to upload an image' do
@@ -777,6 +765,122 @@ class AccountControllerTest &lt; ActionController::TestCase @@ -777,6 +765,122 @@ class AccountControllerTest &lt; ActionController::TestCase
777 assert_tag :tag => 'strong', :content => 'Plugin2 text' 765 assert_tag :tag => 'strong', :content => 'Plugin2 text'
778 end 766 end
779 767
  768 + should 'login with an alternative authentication defined by plugin' do
  769 + class Plugin1 < Noosfero::Plugin
  770 + def alternative_authentication
  771 + User.new(:login => 'testuser')
  772 + end
  773 + end
  774 + Environment.default.enable_plugin(Plugin1.name)
  775 +
  776 + post :login, :user => {:login => "testuser"}
  777 +
  778 + assert_equal 'testuser', assigns(:current_user).login
  779 + assert_response :redirect
  780 + end
  781 +
  782 + should "login with the default autentication if the alternative authentication method doesn't login the user" do
  783 + class Plugin1 < Noosfero::Plugin
  784 + def alternative_authentication
  785 + nil
  786 + end
  787 + end
  788 + Environment.default.enable_plugin(Plugin1.name)
  789 + post :login, :user => {:login => 'johndoe', :password => 'test'}
  790 + assert session[:user]
  791 + assert_equal 'johndoe', assigns(:current_user).login
  792 + assert_response :redirect
  793 + end
  794 +
  795 + should "redirect user on signup if a plugin doesn't allow user registration" do
  796 + class TestRegistrationPlugin < Noosfero::Plugin
  797 + def allow_user_registration
  798 + false
  799 + end
  800 + end
  801 + Noosfero::Plugin::Manager.any_instance.stubs(:enabled_plugins).returns([TestRegistrationPlugin.new])
  802 +
  803 + post :signup, :user => { :login => 'testuser', :password => '123456', :password_confirmation => '123456', :email => 'testuser@example.com' }
  804 + assert_response :redirect
  805 + end
  806 +
  807 + should "not display the new user button on login page if not allowed by any plugin" do
  808 + class Plugin1 < Noosfero::Plugin
  809 + def allow_user_registration
  810 + false
  811 + end
  812 + end
  813 +
  814 + class Plugin2 < Noosfero::Plugin
  815 + def allow_user_registration
  816 + true
  817 + end
  818 + end
  819 + Noosfero::Plugin::Manager.any_instance.stubs(:enabled_plugins).returns([Plugin1.new, Plugin2.new])
  820 +
  821 + get :login
  822 +
  823 + assert_no_tag :tag => 'a', :attributes => {:href => '/account/signup'}
  824 + end
  825 +
  826 + should "redirect user on forgot_password action if a plugin doesn't allow user to recover its password" do
  827 + class TestRegistrationPlugin < Noosfero::Plugin
  828 + def allow_password_recovery
  829 + false
  830 + end
  831 + end
  832 + Noosfero::Plugin::Manager.any_instance.stubs(:enabled_plugins).returns([TestRegistrationPlugin.new])
  833 +
  834 + #Redirect on get action
  835 + get :forgot_password
  836 + assert_response :redirect
  837 +
  838 + #Redirect on post action
  839 + post :forgot_password, :change_password => { :login => 'test', :email => 'test@localhost.localdomain' }
  840 + assert_response :redirect
  841 + end
  842 +
  843 + should "not display the forgot password button on login page if not allowed by any plugin" do
  844 + class Plugin1 < Noosfero::Plugin
  845 + def allow_password_recovery
  846 + false
  847 + end
  848 + end
  849 +
  850 + class Plugin2 < Noosfero::Plugin
  851 + def allow_password_recovery
  852 + true
  853 + end
  854 + end
  855 + Noosfero::Plugin::Manager.any_instance.stubs(:enabled_plugins).returns([Plugin1.new, Plugin2.new])
  856 +
  857 + get :login
  858 +
  859 + assert_no_tag :tag => 'a', :attributes => {:href => '/account/forgot_password'}
  860 + end
  861 +
  862 + should 'add extra content on login form from plugins' do
  863 + class Plugin1 < Noosfero::Plugin
  864 + def login_extra_contents
  865 + lambda {"<strong>Plugin1 text</strong>"}
  866 + end
  867 + end
  868 + class Plugin2 < Noosfero::Plugin
  869 + def login_extra_contents
  870 + lambda {"<strong>Plugin2 text</strong>"}
  871 + end
  872 + end
  873 +
  874 + Environment.default.enable_plugin(Plugin1.name)
  875 + Environment.default.enable_plugin(Plugin2.name)
  876 +
  877 + get :login
  878 +
  879 + assert_tag :tag => 'strong', :content => 'Plugin1 text'
  880 + assert_tag :tag => 'strong', :content => 'Plugin2 text'
  881 + end
  882 +
  883 +
780 protected 884 protected
781 def new_user(options = {}, extra_options ={}) 885 def new_user(options = {}, extra_options ={})
782 data = {:profile_data => person_data} 886 data = {:profile_data => person_data}
test/functional/home_controller_test.rb
@@ -6,8 +6,11 @@ class HomeController; def rescue_action(e) raise e end; end @@ -6,8 +6,11 @@ class HomeController; def rescue_action(e) raise e end; end
6 6
7 class HomeControllerTest < ActionController::TestCase 7 class HomeControllerTest < ActionController::TestCase
8 8
9 -# all_fixtures:profiles, :environments, :domains  
10 -all_fixtures 9 + def teardown
  10 + Thread.current[:enabled_plugins] = nil
  11 + end
  12 +
  13 + all_fixtures
11 def setup 14 def setup
12 @controller = HomeController.new 15 @controller = HomeController.new
13 @request = ActionController::TestRequest.new 16 @request = ActionController::TestRequest.new
@@ -93,4 +96,44 @@ all_fixtures @@ -93,4 +96,44 @@ all_fixtures
93 assert_tag :content => /Noosfero terms of use/ 96 assert_tag :content => /Noosfero terms of use/
94 end 97 end
95 98
  99 + should 'provide a link to make the user authentication' do
  100 + class Plugin1 < Noosfero::Plugin
  101 + def alternative_authentication_link
  102 + lambda {"<a href='plugin1'>Plugin1 link</a>"}
  103 + end
  104 + end
  105 + class Plugin2 < Noosfero::Plugin
  106 + def alternative_authentication_link
  107 + lambda {"<a href='plugin2'>Plugin2 link</a>"}
  108 + end
  109 + end
  110 +
  111 + Environment.default.enable_plugin(Plugin1)
  112 + Environment.default.enable_plugin(Plugin2)
  113 +
  114 + get :index
  115 +
  116 + assert_tag :tag => 'a', :content => 'Plugin1 link'
  117 + assert_tag :tag => 'a', :content => 'Plugin2 link'
  118 + end
  119 +
  120 + should "not display the new user button on login page if now allowed by any plugin" do
  121 + class Plugin1 < Noosfero::Plugin
  122 + def allow_user_registration
  123 + false
  124 + end
  125 + end
  126 +
  127 + class Plugin2 < Noosfero::Plugin
  128 + def allow_user_registration
  129 + true
  130 + end
  131 + end
  132 + Noosfero::Plugin::Manager.any_instance.stubs(:enabled_plugins).returns([Plugin1.new, Plugin2.new])
  133 +
  134 + get :index
  135 +
  136 + assert_no_tag :tag => 'a', :attributes => {:href => '/account/signup'}
  137 + end
  138 +
96 end 139 end
test/unit/user_test.rb
@@ -403,12 +403,29 @@ class UserTest &lt; ActiveSupport::TestCase @@ -403,12 +403,29 @@ class UserTest &lt; ActiveSupport::TestCase
403 assert_equal 'Test User', user.name 403 assert_equal 'Test User', user.name
404 end 404 end
405 405
406 - should 'respond name with login, if there is no person related' do 406 + should 'respond name with login, if there is no person related and name defined' do
407 user = create_user('testuser') 407 user = create_user('testuser')
408 user.person = nil 408 user.person = nil
  409 + user.name = nil
409 assert_equal 'testuser', user.name 410 assert_equal 'testuser', user.name
410 end 411 end
411 412
  413 + should 'respond name with user name attribute' do
  414 + user = create_user('testuser')
  415 + user.person = nil
  416 + user.name = 'Another User'
  417 + user.login = 'Login User'
  418 + assert_equal 'Another User', user.name
  419 + end
  420 +
  421 + should 'respond name with related person name although user name attribute is defined' do
  422 + user = create_user('testuser')
  423 + user.person.name = 'Person Name'
  424 + user.name = 'Another User'
  425 + user.login = 'Login User'
  426 + assert_equal 'Person Name', user.name
  427 + end
  428 +
412 should 'have activation code' do 429 should 'have activation code' do
413 user = create_user('testuser') 430 user = create_user('testuser')
414 assert_respond_to user, :activation_code 431 assert_respond_to user, :activation_code
@@ -499,6 +516,12 @@ class UserTest &lt; ActiveSupport::TestCase @@ -499,6 +516,12 @@ class UserTest &lt; ActiveSupport::TestCase
499 assert !user.activate 516 assert !user.activate
500 end 517 end
501 518
  519 + should 'be able to skip the password requirement' do
  520 + user = User.new(:login => 'quire', :email => 'quire@example.com')
  521 + user.not_require_password!
  522 + assert user.save!
  523 + end
  524 +
502 protected 525 protected
503 def new_user(options = {}) 526 def new_user(options = {})
504 user = User.new({ :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options)) 527 user = User.new({ :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options))