Skip to content

Commit 5f39944

Browse files
committed
Update test case to 406 when accept header does not accept jsonapi mime type
1 parent daebb54 commit 5f39944

2 files changed

Lines changed: 16 additions & 6 deletions

File tree

lib/jsonapi/acts_as_resource_controller.rb

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
module JSONAPI
44
module ActsAsResourceController
55
MEDIA_TYPE_MATCHER = /(.+".+"[^,]*|[^,]+)/
6+
ALL_MEDIA_TYPES = '*/*'
67

78
def self.included(base)
89
base.extend ClassMethods
@@ -110,18 +111,25 @@ def ensure_valid_accept_media_type
110111
end
111112

112113
def invalid_accept_media_type?
113-
jsonapi_media_types = media_types('Accept').select do |media_type|
114+
media_types = media_types_for('Accept')
115+
116+
return false if media_types.blank? || media_types.include?(ALL_MEDIA_TYPES)
117+
118+
jsonapi_media_types = media_types.select do |media_type|
114119
media_type.include?(JSONAPI::MEDIA_TYPE)
115120
end
116121

117-
jsonapi_media_types.size > 0 &&
122+
jsonapi_media_types.size.zero? ||
118123
jsonapi_media_types.none? do |media_type|
119-
media_type.strip == JSONAPI::MEDIA_TYPE
124+
media_type == JSONAPI::MEDIA_TYPE
120125
end
121126
end
122127

123-
def media_types(header)
124-
(request.headers[header] || '').match(MEDIA_TYPE_MATCHER).to_a
128+
def media_types_for(header)
129+
(request.headers[header] || '')
130+
.match(MEDIA_TYPE_MATCHER)
131+
.to_a
132+
.map(&:strip)
125133
end
126134

127135
# override to set context

test/controllers/controller_test.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ def test_accept_header_not_jsonapi
6060
@request.headers['Accept'] = 'text/plain'
6161

6262
get :index
63-
assert_response :success
63+
assert_response 406
64+
assert_equal 'Not acceptable', json_response['errors'][0]['title']
65+
assert_equal "All requests must use the '#{JSONAPI::MEDIA_TYPE}' Accept without media type parameters. This request specified '#{@request.headers['Accept']}'.", json_response['errors'][0]['detail']
6466
end
6567

6668
def test_exception_class_whitelist

0 commit comments

Comments
 (0)