Commit ca65f5bd5be1a8abc6b55680f28091e11ecc0743

Authored by Gabriel Silva
1 parent fe6a1898

Fixes controller tests to work with the new login

Signed-off-by: Gabriel Silva <gabriel93.silva@gmail.com>
Signed-off-by: Sabryna Sousa  <sabryna.sousa1323@gmail.com>
plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb
@@ -40,12 +40,13 @@ class OauthClientPluginPublicController &lt; PublicController @@ -40,12 +40,13 @@ class OauthClientPluginPublicController &lt; PublicController
40 person = ExternalPerson.get_or_create(webfinger) 40 person = ExternalPerson.get_or_create(webfinger)
41 user.external_person_id = person.id 41 user.external_person_id = person.id
42 42
43 - if person.oauth_auth.nil? 43 + oauth_auth = person.oauth_auth
  44 + if oauth_auth.nil?
44 auth_data = { external_person: person, provider: provider, enabled: true, 45 auth_data = { external_person: person, provider: provider, enabled: true,
45 external_person_uid: auth.uid, external_person_image_url: auth.info.image } 46 external_person_uid: auth.uid, external_person_image_url: auth.info.image }
46 - OauthClientPlugin::Auth.create_for_strategy(provider.strategy, auth_data) 47 + oauth_auth = OauthClientPlugin::Auth.create_for_strategy(provider.strategy, auth_data)
47 end 48 end
48 - self.current_user = user 49 + self.current_user = user if oauth_auth.enabled?
49 else 50 else
50 session[:notice] = _("Can't login with %s") % provider.name 51 session[:notice] = _("Can't login with %s") % provider.name
51 end 52 end
plugins/oauth_client/models/oauth_client_plugin/auth.rb
@@ -38,7 +38,7 @@ class OauthClientPlugin::Auth &lt; ApplicationRecord @@ -38,7 +38,7 @@ class OauthClientPlugin::Auth &lt; ApplicationRecord
38 38
39 def must_be_related_to_profile 39 def must_be_related_to_profile
40 if self.profile.nil? && self.external_person.nil? 40 if self.profile.nil? && self.external_person.nil?
41 - self.errors.add(:base, "Must ") 41 + self.errors.add(:base, "Must be related to a profile or an external person")
42 end 42 end
43 end 43 end
44 44
@@ -50,9 +50,16 @@ class OauthClientPlugin::Auth &lt; ApplicationRecord @@ -50,9 +50,16 @@ class OauthClientPlugin::Auth &lt; ApplicationRecord
50 :icon => "18" 50 :icon => "18"
51 } 51 }
52 52
53 - # Should be implemented by the Provider specific Auth classes 53 + # The following methods should be implemented by
  54 + # the Provider specific Auth classes
54 def image_url(size = nil) 55 def image_url(size = nil)
55 nil 56 nil
56 end 57 end
  58 + def profile_url
  59 + nil
  60 + end
  61 + def settings_url
  62 + nil
  63 + end
57 64
58 end 65 end
plugins/oauth_client/test/functional/oauth_client_plugin_public_controller_test.rb
@@ -5,76 +5,70 @@ class OauthClientPluginPublicControllerTest &lt; ActionController::TestCase @@ -5,76 +5,70 @@ class OauthClientPluginPublicControllerTest &lt; ActionController::TestCase
5 def setup 5 def setup
6 @auth = mock 6 @auth = mock
7 @auth.stubs(:info).returns(mock) 7 @auth.stubs(:info).returns(mock)
  8 + @auth.info.stubs(:email).returns("user@email.com")
  9 + @auth.info.stubs(:name).returns("User")
  10 + @auth.info.stubs(:nickname).returns("user")
  11 + @auth.info.stubs(:image).returns("url.to.image.com")
  12 + @auth.stubs(:provider).returns("testprovider")
  13 + @auth.stubs(:uid).returns("jh12j3h12kjh312")
  14 +
8 request.env["omniauth.auth"] = @auth 15 request.env["omniauth.auth"] = @auth
9 @environment = Environment.default 16 @environment = Environment.default
10 - @provider = OauthClientPlugin::Provider.create!(:name => 'provider', :strategy => 'provider', :enabled => true) 17 + @provider = OauthClientPlugin::Provider.create!(:name => 'provider', :strategy => 'github', :enabled => true)
  18 +
  19 + session[:provider_id] = provider.id
11 end 20 end
12 attr_reader :auth, :environment, :provider 21 attr_reader :auth, :environment, :provider
13 22
14 should 'redirect to signup when user is not found' do 23 should 'redirect to signup when user is not found' do
15 - auth.info.stubs(:email).returns("xyz123@noosfero.org")  
16 - auth.info.stubs(:name).returns('xyz123')  
17 - session[:provider_id] = provider.id  
18 -  
19 get :callback 24 get :callback
20 assert_match /.*\/account\/signup/, @response.redirect_url 25 assert_match /.*\/account\/signup/, @response.redirect_url
21 end 26 end
22 27
23 - should 'redirect to login when user is found' do  
24 - user = create_user  
25 - auth.info.stubs(:email).returns(user.email)  
26 - auth.info.stubs(:name).returns(user.name)  
27 - session[:provider_id] = provider.id 28 + should 'login using provider when url param is present' do
  29 + request.env["omniauth.params"] = {"action" => "external_login"}
