Merge pull request #1532 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes
This commit is contained in:
		
						commit
						df82963ea4
					
				| 
						 | 
					@ -6,12 +6,8 @@
 | 
				
			||||||
#  id                            :bigint(8)        not null, primary key
 | 
					#  id                            :bigint(8)        not null, primary key
 | 
				
			||||||
#  username                      :string           default(""), not null
 | 
					#  username                      :string           default(""), not null
 | 
				
			||||||
#  domain                        :string
 | 
					#  domain                        :string
 | 
				
			||||||
#  secret                        :string           default(""), not null
 | 
					 | 
				
			||||||
#  private_key                   :text
 | 
					#  private_key                   :text
 | 
				
			||||||
#  public_key                    :text             default(""), not null
 | 
					#  public_key                    :text             default(""), not null
 | 
				
			||||||
#  remote_url                    :string           default(""), not null
 | 
					 | 
				
			||||||
#  salmon_url                    :string           default(""), not null
 | 
					 | 
				
			||||||
#  hub_url                       :string           default(""), not null
 | 
					 | 
				
			||||||
#  created_at                    :datetime         not null
 | 
					#  created_at                    :datetime         not null
 | 
				
			||||||
#  updated_at                    :datetime         not null
 | 
					#  updated_at                    :datetime         not null
 | 
				
			||||||
#  note                          :text             default(""), not null
 | 
					#  note                          :text             default(""), not null
 | 
				
			||||||
| 
						 | 
					@ -49,12 +45,18 @@
 | 
				
			||||||
#  avatar_storage_schema_version :integer
 | 
					#  avatar_storage_schema_version :integer
 | 
				
			||||||
#  header_storage_schema_version :integer
 | 
					#  header_storage_schema_version :integer
 | 
				
			||||||
#  devices_url                   :string
 | 
					#  devices_url                   :string
 | 
				
			||||||
#  sensitized_at                 :datetime
 | 
					 | 
				
			||||||
#  suspension_origin             :integer
 | 
					#  suspension_origin             :integer
 | 
				
			||||||
 | 
					#  sensitized_at                 :datetime
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Account < ApplicationRecord
 | 
					class Account < ApplicationRecord
 | 
				
			||||||
  self.ignored_columns = %w(subscription_expires_at)
 | 
					  self.ignored_columns = %w(
 | 
				
			||||||
 | 
					    subscription_expires_at
 | 
				
			||||||
 | 
					    secret
 | 
				
			||||||
 | 
					    remote_url
 | 
				
			||||||
 | 
					    salmon_url
 | 
				
			||||||
 | 
					    hub_url
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.-]+[a-z0-9_]+)?/i
 | 
					  USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.-]+[a-z0-9_]+)?/i
 | 
				
			||||||
  MENTION_RE  = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[[:word:]\.\-]+[a-z0-9]+)?)/i
 | 
					  MENTION_RE  = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[[:word:]\.\-]+[a-z0-9]+)?)/i
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					# frozen_string_literal: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class RemoveHubURLFromAccounts < ActiveRecord::Migration[5.2]
 | 
				
			||||||
 | 
					  def change
 | 
				
			||||||
 | 
					    safety_assured do
 | 
				
			||||||
 | 
					      remove_column :accounts, :secret, :string, null: false, default: ''
 | 
				
			||||||
 | 
					      remove_column :accounts, :remote_url, :string, null: false, default: ''
 | 
				
			||||||
 | 
					      remove_column :accounts, :salmon_url, :string, null: false, default: ''
 | 
				
			||||||
 | 
					      remove_column :accounts, :hub_url, :string, null: false, default: ''
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -10,7 +10,7 @@
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# It's strongly recommended that you check this file into your version control system.
 | 
					# It's strongly recommended that you check this file into your version control system.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ActiveRecord::Schema.define(version: 2021_05_05_174616) do
 | 
					ActiveRecord::Schema.define(version: 2021_05_07_001928) do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # These are extensions that must be enabled in order to support this database
 | 
					  # These are extensions that must be enabled in order to support this database
 | 
				
			||||||
  enable_extension "plpgsql"
 | 
					  enable_extension "plpgsql"
 | 
				
			||||||
