Skip to content

Commit f3e778a

Browse files
committed
merge
2 parents f3efe85 + 59260d3 commit f3e778a

File tree

2 files changed

+86
-33
lines changed

2 files changed

+86
-33
lines changed

src/Microsoft.OpenApi/Services/OpenApiComponentsComparer.cs

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -77,20 +77,8 @@ public override void Compare(
7777
.GetComparer<IDictionary<string, OpenApiHeader>>()
7878
.Compare(sourceComponents.Headers, targetComponents.Headers, comparisonContext));
7979

80-
WalkAndCompare(
81-
comparisonContext,
82-
OpenApiConstants.SecuritySchemes,
83-
() => comparisonContext
84-
.GetComparer<IDictionary<string, OpenApiSecurityScheme>>()
85-
.Compare(sourceComponents.SecuritySchemes, targetComponents.SecuritySchemes, comparisonContext));
86-
87-
WalkAndCompare(
88-
comparisonContext,
89-
OpenApiConstants.Examples,
90-
() => comparisonContext
91-
.GetComparer<IDictionary<string, OpenApiExample>>()
92-
.Compare(sourceComponents.Examples, targetComponents.Examples, comparisonContext));
93-
80+
// To Do compare Examples
81+
// To Do compare SecuritySchemes
9482
// To Do compare Links
9583
// To Do compare Callbacks
9684
}

src/Microsoft.OpenApi/Services/OpenApiSchemaComparer.cs

Lines changed: 84 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -145,27 +145,92 @@ public override void Compare(
145145
.Compare(sourceSchema.Items, targetSchema.Items, comparisonContext));
146146
}
147147

148-
WalkAndCompare(
149-
comparisonContext,
150-
OpenApiConstants.Properties,
151-
() => comparisonContext
152-
.GetComparer<IDictionary<string, OpenApiSchema>>()
153-
.Compare(sourceSchema.Properties,
154-
targetSchema.Properties, comparisonContext));
148+
if (sourceSchema.Reference != null
149+
&& targetSchema.Reference != null
150+
&& sourceSchema.Reference.Id != targetSchema.Reference.Id)
151+
{
152+
WalkAndAddOpenApiDifference(
153+
comparisonContext,
154+
OpenApiConstants.DollarRef,
155+
new OpenApiDifference
156+
{
157+
OpenApiDifferenceOperation = OpenApiDifferenceOperation.Update,
158+
SourceValue = sourceSchema.Reference?.Id,
159+
TargetValue = targetSchema.Reference?.Id,
160+
OpenApiComparedElementType = typeof(string)
161+
});
155162

156-
WalkAndCompare(
157-
comparisonContext,
158-
OpenApiConstants.ExternalDocs,
159-
() => comparisonContext
160-
.GetComparer<OpenApiExternalDocs>()
161-
.Compare(sourceSchema.ExternalDocs, targetSchema.ExternalDocs, comparisonContext));
163+
return;
164+
}
162165

163-
WalkAndCompare(
164-
comparisonContext,
165-
OpenApiConstants.Example,
166-
() => comparisonContext
167-
.GetComparer<IOpenApiAny>()
168-
.Compare(sourceSchema.Example, targetSchema.Example, comparisonContext));
166+
if (sourceSchema.Reference != null)
167+
{
168+
sourceSchema = (OpenApiSchema) comparisonContext.SourceDocument.ResolveReference(
169+
sourceSchema.Reference);
170+
}
171+
172+
if (targetSchema.Reference != null)
173+
{
174+
targetSchema = (OpenApiSchema) comparisonContext.TargetDocument.ResolveReference(
175+
targetSchema.Reference);
176+
}
177+
178+
if (targetSchema.Properties != null)
179+
{
180+
IEnumerable<string> newPropertiesInTarget = sourceSchema.Properties == null
181+
? targetSchema.Properties.Keys
182+
: targetSchema.Properties.Keys.Except(sourceSchema.Properties.Keys)
183+
.ToList();
184+
185+
WalkAndCompare(comparisonContext, OpenApiConstants.Properties, () =>
186+
{
187+
foreach (var newPropertyInTarget in newPropertiesInTarget)
188+
{
189+
WalkAndAddOpenApiDifference(
190+
comparisonContext,
191+
newPropertyInTarget,
192+
new OpenApiDifference
193+
{
194+
OpenApiDifferenceOperation = OpenApiDifferenceOperation.Add,
195+
TargetValue = new KeyValuePair<string, OpenApiSchema>(newPropertyInTarget,
196+
targetSchema.Properties[newPropertyInTarget]),
197+
OpenApiComparedElementType = typeof(KeyValuePair<string, OpenApiSchema>)
198+
});
199+
}
200+
});
201+
}
202+
203+
if (sourceSchema.Properties != null)
204+
{
205+
WalkAndCompare(comparisonContext, OpenApiConstants.Properties, () =>
206+
{
207+
foreach (var sourceSchemaProperty in sourceSchema.Properties)
208+
{
209+
if (targetSchema.Properties.ContainsKey(sourceSchemaProperty.Key))
210+
{
211+
WalkAndCompare(
212+
comparisonContext,
213+
sourceSchemaProperty.Key,
214+
() => comparisonContext
215+
.GetComparer<OpenApiSchema>()
216+
.Compare(sourceSchemaProperty.Value,
217+
targetSchema.Properties[sourceSchemaProperty.Key], comparisonContext));
218+
}
219+
else
220+
{
221+
WalkAndAddOpenApiDifference(
222+
comparisonContext,
223+
sourceSchemaProperty.Key,
224+
new OpenApiDifference
225+
{
226+
OpenApiDifferenceOperation = OpenApiDifferenceOperation.Remove,
227+
SourceValue = sourceSchemaProperty,
228+
OpenApiComparedElementType = typeof(KeyValuePair<string, OpenApiSchema>)
229+
});
230+
}
231+
}
232+
});
233+
}
169234

170235
// To Do Compare schema.AllOf
171236
// To Do Compare schema.AnyOf

0 commit comments

Comments
 (0)