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)) |