# 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