|
1 | 1 | require File.expand_path('../../../test_helper', __FILE__) |
2 | 2 |
|
| 3 | +class CatResource < JSONAPI::Resource |
| 4 | + attribute :id |
| 5 | + attribute :name |
| 6 | + attribute :breed |
| 7 | + |
| 8 | + has_one :mother, class_name: 'Cat' |
| 9 | + has_one :father, class_name: 'Cat' |
| 10 | + |
| 11 | + filters :name |
| 12 | +end |
| 13 | + |
3 | 14 | class JSONAPIRequestTest < ActiveSupport::TestCase |
4 | 15 | def test_parse_includes_underscored |
5 | 16 | params = ActionController::Parameters.new( |
@@ -149,4 +160,41 @@ def test_parse_dasherized_with_underscored_resource |
149 | 160 | refute request.errors.empty? |
150 | 161 | assert_equal 'expense_entries is not a valid resource.', request.errors[0].detail |
151 | 162 | end |
| 163 | + |
| 164 | + def test_parse_filters_with_valid_filters |
| 165 | + setup_request |
| 166 | + @request.parse_filters({name: 'Whiskers'}) |
| 167 | + assert_equal(@request.filters[:name], 'Whiskers') |
| 168 | + assert_equal(@request.errors, []) |
| 169 | + end |
| 170 | + |
| 171 | + def test_parse_filters_with_non_valid_filter |
| 172 | + setup_request |
| 173 | + @request.parse_filters({breed: 'Whiskers'}) # breed is not a set filter |
| 174 | + assert_equal(@request.filters, {}) |
| 175 | + assert_equal(@request.errors.count, 1) |
| 176 | + assert_equal(@request.errors.first.title, "Filter not allowed") |
| 177 | + end |
| 178 | + |
| 179 | + def test_parse_filters_with_no_filters |
| 180 | + setup_request |
| 181 | + @request.parse_filters(nil) |
| 182 | + assert_equal(@request.filters, {}) |
| 183 | + assert_equal(@request.errors, []) |
| 184 | + end |
| 185 | + |
| 186 | + def test_parse_filters_with_invalid_filters_param |
| 187 | + setup_request |
| 188 | + @request.parse_filters('noeach') # String does not implement #each |
| 189 | + assert_equal(@request.filters, {}) |
| 190 | + assert_equal(@request.errors.count, 1) |
| 191 | + assert_equal(@request.errors.first.title, "Invalid filters syntax") |
| 192 | + end |
| 193 | + |
| 194 | + private |
| 195 | + |
| 196 | + def setup_request |
| 197 | + @request = JSONAPI::Request.new |
| 198 | + @request.resource_klass = CatResource |
| 199 | + end |
152 | 200 | end |
0 commit comments