Skip to content

Commit c8acd59

Browse files
committed
Resolve merge conflicts
2 parents 951aadb + de33d93 commit c8acd59

14 files changed

+97
-551
lines changed

src/Microsoft.OpenApi/Models/OpenApiConstants.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,11 @@ public static class OpenApiConstants
415415
/// </summary>
416416
public const string Properties = "properties";
417417

418+
/// <summary>
419+
/// Field: Pattern Properties
420+
/// </summary>
421+
public const string PatternProperties = "patternProperties";
422+
418423
/// <summary>
419424
/// Field: AdditionalProperties
420425
/// </summary>

src/Microsoft.OpenApi/Reader/V31/JsonSchemaDeserializer.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,12 @@ internal static partial class OpenApiV31Deserializer
167167
o.Properties(n.CreateMap(LoadSchema));
168168
}
169169
},
170+
{
171+
"patternProperties", (o, n) =>
172+
{
173+
o.PatternProperties(n.CreateMap(LoadSchema));
174+
}
175+
},
170176
{
171177
"additionalProperties", (o, n) =>
172178
{

src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
// Copyright (c) Microsoft Corporation. All rights reserved.
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

44
using System;
55
using System.Collections.Generic;
66
using System.IO;
7+
using System.Linq;
78
using System.Text.Json;
9+
using System.Text.RegularExpressions;
810
using Json.Schema;
911
using Json.Schema.OpenApi;
1012
using Microsoft.OpenApi.Any;
@@ -536,6 +538,16 @@ public void WriteJsonSchemaWithoutReference(IOpenApiWriter writer, JsonSchema sc
536538
writer.WriteOptionalMap(OpenApiConstants.Properties, (IDictionary<string, JsonSchema>)schema.GetProperties(),
537539
(w, key, s) => w.WriteJsonSchema(s, version));
538540

541+
// pattern properties
542+
var patternProperties = schema?.GetPatternProperties();
543+
var stringPatternProperties = patternProperties?.ToDictionary(
544+
kvp => kvp.Key.ToString(), // Convert Regex key to string
545+
kvp => kvp.Value
546+
);
547+
548+
writer.WriteOptionalMap(OpenApiConstants.PatternProperties, stringPatternProperties,
549+
(w, key, s) => w.WriteJsonSchema(s, version));
550+
539551
// additionalProperties
540552
if (schema.GetAdditionalPropertiesAllowed() ?? false)
541553
{

test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
<ItemGroup>
3131
<ProjectReference Include="..\..\src\Microsoft.OpenApi\Microsoft.OpenApi.csproj" />
3232
<ProjectReference Include="..\..\src\Microsoft.OpenApi.Readers\Microsoft.OpenApi.Readers.csproj" />
33+
<ProjectReference Include="..\Microsoft.OpenApi.Tests\Microsoft.OpenApi.Tests.csproj" />
3334
</ItemGroup>
3435

3536
</Project>

test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
using System.IO;
44
using FluentAssertions;
55
using Json.Schema;
6+
using Microsoft.OpenApi.Extensions;
67
using Microsoft.OpenApi.Interfaces;
78
using Microsoft.OpenApi.Models;
89
using Microsoft.OpenApi.Reader;
10+
using Microsoft.OpenApi.Tests;
911
using Microsoft.OpenApi.Writers;
1012
using Xunit;
1113

@@ -350,5 +352,49 @@ public void ParseDocumentWithExampleInSchemaShouldSucceed()
350352
// Assert
351353
Assert.NotNull(actual);
352354
}
355+
356+
[Fact]
357+
public void ParseDocumentWithPatternPropertiesInSchemaWorks()
358+
{
359+
// Arrange
360+
using var stream = Resources.GetStream(Path.Combine(SampleFolderPath, "docWithPatternPropertiesInSchema.yaml"));
361+
362+
// Act
363+
var doc = new OpenApiStreamReader().Read(stream, out var diagnostic);
364+
365+
var actualSchema = doc.Paths["/example"].Operations[OperationType.Get].Responses["200"].Content["application/json"].Schema;
366+
367+
var expectedSchema = new JsonSchemaBuilder()
368+
.Type(SchemaValueType.Object)
369+
.Properties(
370+
("prop1", new JsonSchemaBuilder().Type(SchemaValueType.String)),
371+
("prop2", new JsonSchemaBuilder().Type(SchemaValueType.String)),
372+
("prop3", new JsonSchemaBuilder().Type(SchemaValueType.String)))
373+
.PatternProperties(
374+
("^x-.*$", new JsonSchemaBuilder().Type(SchemaValueType.String)))
375+
.Build();
376+
377+
// Serialization
378+
var mediaType = doc.Paths["/example"].Operations[OperationType.Get].Responses["200"].Content["application/json"];
379+
380+
var expectedMediaType = @"schema:
381+
type: object
382+
properties:
383+
prop1:
384+
type: string
385+
prop2:
386+
type: string
387+
prop3:
388+
type: string
389+
patternProperties:
390+
^x-.*$:
391+
type: string";
392+
393+
var actualMediaType = mediaType.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1);
394+
395+
// Assert
396+
actualSchema.Should().BeEquivalentTo(expectedSchema);
397+
actualMediaType.MakeLineBreaksEnvironmentNeutral().Should().BeEquivalentTo(expectedMediaType.MakeLineBreaksEnvironmentNeutral());
398+
}
353399
}
354400
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
openapi: 3.1.0
2+
info:
3+
title: Example API
4+
version: 1.0.0
5+
paths:
6+
/example:
7+
get:
8+
summary: Get example object
9+
responses:
10+
'200':
11+
description: Successful operation
12+
content:
13+
application/json:
14+
schema:
15+
type: object
16+
properties:
17+
prop1:
18+
type: string
19+
prop2:
20+
type: string
21+
prop3:
22+
type: string
23+
patternProperties:
24+
"^x-.*$":
25+
type: string

test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.SerializeReferencedSchemaAsV3JsonWorksAsync_produceTerseOutput=False.verified.txt

Lines changed: 0 additions & 3 deletions
This file was deleted.

test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.SerializeReferencedSchemaAsV3JsonWorksAsync_produceTerseOutput=True.verified.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.SerializeReferencedSchemaAsV3WithoutReferenceJsonWorksAsync_produceTerseOutput=False.verified.txt

Lines changed: 0 additions & 13 deletions
This file was deleted.

test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.SerializeReferencedSchemaAsV3WithoutReferenceJsonWorksAsync_produceTerseOutput=True.verified.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)