<!DOCTYPE html>
<html>
<head>
- <link href='https://host/provider.json' rel='alternate' type='application/json+oembed'>
+ <link href='https://host.test/provider.json' rel='alternate' type='application/json+oembed'>
</head>
<body></body>
</html>
> The type attribute must contain either application/json+oembed for JSON
> responses, or text/xml+oembed for XML.
-->
- <link href='https://host/provider.json' rel='alternate' type='application/json+oembed'>
- <link href='https://host/provider.xml' rel='alternate' type='text/xml+oembed'>
+ <link href='https://host.test/provider.json' rel='alternate' type='application/json+oembed'>
+ <link href='https://host.test/provider.xml' rel='alternate' type='text/xml+oembed'>
</head>
<body></body>
</html>
> The type attribute must contain either application/json+oembed for JSON
> responses, or text/xml+oembed for XML.
-->
- <link href='https://host/provider.xml' rel='alternate' type='text/xml+oembed'>
+ <link href='https://host.test/provider.xml' rel='alternate' type='text/xml+oembed'>
</head>
<body></body>
</html>
describe '#fetch_resource' do
context 'when the second argument is false' do
it 'returns resource even if the retrieved ID and the given URI does not match' do
- stub_request(:get, 'https://bob/').to_return body: '{"id": "https://alice/"}'
- stub_request(:get, 'https://alice/').to_return body: '{"id": "https://alice/"}'
+ stub_request(:get, 'https://bob.test/').to_return body: '{"id": "https://alice.test/"}'
+ stub_request(:get, 'https://alice.test/').to_return body: '{"id": "https://alice.test/"}'
- expect(fetch_resource('https://bob/', false)).to eq({ 'id' => 'https://alice/' })
+ expect(fetch_resource('https://bob.test/', false)).to eq({ 'id' => 'https://alice.test/' })
end
it 'returns nil if the object identified by the given URI and the object identified by the retrieved ID does not match' do
- stub_request(:get, 'https://mallory/').to_return body: '{"id": "https://marvin/"}'
- stub_request(:get, 'https://marvin/').to_return body: '{"id": "https://alice/"}'
+ stub_request(:get, 'https://mallory.test/').to_return body: '{"id": "https://marvin.test/"}'
+ stub_request(:get, 'https://marvin.test/').to_return body: '{"id": "https://alice.test/"}'
- expect(fetch_resource('https://mallory/', false)).to eq nil
+ expect(fetch_resource('https://mallory.test/', false)).to eq nil
end
end
context 'when the second argument is true' do
it 'returns nil if the retrieved ID and the given URI does not match' do
- stub_request(:get, 'https://mallory/').to_return body: '{"id": "https://alice/"}'
- expect(fetch_resource('https://mallory/', true)).to eq nil
+ stub_request(:get, 'https://mallory.test/').to_return body: '{"id": "https://alice.test/"}'
+ expect(fetch_resource('https://mallory.test/', true)).to eq nil
end
end
end
describe '#fetch_resource_without_id_validation' do
it 'returns nil if the status code is not 200' do
- stub_request(:get, 'https://host/').to_return status: 400, body: '{}'
- expect(fetch_resource_without_id_validation('https://host/')).to eq nil
+ stub_request(:get, 'https://host.test/').to_return status: 400, body: '{}'
+ expect(fetch_resource_without_id_validation('https://host.test/')).to eq nil
end
it 'returns hash' do
- stub_request(:get, 'https://host/').to_return status: 200, body: '{}'
- expect(fetch_resource_without_id_validation('https://host/')).to eq({})
+ stub_request(:get, 'https://host.test/').to_return status: 200, body: '{}'
+ expect(fetch_resource_without_id_validation('https://host.test/')).to eq({})
end
end
end
RSpec.describe Formatter do
let(:local_account) { Fabricate(:account, domain: nil, username: 'alice') }
- let(:remote_account) { Fabricate(:account, domain: 'remote', username: 'bob', url: 'https://remote/') }
+ let(:remote_account) { Fabricate(:account, domain: 'remote.test', username: 'bob', url: 'https://remote.test/') }
shared_examples 'encode and link URLs' do
context 'matches a stand-alone medium URL' do
end
context 'contains linkable mentions for remote accounts' do
- let(:text) { '@bob@remote' }
+ let(:text) { '@bob@remote.test' }
before { remote_account }
it 'links' do
- is_expected.to eq '<p><span class="h-card"><a href="https://remote/" class="u-url mention">@<span>bob</span></a></span></p>'
+ is_expected.to eq '<p><span class="h-card"><a href="https://remote.test/" class="u-url mention">@<span>bob</span></a></span></p>'
end
end
end
it 'appends activity:object with target account' do
- target_account = Fabricate(:account, domain: 'domain', uri: 'https://domain/id')
+ target_account = Fabricate(:account, domain: 'domain.test', uri: 'https://domain.test/id')
follow_request = Fabricate(:follow_request, target_account: target_account)
follow_request_salmon = serialize(follow_request)
object = follow_request_salmon.nodes.find { |node| node.name == 'activity:object' }
- expect(object.id.text).to eq 'https://domain/id'
+ expect(object.id.text).to eq 'https://domain.test/id'
end
end
entry = OStatus::AtomSerializer.new.entry(remote_status.stream_entry, true)
entry.nodes.delete_if { |node| node[:type] == 'application/activity+json' } # Remove ActivityPub link to simplify test
- xml = OStatus::AtomSerializer.render(entry).gsub('cb6e6126.ngrok.io', 'remote')
+ xml = OStatus::AtomSerializer.render(entry).gsub('cb6e6126.ngrok.io', 'remote.test')
remote_status.destroy!
remote_account.destroy!
account = Account.create!(
- domain: 'remote',
+ domain: 'remote.test',
username: 'username',
last_webfingered_at: Time.now.utc
)
ProcessFeedService.new.call(xml, account)
- expect(Status.find_by(uri: "https://remote/users/#{remote_status.account.to_param}/statuses/#{remote_status.id}")).to be_instance_of Status
+ expect(Status.find_by(uri: "https://remote.test/users/#{remote_status.account.to_param}/statuses/#{remote_status.id}")).to be_instance_of Status
end
end
end
it 'appends activity:object element with target account' do
- target_account = Fabricate(:account, domain: 'domain', uri: 'https://domain/id')
+ target_account = Fabricate(:account, domain: 'domain.test', uri: 'https://domain.test/id')
block = Fabricate(:block, target_account: target_account)
block_salmon = OStatus::AtomSerializer.new.block_salmon(block)
object = block_salmon.nodes.find { |node| node.name == 'activity:object' }
- expect(object.id.text).to eq 'https://domain/id'
+ expect(object.id.text).to eq 'https://domain.test/id'
end
it 'returns element whose rendered view triggers block when processed' do
end
it 'appends activity:object element with target account' do
- target_account = Fabricate(:account, domain: 'domain', uri: 'https://domain/id')
+ target_account = Fabricate(:account, domain: 'domain.test', uri: 'https://domain.test/id')
block = Fabricate(:block, target_account: target_account)
unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block)
object = unblock_salmon.nodes.find { |node| node.name == 'activity:object' }
- expect(object.id.text).to eq 'https://domain/id'
+ expect(object.id.text).to eq 'https://domain.test/id'
end
it 'returns element whose rendered view triggers block when processed' do
end
it 'appends activity:object element with target account' do
- target_account = Fabricate(:account, domain: 'domain', uri: 'https://domain/id')
+ target_account = Fabricate(:account, domain: 'domain.test', uri: 'https://domain.test/id')
follow = Fabricate(:follow, target_account: target_account)
follow_salmon = OStatus::AtomSerializer.new.follow_salmon(follow)
object = follow_salmon.nodes.find { |node| node.name == 'activity:object' }
- expect(object.id.text).to eq 'https://domain/id'
+ expect(object.id.text).to eq 'https://domain.test/id'
end
it 'includes description' do
end
it 'appends activity:object element with target account' do
- target_account = Fabricate(:account, domain: 'domain', uri: 'https://domain/id')
+ target_account = Fabricate(:account, domain: 'domain.test', uri: 'https://domain.test/id')
follow = Fabricate(:follow, target_account: target_account)
follow.destroy!
unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow)
object = unfollow_salmon.nodes.find { |node| node.name == 'activity:object' }
- expect(object.id.text).to eq 'https://domain/id'
+ expect(object.id.text).to eq 'https://domain.test/id'
end
it 'returns element whose rendered view triggers unfollow when processed' do
context 'when status code is 200 and MIME type is text/html' do
context 'Both of JSON and XML provider are discoverable' do
before do
- stub_request(:get, 'https://host/oembed.html').to_return(
+ stub_request(:get, 'https://host.test/oembed.html').to_return(
status: 200,
headers: { 'Content-Type': 'text/html' },
body: request_fixture('oembed_json_xml.html')
end
it 'returns new OEmbed::Provider for JSON provider if :format option is set to :json' do
- provider = ProviderDiscovery.discover_provider('https://host/oembed.html', format: :json)
- expect(provider.endpoint).to eq 'https://host/provider.json'
+ provider = ProviderDiscovery.discover_provider('https://host.test/oembed.html', format: :json)
+ expect(provider.endpoint).to eq 'https://host.test/provider.json'
expect(provider.format).to eq :json
end
it 'returns new OEmbed::Provider for XML provider if :format option is set to :xml' do
- provider = ProviderDiscovery.discover_provider('https://host/oembed.html', format: :xml)
- expect(provider.endpoint).to eq 'https://host/provider.xml'
+ provider = ProviderDiscovery.discover_provider('https://host.test/oembed.html', format: :xml)
+ expect(provider.endpoint).to eq 'https://host.test/provider.xml'
expect(provider.format).to eq :xml
end
end
context 'JSON provider is discoverable while XML provider is not' do
before do
- stub_request(:get, 'https://host/oembed.html').to_return(
+ stub_request(:get, 'https://host.test/oembed.html').to_return(
status: 200,
headers: { 'Content-Type': 'text/html' },
body: request_fixture('oembed_json.html')
end
it 'returns new OEmbed::Provider for JSON provider' do
- provider = ProviderDiscovery.discover_provider('https://host/oembed.html')
- expect(provider.endpoint).to eq 'https://host/provider.json'
+ provider = ProviderDiscovery.discover_provider('https://host.test/oembed.html')
+ expect(provider.endpoint).to eq 'https://host.test/provider.json'
expect(provider.format).to eq :json
end
end
context 'XML provider is discoverable while JSON provider is not' do
before do
- stub_request(:get, 'https://host/oembed.html').to_return(
+ stub_request(:get, 'https://host.test/oembed.html').to_return(
status: 200,
headers: { 'Content-Type': 'text/html' },
body: request_fixture('oembed_xml.html')
end
it 'returns new OEmbed::Provider for XML provider' do
- provider = ProviderDiscovery.discover_provider('https://host/oembed.html')
- expect(provider.endpoint).to eq 'https://host/provider.xml'
+ provider = ProviderDiscovery.discover_provider('https://host.test/oembed.html')
+ expect(provider.endpoint).to eq 'https://host.test/provider.xml'
expect(provider.format).to eq :xml
end
end
context 'Invalid XML provider is discoverable while JSON provider is not' do
before do
- stub_request(:get, 'https://host/oembed.html').to_return(
+ stub_request(:get, 'https://host.test/oembed.html').to_return(
status: 200,
headers: { 'Content-Type': 'text/html' },
body: request_fixture('oembed_invalid_xml.html')
end
it 'raises OEmbed::NotFound' do
- expect { ProviderDiscovery.discover_provider('https://host/oembed.html') }.to raise_error OEmbed::NotFound
+ expect { ProviderDiscovery.discover_provider('https://host.test/oembed.html') }.to raise_error OEmbed::NotFound
end
end
context 'Neither of JSON and XML provider is discoverable' do
before do
- stub_request(:get, 'https://host/oembed.html').to_return(
+ stub_request(:get, 'https://host.test/oembed.html').to_return(
status: 200,
headers: { 'Content-Type': 'text/html' },
body: request_fixture('oembed_undiscoverable.html')
end
it 'raises OEmbed::NotFound' do
- expect { ProviderDiscovery.discover_provider('https://host/oembed.html') }.to raise_error OEmbed::NotFound
+ expect { ProviderDiscovery.discover_provider('https://host.test/oembed.html') }.to raise_error OEmbed::NotFound
end
end
end
context 'when status code is not 200' do
before do
- stub_request(:get, 'https://host/oembed.html').to_return(
+ stub_request(:get, 'https://host.test/oembed.html').to_return(
status: 400,
headers: { 'Content-Type': 'text/html' },
body: request_fixture('oembed_xml.html')
end
it 'raises OEmbed::NotFound' do
- expect { ProviderDiscovery.discover_provider('https://host/oembed.html') }.to raise_error OEmbed::NotFound
+ expect { ProviderDiscovery.discover_provider('https://host.test/oembed.html') }.to raise_error OEmbed::NotFound
end
end
context 'when MIME type is not text/html' do
before do
- stub_request(:get, 'https://host/oembed.html').to_return(
+ stub_request(:get, 'https://host.test/oembed.html').to_return(
status: 200,
body: request_fixture('oembed_xml.html')
)
end
it 'raises OEmbed::NotFound' do
- expect { ProviderDiscovery.discover_provider('https://host/oembed.html') }.to raise_error OEmbed::NotFound
+ expect { ProviderDiscovery.discover_provider('https://host.test/oembed.html') }.to raise_error OEmbed::NotFound
end
end
end
around do |example|
original_local_domain = Rails.configuration.x.local_domain
- Rails.configuration.x.local_domain = 'domain'
+ Rails.configuration.x.local_domain = 'domain.test'
example.run
end
it 'returns true if the slash-stripped string equals to local domain' do
- expect(TagManager.instance.local_domain?('DoMaIn/')).to eq true
+ expect(TagManager.instance.local_domain?('DoMaIn.Test/')).to eq true
end
it 'returns false for irrelevant string' do
- expect(TagManager.instance.local_domain?('DoMaIn!')).to eq false
+ expect(TagManager.instance.local_domain?('DoMaIn.Test!')).to eq false
end
end
around do |example|
original_web_domain = Rails.configuration.x.web_domain
- Rails.configuration.x.web_domain = 'domain'
+ Rails.configuration.x.web_domain = 'domain.test'
example.run
end
it 'returns true if the slash-stripped string equals to web domain' do
- expect(TagManager.instance.web_domain?('DoMaIn/')).to eq true
+ expect(TagManager.instance.web_domain?('DoMaIn.Test/')).to eq true
end
it 'returns false for string with irrelevant characters' do
- expect(TagManager.instance.web_domain?('DoMaIn!')).to eq false
+ expect(TagManager.instance.web_domain?('DoMaIn.Test!')).to eq false
end
end
end
it 'returns normalized domain' do
- expect(TagManager.instance.normalize_domain('DoMaIn/')).to eq 'domain'
+ expect(TagManager.instance.normalize_domain('DoMaIn.Test/')).to eq 'domain.test'
end
end
end
it 'returns true if the normalized string with port is local URL' do
- Rails.configuration.x.web_domain = 'domain:42'
- expect(TagManager.instance.local_url?('https://DoMaIn:42/')).to eq true
+ Rails.configuration.x.web_domain = 'domain.test:42'
+ expect(TagManager.instance.local_url?('https://DoMaIn.Test:42/')).to eq true
end
it 'returns true if the normalized string without port is local URL' do
- Rails.configuration.x.web_domain = 'domain'
- expect(TagManager.instance.local_url?('https://DoMaIn/')).to eq true
+ Rails.configuration.x.web_domain = 'domain.test'
+ expect(TagManager.instance.local_url?('https://DoMaIn.Test/')).to eq true
end
it 'returns false for string with irrelevant characters' do
- Rails.configuration.x.web_domain = 'domain'
- expect(TagManager.instance.local_url?('https://domainn/')).to eq false
+ Rails.configuration.x.web_domain = 'domain.test'
+ expect(TagManager.instance.local_url?('https://domainn.test/')).to eq false
end
end
# The following comparisons MUST be case-insensitive.
it 'returns true if the needle has a correct username and domain for remote user' do
- expect(TagManager.instance.same_acct?('username@domain', 'UsErNaMe@DoMaIn')).to eq true
+ expect(TagManager.instance.same_acct?('username@domain.test', 'UsErNaMe@DoMaIn.Test')).to eq true
end
it 'returns false if the needle is missing a domain for remote user' do
- expect(TagManager.instance.same_acct?('username@domain', 'UsErNaMe')).to eq false
+ expect(TagManager.instance.same_acct?('username@domain.test', 'UsErNaMe')).to eq false
end
it 'returns false if the needle has an incorrect domain for remote user' do
- expect(TagManager.instance.same_acct?('username@domain', 'UsErNaMe@incorrect')).to eq false
+ expect(TagManager.instance.same_acct?('username@domain.test', 'UsErNaMe@incorrect.test')).to eq false
end
it 'returns false if the needle has an incorrect username for remote user' do
- expect(TagManager.instance.same_acct?('username@domain', 'incorrect@DoMaIn')).to eq false
+ expect(TagManager.instance.same_acct?('username@domain.test', 'incorrect@DoMaIn.test')).to eq false
end
it 'returns true if the needle has a correct username and domain for local user' do
describe '#save_with_optional_media!' do
before do
- stub_request(:get, 'https://remote/valid_avatar').to_return(request_fixture('avatar.txt'))
- stub_request(:get, 'https://remote/invalid_avatar').to_return(request_fixture('feed.txt'))
+ stub_request(:get, 'https://remote.test/valid_avatar').to_return(request_fixture('avatar.txt'))
+ stub_request(:get, 'https://remote.test/invalid_avatar').to_return(request_fixture('feed.txt'))
end
let(:account) do
Fabricate(:account,
- avatar_remote_url: 'https://remote/valid_avatar',
- header_remote_url: 'https://remote/valid_avatar')
+ avatar_remote_url: 'https://remote.test/valid_avatar',
+ header_remote_url: 'https://remote.test/valid_avatar')
end
let!(:expectation) { account.dup }
context 'with invalid properties' do
before do
- account.avatar_remote_url = 'https://remote/invalid_avatar'
+ account.avatar_remote_url = 'https://remote.test/invalid_avatar'
account.save_with_optional_media!
end
end
it 'allows pins above the max for remote accounts' do
- account = Fabricate(:account, domain: 'remote', username: 'bob', url: 'https://remote/')
+ account = Fabricate(:account, domain: 'remote.test', username: 'bob', url: 'https://remote.test/')
status = []
(max_pins + 1).times do |i|
context 'property values' do
let(:payload) do
{
- id: 'https://foo',
+ id: 'https://foo.test',
type: 'Actor',
- inbox: 'https://foo/inbox',
+ inbox: 'https://foo.test/inbox',
attachment: [
{ type: 'PropertyValue', name: 'Pronouns', value: 'They/them' },
{ type: 'PropertyValue', name: 'Occupation', value: 'Unit test' },