@@ -368,6 +368,119 @@ public void IncludeMetadata_AddsQueryParameter()
368368
369369 #endregion
370370
371+ #region AssetFields Tests
372+
373+ [ Fact ]
374+ public void AssetFields_WithSingleField_AddsQueryParameter ( )
375+ {
376+ // Arrange
377+ var asset = CreateAsset ( ) ;
378+ var field = "user_defined_fields" ;
379+
380+ // Act
381+ Asset result = asset . AssetFields ( field ) ;
382+
383+ // Assert
384+ Assert . NotNull ( result ) ;
385+ Assert . Equal ( asset , result ) ;
386+
387+ var urlQueriesField = typeof ( Asset ) . GetField ( "UrlQueries" ,
388+ BindingFlags . NonPublic | BindingFlags . Instance ) ;
389+ var urlQueries = ( Dictionary < string , object > ) urlQueriesField ? . GetValue ( asset ) ;
390+
391+ Assert . True ( urlQueries ? . ContainsKey ( "asset_fields[]" ) ?? false ) ;
392+ var fields = urlQueries ? [ "asset_fields[]" ] as string [ ] ;
393+ Assert . NotNull ( fields ) ;
394+ Assert . Single ( fields ) ;
395+ Assert . Equal ( "user_defined_fields" , fields [ 0 ] ) ;
396+ }
397+
398+ [ Fact ]
399+ public void AssetFields_WithMultipleFields_AddsQueryParameter ( )
400+ {
401+ // Arrange
402+ var asset = CreateAsset ( ) ;
403+ var fields = new [ ] { "embedded_metadata" , "visual_markups" } ;
404+
405+ // Act
406+ Asset result = asset . AssetFields ( fields ) ;
407+
408+ // Assert
409+ Assert . NotNull ( result ) ;
410+ Assert . Equal ( asset , result ) ;
411+
412+ var urlQueriesField = typeof ( Asset ) . GetField ( "UrlQueries" ,
413+ BindingFlags . NonPublic | BindingFlags . Instance ) ;
414+ var urlQueries = ( Dictionary < string , object > ) urlQueriesField ? . GetValue ( asset ) ;
415+
416+ Assert . True ( urlQueries ? . ContainsKey ( "asset_fields[]" ) ?? false ) ;
417+ Assert . Equal ( fields , urlQueries ? [ "asset_fields[]" ] ) ;
418+ }
419+
420+ [ Fact ]
421+ public void AssetFields_ReturnsSameInstance_ForChaining ( )
422+ {
423+ // Arrange
424+ var asset = CreateAsset ( ) ;
425+
426+ // Act
427+ Asset result = asset . AssetFields ( "ai_generated_metadata" ) ;
428+
429+ // Assert
430+ Assert . NotNull ( result ) ;
431+ Assert . Same ( asset , result ) ;
432+ }
433+
434+ [ Fact ]
435+ public void AssetFields_WithNoArguments_DoesNotAddParameter ( )
436+ {
437+ // Arrange
438+ var asset = CreateAsset ( ) ;
439+
440+ // Act
441+ Asset result = asset . AssetFields ( ) ;
442+
443+ // Assert
444+ var urlQueriesField = typeof ( Asset ) . GetField ( "UrlQueries" ,
445+ BindingFlags . NonPublic | BindingFlags . Instance ) ;
446+ var urlQueries = ( Dictionary < string , object > ) urlQueriesField ? . GetValue ( asset ) ;
447+ Assert . False ( urlQueries ? . ContainsKey ( "asset_fields[]" ) ?? false ) ;
448+ }
449+
450+ [ Fact ]
451+ public void AssetFields_WithNull_DoesNotAddParameter ( )
452+ {
453+ // Arrange
454+ var asset = CreateAsset ( ) ;
455+
456+ // Act
457+ Asset result = asset . AssetFields ( null ) ;
458+
459+ // Assert
460+ var urlQueriesField = typeof ( Asset ) . GetField ( "UrlQueries" ,
461+ BindingFlags . NonPublic | BindingFlags . Instance ) ;
462+ var urlQueries = ( Dictionary < string , object > ) urlQueriesField ? . GetValue ( asset ) ;
463+ Assert . False ( urlQueries ? . ContainsKey ( "asset_fields[]" ) ?? false ) ;
464+ }
465+
466+ [ Fact ]
467+ public void AssetFields_WithEmptyArray_DoesNotAddParameter ( )
468+ {
469+ // Arrange
470+ var asset = CreateAsset ( ) ;
471+
472+ // Act
473+ Asset result = asset . AssetFields ( new string [ 0 ] ) ;
474+
475+ // Assert
476+ var urlQueriesField = typeof ( Asset ) . GetField ( "UrlQueries" ,
477+ BindingFlags . NonPublic | BindingFlags . Instance ) ;
478+ var urlQueries = ( Dictionary < string , object > ) urlQueriesField ? . GetValue ( asset ) ;
479+ Assert . False ( urlQueries ? . ContainsKey ( "asset_fields[]" ) ?? false ) ;
480+ }
481+
482+ #endregion
483+
371484 #region IncludeBranch Tests
372485
373486 [ Fact ]
@@ -420,6 +533,68 @@ public void AddParam_AddsQueryParameter()
420533
421534 #endregion
422535
536+ #region Asset Locale Tests (single-asset fetch with locale)
537+
538+ /// <summary>
539+ /// Asset.SetLocale adds locale query param for single-asset fetch.
540+ /// </summary>
541+ [ Fact ]
542+ public void SetLocale_AddsQueryParameter ( )
543+ {
544+ var asset = CreateAsset ( ) ;
545+ var locale = "en-us" ;
546+
547+ Asset result = asset . SetLocale ( locale ) ;
548+
549+ Assert . NotNull ( result ) ;
550+ Assert . Same ( asset , result ) ;
551+ var urlQueriesField = typeof ( Asset ) . GetField ( "UrlQueries" ,
552+ BindingFlags . NonPublic | BindingFlags . Instance ) ;
553+ var urlQueries = ( Dictionary < string , object > ) urlQueriesField ? . GetValue ( asset ) ;
554+ Assert . True ( urlQueries ? . ContainsKey ( "locale" ) ?? false ) ;
555+ Assert . Equal ( "en-us" , urlQueries ? [ "locale" ] ? . ToString ( ) ) ;
556+ }
557+ /// <summary>
558+ /// Asset localisation: AddParam("locale", "ar") adds locale query for single-asset fetch.
559+ /// </summary>
560+ [ Fact ]
561+ public void AddParam_WithLocale_AddsLocaleQueryParameter ( )
562+ {
563+ var asset = CreateAsset ( ) ;
564+ var locale = "ar" ;
565+
566+ Asset result = asset . AddParam ( "locale" , locale ) ;
567+
568+ Assert . NotNull ( result ) ;
569+ Assert . Same ( asset , result ) ;
570+ var urlQueriesField = typeof ( Asset ) . GetField ( "UrlQueries" ,
571+ BindingFlags . NonPublic | BindingFlags . Instance ) ;
572+ var urlQueries = ( Dictionary < string , object > ) urlQueriesField ? . GetValue ( asset ) ;
573+ Assert . True ( urlQueries ? . ContainsKey ( "locale" ) ?? false ) ;
574+ Assert . Equal ( "ar" , urlQueries ? [ "locale" ] ? . ToString ( ) ) ;
575+ }
576+
577+ /// <summary>
578+ /// Single-asset fetch: locale can be combined with include_fallback.
579+ /// </summary>
580+ [ Fact ]
581+ public void AddParam_LocaleWithIncludeFallback_AddsBothQueryParameters ( )
582+ {
583+ var asset = CreateAsset ( ) ;
584+
585+ asset . AddParam ( "locale" , "en-us" ) . IncludeFallback ( ) ;
586+
587+ var urlQueriesField = typeof ( Asset ) . GetField ( "UrlQueries" ,
588+ BindingFlags . NonPublic | BindingFlags . Instance ) ;
589+ var urlQueries = ( Dictionary < string , object > ) urlQueriesField ? . GetValue ( asset ) ;
590+ Assert . True ( urlQueries ? . ContainsKey ( "locale" ) ?? false ) ;
591+ Assert . Equal ( "en-us" , urlQueries ? [ "locale" ] ? . ToString ( ) ) ;
592+ Assert . True ( urlQueries ? . ContainsKey ( "include_fallback" ) ?? false ) ;
593+ Assert . Equal ( "true" , urlQueries ? [ "include_fallback" ] ? . ToString ( ) ) ;
594+ }
595+
596+ #endregion
597+
423598 #region SetHeader and RemoveHeader Tests
424599
425600 [ Fact ]
0 commit comments