Skip to content

Commit a72c2e7

Browse files
committed
Organise tests such that they map directly to the tables in #1231 and #1111
1 parent d4f1d69 commit a72c2e7

38 files changed

+3007
-2597
lines changed

test/OpenApiClientTests/FakeHttpClientWrapper.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Net;
22
using System.Net.Http.Headers;
33
using System.Text;
4+
using System.Text.Json;
45
using JsonApiDotNetCore.OpenApi.Client;
56

67
namespace OpenApiClientTests;
@@ -22,6 +23,17 @@ private FakeHttpClientWrapper(HttpClient httpClient, FakeHttpMessageHandler hand
2223
_handler = handler;
2324
}
2425

26+
public JsonElement ParseRequestBody()
27+
{
28+
if (RequestBody == null)
29+
{
30+
throw new InvalidOperationException();
31+
}
32+
33+
using JsonDocument jsonDocument = JsonDocument.Parse(RequestBody);
34+
return jsonDocument.RootElement.Clone();
35+
}
36+
2537
public static FakeHttpClientWrapper Create(HttpStatusCode statusCode, string? responseBody)
2638
{
2739
HttpResponseMessage response = CreateResponse(statusCode, responseBody);
@@ -102,3 +114,5 @@ protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage reques
102114
}
103115
}
104116
}
117+
118+

test/OpenApiClientTests/ObjectExtensions.cs

Lines changed: 0 additions & 20 deletions
This file was deleted.

test/OpenApiClientTests/OpenApiClientTests.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,15 @@
5252
<CodeGenerator>NSwagCSharp</CodeGenerator>
5353
<Options>/UseBaseUrl:false /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client.Exceptions</Options>
5454
</OpenApiReference>
55-
<OpenApiReference Include="SchemaProperties\NullableReferenceTypesEnabled\swagger.g.json">
56-
<Namespace>OpenApiClientTests.SchemaProperties.NullableReferenceTypesEnabled.GeneratedCode</Namespace>
55+
<OpenApiReference Include="ResourceFieldsValidation\NullableReferenceTypesEnabled\swagger.g.json">
56+
<Namespace>OpenApiClientTests.ResourceFieldsValidation.NullableReferenceTypesEnabled.GeneratedCode</Namespace>
5757
<ClassName>NullableReferenceTypesEnabledClient</ClassName>
5858
<OutputPath>NullableReferenceTypesEnabledClient.cs</OutputPath>
5959
<CodeGenerator>NSwagCSharp</CodeGenerator>
6060
<Options>/UseBaseUrl:false /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client.Exceptions /GenerateNullableReferenceTypes:true</Options>
6161
</OpenApiReference>
62-
<OpenApiReference Include="SchemaProperties\NullableReferenceTypesDisabled\swagger.g.json">
63-
<Namespace>OpenApiClientTests.SchemaProperties.NullableReferenceTypesDisabled.GeneratedCode</Namespace>
62+
<OpenApiReference Include="ResourceFieldsValidation\NullableReferenceTypesDisabled\swagger.g.json">
63+
<Namespace>OpenApiClientTests.ResourceFieldsValidation.NullableReferenceTypesDisabled.GeneratedCode</Namespace>
6464
<ClassName>NullableReferenceTypesDisabledClient</ClassName>
6565
<OutputPath>NullableReferenceTypesDisabledClient.cs</OutputPath>
6666
<CodeGenerator>NSwagCSharp</CodeGenerator>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using JsonApiDotNetCore.OpenApi.Client;
22
using Newtonsoft.Json;
33

4-
namespace OpenApiClientTests.SchemaProperties.NullableReferenceTypesDisabled.GeneratedCode;
4+
namespace OpenApiClientTests.ResourceFieldsValidation.NullableReferenceTypesDisabled.GeneratedCode;
55