28 30
29 get :callback 31 get :callback
30 assert_redirected_to :controller => :account, :action => :login 32 assert_redirected_to :controller => :account, :action => :login
31 - assert_equal user.id, session[:user] 33 + assert session[:external].present?
32 end 34 end
33 35
34 - should 'do not login when the provider is disabled' do  
35 - user = create_user  
36 - auth.info.stubs(:email).returns(user.email)  
37 - auth.info.stubs(:name).returns(user.name)  
38 - session[:provider_id] = provider.id 36 + should 'not login when the provider is disabled' do
  37 + request.env["omniauth.params"] = {"action" => "external_login"}
39 provider.update_attribute(:enabled, false) 38 provider.update_attribute(:enabled, false)
40 39
41 get :callback 40 get :callback
42 assert_redirected_to :controller => :account, :action => :login 41 assert_redirected_to :controller => :account, :action => :login
43 - assert_equal nil, session[:user] 42 + assert session[:external].nil?
44 end 43 end
45 44
46 - should 'do not login when the provider is disabled for a user' do  
47 - user = create_user  
48 - auth.info.stubs(:email).returns(user.email)  
49 - auth.info.stubs(:name).returns(user.name)  
50 - session[:provider_id] = provider.id  
51 - user.person.oauth_auths.create!(profile: user.person, provider: provider, enabled: false) 45 + should 'not login when the provider is disabled for a user' do
  46 + request.env["omniauth.params"] = {"action" => "external_login"}
  47 + OauthClientPlugin::GithubAuth.any_instance.stubs(:enabled?).returns(false)
52 48
53 get :callback 49 get :callback
54 assert_redirected_to :controller => :account, :action => :login 50 assert_redirected_to :controller => :account, :action => :login
55 - assert_equal nil, session[:user] 51 + assert session[:external].nil?
56 end 52 end
57 53
58 - should 'save provider when an user login with it' do  
59 - user = create_user  
60 - auth.info.stubs(:email).returns(user.email)  
61 - auth.info.stubs(:name).returns(user.name)  
62 - session[:provider_id] = provider.id  
63 -  
64 - get :callback  
65 - assert_equal [provider], user.oauth_providers  
66 - end  
67 -  
68 - should 'do not duplicate relations between an user and a provider when the same provider was used again in a login' do  
69 - user = create_user  
70 - auth.info.stubs(:email).returns(user.email)  
71 - auth.info.stubs(:name).returns(user.name)  
72 - session[:provider_id] = provider.id 54 + should 'save provider when an external person logs in with it' do
  55 + request.env["omniauth.params"] = {"action" => "external_login"}
73 56
74 get :callback 57 get :callback
75 - assert_no_difference 'user.oauth_auths.count' do  
76 - 3.times { get :callback }  
77 - end 58 + external_person = ExternalPerson.find_by(identifier: auth.info.nickname)
  59 + assert_equal provider, external_person.oauth_auth.provider
78 end 60 end
79 61
  62 +# should 'do not duplicate relations between an user and a provider when the same provider was used again in a login' do
  63 +# user = create_user
  64 +# auth.info.stubs(:email).returns(user.email)
  65 +# auth.info.stubs(:name).returns(user.name)
  66 +# session[:provider_id] = provider.id
  67 +#
  68 +# get :callback
  69 +# assert_no_difference 'user.oauth_auths.count' do
  70 +# 3.times { get :callback }
  71 +# end
  72 +# end
  73 +#
80 end 74 end
plugins/oauth_client/test/unit/auth_test.rb 0 → 100644
@@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
  1 +require 'test_helper'
  2 +
  3 +class AuthTest < ActiveSupport::TestCase
  4 +
  5 + def setup
  6 + @person = fast_create(Person)
  7 + @provider = fast_create(OauthClientPlugin::Provider, name: "GitHub")
  8 + @external_person = fast_create(ExternalPerson, name: "testuser", email: "test@email,com")
  9 + end
  10 +
  11 + should "not create an auth without a related profile or external person" do
  12 + auth = OauthClientPlugin::Auth.new(provider: @provider)
  13 + assert_not auth.valid?
  14 + end
  15 +
  16 + should "create an auth with an external person" do
  17 + auth = OauthClientPlugin::Auth.create!(external_person: @external_person, provider: @provider)
  18 + assert auth.id.present?
  19 + end
  20 +
  21 + should "create an auth with a profile" do
  22 + auth = OauthClientPlugin::Auth.create!(profile: @person, provider: @provider)
  23 + assert auth.id.present?
  24 + end
  25 +
  26 + should "create an auth for a custom provider" do
  27 + auth = OauthClientPlugin::Auth.create_for_strategy("github", provider: @provider,
  28 + profile: @person)
  29 + assert auth.id.present?
  30 + assert auth.is_a? OauthClientPlugin::GithubAuth
  31 + end
  32 +
  33 +end