Commit b2604bc640db4d9011869ff6fc7d5e778d9b6263
Committed by
Larissa Reis
1 parent
da3ae0ed
Exists in
federation-webfinger
Ticket #195: Adding Selenium test for federated login
Showing
8 changed files
with
112 additions
and
27 deletions
Show diff stats
app/models/environment.rb
... | ... | @@ -1010,7 +1010,7 @@ class Environment < ApplicationRecord |
1010 | 1010 | end |
1011 | 1011 | |
1012 | 1012 | def has_federated_network?(domain) |
1013 | - self.federated_networks.map(&:url).any? {|url| /http[s]?:\/\/#{domain}\/?/ =~ url } | |
1013 | + self.federated_networks.map(&:url).any? { |url| /http[s]?:\/\/#{domain}\/?/ =~ url } | |
1014 | 1014 | end |
1015 | 1015 | |
1016 | 1016 | private | ... | ... |
app/models/external_person.rb
... | ... | @@ -103,4 +103,34 @@ class ExternalPerson < ActiveRecord::Base |
103 | 103 | def image |
104 | 104 | ExternalPerson::Image.new(avatar) |
105 | 105 | end |
106 | + | |
107 | + def is_template? | |
108 | + false | |
109 | + end | |
110 | + | |
111 | + def enterprises | |
112 | + [] | |
113 | + end | |
114 | + | |
115 | + def friends | |
116 | + [] | |
117 | + end | |
118 | + | |
119 | + def data_hash(gravatar_default = nil) | |
120 | + friends_list = {} | |
121 | + { | |
122 | + 'login' => self.identifier, | |
123 | + 'name' => self.name, | |
124 | + 'email' => self.email, | |
125 | + 'avatar' => self.profile_custom_icon(gravatar_default), | |
126 | + 'is_admin' => self.is_admin?, | |
127 | + 'since_month' => self.created_at.month, | |
128 | + 'since_year' => self.created_at.year, | |
129 | + 'email_domain' => self.source, | |
130 | + 'friends_list' => friends_list, | |
131 | + 'enterprises' => [], | |
132 | + 'amount_of_friends' => friends_list.count, | |
133 | + 'chat_enabled' => false | |
134 | + } | |
135 | + end | |
106 | 136 | end | ... | ... |
app/models/person.rb
... | ... | @@ -555,6 +555,34 @@ class Person < Profile |
555 | 555 | person.has_permission?(:manage_friends, self) |
556 | 556 | end |
557 | 557 | |
558 | + def data_hash(gravatar_default = nil) | |
559 | + friends_list = {} | |
560 | + enterprises = self.enterprises.map { |e| { 'name' => e.short_name, 'identifier' => e.identifier } } | |
561 | + self.friends.online.map do |person| | |
562 | + friends_list[self.identifier] = { | |
563 | + 'avatar' => self.profile_custom_icon(gravatar_default), | |
564 | + 'name' => self.short_name, | |
565 | + 'jid' => self.full_jid, | |
566 | + 'status' => self.user.chat_status, | |
567 | + } | |
568 | + end | |
569 | + | |
570 | + { | |
571 | + 'login' => self.identifier, | |
572 | + 'name' => self.name, | |
573 | + 'email' => self.email, | |
574 | + 'avatar' => self.profile_custom_icon(gravatar_default), | |
575 | + 'is_admin' => self.is_admin?, | |
576 | + 'since_month' => self.created_at.month, | |
577 | + 'since_year' => self.created_at.year, | |
578 | + 'email_domain' => self.user.enable_email ? self.user.email_domain : nil, | |
579 | + 'friends_list' => friends_list, | |
580 | + 'enterprises' => enterprises, | |
581 | + 'amount_of_friends' => friends_list.count, | |
582 | + 'chat_enabled' => self.environment.enabled?('xmpp_chat') | |
583 | + } | |
584 | + end | |
585 | + | |
558 | 586 | protected |
559 | 587 | |
560 | 588 | def followed_by?(profile) | ... | ... |
app/models/user.rb
... | ... | @@ -386,31 +386,7 @@ class User < ApplicationRecord |
386 | 386 | end |
387 | 387 | |
388 | 388 | def data_hash(gravatar_default = nil) |
389 | - friends_list = {} | |
390 | - enterprises = person.enterprises.map { |e| { 'name' => e.short_name, 'identifier' => e.identifier } } | |
391 | - self.person.friends.online.map do |person| | |
392 | - friends_list[person.identifier] = { | |
393 | - 'avatar' => person.profile_custom_icon(gravatar_default), | |
394 | - 'name' => person.short_name, | |
395 | - 'jid' => person.full_jid, | |
396 | - 'status' => person.user.chat_status, | |
397 | - } | |
398 | - end | |
399 | - | |
400 | - { | |
401 | - 'login' => self.login, | |
402 | - 'name' => self.person.name, | |
403 | - 'email' => self.email, | |
404 | - 'avatar' => self.person.profile_custom_icon(gravatar_default), | |
405 | - 'is_admin' => self.person.is_admin?, | |
406 | - 'since_month' => self.person.created_at.month, | |
407 | - 'since_year' => self.person.created_at.year, | |
408 | - 'email_domain' => self.enable_email ? self.email_domain : nil, | |
409 | - 'friends_list' => friends_list, | |
410 | - 'enterprises' => enterprises, | |
411 | - 'amount_of_friends' => friends_list.count, | |
412 | - 'chat_enabled' => person.environment.enabled?('xmpp_chat') | |
413 | - } | |
389 | + self.person.data_hash(gravatar_default) | |
414 | 390 | end |
415 | 391 | |
416 | 392 | def self.expires_chat_status_every | ... | ... |
... | ... | @@ -0,0 +1,23 @@ |
1 | +Feature: federated login | |
2 | + As a user | |
3 | + I want to login using an account from a federated network | |
4 | + In order to view pages logged in | |
5 | + | |
6 | + @selenium | |
7 | + Scenario: login from portal homepage | |
8 | + Given feature "allow_change_of_redirection_after_login" is disabled on environment | |
9 | + And the following federated networks | |
10 | + | identifier | name | url | | |
11 | + | test | Test | http://federated.noosfero.org | | |
12 | + And the following external users | |
13 | + | login | | |
14 | + | joaosilva@federated.noosfero.org | | |
15 | + And I am not logged in | |
16 | + And I go to the homepage | |
17 | + And I follow "Login" | |
18 | + And I fill in the following: | |
19 | + | Username / Email | joaosilva@federated.noosfero.org | | |
20 | + | Password | 123456 | | |
21 | + When I press "Log in" | |
22 | + Then I should be on the homepage | |
23 | + And I should be federated logged in as "joaosilva@federated.noosfero.org" | ... | ... |
features/step_definitions/noosfero_steps.rb
... | ... | @@ -679,3 +679,30 @@ Given /^the field (.*) is public for all users$/ do |field| |
679 | 679 | person.save! |
680 | 680 | end |
681 | 681 | end |
682 | + | |
683 | +Given /^the following external users?$/ do |table| | |
684 | + table.hashes.each do |item| | |
685 | + person_data = item.dup | |
686 | + username, domain = person_data['login'].split('@') | |
687 | + response = OpenStruct.new( | |
688 | + code: '200', | |
689 | + body: { | |
690 | + user: { | |
691 | + email: username + '@ema.il', | |
692 | + person: { | |
693 | + identifier: username, | |
694 | + name: username, | |
695 | + created_at: Time.now, | |
696 | + } | |
697 | + } | |
698 | + }.to_json | |
699 | + ) | |
700 | + Net::HTTP.stub(:post_form).and_return(response) | |
701 | + end | |
702 | +end | |
703 | + | |
704 | +Then /^I should be federated logged in as "([^@]+)@(.+)"$/ do |username, domain| | |
705 | + visit '/' | |
706 | + url = 'http://' + domain + '/' + username | |
707 | + page.should have_xpath("//a[@href=\"#{url}\"]") | |
708 | +end | ... | ... |
features/support/env.rb
vendor/plugins/noosfero_caching/init.rb
... | ... | @@ -27,7 +27,7 @@ module NoosferoHttpCaching |
27 | 27 | end |
28 | 28 | |
29 | 29 | def noosfero_session_check |
30 | - headers["X-Noosfero-Auth"] = (session[:user] != nil).to_s | |
30 | + headers["X-Noosfero-Auth"] = (session[:user] != nil || session[:external] != nil).to_s | |
31 | 31 | end |
32 | 32 | |
33 | 33 | class Middleware | ... | ... |