1
+ using System . Globalization ;
1
2
using FluentAssertions ;
2
3
using JsonApiDotNetCore . OpenApi . Client . NSwag ;
3
4
using OpenApiNSwagEndToEndTests . ModelStateValidation . GeneratedCode ;
@@ -200,7 +201,7 @@ public async Task Cannot_use_invalid_credit_card_number()
200
201
}
201
202
202
203
[ Fact ]
203
- public async Task Cannot_use_invalid_email ( )
204
+ public async Task Cannot_use_invalid_email_address ( )
204
205
{
205
206
// Arrange
206
207
SocialMediaAccount socialMediaAccount = _fakers . SocialMediaAccount . Generate ( ) ;
@@ -426,7 +427,7 @@ public async Task Cannot_use_TimeSpan_outside_of_valid_range()
426
427
Attributes = new SocialMediaAccountAttributesInPostRequest
427
428
{
428
429
LastName = socialMediaAccount . LastName ,
429
- NextRevalidation = "00:00:01" ,
430
+ NextRevalidation = TimeSpan . FromSeconds ( 1 ) . ToString ( )
430
431
}
431
432
}
432
433
} ;
@@ -443,6 +444,40 @@ public async Task Cannot_use_TimeSpan_outside_of_valid_range()
443
444
errorObject . Source . Pointer . Should ( ) . Be ( "/data/attributes/nextRevalidation" ) ;
444
445
}
445
446
447
+ [ Fact ]
448
+ public async Task Cannot_use_culture_sensitive_TimeSpan ( )
449
+ {
450
+ // Arrange
451
+ SocialMediaAccount socialMediaAccount = _fakers . SocialMediaAccount . Generate ( ) ;
452
+
453
+ using HttpClient httpClient = _testContext . Factory . CreateDefaultClient ( _logHttpMessageHandler ) ;
454
+ ModelStateValidationClient apiClient = new ( httpClient ) ;
455
+
456
+ // Act
457
+ SocialMediaAccountPostRequestDocument requestBody = new ( )
458
+ {
459
+ Data = new SocialMediaAccountDataInPostRequest
460
+ {
461
+ Attributes = new SocialMediaAccountAttributesInPostRequest
462
+ {
463
+ LastName = socialMediaAccount . LastName ,
464
+ NextRevalidation = new TimeSpan ( 0 , 2 , 0 , 0 , 1 ) . ToString ( "g" , new CultureInfo ( "fr-FR" ) )
465
+ }
466
+ }
467
+ } ;
468
+ Func < Task < SocialMediaAccountPrimaryResponseDocument > > action = ( ) => apiClient . PostSocialMediaAccountAsync ( requestBody ) ;
469
+
470
+ // Assert
471
+ ErrorResponseDocument document = ( await action . Should ( ) . ThrowExactlyAsync < ApiException < ErrorResponseDocument > > ( ) ) . Which . Result ;
472
+ document . Errors . ShouldHaveCount ( 1 ) ;
473
+
474
+ ErrorObject errorObject = document . Errors . First ( ) ;
475
+ errorObject . Title . Should ( ) . Be ( "Failed to deserialize request body: Incompatible attribute value found." ) ;
476
+ errorObject . Detail . Should ( ) . Be ( "Failed to convert attribute 'nextRevalidation' with value '2:00:00,001' of type 'String' to type 'Nullable<TimeSpan>'." ) ;
477
+ errorObject . Source . ShouldNotBeNull ( ) ;
478
+ errorObject . Source . Pointer . Should ( ) . Be ( "/data/attributes/nextRevalidation" ) ;
479
+ }
480
+
446
481
[ Fact ]
447
482
public async Task Cannot_use_invalid_TimeOnly ( )
448
483
{
0 commit comments