about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/accounts_controller.rb9
-rw-r--r--app/controllers/api/salmon_controller.rb2
-rw-r--r--app/controllers/api/subscriptions_controller.rb2
-rw-r--r--app/controllers/api_controller.rb3
-rw-r--r--app/views/accounts/show.atom.ruby2
-rw-r--r--app/views/xrd/webfinger.xml.ruby2
-rw-r--r--spec/services/fetch_feed_service_spec.rb5
-rw-r--r--spec/services/follow_remote_account_service_spec.rb9
-rw-r--r--spec/services/follow_service_spec.rb6
-rw-r--r--spec/services/post_status_service_spec.rb7
-rw-r--r--spec/services/process_feed_service_spec.rb5
-rw-r--r--spec/services/process_interaction_service_spec.rb12
-rw-r--r--spec/services/process_mentions_service_spec.rb19
-rw-r--r--spec/services/send_interaction_service_spec.rb4
-rw-r--r--spec/services/setup_local_account_service_spec.rb5
-rw-r--r--spec/services/unfollow_service_spec.rb5
16 files changed, 83 insertions, 14 deletions
diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb
index e96ef4a1c..2848ea62e 100644
--- a/app/controllers/accounts_controller.rb
+++ b/app/controllers/accounts_controller.rb
@@ -1,5 +1,6 @@
 class AccountsController < ApplicationController
   before_action :set_account
+  before_action :set_webfinger_header
 
   def show
     respond_to do |format|
@@ -13,4 +14,12 @@ class AccountsController < ApplicationController
   def set_account
     @account = Account.find_by!(username: params[:username], domain: nil)
   end
+
+  def set_webfinger_header
+    response.headers['Link'] = "<#{webfinger_account_url}>; rel=\"lrdd\"; type=\"application/xrd+xml\""
+  end
+
+  def webfinger_account_url
+    webfinger_url(resource: "acct:#{@account.acct}@#{Rails.configuration.x.local_domain}")
+  end
 end
diff --git a/app/controllers/api/salmon_controller.rb b/app/controllers/api/salmon_controller.rb
index 99ec15bff..1df989700 100644
--- a/app/controllers/api/salmon_controller.rb
+++ b/app/controllers/api/salmon_controller.rb
@@ -1,4 +1,4 @@
-class Api::SalmonController < ApplicationController
+class Api::SalmonController < ApiController
   before_action :set_account
 
   def update
diff --git a/app/controllers/api/subscriptions_controller.rb b/app/controllers/api/subscriptions_controller.rb
index 56deae10c..038d6c877 100644
--- a/app/controllers/api/subscriptions_controller.rb
+++ b/app/controllers/api/subscriptions_controller.rb
@@ -1,4 +1,4 @@
-class Api::SubscriptionsController < ApplicationController
+class Api::SubscriptionsController < ApiController
   before_action :set_account
 
   def show
diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb
new file mode 100644
index 000000000..eb2e464eb
--- /dev/null
+++ b/app/controllers/api_controller.rb
@@ -0,0 +1,3 @@
+class ApiController < ApplicationController
+  protect_from_forgery with: :null_session
+end
diff --git a/app/views/accounts/show.atom.ruby b/app/views/accounts/show.atom.ruby
index 54f1185e4..eaa4c63b1 100644
--- a/app/views/accounts/show.atom.ruby
+++ b/app/views/accounts/show.atom.ruby
@@ -4,7 +4,7 @@ Nokogiri::XML::Builder.new do |xml|
     title      xml, @account.display_name
     subtitle   xml, @account.note
     updated_at xml, stream_updated_at
-    logo       xml, asset_url(@account.avatar.url(:medium))
+    logo       xml, asset_url(@account.avatar.url(:medium, false))
 
     author(xml) do
       include_author xml, @account
diff --git a/app/views/xrd/webfinger.xml.ruby b/app/views/xrd/webfinger.xml.ruby
index ac0fd3d0e..7c920b678 100644
--- a/app/views/xrd/webfinger.xml.ruby
+++ b/app/views/xrd/webfinger.xml.ruby
@@ -3,7 +3,7 @@ Nokogiri::XML::Builder.new do |xml|
     xml.Subject @canonical_account_uri
     xml.Alias url_for_target(@account)
     xml.Link(rel: 'http://webfinger.net/rel/profile-page', type: 'text/html', href: url_for_target(@account))
-    xml.Link(rel: 'http://schemas.google.com/g/2010#updates-from', type: 'application/atom+xml', href: atom_user_stream_url(id: @account.id))
+    xml.Link(rel: 'http://schemas.google.com/g/2010#updates-from', type: 'application/atom+xml', href: account_url(@account, format: 'atom'))
     xml.Link(rel: 'salmon', href: api_salmon_url(@account.id))
     xml.Link(rel: 'magic-public-key', href: @magic_key)
   end
diff --git a/spec/services/fetch_feed_service_spec.rb b/spec/services/fetch_feed_service_spec.rb
index c6a3d389b..a28333fe3 100644
--- a/spec/services/fetch_feed_service_spec.rb
+++ b/spec/services/fetch_feed_service_spec.rb
@@ -1,5 +1,8 @@
 require 'rails_helper'
 
 RSpec.describe FetchFeedService do
-  pending
+  subject { FetchFeedService.new }
+
+  it 'fetches remote user\'s feed'
+  it 'processes the feed'
 end
diff --git a/spec/services/follow_remote_account_service_spec.rb b/spec/services/follow_remote_account_service_spec.rb
index fbe7e767a..27df76457 100644
--- a/spec/services/follow_remote_account_service_spec.rb
+++ b/spec/services/follow_remote_account_service_spec.rb
@@ -1,5 +1,12 @@
 require 'rails_helper'
 
 RSpec.describe FollowRemoteAccountService do
