Skip to content

Commit

Permalink
Merge pull request #10 from gregsdennis/ref-failure
Browse files Browse the repository at this point in the history
Ref failure during schema validation
  • Loading branch information
gregsdennis committed Jul 4, 2024
2 parents 932216c + f560046 commit cce458b
Show file tree
Hide file tree
Showing 20 changed files with 271 additions and 2,162 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -397,3 +397,4 @@ FodyWeavers.xsd

# JetBrains Rider
*.sln.iml
/Graeae.Models/OpenApi.Models.xml
6 changes: 6 additions & 0 deletions Graeae.Models.Tests/Files/payload-invalid1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"inner": {
"a": "test",
"b": true
}
}
6 changes: 6 additions & 0 deletions Graeae.Models.Tests/Files/payload-invalid2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"inner": {
"a": "test"
},
"b": true
}
4 changes: 4 additions & 0 deletions Graeae.Models.Tests/Files/payload-invalid3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"inner": {
}
}
2 changes: 2 additions & 0 deletions Graeae.Models.Tests/Files/payload-invalid4.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{
}
5 changes: 5 additions & 0 deletions Graeae.Models.Tests/Files/payload-valid.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"inner": {
"a": "test"
}
}
35 changes: 35 additions & 0 deletions Graeae.Models.Tests/Files/schema-components.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"openapi": "3.0.0",
"info": {
"title": "Doc for payload validation",
"version": "1.0.0"
},
"components": {
"schemas": {
"outer": {
"type": "object",
"properties": {
"inner": {
"$ref": "#/components/schemas/inner"
}
},
"required": [
"inner"
],
"additionalProperties": false
},
"inner": {
"type": "object",
"properties": {
"a": {
"type": "string"
}
},
"required": [
"a"
],
"additionalProperties": false
}
}
}
}
60 changes: 60 additions & 0 deletions Graeae.Models.Tests/PayloadValidationTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
using System.Text.Json;
using Graeae.Models.SchemaDraft4;
using Json.Pointer;
using Json.Schema;

namespace Graeae.Models.Tests;

public class PayloadValidationTests
{

[TestCase("payload-valid.json")]
public async Task ReferencesValid(string fileName)
{
var schemaFileName = GetFile("schema-components.json");
var fileText = File.ReadAllText(schemaFileName);
var openApiDoc = JsonSerializer.Deserialize(fileText, TestSerializerContext.Default.OpenApiDocument);

var options = new EvaluationOptions
{
EvaluateAs = Draft4Support.Draft4Version,
};
await openApiDoc!.Initialize(options.SchemaRegistry);

var componentRef = JsonPointer.Parse("#/components/schemas/outer");
var fullFileName = GetFile(fileName);
var payloadJson = File.ReadAllText(fullFileName);
var document = JsonDocument.Parse(payloadJson);

var results = openApiDoc.EvaluatePayload(document, componentRef, options);
Assert.True(results!.IsValid);
}


[TestCase("payload-invalid1.json")]
[TestCase("payload-invalid2.json")]
[TestCase("payload-invalid3.json")]
[TestCase("payload-invalid4.json")]
public async Task ReferencesInvalid(string fileName)
{
var schemaFileName = GetFile("schema-components.json");

var fileText = File.ReadAllText(schemaFileName);
var openApiDoc = JsonSerializer.Deserialize(fileText, TestSerializerContext.Default.OpenApiDocument);

var options = new EvaluationOptions
{
EvaluateAs = Draft4Support.Draft4Version,
};
await openApiDoc!.Initialize(options.SchemaRegistry);

var componentRef = JsonPointer.Parse("#/components/schemas/outer");

var fullFileName = GetFile(fileName);
var payloadJson = File.ReadAllText(fullFileName);
var document = JsonDocument.Parse(payloadJson);

var results = openApiDoc.EvaluatePayload(document, componentRef, options);
Assert.False(results!.IsValid);
}
}
3 changes: 2 additions & 1 deletion Graeae.Models.Tests/ValidationTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Text.Json;
using System.Text.Json.Nodes;
using Json.Schema;
using Yaml2JsonNode;

Expand Down Expand Up @@ -53,4 +54,4 @@ public void ValidateOpenApiDoc_3_1(string fileName)

Assert.IsTrue(results.IsValid);
}
}
}
14 changes: 11 additions & 3 deletions Graeae.Models/Graeae.Models.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@
<PackageIcon>openapi.png</PackageIcon>
<RepositoryUrl>https://github.com/gregsdennis/Graeae</RepositoryUrl>
<PackageTags>openapi json schema models</PackageTags>
<PackageReleaseNotes>Release notes can be found at https://github.com/gregsdennis/Graeae</PackageReleaseNotes>
<PackageReleaseNotes>Edit Release notes in file RELEASE_NOTES.md in the repo root.</PackageReleaseNotes>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<DocumentationFile>Graeae.Models.xml</DocumentationFile>
<Version>0.3.0</Version>
<FileVersion>0.3.0.0</FileVersion>
<Version>0.3.1</Version>
<FileVersion>0.3.1.0</FileVersion>
<AssemblyVersion>0.3.0.0</AssemblyVersion>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
Expand Down Expand Up @@ -53,4 +53,12 @@
<PackageReference Include="Yaml2JsonNode" Version="2.1.0" />
</ItemGroup>

<Target Name="PreparePackageReleaseNotesFromFile" BeforeTargets="GenerateNuspec">
<ReadLinesFromFile File="../RELEASE-NOTES.md" >
<Output TaskParameter="Lines" ItemName="ReleaseNoteLines"/>
</ReadLinesFromFile>
<PropertyGroup>
<PackageReleaseNotes>@(ReleaseNoteLines, '%0a')</PackageReleaseNotes>
</PropertyGroup>
</Target>
</Project>
35 changes: 35 additions & 0 deletions Graeae.Models/Graeae.Models.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit cce458b

Please sign in to comment.