@@ -1133,5 +1133,124 @@ public async Task AssetFields_AssetLibrary_WithEmptyArray_RequestSucceeds()
11331133 Assert . Fail ( "AssetLibrary.FetchAll with AssetFields(empty array) did not return a result." ) ;
11341134 Assert . NotNull ( assets . Items ) ;
11351135 }
1136+
1137+ [ Fact ]
1138+ public async Task FetchAssetsWithLocale_ReturnsLocalisedAssets ( )
1139+ {
1140+ var locale = "en-us" ; // or "ar" if your stack has that locale
1141+ ContentstackCollection < Asset > assets = await client . AssetLibrary ( )
1142+ . SetLocale ( locale )
1143+ . FetchAll ( ) ;
1144+
1145+ Assert . True ( assets . Items != null ) ;
1146+ if ( assets . Items . Count ( ) == 0 )
1147+ return ; // no assets in this locale
1148+
1149+ foreach ( Asset asset in assets )
1150+ {
1151+ // Root-level locale (when API returns it)
1152+ var rootLocale = asset . Get ( "locale" ) ;
1153+ if ( rootLocale != null )
1154+ Assert . Equal ( locale , rootLocale . ToString ( ) ) ;
1155+
1156+ // Or via publish_details (existing pattern from FetchAssetsPublishWithoutFallback)
1157+ var publishDetails = asset . Get ( "publish_details" ) as JObject ;
1158+ if ( publishDetails != null && publishDetails [ "locale" ] != null )
1159+ Assert . Equal ( locale , publishDetails [ "locale" ] ? . ToString ( ) ) ;
1160+ }
1161+ }
1162+
1163+ /// <summary>
1164+ /// Asset localisation: Fetch single asset with locale query param; response has requested locale.
1165+ /// </summary>
1166+ [ Fact ]
1167+ public async Task FetchSingleAssetWithLocale_ReturnsLocalisedAsset ( )
1168+ {
1169+ string uid = await FetchAssetUID ( ) ;
1170+ var locale = "en-us" ;
1171+
1172+ Asset asset = await client . Asset ( uid ) . AddParam ( "locale" , locale ) . Fetch ( ) ;
1173+
1174+ Assert . NotNull ( asset ) ;
1175+ Assert . NotNull ( asset . Uid ) ;
1176+ var publishDetails = asset . Get ( "publish_details" ) as JObject ;
1177+ if ( publishDetails != null && publishDetails [ "locale" ] != null )
1178+ Assert . Equal ( locale , publishDetails [ "locale" ] ? . ToString ( ) ) ;
1179+ var rootLocale = asset . Get ( "locale" ) ;
1180+ if ( rootLocale != null )
1181+ Assert . Equal ( locale , rootLocale . ToString ( ) ) ;
1182+ }
1183+
1184+ /// <summary>
1185+ /// Asset localisation: List assets with SetLocale("ar"); each asset has locale in response.
1186+ /// </summary>
1187+ [ Fact ]
1188+ public async Task FetchAssetsWithLocaleAr_ReturnsAssetsWithLocale ( )
1189+ {
1190+ ContentstackCollection < Asset > assets = await client . AssetLibrary ( )
1191+ . SetLocale ( "en-us" )
1192+ . Limit ( 10 )
1193+ . FetchAll ( ) ;
1194+
1195+ Assert . NotNull ( assets . Items ) ;
1196+ if ( assets . Items . Count ( ) == 0 )
1197+ return ; // stack may not have assets in "ar"
1198+
1199+ foreach ( Asset asset in assets )
1200+ {
1201+ var publishDetails = asset . Get ( "publish_details" ) as JObject ;
1202+ if ( publishDetails != null && publishDetails [ "locale" ] != null )
1203+ Assert . Equal ( "en-us" , publishDetails [ "locale" ] ? . ToString ( ) ) ;
1204+ var rootLocale = asset . Get ( "locale" ) ;
1205+ if ( rootLocale != null )
1206+ Assert . Equal ( "en-us" , rootLocale . ToString ( ) ) ;
1207+ }
1208+ }
1209+
1210+ /// <summary>
1211+ /// Asset localisation: SetLocale with IncludeFallback returns assets; locale in publish_details.
1212+ /// </summary>
1213+ [ Fact ]
1214+ public async Task FetchAssetsWithLocaleAndFallback_ReturnsLocalisedOrFallback ( )
1215+ {
1216+ var locale = "en-us" ;
1217+ ContentstackCollection < Asset > assets = await client . AssetLibrary ( )
1218+ . SetLocale ( locale )
1219+ . IncludeFallback ( )
1220+ . Limit ( 10 )
1221+ . FetchAll ( ) ;
1222+
1223+ Assert . NotNull ( assets . Items ) ;
1224+ if ( assets . Items . Count ( ) == 0 )
1225+ return ;
1226+
1227+ foreach ( Asset asset in assets )
1228+ {
1229+ var publishDetails = asset . Get ( "publish_details" ) as JObject ;
1230+ Assert . NotNull ( publishDetails ) ;
1231+ Assert . NotNull ( publishDetails [ "locale" ] ) ;
1232+ }
1233+ }
1234+
1235+ /// <summary>
1236+ /// Asset localisation: Single asset fetch using Asset.SetLocale returns localised asset.
1237+ /// </summary>
1238+ [ Fact ]
1239+ public async Task FetchSingleAssetWithSetLocale_ReturnsLocalisedAsset ( )
1240+ {
1241+ string uid = await FetchAssetUID ( ) ;
1242+ var locale = "en-us" ;
1243+
1244+ Asset asset = await client . Asset ( uid ) . SetLocale ( locale ) . Fetch ( ) ;
1245+
1246+ Assert . NotNull ( asset ) ;
1247+ Assert . NotNull ( asset . Uid ) ;
1248+ var publishDetails = asset . Get ( "publish_details" ) as JObject ;
1249+ if ( publishDetails != null && publishDetails [ "locale" ] != null )
1250+ Assert . Equal ( locale , publishDetails [ "locale" ] ? . ToString ( ) ) ;
1251+ var rootLocale = asset . Get ( "locale" ) ;
1252+ if ( rootLocale != null )
1253+ Assert . Equal ( locale , rootLocale . ToString ( ) ) ;
1254+ }
11361255 }
11371256}
0 commit comments