Skip to content

Commit cd849f0

Browse files
authored
Support optional key (#329)
1 parent 7fa591d commit cd849f0

File tree

37 files changed

+318
-57
lines changed

37 files changed

+318
-57
lines changed

swagger_parser/lib/src/parser/parser/open_api_parser.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -676,8 +676,16 @@ class OpenApiParser {
676676
final imports = <String>{};
677677

678678
var requiredParameters = <String>[];
679+
var hasAllOfKey = false;
679680
if (map case {_requiredConst: final List<dynamic> rawParameters}) {
680681
requiredParameters = rawParameters.map((e) => e.toString()).toList();
682+
} else if (map case {_propertiesConst: final Map<String, dynamic> props}) {
683+
for (final propertyName in props.keys) {
684+
final propertyValue = props[propertyName] as Map<String, dynamic>;
685+
if (propertyValue.containsKey(_allOfConst)) {
686+
hasAllOfKey = true;
687+
}
688+
}
681689
}
682690

683691
if (map case {_propertiesConst: final Map<String, dynamic> props}) {
@@ -687,6 +695,7 @@ class OpenApiParser {
687695
// OpenAPI 2.0 nullable value
688696
isNullable =
689697
isNullable ?? propertyValue[_xNullableConst].toString().toBool();
698+
final hasDefaultKey = propertyValue.containsKey(_defaultConst);
690699

691700
isNullable = isNullable ??
692701
switch (propertyValue) {
@@ -709,7 +718,7 @@ class OpenApiParser {
709718
additionalName: additionalName,
710719
isRequired: (_apiInfo.schemaVersion == OAS.v2 && !config.useXNullable)
711720
? isRequired
712-
: isRequired || !isNullable,
721+
: isRequired || hasAllOfKey || hasDefaultKey,
713722
);
714723

715724
var validation = propertyValue;

swagger_parser/test/e2e/e2e_test.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,19 @@ void main() {
117117
schemaFileName: 'swagger.yaml',
118118
);
119119
});
120+
121+
test('no_required_params', () async {
122+
await e2eTest(
123+
'no_required_params',
124+
(outputDirectory, schemaPath) => SWPConfig(
125+
outputDirectory: outputDirectory,
126+
schemaPath: schemaPath,
127+
jsonSerializer: JsonSerializer.freezed,
128+
putClientsInFolder: true,
129+
),
130+
schemaFileName: 'openapi.yaml',
131+
);
132+
});
120133
});
121134

122135
group('basic', () {

swagger_parser/test/e2e/tests/basic/additional_properties_class.3.0/additional_properties_class.3.0.json

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@
1414
"type": "object"
1515
}
1616
}
17-
}
17+
},
18+
"required": [
19+
"data"
20+
]
1821
},
1922
"ExampleParsable": {
2023
"type": "object",
@@ -27,7 +30,10 @@
2730
"$ref": "#/definitions/Example"
2831
}
2932
}
30-
}
33+
},
34+
"required": [
35+
"data"
36+
]
3137
}
3238
}
3339
}

swagger_parser/test/e2e/tests/basic/basic_requests.2.0/basic_requests.2.0.json

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,12 @@
128128
"type": "string"
129129
}
130130
},
131-
"additionalProperties": false
131+
"additionalProperties": false,
132+
"required": [
133+
"email",
134+
"name",
135+
"password"
136+
]
132137
},
133138
"UserInfoDto": {
134139
"type": "object",
@@ -143,7 +148,12 @@
143148
"type": "string"
144149
}
145150
},
146-
"additionalProperties": false
151+
"additionalProperties": false,
152+
"required": [
153+
"email",
154+
"name",
155+
"phone"
156+
]
147157
}
148158
}
149159
}

swagger_parser/test/e2e/tests/basic/basic_requests.3.0/basic_requests.3.0.json

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,12 @@
120120
"password": {
121121
"type": "string"
122122
}
123-
}
123+
},
124+
"required": [
125+
"email",
126+
"name",
127+
"password"
128+
]
124129
}
125130
]
126131
},
@@ -138,10 +143,15 @@
138143
"phone": {
139144
"type": "string"
140145
}
141-
}
146+
},
147+
"required": [
148+
"email",
149+
"name",
150+
"phone"
151+
]
142152
}
143153
]
144154
}
145155
}
146156
}
147-
}
157+
}

swagger_parser/test/e2e/tests/basic/basic_types_class.2.0/basic_types_class.2.0.json

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,23 @@
6464
}
6565
}
6666
}
67-
}
67+
},
68+
"required": [
69+
"integer1",
70+
"float1",
71+
"double1",
72+
"string1",
73+
"number1",
74+
"string2",
75+
"string3",
76+
"string4",
77+
"string5",
78+
"file1",
79+
"bool1",
80+
"object1",
81+
"array1",
82+
"array2"
83+
]
6884
}
6985
}
7086
}

swagger_parser/test/e2e/tests/basic/basic_types_class.3.0/basic_types_class.3.0.json

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,25 @@
7373
"type": "array",
7474
"default": []
7575
}
76-
}
76+
},
77+
"required": [
78+
"integer1",
79+
"float1",
80+
"double1",
81+
"string1",
82+
"number1",
83+
"string2",
84+
"string3",
85+
"string4",
86+
"string5",
87+
"file1",
88+
"bool1",
89+
"object1",
90+
"array1",
91+
"array2",
92+
"arrayWithDefault"
93+
]
7794
}
7895
}
7996
}
80-
}
97+
}

swagger_parser/test/e2e/tests/basic/discriminated_one_of.3.0/discriminated_one_of.3.0.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@
3434
}
3535
}
3636
}
37-
}
37+
},
38+
"required": [
39+
"members"
40+
]
3841
},
3942
"Cat": {
4043
"type": "object",

swagger_parser/test/e2e/tests/basic/discriminated_one_of.3.0_mappable/discriminated_one_of.3.0.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@
3434
}
3535
}
3636
}
37-
}
37+
},
38+
"required": [
39+
"members"
40+
]
3841
},
3942
"Cat": {
4043
"type": "object",
@@ -140,4 +143,4 @@
140143
}
141144
}
142145
}
143-
}
146+
}

swagger_parser/test/e2e/tests/basic/enum_class/enum_class.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,11 @@
2121
},
2222
"collectionFormat": "multi"
2323
}
24-
}
24+
},
25+
"required": [
26+
"status"
27+
]
2528
}
2629
}
2730
}
28-
}
31+
}

0 commit comments

Comments
 (0)