Skip to content

Commit 0b7976b

Browse files
committed
stuff
1 parent 3dd960e commit 0b7976b

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

test/OpenApiNSwagEndToEndTests/ModelStateValidation/ModelStateValidationTests.cs

+37-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Globalization;
12
using FluentAssertions;
23
using JsonApiDotNetCore.OpenApi.Client.NSwag;
34
using OpenApiNSwagEndToEndTests.ModelStateValidation.GeneratedCode;
@@ -200,7 +201,7 @@ public async Task Cannot_use_invalid_credit_card_number()
200201
}
201202

202203
[Fact]
203-
public async Task Cannot_use_invalid_email()
204+
public async Task Cannot_use_invalid_email_address()
204205
{
205206
// Arrange
206207
SocialMediaAccount socialMediaAccount = _fakers.SocialMediaAccount.Generate();
@@ -426,7 +427,7 @@ public async Task Cannot_use_TimeSpan_outside_of_valid_range()
426427
Attributes = new SocialMediaAccountAttributesInPostRequest
427428
{
428429
LastName = socialMediaAccount.LastName,
429-
NextRevalidation = "00:00:01",
430+
NextRevalidation = TimeSpan.FromSeconds(1).ToString()
430431
}
431432
}
432433
};
@@ -443,6 +444,40 @@ public async Task Cannot_use_TimeSpan_outside_of_valid_range()
443444
errorObject.Source.Pointer.Should().Be("/data/attributes/nextRevalidation");
444445
}
445446

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+
446481
[Fact]
447482
public async Task Cannot_use_invalid_TimeOnly()
448483
{

test/OpenApiTests/ModelStateValidation/ModelStateValidationFakers.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@ public sealed class ModelStateValidationFakers
1616
.RuleFor(socialMediaAccount => socialMediaAccount.FirstName, faker => faker.Person.FirstName)
1717
.RuleFor(socialMediaAccount => socialMediaAccount.GivenName, (_, socialMediaAccount) => socialMediaAccount.FirstName)
1818
.RuleFor(socialMediaAccount => socialMediaAccount.LastName, faker => faker.Person.LastName)
19-
.RuleFor(socialMediaAccount => socialMediaAccount.UserName, faker => faker.Person.UserName)
19+
.RuleFor(socialMediaAccount => socialMediaAccount.UserName, faker => faker.Random.String2(3, 18))
2020
.RuleFor(socialMediaAccount => socialMediaAccount.CreditCard, faker => faker.Finance.CreditCardNumber())
2121
.RuleFor(socialMediaAccount => socialMediaAccount.Email, faker => faker.Person.Email)
22-
.RuleFor(socialMediaAccount => socialMediaAccount.Password, faker => faker.Random.String2(8, 32))
2322
.RuleFor(socialMediaAccount => socialMediaAccount.Password, faker => Convert.ToBase64String(faker.Random.Bytes(20)))
2423
.RuleFor(socialMediaAccount => socialMediaAccount.Phone, faker => faker.Person.Phone)
2524
.RuleFor(socialMediaAccount => socialMediaAccount.Age, faker => faker.Random.Double(0.1, 122.9))

0 commit comments

Comments
 (0)