Skip to content

Commit 6d50399

Browse files
committed
Fixed: resource fields are never required in response objects (sparse fieldsets may exclude them)
1 parent fab05c8 commit 6d50399

File tree

10 files changed

+2
-96
lines changed

10 files changed

+2
-96
lines changed

src/JsonApiDotNetCore.OpenApi/SwaggerComponents/ResourceFieldObjectSchemaBuilder.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,8 @@ private Type GetRepresentedTypeForAttributeSchema(AttrAttribute attribute)
145145

146146
private bool IsFieldRequired(ResourceFieldAttribute field)
147147
{
148-
bool isSchemaForUpdateResourceEndpoint = _resourceTypeInfo.ResourceObjectOpenType == typeof(ResourceObjectInPatchRequest<>);
149-
150-
return !isSchemaForUpdateResourceEndpoint && _resourceFieldValidationMetadataProvider.IsRequired(field);
148+
bool isSchemaForPostResourceRequest = _resourceTypeInfo.ResourceObjectOpenType == typeof(ResourceObjectInPostRequest<>);
149+
return isSchemaForPostResourceRequest && _resourceFieldValidationMetadataProvider.IsRequired(field);
151150
}
152151

153152
public void SetMembersOfRelationshipsObject(OpenApiSchema fullSchemaForRelationshipsObject)

