Skip to content

Commit 82767cd

Browse files
Bugfix#383 - remove check for existence of discriminator property in the required field list
1 parent fcd74c4 commit 82767cd

File tree

5 files changed

+1
-184
lines changed

5 files changed

+1
-184
lines changed

src/Microsoft.OpenApi/Properties/SRResource.Designer.cs

Lines changed: 0 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Microsoft.OpenApi/Properties/SRResource.resx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,6 @@
198198
<data name="Validation_ComponentsKeyMustMatchRegularExpr" xml:space="preserve">
199199
<value>The key '{0}' in '{1}' of components MUST match the regular expression '{2}'.</value>
200200
</data>
201-
<data name="Validation_CompositeSchemaRequiredFieldListMustContainThePropertySpecifiedInTheDiscriminator" xml:space="preserve">
202-
<value>Composite schema {0} must contain property specified in the discriminator {1} in the required field list.</value>
203-
</data>
204201
<data name="Validation_ExtensionNameMustBeginWithXDash" xml:space="preserve">
205202
<value>The extension name '{0}' in '{1}' object MUST begin with 'x-'.</value>
206203
</data>

src/Microsoft.OpenApi/Validations/Rules/OpenApiSchemaRules.cs

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -79,63 +79,5 @@ public static class OpenApiSchemaRules
7979

8080
context.Exit();
8181
});
82-
83-
/// <summary>
84-
/// Validates OneOf Discriminator
85-
/// </summary>
86-
public static ValidationRule<OpenApiSchema> ValidateOneOfDiscriminator =>
87-
new ValidationRule<OpenApiSchema>(
88-
(context, schema) =>
89-
{
90-
// oneOf
91-
context.Enter("oneOf");
92-
93-
if (schema.OneOf != null && schema.Discriminator != null)
94-
{
95-
ValidateSchemaListDiscriminator(context, nameof(ValidateOneOfDiscriminator),
96-
schema.OneOf, schema.Discriminator);
97-
}
98-
99-
context.Exit();
100-
});
101-
102-
// <summary>
103-
/// Validates AnyOf Discriminator
104-
/// </summary>
105-
public static ValidationRule<OpenApiSchema> ValidateAnyOfDiscriminator =>
106-
new ValidationRule<OpenApiSchema>(
107-
(context, schema) =>
108-
{
109-
// oneOf
110-
context.Enter("anyOf");
111-
112-
if (schema.AnyOf != null && schema.Discriminator != null)
113-
{
114-
ValidateSchemaListDiscriminator(context, nameof(ValidateAnyOfDiscriminator),
115-
schema.AnyOf, schema.Discriminator);
116-
}
117-
118-
context.Exit();
119-
});
120-
121-
// add more rule.
122-
123-
124-
/// <summary>
125-
/// Checks if the schemas in the list contain a required field with the property name specified by the discriminator.
126-
/// </summary>
127-
private static void ValidateSchemaListDiscriminator(IValidationContext context, string ruleName,
128-
IList<OpenApiSchema> schemas, OpenApiDiscriminator discriminator)
129-
{
130-
foreach (var schema in schemas)
131-
{
132-
if (schema.Reference != null && !schema.Required.Contains(discriminator.PropertyName))
133-
{
134-
context.CreateError(ruleName,
135-
string.Format(SRResource.Validation_CompositeSchemaRequiredFieldListMustContainThePropertySpecifiedInTheDiscriminator,
136-
schema.Reference.Id, discriminator.PropertyName));
137-
}
138-
}
139-
}
14082
}
14183
}

test/Microsoft.OpenApi.Tests/Validations/OpenApiSchemaValidationTests.cs

Lines changed: 0 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -233,118 +233,6 @@ public void ValidateDefaultShouldNotHaveDataTypeMismatchForComplexSchema()
233233
});
234234
}
235235

