|
11 | 11 | using System.Text.Json.Nodes;
|
12 | 12 | using System.Collections.Generic;
|
13 | 13 | using FluentAssertions.Equivalency;
|
| 14 | +using Microsoft.OpenApi.Models.References; |
| 15 | +using Microsoft.OpenApi.Writers; |
14 | 16 |
|
15 | 17 | namespace Microsoft.OpenApi.Readers.Tests.V2Tests
|
16 | 18 | {
|
@@ -95,5 +97,56 @@ public void ParseSchemaWithEnumShouldSucceed()
|
95 | 97 | .Excluding((IMemberInfo memberInfo) =>
|
96 | 98 | memberInfo.Path.EndsWith("Parent")));
|
97 | 99 | }
|
| 100 | + [Fact] |
| 101 | + public void PropertiesReferenceShouldWork() |
| 102 | + { |
| 103 | + var workingDocument = new OpenApiDocument() |
| 104 | + { |
| 105 | + Components = new OpenApiComponents(), |
| 106 | + }; |
| 107 | + const string referenceId = "targetSchema"; |
| 108 | + var targetSchema = new OpenApiSchema() |
| 109 | + { |
| 110 | + Type = JsonSchemaType.Object, |
| 111 | + Properties = new Dictionary<string, OpenApiSchema> |
| 112 | + { |
| 113 | + ["prop1"] = new OpenApiSchema() |
| 114 | + { |
| 115 | + Type = JsonSchemaType.String |
| 116 | + } |
| 117 | + } |
| 118 | + }; |
| 119 | + workingDocument.Components.Schemas.Add(referenceId, targetSchema); |
| 120 | + workingDocument.Workspace.RegisterComponent("schemas", targetSchema); |
| 121 | + var referenceSchema = new OpenApiSchema() |
| 122 | + { |
| 123 | + Type = JsonSchemaType.Object, |
| 124 | + Properties = new Dictionary<string, OpenApiSchema> |
| 125 | + { |
| 126 | + ["propA"] = new OpenApiSchemaReference(referenceId, workingDocument), |
| 127 | + } |
| 128 | + }; |
| 129 | + |
| 130 | + using var textWriter = new StringWriter(); |
| 131 | + var writer = new OpenApiJsonWriter(textWriter); |
| 132 | + referenceSchema.SerializeAsV2(writer); |
| 133 | + |
| 134 | + var json = textWriter.ToString(); |
| 135 | + var expected = JsonNode.Parse( |
| 136 | + """ |
| 137 | + { |
| 138 | + "type": "object", |
| 139 | + "properties": |
| 140 | + { |
| 141 | + "propA": |
| 142 | + { |
| 143 | + "$ref": "#/definitions/targetSchema" |
| 144 | + } |
| 145 | + } |
| 146 | + } |
| 147 | + """ |
| 148 | + ); |
| 149 | + Assert.True(JsonNode.DeepEquals(JsonNode.Parse(json), expected)); |
| 150 | + } |
98 | 151 | }
|
99 | 152 | }
|
0 commit comments