Merge pull request #6151 from SuperTux88/federation-gem
Federation Gem Step 1: Webfinger/HCard generation
This commit is contained in:
commit
6b6bf84598
20 changed files with 225 additions and 233 deletions
|
|
@ -36,6 +36,7 @@ bind to an UNIX socket at `unix:tmp/diaspora.sock`. Please change your local
|
|||
* Replace remaining faceboxes with Bootstrap modals [#6106](https://github.com/diaspora/diaspora/pull/6106) [#6161](https://github.com/diaspora/diaspora/pull/6161)
|
||||
* Rewrite header using Bootstrap 3 [#6109](https://github.com/diaspora/diaspora/pull/6109) [#6130](https://github.com/diaspora/diaspora/pull/6130) [#6132](https://github.com/diaspora/diaspora/pull/6132)
|
||||
* Use upstream CSS mappings for Entypo [#6158](https://github.com/diaspora/diaspora/pull/6158)
|
||||
* Move webfinger and HCard generation out of the core and embed the `diaspora_federation-rails` gem [#6151](https://github.com/diaspora/diaspora/pull/6151/)
|
||||
|
||||
## Bug fixes
|
||||
* Destroy Participation when removing interactions with a post [#5852](https://github.com/diaspora/diaspora/pull/5852)
|
||||
|
|
|
|||
9
Gemfile
9
Gemfile
|
|
@ -3,11 +3,6 @@ source "https://rubygems.org"
|
|||
gem "rails", "4.2.3"
|
||||
|
||||
# Legacy Rails features, remove me!
|
||||
|
||||
# caches_page
|
||||
gem "actionpack-action_caching"
|
||||
gem "actionpack-page_caching"
|
||||
|
||||
# responders (class level)
|
||||
gem "responders", "2.1.0"
|
||||
|
||||
|
|
@ -15,6 +10,10 @@ gem "responders", "2.1.0"
|
|||
|
||||
gem "unicorn", "4.9.0", require: false
|
||||
|
||||
# Federation
|
||||
|
||||
gem "diaspora_federation-rails", "0.0.2"
|
||||
|
||||
# API and JSON
|
||||
|
||||
gem "acts_as_api", "0.4.2"
|
||||
|
|
|
|||
12
Gemfile.lock
12
Gemfile.lock
|
|
@ -16,10 +16,6 @@ GEM
|
|||
rack-test (~> 0.6.2)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||
actionpack-action_caching (1.1.1)
|
||||
actionpack (>= 4.0.0, < 5.0)
|
||||
actionpack-page_caching (1.0.2)
|
||||
actionpack (>= 4.0.0, < 5)
|
||||
actionview (4.2.3)
|
||||
activesupport (= 4.2.3)
|
||||
builder (~> 3.1)
|
||||
|
|
@ -159,6 +155,11 @@ GEM
|
|||
eventmachine (>= 1.0.5, < 1.1)
|
||||
http_parser.rb (~> 0.6)
|
||||
nokogiri (~> 1.6)
|
||||
diaspora_federation (0.0.2)
|
||||
nokogiri (~> 1.6, >= 1.6.6)
|
||||
diaspora_federation-rails (0.0.2)
|
||||
diaspora_federation (= 0.0.2)
|
||||
rails (~> 4.2)
|
||||
diff-lcs (1.2.5)
|
||||
docile (1.1.5)
|
||||
domain_name (0.5.24)
|
||||
|
|
@ -765,8 +766,6 @@ PLATFORMS
|
|||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
actionpack-action_caching
|
||||
actionpack-page_caching
|
||||
active_model_serializers (= 0.9.3)
|
||||
activerecord-import (= 0.8.0)
|
||||
acts-as-taggable-on (= 3.5.0)
|
||||
|
|
@ -787,6 +786,7 @@ DEPENDENCIES
|
|||
devise-token_authenticatable (~> 0.4.0)
|
||||
devise_lastseenable (= 0.0.4)
|
||||
diaspora-vines (~> 0.1.27)
|
||||
diaspora_federation-rails (= 0.0.2)
|
||||
entypo-rails (= 3.0.0.pre.rc2)
|
||||
eye (= 0.7.pre)
|
||||
factory_girl_rails (= 4.5.0)
|
||||
|
|
|
|||
|
|
@ -13,36 +13,8 @@ class PublicsController < ApplicationController
|
|||
respond_to :html
|
||||
respond_to :xml, :only => :post
|
||||
|
||||
caches_page :host_meta, :if => Proc.new{ Rails.env == 'production'}
|
||||
|
||||
layout false
|
||||
|
||||
def hcard
|
||||
@person = Person.find_by_guid_and_closed_account(params[:guid], false)
|
||||
|
||||
if @person.present? && @person.local?
|
||||
render 'publics/hcard'
|
||||
else
|
||||
render :nothing => true, :status => 404
|
||||
end
|
||||
end
|
||||
|
||||
def host_meta
|
||||
render 'host_meta', :content_type => 'application/xrd+xml'
|
||||
end
|
||||
|
||||
def webfinger
|
||||
@person = Person.local_by_account_identifier(params[:q]) if params[:q]
|
||||
|
||||
if @person.nil? || @person.closed_account?
|
||||
render :nothing => true, :status => 404
|
||||
return
|
||||
end
|
||||
|
||||
logger.info "webfinger profile request for: #{@person.id}"
|
||||
render 'webfinger', :content_type => 'application/xrd+xml'
|
||||
end
|
||||
|
||||
def hub
|
||||
render :text => params['hub.challenge'], :status => 202, :layout => false
|
||||
end
|
||||
|
|
|
|||
|
|
@ -3,11 +3,10 @@ module JsxcHelper
|
|||
port = AppConfig.chat.server.bosh.port
|
||||
bind = AppConfig.chat.server.bosh.bind
|
||||
host = AppConfig.pod_uri.host
|
||||
scheme = AppConfig.pod_uri.scheme
|
||||
|
||||
unless AppConfig.chat.server.bosh.proxy?
|
||||
return "http://#{host}:#{port}#{bind}"
|
||||
end
|
||||
return "#{scheme}://#{host}#{bind}"
|
||||
AppConfig.url_to bind
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -51,10 +51,6 @@ module PeopleHelper
|
|||
end
|
||||
end
|
||||
|
||||
def person_href(person, opts={})
|
||||
"href=\"#{local_or_remote_person_path(person, opts)}\"".html_safe
|
||||
end
|
||||
|
||||
# Rails.application.routes.url_helpers is needed since this is indirectly called from a model
|
||||
def local_or_remote_person_path(person, opts={})
|
||||
opts.merge!(:protocol => AppConfig.pod_uri.scheme, :host => AppConfig.pod_uri.authority)
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ class Person < ActiveRecord::Base
|
|||
xml_attr :profile, :as => Profile
|
||||
xml_attr :exported_key
|
||||
|
||||
has_one :profile, :dependent => :destroy
|
||||
has_one :profile, dependent: :destroy
|
||||
delegate :last_name, :image_url, :tag_string, :bio, :location,
|
||||
:gender, :birthday, :formatted_birthday, :tags, :searchable,
|
||||
:public_details?, to: :profile
|
||||
|
|
@ -222,7 +222,7 @@ class Person < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def public_key_hash
|
||||
Base64.encode64(OpenSSL::Digest::SHA256.new(self.exported_key).to_s)
|
||||
Base64.encode64(OpenSSL::Digest::SHA256.new(serialized_public_key).to_s)
|
||||
end
|
||||
|
||||
def public_key
|
||||
|
|
@ -240,13 +240,16 @@ class Person < ActiveRecord::Base
|
|||
|
||||
# database calls
|
||||
def self.by_account_identifier(identifier)
|
||||
identifier = identifier.strip.downcase.gsub('acct:', '')
|
||||
self.where(:diaspora_handle => identifier).first
|
||||
identifier = identifier.strip.downcase.sub("acct:", "")
|
||||
find_by(diaspora_handle: identifier)
|
||||
end
|
||||
|
||||
def self.local_by_account_identifier(identifier)
|
||||
person = self.by_account_identifier(identifier)
|
||||
(person.nil? || person.remote?) ? nil : person
|
||||
def self.find_local_by_diaspora_handle(handle)
|
||||
where(diaspora_handle: handle, closed_account: false).where.not(owner: nil).take
|
||||
end
|
||||
|
||||
def self.find_local_by_guid(guid)
|
||||
where(guid: guid, closed_account: false).where.not(owner: nil).take
|
||||
end
|
||||
|
||||
def self.create_from_webfinger(profile, hcard)
|
||||
|
|
|
|||
|
|
@ -1,50 +0,0 @@
|
|||
#content
|
||||
%h1= @person.name
|
||||
#content_inner
|
||||
#i.entity_profile.vcard.author
|
||||
%h2 User profile
|
||||
|
||||
%dl.entity_nickname
|
||||
%dt Nickname
|
||||
%dd
|
||||
%a.nickname.url.uid{:href=>@person.url, :rel=>'me'}= @person.name
|
||||
|
||||
%dl.entity_given_name
|
||||
%dt First name
|
||||
%dd
|
||||
%span.given_name= @person.profile.first_name
|
||||
|
||||
%dl.entity_family_name
|
||||
%dt Family name
|
||||
%dd
|
||||
%span.family_name= @person.last_name
|
||||
|
||||
%dl.entity_fn
|
||||
%dt Full name
|
||||
%dd
|
||||
%span.fn= @person.name
|
||||
|
||||
%dl.entity_url
|
||||
%dt URL
|
||||
%dd
|
||||
%a#pod_location.url{:href=>@person.url, :rel=>'me'}= @person.url
|
||||
|
||||
%dl.entity_photo
|
||||
%dt Photo
|
||||
%dd
|
||||
%img.photo.avatar{:src=>@person.image_url, :width=>'300px', :height=>'300px'}
|
||||
|
||||
%dl.entity_photo_medium
|
||||
%dt Photo
|
||||
%dd
|
||||
%img.photo.avatar{:src=>@person.image_url(:thumb_medium), :width=>'100px', :height=>'100px'}
|
||||
|
||||
%dl.entity_photo_small
|
||||
%dt Photo
|
||||
%dd
|
||||
%img.photo.avatar{:src=>@person.image_url(:thumb_small), :width=>'50px', :height=>'50px'}
|
||||
|
||||
%dl.entity_searchable
|
||||
%dt Searchable
|
||||
%dd
|
||||
%span.searchable= @person.searchable
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>
|
||||
|
||||
<!-- Resource-specific Information -->
|
||||
|
||||
<Link rel='lrdd'
|
||||
type='application/xrd+xml'
|
||||
template='<%= AppConfig.pod_uri.to_s %>webfinger?q={uri}' />
|
||||
|
||||
</XRD>
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
|
||||
<Subject>acct:<%=@person.diaspora_handle%></Subject>
|
||||
<Alias>"<%= @person.url %>"</Alias>
|
||||
<Link rel="http://microformats.org/profile/hcard" type="text/html" href="<%=@person.url%>hcard/users/<%=@person.guid%>"/>
|
||||
<Link rel="http://joindiaspora.com/seed_location" type = 'text/html' href="<%=@person.url%>"/>
|
||||
<Link rel="http://joindiaspora.com/guid" type = 'text/html' href="<%=@person.guid%>"/>
|
||||
|
||||
<Link rel='http://webfinger.net/rel/profile-page' type='text/html' <%=person_href(@person, :absolute => true)%>/>
|
||||
<Link rel="http://schemas.google.com/g/2010#updates-from" type="application/atom+xml" href="<%=@person.atom_url%>"/>
|
||||
<Link rel="salmon" href="<%= @person.receive_url %>"/>
|
||||
|
||||
<Link rel="diaspora-public-key" type = 'RSA' href="<%=Base64.strict_encode64(@person.exported_key)%>"/>
|
||||
</XRD>
|
||||
43
config/initializers/diaspora_federation.rb
Normal file
43
config/initializers/diaspora_federation.rb
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
# configure the federation engine
|
||||
DiasporaFederation.configure do |config|
|
||||
# the pod url
|
||||
config.server_uri = AppConfig.pod_uri
|
||||
|
||||
config.define_callbacks do
|
||||
on :person_webfinger_fetch do |handle|
|
||||
person = Person.find_local_by_diaspora_handle(handle)
|
||||
if person
|
||||
DiasporaFederation::WebFinger::WebFinger.new(
|
||||
acct_uri: "acct:#{person.diaspora_handle}",
|
||||
alias_url: AppConfig.url_to("/people/#{person.guid}"),
|
||||
hcard_url: AppConfig.url_to(DiasporaFederation::Engine.routes.url_helpers.hcard_path(person.guid)),
|
||||
seed_url: AppConfig.pod_uri,
|
||||
profile_url: person.profile_url,
|
||||
atom_url: person.atom_url,
|
||||
salmon_url: person.receive_url,
|
||||
guid: person.guid,
|
||||
public_key: person.serialized_public_key
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
on :person_hcard_fetch do |guid|
|
||||
person = Person.find_local_by_guid(guid)
|
||||
if person
|
||||
DiasporaFederation::WebFinger::HCard.new(
|
||||
guid: person.guid,
|
||||
nickname: person.username,
|
||||
full_name: "#{person.profile.first_name} #{person.profile.last_name}".strip,
|
||||
url: AppConfig.pod_uri,
|
||||
photo_large_url: person.image_url,
|
||||
photo_medium_url: person.image_url(:thumb_medium),
|
||||
photo_small_url: person.image_url(:thumb_small),
|
||||
public_key: person.serialized_public_key,
|
||||
searchable: person.searchable,
|
||||
first_name: person.profile.first_name,
|
||||
last_name: person.profile.last_name
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -18,6 +18,8 @@ Diaspora::Application.routes.draw do
|
|||
mount Sidekiq::Web => '/sidekiq', :as => 'sidekiq'
|
||||
end
|
||||
|
||||
mount DiasporaFederation::Engine => "/"
|
||||
|
||||
get "/atom.xml" => redirect('http://blog.diasporafoundation.org/feed/atom') #too many stupid redirects :()
|
||||
|
||||
get 'oembed' => 'posts#oembed', :as => 'oembed'
|
||||
|
|
@ -191,9 +193,6 @@ Diaspora::Application.routes.draw do
|
|||
# Federation
|
||||
|
||||
controller :publics do
|
||||
get 'webfinger' => :webfinger
|
||||
get 'hcard/users/:guid' => :hcard
|
||||
get '.well-known/host-meta' => :host_meta
|
||||
post 'receive/users/:guid' => :receive
|
||||
post 'receive/public' => :receive_public
|
||||
get 'hub' => :hub
|
||||
|
|
|
|||
|
|
@ -3,19 +3,25 @@ module Configuration
|
|||
|
||||
module Methods
|
||||
def pod_uri
|
||||
return @pod_uri unless @pod_uri.nil?
|
||||
return @pod_uri.dup unless @pod_uri.nil?
|
||||
|
||||
url = environment.url.get
|
||||
url = "http://#{url}" unless url =~ /^(https?:\/\/)/
|
||||
url << "/" unless url.end_with?("/")
|
||||
|
||||
begin
|
||||
@pod_url = Addressable::URI.parse(url)
|
||||
@pod_uri = Addressable::URI.parse(url)
|
||||
rescue
|
||||
puts "WARNING: pod url #{url} is not a legal URI"
|
||||
end
|
||||
|
||||
@pod_url
|
||||
@pod_uri.dup
|
||||
end
|
||||
|
||||
# @param path [String]
|
||||
# @return [String]
|
||||
def url_to(path)
|
||||
pod_uri.tap {|uri| uri.path = path }.to_s
|
||||
end
|
||||
|
||||
def bare_pod_uri
|
||||
|
|
|
|||
36
spec/controllers/diaspora_federation_controller_spec.rb
Normal file
36
spec/controllers/diaspora_federation_controller_spec.rb
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
# Copyright (c) 2010-2011, Diaspora Inc. This file is
|
||||
# licensed under the Affero General Public License version 3 or later. See
|
||||
# the COPYRIGHT file.
|
||||
|
||||
require "spec_helper"
|
||||
|
||||
# this is temporarily needed for fixture generation
|
||||
# TODO: remove this after the parsing is also in the diaspora_federation gem
|
||||
describe DiasporaFederation do
|
||||
routes { DiasporaFederation::Engine.routes }
|
||||
|
||||
let(:fixture_path) { Rails.root.join("spec", "fixtures") }
|
||||
|
||||
describe DiasporaFederation::WebfingerController, type: :controller do
|
||||
it "generates the host_meta fixture", fixture: true do
|
||||
get :host_meta
|
||||
expect(response).to be_success
|
||||
expect(response.body).to match(/webfinger/)
|
||||
save_fixture(response.body, "host-meta", fixture_path)
|
||||
end
|
||||
|
||||
it "generates the webfinger fixture", fixture: true do
|
||||
post :legacy_webfinger, "q" => alice.person.diaspora_handle
|
||||
expect(response).to be_success
|
||||
save_fixture(response.body, "webfinger", fixture_path)
|
||||
end
|
||||
end
|
||||
|
||||
describe DiasporaFederation::HCardController, type: :controller do
|
||||
it "generates the hCard fixture", fixture: true do
|
||||
post :hcard, "guid" => alice.person.guid.to_s
|
||||
expect(response).to be_success
|
||||
save_fixture(response.body, "hcard", fixture_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -11,15 +11,6 @@ describe PublicsController, :type => :controller do
|
|||
@person = FactoryGirl.create(:person)
|
||||
end
|
||||
|
||||
describe '#host_meta' do
|
||||
it 'succeeds', :fixture => true do
|
||||
get :host_meta
|
||||
expect(response).to be_success
|
||||
expect(response.body).to match(/webfinger/)
|
||||
save_fixture(response.body, "host-meta", fixture_path)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#receive_public' do
|
||||
it 'succeeds' do
|
||||
post :receive_public, :xml => "<stuff/>"
|
||||
|
|
@ -79,67 +70,6 @@ describe PublicsController, :type => :controller do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#hcard' do
|
||||
it "succeeds", :fixture => true do
|
||||
post :hcard, "guid" => @user.person.guid.to_s
|
||||
expect(response).to be_success
|
||||
save_fixture(response.body, "hcard", fixture_path)
|
||||
end
|
||||
|
||||
it 'sets the person' do
|
||||
post :hcard, "guid" => @user.person.guid.to_s
|
||||
expect(assigns[:person]).to eq(@user.person)
|
||||
end
|
||||
|
||||
it 'does not query by user id' do
|
||||
post :hcard, "guid" => 90348257609247856.to_s
|
||||
expect(assigns[:person]).to be_nil
|
||||
expect(response).to be_not_found
|
||||
end
|
||||
|
||||
it 'finds nothing for closed accounts' do
|
||||
@user.person.update_attributes(:closed_account => true)
|
||||
get :hcard, :guid => @user.person.guid.to_s
|
||||
expect(response).to be_not_found
|
||||
end
|
||||
end
|
||||
|
||||
describe '#webfinger' do
|
||||
it "succeeds when the person and user exist locally", :fixture => true do
|
||||
post :webfinger, 'q' => @user.person.diaspora_handle
|
||||
expect(response).to be_success
|
||||
save_fixture(response.body, "webfinger", fixture_path)
|
||||
end
|
||||
|
||||
it "404s when the person exists remotely because it is local only" do
|
||||
stub_success('me@mydiaspora.pod.com')
|
||||
post :webfinger, 'q' => 'me@mydiaspora.pod.com'
|
||||
expect(response).to be_not_found
|
||||
end
|
||||
|
||||
it "404s when the person is local but doesn't have an owner" do
|
||||
post :webfinger, 'q' => @person.diaspora_handle
|
||||
expect(response).to be_not_found
|
||||
end
|
||||
|
||||
it "404s when the person does not exist locally or remotely" do
|
||||
stub_failure('me@mydiaspora.pod.com')
|
||||
post :webfinger, 'q' => 'me@mydiaspora.pod.com'
|
||||
expect(response).to be_not_found
|
||||
end
|
||||
|
||||
it 'has the users profile href' do
|
||||
get :webfinger, :q => @user.diaspora_handle
|
||||
expect(response.body).to include "http://webfinger.net/rel/profile-page"
|
||||
end
|
||||
|
||||
it 'finds nothing for closed accounts' do
|
||||
@user.person.update_attributes(:closed_account => true)
|
||||
get :webfinger, :q => @user.diaspora_handle
|
||||
expect(response).to be_not_found
|
||||
end
|
||||
end
|
||||
|
||||
describe '#hub' do
|
||||
it 'succeeds' do
|
||||
get :hub
|
||||
|
|
|
|||
56
spec/federation_callbacks_spec.rb
Normal file
56
spec/federation_callbacks_spec.rb
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
require "spec_helper"
|
||||
|
||||
describe "diaspora federation callbacks" do
|
||||
describe ":person_webfinger_fetch" do
|
||||
it "returns a WebFinger instance with the data from the person" do
|
||||
person = alice.person
|
||||
wf = DiasporaFederation.callbacks.trigger(:person_webfinger_fetch, alice.diaspora_handle)
|
||||
expect(wf.acct_uri).to eq("acct:#{person.diaspora_handle}")
|
||||
expect(wf.alias_url).to eq(AppConfig.url_to("/people/#{person.guid}"))
|
||||
expect(wf.hcard_url).to eq(AppConfig.url_to("/hcard/users/#{person.guid}"))
|
||||
expect(wf.seed_url).to eq(AppConfig.pod_uri)
|
||||
expect(wf.profile_url).to eq(person.profile_url)
|
||||
expect(wf.atom_url).to eq(person.atom_url)
|
||||
expect(wf.salmon_url).to eq(person.receive_url)
|
||||
expect(wf.guid).to eq(person.guid)
|
||||
expect(wf.public_key).to eq(person.serialized_public_key)
|
||||
end
|
||||
|
||||
it "returns nil if the person was not found" do
|
||||
wf = DiasporaFederation.callbacks.trigger(:person_webfinger_fetch, "unknown@example.com")
|
||||
expect(wf).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
describe ":person_hcard_fetch" do
|
||||
it "returns a HCard instance with the data from the person" do
|
||||
person = alice.person
|
||||
hcard = DiasporaFederation.callbacks.trigger(:person_hcard_fetch, alice.guid)
|
||||
expect(hcard.guid).to eq(person.guid)
|
||||
expect(hcard.nickname).to eq(person.username)
|
||||
expect(hcard.full_name).to eq("#{person.profile.first_name} #{person.profile.last_name}")
|
||||
expect(hcard.url).to eq(AppConfig.pod_uri)
|
||||
expect(hcard.photo_large_url).to eq(person.image_url)
|
||||
expect(hcard.photo_medium_url).to eq(person.image_url(:thumb_medium))
|
||||
expect(hcard.photo_small_url).to eq(person.image_url(:thumb_small))
|
||||
expect(hcard.public_key).to eq(person.serialized_public_key)
|
||||
expect(hcard.searchable).to eq(person.searchable)
|
||||
expect(hcard.first_name).to eq(person.profile.first_name)
|
||||
expect(hcard.last_name).to eq(person.profile.last_name)
|
||||
end
|
||||
|
||||
it "trims the full_name" do
|
||||
user = FactoryGirl.create(:user)
|
||||
user.person.profile.last_name = nil
|
||||
user.person.profile.save
|
||||
|
||||
hcard = DiasporaFederation.callbacks.trigger(:person_hcard_fetch, user.guid)
|
||||
expect(hcard.full_name).to eq(user.person.profile.first_name)
|
||||
end
|
||||
|
||||
it "returns nil if the person was not found" do
|
||||
hcard = DiasporaFederation.callbacks.trigger(:person_hcard_fetch, "1234567890abcdef")
|
||||
expect(hcard).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -6,6 +6,7 @@ describe JsxcHelper, :type => :helper do
|
|||
AppConfig.chat.server.bosh.port = 1234
|
||||
AppConfig.chat.server.bosh.bind = '/bind'
|
||||
AppConfig.environment.url = "https://localhost/"
|
||||
AppConfig.instance_variable_set(:@pod_uri, nil)
|
||||
end
|
||||
|
||||
describe "#get_bosh_endpoint" do
|
||||
|
|
|
|||
|
|
@ -64,20 +64,6 @@ describe PeopleHelper, :type => :helper do
|
|||
end
|
||||
end
|
||||
|
||||
describe "#person_href" do
|
||||
it "calls local_or_remote_person_path and passes through the options" do
|
||||
opts = {:absolute => true}
|
||||
|
||||
expect(self).to receive(:local_or_remote_person_path).with(@person, opts).exactly(1).times
|
||||
|
||||
person_href(@person, opts)
|
||||
end
|
||||
|
||||
it "returns a href attribute" do
|
||||
expect(person_href(@person)).to include "href="
|
||||
end
|
||||
end
|
||||
|
||||
describe '#local_or_remote_person_path' do
|
||||
before do
|
||||
@user = FactoryGirl.create(:user)
|
||||
|
|
|
|||
|
|
@ -40,6 +40,12 @@ describe Configuration::Methods do
|
|||
@settings.environment.url = "https://example.org/"
|
||||
expect(@settings.pod_uri.to_s).to eq("https://example.org/")
|
||||
end
|
||||
|
||||
it "returns another instance everytime" do
|
||||
@settings.environment.url = "https://example.org/"
|
||||
uri = @settings.pod_uri
|
||||
expect(@settings.pod_uri).not_to be(uri)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#bare_pod_uri" do
|
||||
|
|
@ -51,6 +57,21 @@ describe Configuration::Methods do
|
|||
end
|
||||
end
|
||||
|
||||
describe "#url_to" do
|
||||
before do
|
||||
@settings.environment.url = "https://example.org"
|
||||
@settings.instance_variable_set(:@pod_uri, nil)
|
||||
end
|
||||
|
||||
it "appends the path to the pod url" do
|
||||
expect(@settings.url_to("/any/path")).to eq("https://example.org/any/path")
|
||||
end
|
||||
|
||||
it "does not add double slash" do
|
||||
expect(@settings.url_to("/any/path")).to eq("https://example.org/any/path")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#configured_services" do
|
||||
it "includes the enabled services only" do
|
||||
services = double
|
||||
|
|
|
|||
|
|
@ -457,27 +457,45 @@ describe Person, :type => :model do
|
|||
f = Person.by_account_identifier("tom@tom.joindiaspora.com")
|
||||
expect(f).to be nil
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
describe '.local_by_account_identifier' do
|
||||
it 'should find local users people' do
|
||||
p = Person.local_by_account_identifier(user.diaspora_handle)
|
||||
expect(p).to eq(user.person)
|
||||
describe ".find_local_by_diaspora_handle" do
|
||||
it "should find local users person" do
|
||||
person = Person.find_local_by_diaspora_handle(user.diaspora_handle)
|
||||
expect(person).to eq(user.person)
|
||||
end
|
||||
|
||||
it 'should not find a remote person' do
|
||||
p = Person.local_by_account_identifier(@person.diaspora_handle)
|
||||
expect(p).to be nil
|
||||
it "should not find a remote person" do
|
||||
person = Person.find_local_by_diaspora_handle(@person.diaspora_handle)
|
||||
expect(person).to be nil
|
||||
end
|
||||
|
||||
it 'should call .by_account_identifier' do
|
||||
expect(Person).to receive(:by_account_identifier)
|
||||
Person.local_by_account_identifier(@person.diaspora_handle)
|
||||
it "should not find a person with closed account" do
|
||||
user.person.lock_access!
|
||||
person = Person.find_local_by_diaspora_handle(user.diaspora_handle)
|
||||
expect(person).to be nil
|
||||
end
|
||||
end
|
||||
|
||||
describe ".find_local_by_guid" do
|
||||
it "should find local users person" do
|
||||
person = Person.find_local_by_guid(user.guid)
|
||||
expect(person).to eq(user.person)
|
||||
end
|
||||
|
||||
it "should not find a remote person" do
|
||||
person = Person.find_local_by_guid(@person.guid)
|
||||
expect(person).to be nil
|
||||
end
|
||||
|
||||
it "should not find a person with closed account" do
|
||||
user.person.lock_access!
|
||||
person = Person.find_local_by_guid(user.guid)
|
||||
expect(person).to be nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#has_photos?' do
|
||||
it 'returns false if the user has no photos' do
|
||||
expect(alice.person.has_photos?).to be false
|
||||
|
|
|
|||
Loading…
Reference in a new issue