-  pending
+  subject { FollowRemoteAccountService.new }
+
+  it 'returns nil if no such user can be resolved via webfinger'
+  it 'returns nil if the domain does not have webfinger'
+  it 'returns nil if remote user does not offer a hub URL'
+  it 'returns an already existing remote account'
+  it 'returns a new remote account'
+  it 'fills the remote account with profile information'
 end
diff --git a/spec/services/follow_service_spec.rb b/spec/services/follow_service_spec.rb
index ba393f5ab..304e0cf71 100644
--- a/spec/services/follow_service_spec.rb
+++ b/spec/services/follow_service_spec.rb
@@ -1,5 +1,9 @@
 require 'rails_helper'
 
 RSpec.describe FollowService do
-  pending
+  subject { FollowService.new }
+
+  it 'creates a following relation'
+  it 'creates local account for remote user'
+  it 'sends follow to the remote user'
 end
diff --git a/spec/services/post_status_service_spec.rb b/spec/services/post_status_service_spec.rb
index 43d58719d..9ee4daf6f 100644
--- a/spec/services/post_status_service_spec.rb
+++ b/spec/services/post_status_service_spec.rb
@@ -1,5 +1,10 @@
 require 'rails_helper'
 
 RSpec.describe PostStatusService do
-  pending
+  subject { PostStatusService.new }
+
+  it 'creates a new status'
+  it 'creates a new response status'
+  it 'processes mentions'
+  it 'pings PuSH hubs'
 end
diff --git a/spec/services/process_feed_service_spec.rb b/spec/services/process_feed_service_spec.rb
index 087979ded..858053823 100644
--- a/spec/services/process_feed_service_spec.rb
+++ b/spec/services/process_feed_service_spec.rb
@@ -1,5 +1,8 @@
 require 'rails_helper'
 
 RSpec.describe ProcessFeedService do
-  pending
+  subject { ProcessFeedService.new }
+
+  it 'updates remote user\'s account information'
+  it 'creates local copies of all notes and comments'
 end
diff --git a/spec/services/process_interaction_service_spec.rb b/spec/services/process_interaction_service_spec.rb
index 8624d0b0c..931815dc2 100644
--- a/spec/services/process_interaction_service_spec.rb
+++ b/spec/services/process_interaction_service_spec.rb
@@ -1,5 +1,15 @@
 require 'rails_helper'
 
 RSpec.describe ProcessInteractionService do
-  pending
+  subject { ProcessInteractionService.new }
+
+  it 'creates account for new remote user'
+  it 'updates account for existing remote user'
+  it 'ignores envelopes that do not address the local user'
+  it 'accepts a status that mentions the local user'
+  it 'accepts a status that is a reply to the local user\'s'
+  it 'accepts a favourite to a status by the local user'
+  it 'accepts a reblog of a status of the local user'
+  it 'accepts a follow of the local user'
+  it 'accepts an unfollow of the local user'
 end
diff --git a/spec/services/process_mentions_service_spec.rb b/spec/services/process_mentions_service_spec.rb
index ae86d17dc..984d13746 100644
--- a/spec/services/process_mentions_service_spec.rb
+++ b/spec/services/process_mentions_service_spec.rb
@@ -1,5 +1,22 @@
 require 'rails_helper'
 
 RSpec.describe ProcessMentionsService do
-  pending
+  let(:account)     { Fabricate(:account, username: 'alice') }
+  let(:remote_user) { Fabricate(:account, username: 'remote_user', domain: 'example.com', salmon_url: 'http://salmon.example.com') }
+  let(:status)      { Fabricate(:status, account: account, text: "Hello @#{remote_user.acct}") }
+
+  subject { ProcessMentionsService.new }
+
+  before do
+    stub_request(:post, remote_user.salmon_url)
+    subject.(status)
+  end
+
+  it 'creates a mention' do
+    expect(remote_user.mentions.where(status: status).count).to eq 1
+  end
+
+  it 'posts to remote user\'s Salmon end point' do
+    expect(a_request(:post, remote_user.salmon_url)).to have_been_made
+  end
 end
diff --git a/spec/services/send_interaction_service_spec.rb b/spec/services/send_interaction_service_spec.rb
index ae4ab01c5..ff08394b0 100644
--- a/spec/services/send_interaction_service_spec.rb
+++ b/spec/services/send_interaction_service_spec.rb
@@ -1,5 +1,7 @@
 require 'rails_helper'
 
 RSpec.describe SendInteractionService do
-  pending
+  subject { SendInteractionService.new }
+
+  it 'sends an XML envelope to the Salmon end point of remote user'
 end
diff --git a/spec/services/setup_local_account_service_spec.rb b/spec/services/setup_local_account_service_spec.rb
index 709f170b6..2e85fc4f5 100644
--- a/spec/services/setup_local_account_service_spec.rb
+++ b/spec/services/setup_local_account_service_spec.rb
@@ -1,5 +1,8 @@
 require 'rails_helper'
 
 RSpec.describe SetupLocalAccountService do
-  pending
+  subject { SetupLocalAccountService.new }
+
+  it 'creates a user'
+  it 'creates an account for the user'
 end
diff --git a/spec/services/unfollow_service_spec.rb b/spec/services/unfollow_service_spec.rb
index 60121b675..58467ff00 100644
--- a/spec/services/unfollow_service_spec.rb
+++ b/spec/services/unfollow_service_spec.rb
@@ -1,5 +1,8 @@
 require 'rails_helper'
 
 RSpec.describe UnfollowService do
-  pending
+  subject { UnfollowService.new }
+
+  it 'destroys the following relation'
+  it 'sends remote interactionf or remote user'
 end