66
internal partial class NullableReferenceTypesDisabledClient : JsonApiClient
77
{

test/OpenApiClientTests/SchemaProperties/NullableReferenceTypesDisabled/NullabilityTests.cs renamed to test/OpenApiClientTests/ResourceFieldsValidation/NullableReferenceTypesDisabled/NullabilityTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
using System.Reflection;
22
using FluentAssertions;
3-
using OpenApiClientTests.SchemaProperties.NullableReferenceTypesDisabled.GeneratedCode;
3+
using OpenApiClientTests.ResourceFieldsValidation.NullableReferenceTypesDisabled.GeneratedCode;
44
using Xunit;
55

6-
namespace OpenApiClientTests.SchemaProperties.NullableReferenceTypesDisabled;
6+
namespace OpenApiClientTests.ResourceFieldsValidation.NullableReferenceTypesDisabled;
77

88
public sealed class NullabilityTests
99
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
using Bogus;
2+
using OpenApiClientTests.ResourceFieldsValidation.NullableReferenceTypesDisabled.GeneratedCode;
3+
4+
5+
namespace OpenApiClientTests.ResourceFieldsValidation.NullableReferenceTypesDisabled;
6+
7+
// @formatter:wrap_chained_method_calls chop_always
8+
// @formatter:keep_existing_linebreaks true
9+
10+
internal sealed class NullableReferenceTypesDisabledFaker
11+
{
12+
private readonly Lazy<Faker<HenHousePostRequestDocument>> _lazyHenHousePostRequestDocumentFaker;
13+
private readonly Lazy<Faker<HenHousePatchRequestDocument>> _lazyHenHousePatchRequestDocumentFaker;
14+
15+
private readonly Lazy<Faker<ChickenPostRequestDocument>> _lazyChickenPostRequestDocumentFaker = new(() =>
16+
{
17+
Faker<ChickenAttributesInPostRequest> attributesInPostRequestFaker = new Faker<ChickenAttributesInPostRequest>()
18+
.RuleFor(attributes => attributes.Name, faker => faker.Name.FirstName())
19+
.RuleFor(attributes => attributes.NameOfCurrentFarm, faker => faker.Company.CompanyName())
20+
.RuleFor(attributes => attributes.Age, faker => faker.Random.Int(1, 20))
21+
.RuleFor(attributes => attributes.Weight, faker => faker.Random.Int(20, 50))
22+
.RuleFor(attributes => attributes.TimeAtCurrentFarmInDays, faker => faker.Random.Int(1, 356))
23+
.RuleFor(attributes => attributes.HasProducedEggs, _ => true);
24+
25+
Faker<ChickenDataInPostRequest> dataInPostRequestFaker = new Faker<ChickenDataInPostRequest>()
26+
.RuleFor(data => data.Attributes, _ => attributesInPostRequestFaker.Generate());
27+
28+
return new Faker<ChickenPostRequestDocument>()
29+
.RuleFor(document => document.Data, _ => dataInPostRequestFaker.Generate());
30+
});
31+
32+
private readonly Lazy<Faker<ChickenPatchRequestDocument>> _lazyChickenPatchRequestDocumentFaker = new(() =>
33+
{
34+
Faker<ChickenAttributesInPatchRequest> attributesInPatchRequestFaker = new Faker<ChickenAttributesInPatchRequest>()
35+
.RuleFor(attributes => attributes.Name, faker => faker.Name.FirstName())
36+
.RuleFor(attributes => attributes.NameOfCurrentFarm, faker => faker.Company.CompanyName())
37+
.RuleFor(attributes => attributes.Age, faker => faker.Random.Int(1, 20))
38+
.RuleFor(attributes => attributes.Weight, faker => faker.Random.Int(20, 50))
39+
.RuleFor(attributes => attributes.TimeAtCurrentFarmInDays, faker => faker.Random.Int(1, 356))
40+
.RuleFor(attributes => attributes.HasProducedEggs, _ => true);
41+
42+
Faker<ChickenDataInPatchRequest> dataInPatchRequestFaker = new Faker<ChickenDataInPatchRequest>()
43+
.RuleFor(data => data.Id, faker => faker.Random.Int(1, 100)
44+
.ToString())
45+
.RuleFor(data => data.Attributes, _ => attributesInPatchRequestFaker.Generate());
46+
47+
return new Faker<ChickenPatchRequestDocument>()
48+
.RuleFor(document => document.Data, _ => dataInPatchRequestFaker.Generate());
49+
});
50+
51+
private readonly Lazy<Faker<ToOneChickenInRequest>> _lazyToOneChickenInRequestFaker = new(() =>
52+
new Faker<ToOneChickenInRequest>()
53+
.RuleFor(relationship => relationship.Data, faker => new ChickenIdentifier
54+
{
55+
// @formatter:wrap_chained_method_calls false
56+
Id = faker.Random.Int(1, 100)
57+
.ToString()
58+
}));
59+
60+
private readonly Lazy<Faker<NullableToOneChickenInRequest>> _lazyNullableToOneChickenInRequestFaker = new(() =>
61+
new Faker<NullableToOneChickenInRequest>()
62+
.RuleFor(relationship => relationship.Data, faker => new ChickenIdentifier
63+
{
64+
// @formatter:wrap_chained_method_calls
65+
Id = faker.Random.Int(1, 100)
66+
.ToString()
67+
// @formatter:wrap_chained_method_calls enable
68+
}));
69+
70+
private readonly Lazy<Faker<ToManyChickenInRequest>> _lazyToManyChickenInRequestFaker = new(() =>
71+
new Faker<ToManyChickenInRequest>()
72+
.RuleFor(relationship => relationship.Data, faker => new List<ChickenIdentifier>
73+
{
74+
new()
75+
{
76+
// @formatter:wrap_chained_method_calls disable
77+
Id = faker.Random.Int(1, 100)
78+
.ToString()
79+
// @formatter:wrap_chained_method_calls enable
80+
}
81+
}));
82+
83+
public NullableReferenceTypesDisabledFaker()
84+
{
85+
_lazyHenHousePostRequestDocumentFaker = new Lazy<Faker<HenHousePostRequestDocument>>(HenHousePostRequestDocumentFakerFactory);
86+
_lazyHenHousePatchRequestDocumentFaker = new Lazy<Faker<HenHousePatchRequestDocument>>(HenHousePatchRequestDocumentFakerFactory);
87+
}
88+
89+
private Faker<HenHousePostRequestDocument> HenHousePostRequestDocumentFakerFactory()
90+
{
91+
Faker<HenHouseRelationshipsInPostRequest> relationshipsInPostRequestFaker = new Faker<HenHouseRelationshipsInPostRequest>()
92+
.RuleFor(relationships => relationships.OldestChicken, _ => _lazyNullableToOneChickenInRequestFaker.Value.Generate())
93+
.RuleFor(relationships => relationships.FirstChicken, _ => _lazyToOneChickenInRequestFaker.Value.Generate())
94+
.RuleFor(relationships => relationships.ChickensReadyForLaying, _ => _lazyToManyChickenInRequestFaker.Value.Generate())
95+
.RuleFor(relationships => relationships.AllChickens, _ => _lazyToManyChickenInRequestFaker.Value.Generate());
96+
97+
98+
Faker<HenHouseDataInPostRequest> dataInPostRequestFaker = new Faker<HenHouseDataInPostRequest>()
99+
.RuleFor(data => data.Relationships, _ => relationshipsInPostRequestFaker.Generate());
100+
101+
return new Faker<HenHousePostRequestDocument>()
102+
.RuleFor(document => document.Data, _ => dataInPostRequestFaker.Generate());
103+
}
104+
105+
private Faker<HenHousePatchRequestDocument> HenHousePatchRequestDocumentFakerFactory()
106+
{
107+
Faker<HenHouseRelationshipsInPatchRequest> relationshipsInPatchRequestFaker = new Faker<HenHouseRelationshipsInPatchRequest>()
108+
.RuleFor(relationships => relationships.OldestChicken, _ => _lazyNullableToOneChickenInRequestFaker.Value.Generate())
109+
.RuleFor(relationships => relationships.FirstChicken, _ => _lazyToOneChickenInRequestFaker.Value.Generate())
110+
.RuleFor(relationships => relationships.ChickensReadyForLaying, _ => _lazyToManyChickenInRequestFaker.Value.Generate())
111+
.RuleFor(relationships => relationships.AllChickens, _ => _lazyToManyChickenInRequestFaker.Value.Generate());
112+
113+
Faker<HenHouseDataInPatchRequest> dataInPatchRequestFaker = new Faker<HenHouseDataInPatchRequest>()
114+
.RuleFor(data => data.Id, faker => faker.Random.Int(1, 100)
115+
.ToString())
116+
.RuleFor(data => data.Relationships, _ => relationshipsInPatchRequestFaker.Generate());
117+
118+
return new Faker<HenHousePatchRequestDocument>()
119+
.RuleFor(document => document.Data, _ => dataInPatchRequestFaker.Generate());
120+
}
121+
122+
public Faker<ChickenPostRequestDocument> ChickenPostRequestDocument => _lazyChickenPostRequestDocumentFaker.Value;
123+
public Faker<ChickenPatchRequestDocument> ChickenPatchRequestDocument => _lazyChickenPatchRequestDocumentFaker.Value;
124+
public Faker<HenHousePostRequestDocument> HenHousePostRequestDocument => _lazyHenHousePostRequestDocumentFaker.Value;
125+
public Faker<HenHousePatchRequestDocument> HenHousePatchRequestDocument => _lazyHenHousePatchRequestDocumentFaker.Value;
126+
}

0 commit comments

Comments
 (0)