236-
[Fact]
237-
public void ValidateOneOfCompositeSchemaMustContainPropertySpecifiedInTheDiscriminator()
238-
{
239-
IEnumerable<OpenApiError> errors;
240-
var schema = new OpenApiSchema
241-
{
242-
Type = "object",
243-
OneOf = new List<OpenApiSchema>
244-
{
245-
new OpenApiSchema
246-
{
247-
Type = "object",
248-
Properties = {
249-
["property1"] = new OpenApiSchema() { Type = "integer", Format ="int64" },
250-
["property2"] = new OpenApiSchema() { Type = "string" }
251-
},
252-
Reference = new OpenApiReference{ Id = "schema1" }
253-
},
254-
new OpenApiSchema
255-
{
256-
Type = "object",
257-
Properties = {
258-
["property1"] = new OpenApiSchema() { Type = "integer", Format ="int64" },
259-
},
260-
Reference = new OpenApiReference{ Id = "schema2" }
261-
}
262-
},
263-
Discriminator = new OpenApiDiscriminator
264-
{
265-
PropertyName = "property2"
266-
}
267-
};
268-
269-
// Act
270-
var validator = new OpenApiValidator(ValidationRuleSet.GetDefaultRuleSet());
271-
var walker = new OpenApiWalker(validator);
272-
walker.Walk(schema);
273-
274-
errors = validator.Errors;
275-
bool result = !errors.Any();
276-
277-
// Assert
278-
result.Should().BeFalse();
279-
errors.ShouldAllBeEquivalentTo(new List<OpenApiValidatorError>
280-
{
281-
new OpenApiValidatorError(nameof(OpenApiSchemaRules.ValidateOneOfDiscriminator),"#/oneOf",
282-
string.Format(SRResource.Validation_CompositeSchemaRequiredFieldListMustContainThePropertySpecifiedInTheDiscriminator,
283-
"schema1", "property2")),
284-
285-
new OpenApiValidatorError(nameof(OpenApiSchemaRules.ValidateOneOfDiscriminator),"#/oneOf",
286-
string.Format(SRResource.Validation_CompositeSchemaRequiredFieldListMustContainThePropertySpecifiedInTheDiscriminator,
287-
"schema2", "property2")),
288-
289-
});
290-
}
291-
292-
[Fact]
293-
public void ValidateAnyOfCompositeSchemaMustContainPropertySpecifiedInTheDiscriminator()
294-
{
295-
IEnumerable<OpenApiError> errors;
296-
var schema = new OpenApiSchema
297-
{
298-
Type = "object",
299-
AnyOf = new List<OpenApiSchema>
300-
{
301-
new OpenApiSchema
302-
{
303-
Type = "object",
304-
Properties = {
305-
["property1"] = new OpenApiSchema() { Type = "integer", Format ="int64" },
306-
["property2"] = new OpenApiSchema() { Type = "string" }
307-
},
308-
Reference = new OpenApiReference{ Id = "schema1" }
309-
},
310-
new OpenApiSchema
311-
{
312-
Type = "object",
313-
Properties = {
314-
["property1"] = new OpenApiSchema() { Type = "integer", Format ="int64" },
315-
},
316-
Reference = new OpenApiReference{ Id = "schema2" }
317-
}
318-
},
319-
Discriminator = new OpenApiDiscriminator
320-
{
321-
PropertyName = "property2"
322-
}
323-
};
324-
325-
// Act
326-
var validator = new OpenApiValidator(ValidationRuleSet.GetDefaultRuleSet());
327-
var walker = new OpenApiWalker(validator);
328-
walker.Walk(schema);
329-
330-
errors = validator.Errors;
331-
bool result = !errors.Any();
332-
333-
// Assert
334-
result.Should().BeFalse();
335-
errors.ShouldAllBeEquivalentTo(new List<OpenApiValidatorError>
336-
{
337-
new OpenApiValidatorError(nameof(OpenApiSchemaRules.ValidateAnyOfDiscriminator),"#/anyOf",
338-
string.Format(SRResource.Validation_CompositeSchemaRequiredFieldListMustContainThePropertySpecifiedInTheDiscriminator,
339-
"schema1", "property2")),
340-
341-
new OpenApiValidatorError(nameof(OpenApiSchemaRules.ValidateAnyOfDiscriminator),"#/anyOf",
342-
string.Format(SRResource.Validation_CompositeSchemaRequiredFieldListMustContainThePropertySpecifiedInTheDiscriminator,
343-
"schema2", "property2")),
344-
345-
});
346-
}
347-
348236
[Fact]
349237
public void ValidateSchemaRequiredFieldListMustContainThePropertySpecifiedInTheDiscriminator()
350238
{

test/Microsoft.OpenApi.Tests/Validations/ValidationRuleSetTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public void DefaultRuleSetPropertyReturnsTheCorrectRules()
4343
Assert.NotEmpty(rules);
4444

4545
// Update the number if you add new default rule(s).
46-
Assert.Equal(23, rules.Count);
46+
Assert.Equal(21, rules.Count);
4747
}
4848
}
4949
}

0 commit comments

Comments
 (0)