diff options
-rw-r--r-- | app/controllers/xrd_controller.rb | 5 | ||||
-rw-r--r-- | config/routes.rb | 2 | ||||
-rw-r--r-- | spec/controllers/xrd_controller_spec.rb | 4 | ||||
-rw-r--r-- | spec/requests/webfinger_request_spec.rb | 33 |
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 |