test/OpenApiClientTests/LegacyClient/swagger.g.json

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2425,9 +2425,6 @@
24252425
"additionalProperties": false
24262426
},
24272427
"airplane-attributes-in-response": {
2428-
"required": [
2429-
"name"
2430-
],
24312428
"type": "object",
24322429
"properties": {
24332430
"name": {
@@ -2781,10 +2778,6 @@
27812778
"additionalProperties": false
27822779
},
27832780
"flight-attendant-attributes-in-response": {
2784-
"required": [
2785-
"email-address",
2786-
"profile-image-url"
2787-
],
27882781
"type": "object",
27892782
"properties": {
27902783
"email-address": {
@@ -3236,10 +3229,6 @@
32363229
"additionalProperties": false
32373230
},
32383231
"flight-attributes-in-response": {
3239-
"required": [
3240-
"final-destination",
3241-
"services-on-board"
3242-
],
32433232
"type": "object",
32443233
"properties": {
32453234
"final-destination": {
@@ -3610,9 +3599,6 @@
36103599
"additionalProperties": false
36113600
},
36123601
"flight-relationships-in-response": {
3613-
"required": [
3614-
"purser"
3615-
],
36163602
"type": "object",
36173603
"properties": {
36183604
"cabin-crew-members": {

test/OpenApiClientTests/NamingConventions/CamelCase/swagger.g.json

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,9 +1132,6 @@
11321132
"additionalProperties": false
11331133
},
11341134
"staffMemberAttributesInResponse": {
1135-
"required": [
1136-
"name"
1137-
],
11381135
"type": "object",
11391136
"properties": {
11401137
"name": {
@@ -1388,9 +1385,6 @@
13881385
"additionalProperties": false
13891386
},
13901387
"supermarketAttributesInResponse": {
1391-
"required": [
1392-
"nameOfCity"
1393-
],
13941388
"type": "object",
13951389
"properties": {
13961390
"nameOfCity": {
@@ -1677,9 +1671,6 @@
16771671
"additionalProperties": false
16781672
},
16791673
"supermarketRelationshipsInResponse": {
1680-
"required": [
1681-
"storeManager"
1682-
],
16831674
"type": "object",
16841675
"properties": {
16851676
"storeManager": {

test/OpenApiClientTests/NamingConventions/KebabCase/swagger.g.json

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,9 +1132,6 @@
11321132
"additionalProperties": false
11331133
},
11341134
"staff-member-attributes-in-response": {
1135-
"required": [
1136-
"name"
1137-
],
11381135
"type": "object",
11391136
"properties": {
11401137
"name": {
@@ -1388,9 +1385,6 @@
13881385
"additionalProperties": false
13891386
},
13901387
"supermarket-attributes-in-response": {
1391-
"required": [
1392-
"name-of-city"
1393-
],
13941388
"type": "object",
13951389
"properties": {
13961390
"name-of-city": {
@@ -1677,9 +1671,6 @@
16771671
"additionalProperties": false
16781672
},
16791673
"supermarket-relationships-in-response": {
1680-
"required": [
1681-
"store-manager"
1682-
],
16831674
"type": "object",
16841675
"properties": {
16851676
"store-manager": {

test/OpenApiClientTests/NamingConventions/PascalCase/swagger.g.json

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,9 +1132,6 @@
11321132
"additionalProperties": false
11331133
},
11341134
"StaffMemberAttributesInResponse": {
1135-
"required": [
1136-
"Name"
1137-
],
11381135
"type": "object",
11391136
"properties": {
11401137
"Name": {
@@ -1388,9 +1385,6 @@
13881385
"additionalProperties": false
13891386
},
13901387
"SupermarketAttributesInResponse": {
1391-
"required": [
1392-
"NameOfCity"
1393-
],
13941388
"type": "object",
13951389
"properties": {
13961390
"NameOfCity": {
@@ -1677,9 +1671,6 @@
16771671
"additionalProperties": false
16781672
},
16791673
"SupermarketRelationshipsInResponse": {
1680-
"required": [
1681-
"StoreManager"
1682-
],
16831674
"type": "object",
16841675
"properties": {
16851676
"StoreManager": {

test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOff/ModelStateValidationOff/swagger.g.json

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1572,11 +1572,6 @@
15721572
"additionalProperties": false
15731573
},
15741574
"resourceAttributesInResponse": {
1575-
"required": [
1576-
"requiredNullableValueType",
1577-
"requiredReferenceType",
1578-
"requiredValueType"
1579-
],
15801575
"type": "object",
15811576
"properties": {
15821577
"referenceType": {
@@ -1881,10 +1876,6 @@
18811876
"additionalProperties": false
18821877
},
18831878
"resourceRelationshipsInResponse": {
1884-
"required": [
1885-
"requiredToMany",
1886-
"requiredToOne"
1887-
],
18881879
"type": "object",
18891880
"properties": {
18901881
"toOne": {

test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOff/ModelStateValidationOn/swagger.g.json

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1623,10 +1623,6 @@
16231623
"additionalProperties": false
16241624
},
16251625
"resourceAttributesInResponse": {
1626-
"required": [
1627-
"requiredNullableValueType",
1628-
"requiredReferenceType"
1629-
],
16301626
"type": "object",
16311627
"properties": {
16321628
"referenceType": {
@@ -1928,9 +1924,6 @@
19281924
"additionalProperties": false
19291925
},
19301926
"resourceRelationshipsInResponse": {
1931-
"required": [
1932-
"requiredToOne"
1933-
],
19341927
"type": "object",
19351928
"properties": {
19361929
"toOne": {

test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOn/ModelStateValidationOff/swagger.g.json

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1993,12 +1993,6 @@
19931993
"additionalProperties": false
19941994
},
19951995
"resourceAttributesInResponse": {
1996-
"required": [
1997-
"requiredNonNullableReferenceType",
1998-
"requiredNullableReferenceType",
1999-
"requiredNullableValueType",
2000-
"requiredValueType"
2001-
],
20021996
"type": "object",
20031997
"properties": {
20041998
"nonNullableReferenceType": {
@@ -2339,11 +2333,6 @@
23392333
"additionalProperties": false
23402334
},
23412335
"resourceRelationshipsInResponse": {
2342-
"required": [
2343-
"requiredNonNullableToOne",
2344-
"requiredNullableToOne",
2345-
"requiredToMany"
2346-
],
23472336
"type": "object",
23482337
"properties": {
23492338
"nonNullableToOne": {

test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOn/ModelStateValidationOn/swagger.g.json

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1989,12 +1989,6 @@
19891989
"additionalProperties": false
19901990
},
19911991
"resourceAttributesInResponse": {
1992-
"required": [
1993-
"nonNullableReferenceType",
1994-
"requiredNonNullableReferenceType",
1995-
"requiredNullableReferenceType",
1996-
"requiredNullableValueType"
1997-
],
19981992
"type": "object",
19991993
"properties": {
20001994
"nonNullableReferenceType": {
@@ -2333,11 +2327,6 @@
23332327
"additionalProperties": false
23342328
},
23352329
"resourceRelationshipsInResponse": {
2336-
"required": [
2337-
"nonNullableToOne",
2338-
"requiredNonNullableToOne",
2339-
"requiredNullableToOne"
2340-
],
23412330
"type": "object",
23422331
"properties": {
23432332
"nonNullableToOne": {

test/OpenApiTests/LegacyOpenApiIntegration/swagger.json

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2425,9 +2425,6 @@
24252425
"additionalProperties": false
24262426
},
24272427
"airplane-attributes-in-response": {
2428-
"required": [
2429-
"name"
2430-
],
24312428
"type": "object",
24322429
"properties": {
24332430
"name": {
@@ -2781,10 +2778,6 @@
27812778
"additionalProperties": false
27822779
},
27832780
"flight-attendant-attributes-in-response": {
2784-
"required": [
2785-
"email-address",
2786-
"profile-image-url"
2787-
],
27882781
"type": "object",
27892782
"properties": {
27902783
"email-address": {
@@ -3236,10 +3229,6 @@
32363229
"additionalProperties": false
32373230
},
32383231
"flight-attributes-in-response": {
3239-
"required": [
3240-
"final-destination",
3241-
"services-on-board"
3242-
],
32433232
"type": "object",
32443233
"properties": {
32453234
"final-destination": {
@@ -3610,9 +3599,6 @@
36103599
"additionalProperties": false
36113600
},
36123601
"flight-relationships-in-response": {
3613-
"required": [
3614-
"purser"
3615-
],
36163602
"type": "object",
36173603
"properties": {
36183604
"cabin-crew-members": {

0 commit comments

Comments
 (0)