Skip to content

Commit e8b46b3

Browse files
fix#375 - Addedunit tests for discriminator/required fields schema rules
1 parent d6d54e5 commit e8b46b3

File tree

4 files changed

+79
-4
lines changed

4 files changed

+79
-4
lines changed

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

Lines changed: 1 addition & 1 deletion
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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@
220220
<value>Schema {0} must contain property specified in the discriminator {1}.</value>
221221
</data>
222222
<data name="Validation_SchemaMustContainPropertySpecifiedInTheRequiredField" xml:space="preserve">
223-
<value>Schema {0} must contain property specified in the required field {0}.</value>
223+
<value>Schema {0} must contain property specified in the required field {1}.</value>
224224
</data>
225225
<data name="Validation_SchemaRequiredFieldListMustContainThePropertySpecifiedInTheDiscriminator" xml:space="preserve">
226226
<value>Schema {0} must contain property specified in the discriminator {1} in the required field list.</value>

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ public static class OpenApiSchemaRules
7373
{
7474
if (!schema.Properties.ContainsKey(requiredField))
7575
{
76-
context.CreateError(nameof(ValidateSchemaDiscriminator),
76+
context.CreateError(nameof(ValidateSchemaRequiredFields),
7777
string.Format(SRResource.Validation_SchemaMustContainPropertySpecifiedInTheRequiredField,
78-
requiredField));
78+
schema.Reference.Id, requiredField));
7979
}
8080
}
8181
}

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

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,5 +352,80 @@ public void ValidateAnyOfCompositeSchemaMustContainPropertySpecifiedInTheDiscrim
352352

353353
});
354354
}
355+
356+
[Fact]
357+
public void ValidateSchemaMustContainPropertySpecifiedInTheRequiredFieldList()
358+
{
359+
IEnumerable<OpenApiError> errors;
360+
var components = new OpenApiComponents
361+
{
362+
Schemas = {
363+
{
364+
"schema1",
365+
new OpenApiSchema
366+
{
367+
Type = "object",
368+
Required = { "property1" },
369+
Reference = new OpenApiReference { Id = "schema1" }
370+
}
371+
}
372+
}
373+
};
374+
// Act
375+
var validator = new OpenApiValidator(ValidationRuleSet.GetDefaultRuleSet());
376+
var walker = new OpenApiWalker(validator);
377+
walker.Walk(components);
378+
379+
errors = validator.Errors;
380+
bool result = !errors.Any();
381+
382+
// Assert
383+
result.Should().BeFalse();
384+
errors.ShouldAllBeEquivalentTo(new List<OpenApiValidatorError>
385+
{
386+
new OpenApiValidatorError(nameof(OpenApiSchemaRules.ValidateSchemaRequiredFields),"#/schemas/schema1/required",
387+
string.Format(SRResource.Validation_SchemaMustContainPropertySpecifiedInTheRequiredField,
388+
"schema1", "property1")),
389+
});
390+
}
391+
392+
[Fact]
393+
public void ValidateSchemaMustContainPropertySpecifiedInTheDiscriminator()
394+
{
395+
IEnumerable<OpenApiError> errors;
396+
var components = new OpenApiComponents
397+
{
398+
Schemas = {
399+
{
400+
"schema1",
401+
new OpenApiSchema
402+
{
403+
Type = "object",
404+
Discriminator = new OpenApiDiscriminator { PropertyName = "property1" },
405+
Reference = new OpenApiReference { Id = "schema1" }
406+
}
407+
}
408+
}
409+
};
410+
// Act
411+
var validator = new OpenApiValidator(ValidationRuleSet.GetDefaultRuleSet());
412+
var walker = new OpenApiWalker(validator);
413+
walker.Walk(components);
414+
415+
errors = validator.Errors;
416+
bool result = !errors.Any();
417+
418+
// Assert
419+
result.Should().BeFalse();
420+
errors.ShouldAllBeEquivalentTo(new List<OpenApiValidatorError>
421+
{
422+
new OpenApiValidatorError(nameof(OpenApiSchemaRules.ValidateSchemaDiscriminator),"#/schemas/schema1/discriminator",
423+
string.Format(SRResource.Validation_SchemaMustContainPropertySpecifiedInTheDiscriminator,
424+
"schema1", "property1")),
425+
new OpenApiValidatorError(nameof(OpenApiSchemaRules.ValidateSchemaDiscriminator),"#/schemas/schema1/discriminator",
426+
string.Format(SRResource.Validation_SchemaRequiredFieldListMustContainThePropertySpecifiedInTheDiscriminator,
427+
"schema1", "property1"))
428+
});
429+
}
355430
}
356431
}

0 commit comments

Comments
 (0)