From 58188d549873eb9c4db71cf4584f42bc22cb5f8e Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Wed, 15 Oct 2014 14:56:20 -0300 Subject: [PATCH] oauth_client: added more tests --- plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb | 2 +- plugins/oauth_client/test/functional/oauth_client_plugin_public_controller_test.rb | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ plugins/oauth_client/test/unit/environment_test.rb | 10 ++++++++++ 3 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 plugins/oauth_client/test/functional/oauth_client_plugin_public_controller_test.rb create mode 100644 plugins/oauth_client/test/unit/environment_test.rb diff --git a/plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb b/plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb index 7078a21..d8bfba5 100644 --- a/plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb +++ b/plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb @@ -24,7 +24,7 @@ class OauthClientPluginPublicController < PublicController unless user_provider user_provider = user.oauth_user_providers.create(:user => user, :provider => provider, :enabled => true) end - if user_provider.enabled? + if user_provider.enabled? && provider.enabled? session[:user] = user.id else session[:notice] = _("Can't login with #{provider.name}") diff --git a/plugins/oauth_client/test/functional/oauth_client_plugin_public_controller_test.rb b/plugins/oauth_client/test/functional/oauth_client_plugin_public_controller_test.rb new file mode 100644 index 0000000..0cd84fb --- /dev/null +++ b/plugins/oauth_client/test/functional/oauth_client_plugin_public_controller_test.rb @@ -0,0 +1,80 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class OauthClientPluginPublicControllerTest < ActionController::TestCase + + def setup + @auth = mock + @auth.stubs(:info).returns(mock) + request.env["omniauth.auth"] = @auth + @environment = Environment.default + @provider = OauthClientPlugin::Provider.create!(:name => 'provider', :strategy => 'provider', :identifier =>'provider', :enabled => true) + end + attr_reader :auth, :environment, :provider + + should 'redirect to signup when user is not found' do + auth.info.stubs(:email).returns("xyz123@noosfero.org") + auth.info.stubs(:name).returns('xyz123') + session[:provider_id] = provider.id + + get :callback + assert_match /.*\/account\/signup/, @response.redirect_url + end + + should 'redirect to login when user is found' do + user = fast_create(User, :environment_id => environment.id) + auth.info.stubs(:email).returns(user.email) + auth.info.stubs(:name).returns(user.name) + session[:provider_id] = provider.id + + get :callback + assert_redirected_to :controller => :account, :action => :login + assert_equal user.id, session[:user] + end + + should 'do not login when the provider is disabled' do + user = fast_create(User, :environment_id => environment.id) + auth.info.stubs(:email).returns(user.email) + auth.info.stubs(:name).returns(user.name) + session[:provider_id] = provider.id + provider.update_attribute(:enabled, false) + + get :callback + assert_redirected_to :controller => :account, :action => :login + assert_equal nil, session[:user] + end + + should 'do not login when the provider is disabled for a user' do + user = fast_create(User, :environment_id => environment.id) + auth.info.stubs(:email).returns(user.email) + auth.info.stubs(:name).returns(user.name) + session[:provider_id] = provider.id + user.oauth_user_providers.create(:user => user, :provider => provider, :enabled => false) + + get :callback + assert_redirected_to :controller => :account, :action => :login + assert_equal nil, session[:user] + end + + should 'save provider when an user login with it' do + user = fast_create(User, :environment_id => environment.id) + auth.info.stubs(:email).returns(user.email) + auth.info.stubs(:name).returns(user.name) + session[:provider_id] = provider.id + + get :callback + assert_equal [provider], user.oauth_providers + end + + should 'do not duplicate relations between an user and a provider when the same provider was used again in a login' do + user = fast_create(User, :environment_id => environment.id) + auth.info.stubs(:email).returns(user.email) + auth.info.stubs(:name).returns(user.name) + session[:provider_id] = provider.id + + get :callback + assert_no_difference 'user.oauth_user_providers.count' do + 3.times { get :callback } + end + end + +end diff --git a/plugins/oauth_client/test/unit/environment_test.rb b/plugins/oauth_client/test/unit/environment_test.rb new file mode 100644 index 0000000..a4b7d21 --- /dev/null +++ b/plugins/oauth_client/test/unit/environment_test.rb @@ -0,0 +1,10 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class UserTest < ActiveSupport::TestCase + + should 'be able to add oauth providers in a environment' do + env = fast_create(Environment) + env.oauth_providers << OauthClientPlugin::Provider.new(:name => 'test', :identifier => 'test', :strategy => 'test') + end + +end -- libgit2 0.21.2