Commit 7bac7ef7dcdee879741ea74da7f334be2e5bc8ca
Committed by
Daniela Feitosa
1 parent
54151a76
Exists in
master
and in
8 other branches
adding some hotspots to make the openid plugin works.
Showing
10 changed files
with
285 additions
and
40 deletions
Show diff stats
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 < ActionController::TestCase | @@ -11,6 +11,10 @@ class AccountControllerTest < 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 < ActionController::TestCase | @@ -31,13 +35,11 @@ class AccountControllerTest < 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 < ActionController::TestCase | @@ -46,23 +48,11 @@ class AccountControllerTest < 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 < ActionController::TestCase | @@ -697,7 +687,6 @@ class AccountControllerTest < 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 < ActionController::TestCase | @@ -707,7 +696,6 @@ class AccountControllerTest < 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 < ActionController::TestCase | @@ -777,6 +765,122 @@ class AccountControllerTest < 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 < ActiveSupport::TestCase | @@ -403,12 +403,29 @@ class UserTest < 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 < ActiveSupport::TestCase | @@ -499,6 +516,12 @@ class UserTest < 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)) |