diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9bb3baba..89923dac 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## 0.9.7 Released on 2022-08-15
+
+- change rule 'TypeChanged' to 'Info' if adding 'type:object' to an schema with "properties".
+
## 0.9.6 Released on 2022-06-09
- using autorest v3.6.1'.
diff --git a/openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/type_changed_01.json b/openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/type_changed_01.json
new file mode 100644
index 00000000..ddb2169a
--- /dev/null
+++ b/openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/type_changed_01.json
@@ -0,0 +1,54 @@
+{
+ "swagger": 2.0,
+ "info": {
+ "title": "type_changed",
+ "version": "1.0"
+ },
+ "host": "localhost:8000",
+ "schemes": [ "http", "https" ],
+ "consumes": [ "text/plain", "text/json" ],
+ "produces": [ "text/plain" ],
+ "paths": {
+ "/api/Parameters": {
+ "put": {
+ "tag": [ "Parameters" ],
+ "operationId": "Parameters_Put",
+ "produces": [
+ "text/plain"
+ ],
+ "parameters": [
+ {
+ "name": "database",
+ "in": "body",
+ "required": true,
+ "type": "object",
+ "schema": { "$ref": "#/definitions/Database" }
+ }
+ ]
+ }
+ }
+ },
+ "definitions": {
+ "Database": {
+ "properties": {
+ "a": {
+ "type": "object",
+ "readOnly": true,
+ "properties": {
+ "b": {
+ "type": "string",
+ "readOnly": true
+ }
+ },
+ "description": "This is a system generated property.\nThe _rid value is empty for this operation."
+ },
+ "b": {
+ "type": "integer",
+ "readOnly": true,
+ "default": 0,
+ "description": "This property shows the number of databases returned."
+ }
+ }
+ }
+ }
+}
diff --git a/openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/type_changed_01.json b/openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/type_changed_01.json
new file mode 100644
index 00000000..e8909672
--- /dev/null
+++ b/openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/type_changed_01.json
@@ -0,0 +1,53 @@
+{
+ "swagger": 2.0,
+ "info": {
+ "title": "type_changed",
+ "version": "1.0"
+ },
+ "host": "localhost:8000",
+ "schemes": [ "http", "https" ],
+ "consumes": [ "text/plain", "text/json" ],
+ "produces": [ "text/plain" ],
+ "paths": {
+ "/api/Parameters": {
+ "put": {
+ "tag": [ "Parameters" ],
+ "operationId": "Parameters_Put",
+ "produces": [
+ "text/plain"
+ ],
+ "parameters": [
+ {
+ "name": "database",
+ "in": "body",
+ "required": true,
+ "type": "object",
+ "schema": { "$ref": "#/definitions/Database" }
+ }
+ ]
+ }
+ }
+ },
+ "definitions": {
+ "Database": {
+ "properties": {
+ "a": {
+ "readOnly": true,
+ "properties": {
+ "b": {
+ "type": "string",
+ "readOnly": true
+ }
+ },
+ "description": "This is a system generated property.\nThe _rid value is empty for this operation."
+ },
+ "b": {
+ "type": "integer",
+ "readOnly": true,
+ "default": 0,
+ "description": "This property shows the number of databases returned."
+ }
+ }
+ }
+ }
+}
diff --git a/openapi-diff/src/modeler/AutoRest.Swagger.Tests/SwaggerModelerCompareTests.cs b/openapi-diff/src/modeler/AutoRest.Swagger.Tests/SwaggerModelerCompareTests.cs
index 61b721f3..8f4fe1e9 100644
--- a/openapi-diff/src/modeler/AutoRest.Swagger.Tests/SwaggerModelerCompareTests.cs
+++ b/openapi-diff/src/modeler/AutoRest.Swagger.Tests/SwaggerModelerCompareTests.cs
@@ -150,6 +150,21 @@ public void PropertyTypeChanged()
Assert.Equal("new/type_changed.json#/definitions/Database/properties/a", error.NewJsonRef);
}
+ ///
+ /// Verifies that if adding a 'type:object' to a schema with 'properties', it's not error.
+ ///
+ [Fact]
+ public void TypeObjectChanged()
+ {
+ var messages = CompareSwagger("type_changed_01.json").ToArray();
+ var missing = messages.Where(m => m.Id == ComparisonMessages.TypeChanged.Id);
+ Assert.NotEmpty(missing);
+ var error = missing.Where(err => err.NewJsonRef.StartsWith("new/type_changed_01.json#/definitions/")).FirstOrDefault();
+ Assert.NotNull(error);
+ Assert.Equal(Category.Info, error.Severity);
+ Assert.Equal("new/type_changed_01.json#/definitions/Database/properties/a", error.NewJsonRef);
+ }
+
///
/// Verifies that if you change the type format of a schema property, it's caught.
///
diff --git a/openapi-diff/src/modeler/AutoRest.Swagger/Model/SwaggerObject.cs b/openapi-diff/src/modeler/AutoRest.Swagger/Model/SwaggerObject.cs
index 5a82e343..2e9655d1 100644
--- a/openapi-diff/src/modeler/AutoRest.Swagger/Model/SwaggerObject.cs
+++ b/openapi-diff/src/modeler/AutoRest.Swagger/Model/SwaggerObject.cs
@@ -127,12 +127,26 @@ T previous
// Are the types the same?
- if (prior.Type.HasValue != Type.HasValue || (Type.HasValue && prior.Type.Value != Type.Value))
+ if ((Type.HasValue && prior.Type.HasValue && prior.Type.Value != Type.Value))
{
- context.LogBreakingChange(ComparisonMessages.TypeChanged,
+ context.LogError(ComparisonMessages.TypeChanged,
Type.HasValue ? Type.Value.ToString().ToLower() : "",
prior.Type.HasValue ? prior.Type.Value.ToString().ToLower() : "");
}
+ var isObject = Type.HasValue && Type.Value == DataType.Object && (this is Schema) ? (this as Schema).Properties != null : false;
+ if (prior.Type.HasValue != Type.HasValue) {
+ if (!prior.Type.HasValue && Type.HasValue && isObject)
+ {
+ context.LogInfo(ComparisonMessages.TypeChanged,
+ Type.HasValue ? Type.Value.ToString().ToLower() : "",
+ prior.Type.HasValue ? prior.Type.Value.ToString().ToLower() : "");
+ }
+ else {
+ context.LogError(ComparisonMessages.TypeChanged,
+ Type.HasValue ? Type.Value.ToString().ToLower() : "",
+ prior.Type.HasValue ? prior.Type.Value.ToString().ToLower() : "");
+ }
+ }
// What about the formats?
diff --git a/package.json b/package.json
index 53a15e68..8c881589 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@azure/oad",
- "version": "0.9.6",
+ "version": "0.9.7",
"author": {
"name": "Microsoft Corporation",
"email": "azsdkteam@microsoft.com",