Skip to content
Extraits de code Groupes Projets
publics_controller_spec.rb 3,16 ko
Newer Older
Raphael's avatar
Raphael a validé
#   Copyright (c) 2010, Diaspora Inc.  This file is
Raphael's avatar
Raphael a validé
#   licensed under the Affero General Public License version 3 or later.  See
Raphael's avatar
Raphael a validé
#   the COPYRIGHT file.
require 'spec_helper'
maxwell's avatar
maxwell a validé
describe PublicsController do
ilya's avatar
ilya a validé
  render_views
  let(:user) {Factory.create :user}
  let(:user2){Factory.create :user}
  let(:aspect1){user.aspect(:name => "foo")}
  let(:aspect2){user2.aspect(:name => "far")}
maxwell's avatar
maxwell a validé
  before do
ilya's avatar
ilya a validé
    sign_in :user, user
  describe 'receive endpoint' do
maxwell's avatar
maxwell a validé
    it 'should have a and endpoint and return a 200 on successful receipt of a request' do
ilya's avatar
ilya a validé
      post :receive, :id =>user.person.id
maxwell's avatar
maxwell a validé
      response.code.should == '200'
    end
maxwell's avatar
maxwell a validé
    it 'should accept a post from another node and save the information' do
      message = user2.build_post(:status_message, :message => "hi")
      friend_users(user, aspect1, user2, aspect2)
      
ilya's avatar
ilya a validé
      user.reload
      user.visible_post_ids.include?(message.id).should be false
Raphael's avatar
Raphael a validé

ilya's avatar
ilya a validé
      xml = user2.salmon(message).xml_for(user.person)
ilya's avatar
ilya a validé
      post :receive, :id => user.person.id, :xml => xml
ilya's avatar
ilya a validé
      user.reload
      user.visible_post_ids.include?(message.id).should be true
  describe '#hcard' do
    it 'queries by person id' do
      post :hcard, :id => user.person.id
      assigns[:person].should == user.person
      response.code.should == '200'
    end

    it 'does not query by user id' do
      post :hcard, :id => user.id
      assigns[:person].should be_nil
      response.code.should == '404'
    end
  end

  describe 'webfinger' do
    it "succeeds when the person and user exist locally" do
      user = Factory(:user)
      post :webfinger, 'q' => user.person.diaspora_handle
      response.should be_success
    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'
      response.should be_not_found
    end

    it "404s when the person is local but doesn't have an owner" do
      person = Factory(:person)
      post :webfinger, 'q' => person.diaspora_handle
      response.should 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'
      response.should be_not_found
maxwell's avatar
maxwell a validé

  describe 'friend requests' do
    let(:aspect2) {user2.aspect(:name => 'disciples')}
    let!(:req)     {user2.send_friend_request_to(user.person, aspect2)}
    let!(:xml)     {user2.salmon(req).xml_for(user.person)}
    before do
      req.delete
      user2.reload
      user2.pending_requests.count.should be 1
maxwell's avatar
maxwell a validé

Jamie Wilkinson's avatar
Jamie Wilkinson a validé
    it 'should add the pending request to the right user if the target person exists locally' do
      user2.delete
      post :receive, :id => user.person.id, :xml => xml
ilya's avatar
ilya a validé
      assigns(:user).should eq(user)
maxwell's avatar
maxwell a validé

Jamie Wilkinson's avatar
Jamie Wilkinson a validé
    it 'should add the pending request to the right user if the target person does not exist locally' do
      Person.should_receive(:by_webfinger).with(user2.person.diaspora_handle).and_return(user2.person)
      user2.person.delete
      user2.delete
      post :receive, :id => user.person.id, :xml => xml
ilya's avatar
ilya a validé
      assigns(:user).should eq(user)
maxwell's avatar
maxwell a validé
end