2
0

Fix permalink redirects continuing to work for suspended accounts (#36453)

This commit is contained in:
Eugen Rochko
2025-10-13 17:18:01 +02:00
committed by GitHub
parent 254fff93ca
commit 33f739da44
2 changed files with 71 additions and 33 deletions

View File

@@ -10,39 +10,77 @@ RSpec.describe PermalinkRedirector do
Fabricate(:status, account: remote_account, id: 123, url: 'https://example.com/status-123')
end
it 'returns path for legacy account links' do
redirector = described_class.new('accounts/2')
expect(redirector.redirect_path).to eq 'https://example.com/@alice'
end
it 'returns path for legacy status links' do
redirector = described_class.new('statuses/123')
expect(redirector.redirect_path).to eq 'https://example.com/status-123'
end
it 'returns path for pretty account links' do
redirector = described_class.new('@alice@example.com')
expect(redirector.redirect_path).to eq 'https://example.com/@alice'
end
it 'returns path for pretty status links' do
redirector = described_class.new('@alice/123')
expect(redirector.redirect_path).to eq 'https://example.com/status-123'
end
it 'returns path for legacy status links with a query param' do
redirector = described_class.new('statuses/123?foo=bar')
expect(redirector.redirect_path).to eq 'https://example.com/status-123'
end
it 'returns path for pretty status links with a query param' do
redirector = described_class.new('@alice/123?foo=bar')
expect(redirector.redirect_path).to eq 'https://example.com/status-123'
end
it 'returns path for deck URLs with query params' do
redirector = described_class.new('/deck/directory?local=true')
expect(redirector.redirect_path).to eq '/directory?local=true'
end
context 'when account is not suspended' do
it 'returns path for legacy account links' do
redirector = described_class.new('accounts/2')
expect(redirector.redirect_path).to eq 'https://example.com/@alice'
end
it 'returns path for legacy status links' do
redirector = described_class.new('statuses/123')
expect(redirector.redirect_path).to eq 'https://example.com/status-123'
end
it 'returns path for pretty account links' do
redirector = described_class.new('@alice@example.com')
expect(redirector.redirect_path).to eq 'https://example.com/@alice'
end
it 'returns path for pretty status links' do
redirector = described_class.new('@alice/123')
expect(redirector.redirect_path).to eq 'https://example.com/status-123'
end
it 'returns path for legacy status links with a query param' do
redirector = described_class.new('statuses/123?foo=bar')
expect(redirector.redirect_path).to eq 'https://example.com/status-123'
end
it 'returns path for pretty status links with a query param' do
redirector = described_class.new('@alice/123?foo=bar')
expect(redirector.redirect_path).to eq 'https://example.com/status-123'
end
end
context 'when account is suspended' do
before do
remote_account.suspend!
end
it 'returns nil for legacy account links' do
redirector = described_class.new('accounts/2')
expect(redirector.redirect_path).to be_nil
end
it 'returns nil for legacy status links' do
redirector = described_class.new('statuses/123')
expect(redirector.redirect_path).to be_nil
end
it 'returns nil for pretty account links' do
redirector = described_class.new('@alice@example.com')
expect(redirector.redirect_path).to be_nil
end
it 'returns nil for pretty status links' do
redirector = described_class.new('@alice/123')
expect(redirector.redirect_path).to be_nil
end
it 'returns nil for legacy status links with a query param' do
redirector = described_class.new('statuses/123?foo=bar')
expect(redirector.redirect_path).to be_nil
end
it 'returns nil for pretty status links with a query param' do
redirector = described_class.new('@alice/123?foo=bar')
expect(redirector.redirect_path).to be_nil
end
end
end
end