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,7 +1010,7 @@ class Environment < ApplicationRecord | ||
1010 | end | 1010 | end |
1011 | 1011 | ||
1012 | def has_federated_network?(domain) | 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 | end | 1014 | end |
1015 | 1015 | ||
1016 | private | 1016 | private |
app/models/external_person.rb
@@ -103,4 +103,34 @@ class ExternalPerson < ActiveRecord::Base | @@ -103,4 +103,34 @@ class ExternalPerson < ActiveRecord::Base | ||
103 | def image | 103 | def image |
104 | ExternalPerson::Image.new(avatar) | 104 | ExternalPerson::Image.new(avatar) |
105 | end | 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 | end | 136 | end |
app/models/person.rb
@@ -555,6 +555,34 @@ class Person < Profile | @@ -555,6 +555,34 @@ class Person < Profile | ||
555 | person.has_permission?(:manage_friends, self) | 555 | person.has_permission?(:manage_friends, self) |
556 | end | 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 | protected | 586 | protected |
559 | 587 | ||
560 | def followed_by?(profile) | 588 | def followed_by?(profile) |
app/models/user.rb
@@ -386,31 +386,7 @@ class User < ApplicationRecord | @@ -386,31 +386,7 @@ class User < ApplicationRecord | ||
386 | end | 386 | end |
387 | 387 | ||
388 | def data_hash(gravatar_default = nil) | 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 | end | 390 | end |
415 | 391 | ||
416 | def self.expires_chat_status_every | 392 | def self.expires_chat_status_every |
@@ -0,0 +1,23 @@ | @@ -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,3 +679,30 @@ Given /^the field (.*) is public for all users$/ do |field| | ||
679 | person.save! | 679 | person.save! |
680 | end | 680 | end |
681 | end | 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
@@ -8,6 +8,7 @@ ENV["RAILS_ENV"] ||= "cucumber" | @@ -8,6 +8,7 @@ ENV["RAILS_ENV"] ||= "cucumber" | ||
8 | 8 | ||
9 | require File.expand_path(File.dirname(__FILE__) + '/../../config/environment') | 9 | require File.expand_path(File.dirname(__FILE__) + '/../../config/environment') |
10 | require 'cucumber/rails' | 10 | require 'cucumber/rails' |
11 | +require 'cucumber/rspec/doubles' | ||
11 | 12 | ||
12 | Capybara.ignore_hidden_elements = true | 13 | Capybara.ignore_hidden_elements = true |
13 | 14 |
vendor/plugins/noosfero_caching/init.rb
@@ -27,7 +27,7 @@ module NoosferoHttpCaching | @@ -27,7 +27,7 @@ module NoosferoHttpCaching | ||
27 | end | 27 | end |
28 | 28 | ||
29 | def noosfero_session_check | 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 | end | 31 | end |
32 | 32 | ||
33 | class Middleware | 33 | class Middleware |