about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatt Jankowski <mjankowski@thoughtbot.com>2017-04-12 10:03:37 -0400
committerEugen <eugen@zeonfederated.com>2017-04-12 16:03:37 +0200
commitb352a8e5d4f3dba4b923a2a21dc9ae5343e7e8e4 (patch)
tree6fab1683ceda218fdf8639a7967e092ba50ff03c
parentfd102059aa63a3953ccfedfe9efa0e6f7993f72a (diff)
Default to json type for webfinger requests (#1583)
-rw-r--r--app/controllers/xrd_controller.rb5
-rw-r--r--config/routes.rb2
-rw-r--r--spec/controllers/xrd_controller_spec.rb4
-rw-r--r--spec/requests/webfinger_request_spec.rb33
4 files changed, 36 insertions, 8 deletions
diff --git a/app/controllers/xrd_controller.rb b/app/controllers/xrd_controller.rb
index 5964172e9..ba5032abd 100644
--- a/app/controllers/xrd_controller.rb
+++ b/app/controllers/xrd_controller.rb
@@ -1,7 +1,6 @@
 # frozen_string_literal: true
 
 class XrdController < ApplicationController
-  before_action :set_default_format_json, only: :webfinger
   before_action :set_default_format_xml, only: :host_meta
 
   def host_meta
@@ -31,10 +30,6 @@ class XrdController < ApplicationController
     request.format = 'xml' if request.headers['HTTP_ACCEPT'].nil? && params[:format].nil?
   end
 
-  def set_default_format_json
-    request.format = 'json' if request.headers['HTTP_ACCEPT'].nil? && params[:format].nil?
-  end
-
   def username_from_resource
     if resource_param =~ /\Ahttps?:\/\//
       path_params = Rails.application.routes.recognize_path(resource_param)
diff --git a/config/routes.rb b/config/routes.rb
index 69f8887b2..99ce1754e 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -15,7 +15,7 @@ Rails.application.routes.draw do
   end
 
   get '.well-known/host-meta', to: 'xrd#host_meta', as: :host_meta
-  get '.well-known/webfinger', to: 'xrd#webfinger', as: :webfinger
+  get '.well-known/webfinger', to: 'xrd#webfinger', as: :webfinger, defaults: { format: 'json' }
 
   devise_for :users, path: 'auth', controllers: {
     sessions:           'auth/sessions',
diff --git a/spec/controllers/xrd_controller_spec.rb b/spec/controllers/xrd_controller_spec.rb
index b56c68f5c..33b17f152 100644
--- a/spec/controllers/xrd_controller_spec.rb
+++ b/spec/controllers/xrd_controller_spec.rb
@@ -14,12 +14,12 @@ RSpec.describe XrdController, type: :controller do
     let(:alice) { Fabricate(:account, username: 'alice') }
 
     it 'returns http success when account can be found' do
-      get :webfinger, params: { resource: alice.to_webfinger_s }
+      get :webfinger, params: { resource: alice.to_webfinger_s }, format: :json
       expect(response).to have_http_status(:success)
     end
 
     it 'returns http not found when account cannot be found' do
-      get :webfinger, params: { resource: 'acct:not@existing.com' }
+      get :webfinger, params: { resource: 'acct:not@existing.com' }, format: :json
       expect(response).to have_http_status(:not_found)
     end
   end
diff --git a/spec/requests/webfinger_request_spec.rb b/spec/requests/webfinger_request_spec.rb
new file mode 100644
index 000000000..b5690d22f
--- /dev/null
+++ b/spec/requests/webfinger_request_spec.rb
@@ -0,0 +1,33 @@
+require "rails_helper"
+
+describe "The webfinger route" do
+  let(:alice) { Fabricate(:account, username: 'alice') }
+
+  describe "requested without accepts headers" do
+    it "returns a json response" do
+      get webfinger_url, params: { resource: alice.to_webfinger_s }
+
+      expect(response).to have_http_status(:success)
+      expect(response.content_type).to eq "application/jrd+json"
+    end
+  end
+
+  describe "requested with html in accepts headers" do
+    it "returns a json response" do
+      headers = { 'HTTP_ACCEPT' => 'text/html' }
+      get webfinger_url, params: { resource: alice.to_webfinger_s }, headers: headers
+
+      expect(response).to have_http_status(:success)
+      expect(response.content_type).to eq "application/jrd+json"
+    end
+  end
+
+  describe "requested with xml format" do
+    it "returns an xml response" do
+      get webfinger_url(resource: alice.to_webfinger_s, format: :xml)
+
+      expect(response).to have_http_status(:success)
+      expect(response.content_type).to eq "application/xrd+xml"
+    end
+  end
+end