| 
						 | 
					@ -136,12 +136,8 @@ ActiveRecord::Schema.define(version: 2021_05_05_174616) do
 | 
				
			||||||
  create_table "accounts", id: :bigint, default: -> { "timestamp_id('accounts'::text)" }, force: :cascade do |t|
 | 
					  create_table "accounts", id: :bigint, default: -> { "timestamp_id('accounts'::text)" }, force: :cascade do |t|
 | 
				
			||||||
    t.string "username", default: "", null: false
 | 
					    t.string "username", default: "", null: false
 | 
				
			||||||
    t.string "domain"
 | 
					    t.string "domain"
 | 
				
			||||||
    t.string "secret", default: "", null: false
 | 
					 | 
				
			||||||
    t.text "private_key"
 | 
					    t.text "private_key"
 | 
				
			||||||
    t.text "public_key", default: "", null: false
 | 
					    t.text "public_key", default: "", null: false
 | 
				
			||||||
    t.string "remote_url", default: "", null: false
 | 
					 | 
				
			||||||
    t.string "salmon_url", default: "", null: false
 | 
					 | 
				
			||||||
    t.string "hub_url", default: "", null: false
 | 
					 | 
				
			||||||
    t.datetime "created_at", null: false
 | 
					    t.datetime "created_at", null: false
 | 
				
			||||||
    t.datetime "updated_at", null: false
 | 
					    t.datetime "updated_at", null: false
 | 
				
			||||||
    t.text "note", default: "", null: false
 | 
					    t.text "note", default: "", null: false
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
  "name": "@tootsuite/mastodon",
 | 
					  "name": "@tootsuite/mastodon",
 | 
				
			||||||
  "license": "AGPL-3.0-or-later",
 | 
					  "license": "AGPL-3.0-or-later",
 | 
				
			||||||
  "engines": {
 | 
					  "engines": {
 | 
				
			||||||
    "node": ">=10.13"
 | 
					    "node": ">=12"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "postversion": "git push --tags",
 | 
					    "postversion": "git push --tags",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,11 +36,7 @@ describe RelationshipsController do
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe 'PATCH #update' do
 | 
					  describe 'PATCH #update' do
 | 
				
			||||||
    let(:poopfeast) { Fabricate(:account, username: 'poopfeast', domain: 'example.com', salmon_url: 'http://example.com/salmon') }
 | 
					    let(:poopfeast) { Fabricate(:account, username: 'poopfeast', domain: 'example.com') }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    before do
 | 
					 | 
				
			||||||
      stub_request(:post, 'http://example.com/salmon').to_return(status: 200)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    shared_examples 'redirects back to followers page' do
 | 
					    shared_examples 'redirects back to followers page' do
 | 
				
			||||||
      it 'redirects back to followers page' do
 | 
					      it 'redirects back to followers page' do
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,24 +22,6 @@ RSpec.describe AuthorizeFollowService, type: :service do
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe 'remote OStatus' do
 | 
					 | 
				
			||||||
    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    before do
 | 
					 | 
				
			||||||
      FollowRequest.create(account: bob, target_account: sender)
 | 
					 | 
				
			||||||
      stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {})
 | 
					 | 
				
			||||||
      subject.call(bob, sender)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'removes follow request' do
 | 
					 | 
				
			||||||
      expect(bob.requested?(sender)).to be false
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'creates follow relation' do
 | 
					 | 
				
			||||||
      expect(bob.following?(sender)).to be true
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe 'remote ActivityPub' do
 | 
					  describe 'remote ActivityPub' do
 | 
				
			||||||
    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox')).account }
 | 
					    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox')).account }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,7 @@ RSpec.describe BatchedRemoveStatusService, type: :service do
 | 
				
			||||||
  subject { BatchedRemoveStatusService.new }
 | 
					  subject { BatchedRemoveStatusService.new }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  let!(:alice)  { Fabricate(:account) }
 | 
					  let!(:alice)  { Fabricate(:account) }
 | 
				
			||||||
  let!(:bob)    { Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://example.com/salmon') }
 | 
					  let!(:bob)    { Fabricate(:account, username: 'bob', domain: 'example.com') }
 | 
				
			||||||
  let!(:jeff)   { Fabricate(:user).account }
 | 
					  let!(:jeff)   { Fabricate(:user).account }
 | 
				
			||||||
  let!(:hank)   { Fabricate(:account, username: 'hank', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
 | 
					  let!(:hank)   { Fabricate(:account, username: 'hank', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,19 +17,6 @@ RSpec.describe BlockService, type: :service do
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe 'remote OStatus' do
 | 
					 | 
				
			||||||
    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    before do
 | 
					 | 
				
			||||||
      stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {})
 | 
					 | 
				
			||||||
      subject.call(sender, bob)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'creates a blocking relation' do
 | 
					 | 
				
			||||||
      expect(sender.blocking?(bob)).to be true
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe 'remote ActivityPub' do
 | 
					  describe 'remote ActivityPub' do
 | 
				
			||||||
    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox')).account }
 | 
					    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox')).account }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,20 +18,6 @@ RSpec.describe FavouriteService, type: :service do
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe 'remote OStatus' do
 | 
					 | 
				
			||||||
    let(:bob)    { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :ostatus, domain: 'example.com', salmon_url: 'http://salmon.example.com')).account }
 | 
					 | 
				
			||||||
    let(:status) { Fabricate(:status, account: bob, uri: 'tag:example.com:blahblah') }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    before do
 | 
					 | 
				
			||||||
      stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {})
 | 
					 | 
				
			||||||
      subject.call(sender, status)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'creates a favourite' do
 | 
					 | 
				
			||||||
      expect(status.favourites.first).to_not be_nil
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe 'remote ActivityPub' do
 | 
					  describe 'remote ActivityPub' do
 | 
				
			||||||
    let(:bob)    { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, protocol: :activitypub, username: 'bob', domain: 'example.com', inbox_url: 'http://example.com/inbox')).account }
 | 
					    let(:bob)    { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, protocol: :activitypub, username: 'bob', domain: 'example.com', inbox_url: 'http://example.com/inbox')).account }
 | 
				
			||||||
    let(:status) { Fabricate(:status, account: bob) }
 | 
					    let(:status) { Fabricate(:status, account: bob) }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,56 +31,4 @@ RSpec.describe FetchRemoteStatusService, type: :service do
 | 
				
			||||||
      expect(status.text).to eq 'Lorem ipsum'
 | 
					      expect(status.text).to eq 'Lorem ipsum'
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					 | 
				
			||||||
  context 'protocol is :ostatus' do
 | 
					 | 
				
			||||||
    subject { described_class.new }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    before do
 | 
					 | 
				
			||||||
      Fabricate(:account, username: 'tracer', domain: 'real.domain', remote_url: 'https://real.domain/users/tracer')
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'does not create status with author at different domain' do
 | 
					 | 
				
			||||||
      status_body = <<-XML.squish
 | 
					 | 
				
			||||||
        <?xml version="1.0"?>
 | 
					 | 
				
			||||||
        <entry xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:media="http://purl.org/syndication/atommedia" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:mastodon="http://mastodon.social/schema/1.0">
 | 
					 | 
				
			||||||
          <id>tag:real.domain,2017-04-27:objectId=4487555:objectType=Status</id>
 | 
					 | 
				
			||||||
          <published>2017-04-27T13:49:25Z</published>
 | 
					 | 
				
			||||||
          <updated>2017-04-27T13:49:25Z</updated>
 | 
					 | 
				
			||||||
          <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
 | 
					 | 
				
			||||||
          <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
 | 
					 | 
				
			||||||
          <author>
 | 
					 | 
				
			||||||
            <id>https://real.domain/users/tracer</id>
 | 
					 | 
				
			||||||
            <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
 | 
					 | 
				
			||||||
            <uri>https://real.domain/users/tracer</uri>
 | 
					 | 
				
			||||||
            <name>tracer</name>
 | 
					 | 
				
			||||||
          </author>
 | 
					 | 
				
			||||||
          <content type="html">Overwatch rocks</content>
 | 
					 | 
				
			||||||
        </entry>
 | 
					 | 
				
			||||||
      XML
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      expect(subject.call('https://fake.domain/foo', status_body)).to be_nil
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'does not create status with wrong id when id uses http format' do
 | 
					 | 
				
			||||||
      status_body = <<-XML.squish
 | 
					 | 
				
			||||||
        <?xml version="1.0"?>
 | 
					 | 
				
			||||||
        <entry xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:media="http://purl.org/syndication/atommedia" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:mastodon="http://mastodon.social/schema/1.0">
 | 
					 | 
				
			||||||
          <id>https://other-real.domain/statuses/123</id>
 | 
					 | 
				
			||||||
          <published>2017-04-27T13:49:25Z</published>
 | 
					 | 
				
			||||||
          <updated>2017-04-27T13:49:25Z</updated>
 | 
					 | 
				
			||||||
          <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
 | 
					 | 
				
			||||||
          <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
 | 
					 | 
				
			||||||
          <author>
 | 
					 | 
				
			||||||
            <id>https://real.domain/users/tracer</id>
 | 
					 | 
				
			||||||
            <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
 | 
					 | 
				
			||||||
            <uri>https://real.domain/users/tracer</uri>
 | 
					 | 
				
			||||||
            <name>tracer</name>
 | 
					 | 
				
			||||||
          </author>
 | 
					 | 
				
			||||||
          <content type="html">Overwatch rocks</content>
 | 
					 | 
				
			||||||
        </entry>
 | 
					 | 
				
			||||||
      XML
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      expect(subject.call('https://real.domain/statuses/456', status_body)).to be_nil
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,37 +7,6 @@ RSpec.describe ProcessMentionsService, type: :service do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  subject { ProcessMentionsService.new }
 | 
					  subject { ProcessMentionsService.new }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  context 'OStatus with public toot' do
 | 
					 | 
				
			||||||
    let(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :ostatus, domain: 'example.com', salmon_url: 'http://salmon.example.com') }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    before do
 | 
					 | 
				
			||||||
      stub_request(:post, remote_user.salmon_url)
 | 
					 | 
				
			||||||
      subject.call(status)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'does not create a mention' do
 | 
					 | 
				
			||||||
      expect(remote_user.mentions.where(status: status).count).to eq 0
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  context 'OStatus with private toot' do
 | 
					 | 
				
			||||||
    let(:visibility)  { :private }
 | 
					 | 
				
			||||||
    let(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :ostatus, domain: 'example.com', salmon_url: 'http://salmon.example.com') }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    before do
 | 
					 | 
				
			||||||
      stub_request(:post, remote_user.salmon_url)
 | 
					 | 
				
			||||||
      subject.call(status)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'does not create a mention' do
 | 
					 | 
				
			||||||
      expect(remote_user.mentions.where(status: status).count).to eq 0
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'does not post to remote user\'s Salmon end point' do
 | 
					 | 
				
			||||||
      expect(a_request(:post, remote_user.salmon_url)).to_not have_been_made
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  context 'ActivityPub' do
 | 
					  context 'ActivityPub' do
 | 
				
			||||||
    context do
 | 
					    context do
 | 
				
			||||||
      let(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
 | 
					      let(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,22 +32,6 @@ RSpec.describe ReblogService, type: :service do
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  context 'OStatus' do
 | 
					 | 
				
			||||||
    let(:bob)    { Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com') }
 | 
					 | 
				
			||||||
    let(:status) { Fabricate(:status, account: bob, uri: 'tag:example.com;something:something') }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    subject { ReblogService.new }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    before do
 | 
					 | 
				
			||||||
      stub_request(:post, 'http://salmon.example.com')
 | 
					 | 
				
			||||||
      subject.call(alice, status)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'creates a reblog' do
 | 
					 | 
				
			||||||
      expect(status.reblogs.count).to eq 1
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  context 'ActivityPub' do
 | 
					  context 'ActivityPub' do
 | 
				
			||||||
    let(:bob)    { Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
 | 
					    let(:bob)    { Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
 | 
				
			||||||
    let(:status) { Fabricate(:status, account: bob) }
 | 
					    let(:status) { Fabricate(:status, account: bob) }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,24 +22,6 @@ RSpec.describe RejectFollowService, type: :service do
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe 'remote OStatus' do
 | 
					 | 
				
			||||||
    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    before do
 | 
					 | 
				
			||||||
      FollowRequest.create(account: bob, target_account: sender)
 | 
					 | 
				
			||||||
      stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {})
 | 
					 | 
				
			||||||
      subject.call(bob, sender)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'removes follow request' do
 | 
					 | 
				
			||||||
      expect(bob.requested?(sender)).to be false
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'does not create follow relation' do
 | 
					 | 
				
			||||||
      expect(bob.following?(sender)).to be false
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe 'remote ActivityPub' do
 | 
					  describe 'remote ActivityPub' do
 | 
				
			||||||
    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox')).account }
 | 
					    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox')).account }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,7 @@ RSpec.describe RemoveStatusService, type: :service do
 | 
				
			||||||
  subject { RemoveStatusService.new }
 | 
					  subject { RemoveStatusService.new }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  let!(:alice)  { Fabricate(:account, user: Fabricate(:user)) }
 | 
					  let!(:alice)  { Fabricate(:account, user: Fabricate(:user)) }
 | 
				
			||||||
  let!(:bob)    { Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://example.com/salmon') }
 | 
					  let!(:bob)    { Fabricate(:account, username: 'bob', domain: 'example.com') }
 | 
				
			||||||
  let!(:jeff)   { Fabricate(:account) }
 | 
					  let!(:jeff)   { Fabricate(:account) }
 | 
				
			||||||
  let!(:hank)   { Fabricate(:account, username: 'hank', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
 | 
					  let!(:hank)   { Fabricate(:account, username: 'hank', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
 | 
				
			||||||
  let!(:bill)   { Fabricate(:account, username: 'bill', protocol: :activitypub, domain: 'example2.com', inbox_url: 'http://example2.com/inbox') }
 | 
					  let!(:bill)   { Fabricate(:account, username: 'bill', protocol: :activitypub, domain: 'example2.com', inbox_url: 'http://example2.com/inbox') }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,20 +18,6 @@ RSpec.describe UnblockService, type: :service do
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe 'remote OStatus' do
 | 
					 | 
				
			||||||
    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    before do
 | 
					 | 
				
			||||||
      sender.block!(bob)
 | 
					 | 
				
			||||||
      stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {})
 | 
					 | 
				
			||||||
      subject.call(sender, bob)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'destroys the blocking relation' do
 | 
					 | 
				
			||||||
      expect(sender.blocking?(bob)).to be false
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe 'remote ActivityPub' do
 | 
					  describe 'remote ActivityPub' do
 | 
				
			||||||
    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox')).account }
 | 
					    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox')).account }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,20 +18,6 @@ RSpec.describe UnfollowService, type: :service do
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe 'remote OStatus' do
 | 
					 | 
				
			||||||
    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :ostatus, domain: 'example.com', salmon_url: 'http://salmon.example.com')).account }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    before do
 | 
					 | 
				
			||||||
      sender.follow!(bob)
 | 
					 | 
				
			||||||
      stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {})
 | 
					 | 
				
			||||||
      subject.call(sender, bob)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it 'destroys the following relation' do
 | 
					 | 
				
			||||||
      expect(sender.following?(bob)).to be false
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe 'remote ActivityPub' do
 | 
					  describe 'remote ActivityPub' do
 | 
				
			||||||
    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox')).account }
 | 
					    let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox')).account }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5404,9 +5404,9 @@ homedir-polyfill@^1.0.1:
 | 
				
			||||||
    parse-passwd "^1.0.0"
 | 
					    parse-passwd "^1.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
hosted-git-info@^2.1.4:
 | 
					hosted-git-info@^2.1.4:
 | 
				
			||||||
  version "2.8.8"
 | 
					  version "2.8.9"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
 | 
					  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
 | 
				
			||||||
  integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
 | 
					  integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
hpack.js@^2.1.6:
 | 
					hpack.js@^2.1.6:
 | 
				
			||||||
  version "2.1.6"
 | 
					  version "2.1.6"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue