@@ -224,5 +224,133 @@ public void Can_Disable_Fields()
224
224
// assert
225
225
Assert . Empty ( querySet . Fields ) ;
226
226
}
227
+
228
+ [ Fact ]
229
+ public void Can_Parse_Fields_Query ( )
230
+ {
231
+ // arrange
232
+ const string type = "articles" ;
233
+ const string attrName = "some-field" ;
234
+ const string internalAttrName = "SomeField" ;
235
+
236
+ var query = new Dictionary < string , StringValues > { { $ "fields[{ type } ]", new StringValues ( attrName ) } } ;
237
+
238
+ _queryCollectionMock
239
+ . Setup ( m => m . GetEnumerator ( ) )
240
+ . Returns ( query . GetEnumerator ( ) ) ;
241
+
242
+ _controllerContextMock
243
+ . Setup ( m => m . RequestEntity )
244
+ . Returns ( new ContextEntity
245
+ {
246
+ EntityName = type ,
247
+ Attributes = new List < AttrAttribute >
248
+ {
249
+ new AttrAttribute ( attrName )
250
+ {
251
+ InternalAttributeName = internalAttrName
252
+ }
253
+ }
254
+ } ) ;
255
+
256
+ var queryParser = new QueryParser ( _controllerContextMock . Object , new JsonApiOptions ( ) ) ;
257
+
258
+ // act
259
+ var querySet = queryParser . Parse ( _queryCollectionMock . Object ) ;
260
+
261
+ // assert
262
+ Assert . NotEmpty ( querySet . Fields ) ;
263
+ Assert . Equal ( 2 , querySet . Fields . Count ) ;
264
+ Assert . Equal ( "Id" , querySet . Fields [ 0 ] ) ;
265
+ Assert . Equal ( internalAttrName , querySet . Fields [ 1 ] ) ;
266
+ }
267
+
268
+ [ Fact ]
269
+ public void Throws_JsonApiException_If_Field_DoesNotExist ( )
270
+ {
271
+ // arrange
272
+ const string type = "articles" ;
273
+ const string attrName = "dne" ;
274
+
275
+ var query = new Dictionary < string , StringValues > { { $ "fields[{ type } ]", new StringValues ( attrName ) } } ;
276
+
277
+ _queryCollectionMock
278
+ . Setup ( m => m . GetEnumerator ( ) )
279
+ . Returns ( query . GetEnumerator ( ) ) ;
280
+
281
+ _controllerContextMock
282
+ . Setup ( m => m . RequestEntity )
283
+ . Returns ( new ContextEntity
284
+ {
285
+ EntityName = type ,
286
+ Attributes = new List < AttrAttribute > ( )
287
+ } ) ;
288
+
289
+ var queryParser = new QueryParser ( _controllerContextMock . Object , new JsonApiOptions ( ) ) ;
290
+
291
+ // act , assert
292
+ var ex = Assert . Throws < JsonApiException > ( ( ) => queryParser . Parse ( _queryCollectionMock . Object ) ) ;
293
+ Assert . Equal ( 400 , ex . GetStatusCode ( ) ) ;
294
+ }
295
+
296
+ [ Theory ]
297
+ [ InlineData ( "1" , 1 , false ) ]
298
+ [ InlineData ( "abcde" , 0 , true ) ]
299
+ [ InlineData ( "" , 0 , true ) ]
300
+ public void Can_Parse_Page_Size_Query ( string value , int expectedValue , bool shouldThrow )
301
+ {
302
+ // arrange
303
+ var query = new Dictionary < string , StringValues >
304
+ { { "page[size]" , new StringValues ( value ) }
305
+ } ;
306
+
307
+ _queryCollectionMock
308
+ . Setup ( m => m . GetEnumerator ( ) )
309
+ . Returns ( query . GetEnumerator ( ) ) ;
310
+
311
+ var queryParser = new QueryParser ( _controllerContextMock . Object , new JsonApiOptions ( ) ) ;
312
+
313
+ // act
314
+ if ( shouldThrow )
315
+ {
316
+ var ex = Assert . Throws < JsonApiException > ( ( ) => queryParser . Parse ( _queryCollectionMock . Object ) ) ;
317
+ Assert . Equal ( 400 , ex . GetStatusCode ( ) ) ;
318
+ }
319
+ else
320
+ {
321
+ var querySet = queryParser . Parse ( _queryCollectionMock . Object ) ;
322
+ Assert . Equal ( expectedValue , querySet . PageQuery . PageSize ) ;
323
+ }
324
+ }
325
+
326
+ [ Theory ]
327
+ [ InlineData ( "1" , 1 , false ) ]
328
+ [ InlineData ( "abcde" , 0 , true ) ]
329
+ [ InlineData ( "" , 0 , true ) ]
330
+ public void Can_Parse_Page_Number_Query ( string value , int expectedValue , bool shouldThrow )
331
+ {
332
+ // arrange
333
+ var query = new Dictionary < string , StringValues >
334
+ { { "page[number]" , new StringValues ( value ) }
335
+ } ;
336
+
337
+ _queryCollectionMock
338
+ . Setup ( m => m . GetEnumerator ( ) )
339
+ . Returns ( query . GetEnumerator ( ) ) ;
340
+
341
+ var queryParser = new QueryParser ( _controllerContextMock . Object , new JsonApiOptions ( ) ) ;
342
+
343
+ // act
344
+ if ( shouldThrow )
345
+ {
346
+ var ex = Assert . Throws < JsonApiException > ( ( ) => queryParser . Parse ( _queryCollectionMock . Object ) ) ;
347
+ Assert . Equal ( 400 , ex . GetStatusCode ( ) ) ;
348
+ }
349
+ else
350
+ {
351
+ var querySet = queryParser . Parse ( _queryCollectionMock . Object ) ;
352
+ Assert . Equal ( expectedValue , querySet . PageQuery . PageOffset ) ;
353
+ }
354
+ }
227
355
}
228
- }
356
+ }
0 commit comments