144 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			144 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| 
								 | 
							
								# frozen_string_literal: true
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								require 'rails_helper'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								RSpec.describe RemoteProfile do
							 | 
						||
| 
								 | 
							
								  let(:remote_profile) { RemoteProfile.new(body) }
							 | 
						||
| 
								 | 
							
								  let(:body) do
							 | 
						||
| 
								 | 
							
								    <<-XML
							 | 
						||
| 
								 | 
							
								      <feed xmlns="http://www.w3.org/2005/Atom">
							 | 
						||
| 
								 | 
							
								      <author>John</author>
							 | 
						||
| 
								 | 
							
								    XML
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe '.initialize' do
							 | 
						||
| 
								 | 
							
								    it 'calls Nokogiri::XML.parse' do
							 | 
						||
| 
								 | 
							
								      expect(Nokogiri::XML).to receive(:parse).with(body, nil, 'utf-8')
							 | 
						||
| 
								 | 
							
								      RemoteProfile.new(body)
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it 'sets document' do
							 | 
						||
| 
								 | 
							
								      remote_profile = RemoteProfile.new(body)
							 | 
						||
| 
								 | 
							
								      expect(remote_profile).not_to be nil
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe '#root' do
							 | 
						||
| 
								 | 
							
								    let(:document) { remote_profile.document }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it 'callse document.at_xpath' do
							 | 
						||
| 
								 | 
							
								      expect(document).to receive(:at_xpath).with(
							 | 
						||
| 
								 | 
							
								        '/atom:feed|/atom:entry',
							 | 
						||
| 
								 | 
							
								        atom: OStatus::TagManager::XMLNS
							 | 
						||
| 
								 | 
							
								      )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      remote_profile.root
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe '#author' do
							 | 
						||
| 
								 | 
							
								    let(:root) { remote_profile.root }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it 'calls root.at_xpath' do
							 | 
						||
| 
								 | 
							
								      expect(root).to receive(:at_xpath).with(
							 | 
						||
| 
								 | 
							
								        './atom:author|./dfrn:owner',
							 | 
						||
| 
								 | 
							
								        atom: OStatus::TagManager::XMLNS,
							 | 
						||
| 
								 | 
							
								        dfrn: OStatus::TagManager::DFRN_XMLNS
							 | 
						||
| 
								 | 
							
								      )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      remote_profile.author
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe '#hub_link' do
							 | 
						||
| 
								 | 
							
								    let(:root) { remote_profile.root }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it 'calls #link_href_from_xml' do
							 | 
						||
| 
								 | 
							
								      expect(remote_profile).to receive(:link_href_from_xml).with(root, 'hub')
							 | 
						||
| 
								 | 
							
								      remote_profile.hub_link
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe '#display_name' do
							 | 
						||
| 
								 | 
							
								    let(:author) { remote_profile.author }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it 'calls author.at_xpath.content' do
							 | 
						||
| 
								 | 
							
								      expect(author).to receive_message_chain(:at_xpath, :content).with(
							 | 
						||
| 
								 | 
							
								        './poco:displayName',
							 | 
						||
| 
								 | 
							
								        poco: OStatus::TagManager::POCO_XMLNS
							 | 
						||
| 
								 | 
							
								      ).with(no_args)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      remote_profile.display_name
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe '#note' do
							 | 
						||
| 
								 | 
							
								    let(:author) { remote_profile.author }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it 'calls author.at_xpath.content' do
							 | 
						||
| 
								 | 
							
								      expect(author).to receive_message_chain(:at_xpath, :content).with(
							 | 
						||
| 
								 | 
							
								        './atom:summary|./poco:note',
							 | 
						||
| 
								 | 
							
								        atom: OStatus::TagManager::XMLNS,
							 | 
						||
| 
								 | 
							
								        poco: OStatus::TagManager::POCO_XMLNS
							 | 
						||
| 
								 | 
							
								      ).with(no_args)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      remote_profile.note
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe '#scope' do
							 | 
						||
| 
								 | 
							
								    let(:author) { remote_profile.author }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it 'calls author.at_xpath.content' do
							 | 
						||
| 
								 | 
							
								      expect(author).to receive_message_chain(:at_xpath, :content).with(
							 | 
						||
| 
								 | 
							
								        './mastodon:scope',
							 | 
						||
| 
								 | 
							
								        mastodon: OStatus::TagManager::MTDN_XMLNS
							 | 
						||
| 
								 | 
							
								      ).with(no_args)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      remote_profile.scope
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe '#avatar' do
							 | 
						||
| 
								 | 
							
								    let(:author) { remote_profile.author }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it 'calls #link_href_from_xml' do
							 | 
						||
| 
								 | 
							
								      expect(remote_profile).to receive(:link_href_from_xml).with(author, 'avatar')
							 | 
						||
| 
								 | 
							
								      remote_profile.avatar
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe '#header' do
							 | 
						||
| 
								 | 
							
								    let(:author) { remote_profile.author }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it 'calls #link_href_from_xml' do
							 | 
						||
| 
								 | 
							
								      expect(remote_profile).to receive(:link_href_from_xml).with(author, 'header')
							 | 
						||
| 
								 | 
							
								      remote_profile.header
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe '#locked?' do
							 | 
						||
| 
								 | 
							
								    before do
							 | 
						||
| 
								 | 
							
								      allow(remote_profile).to receive(:scope).and_return(scope)
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    subject { remote_profile.locked? }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    context 'scope is private' do
							 | 
						||
| 
								 | 
							
								      let(:scope) { 'private' }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      it 'returns true' do
							 | 
						||
| 
								 | 
							
								        is_expected.to be true
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    context 'scope is not private' do
							 | 
						||
| 
								 | 
							
								      let(:scope) { 'public' }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      it 'returns false' do
							 | 
						||
| 
								 | 
							
								        is_expected.to be false
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								end
							 |