From 1b2ef59ec0a863cbda6b6452f7501db4aee8498d Mon Sep 17 00:00:00 2001 From: Mike Harder Date: Sat, 1 Jun 2024 05:44:40 +0000 Subject: [PATCH 1/5] Add test showing current behavior --- .../spectral/test/avoid-additional-properties.test.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/rulesets/src/spectral/test/avoid-additional-properties.test.ts b/packages/rulesets/src/spectral/test/avoid-additional-properties.test.ts index d213d0bbe..e8ebae5c6 100644 --- a/packages/rulesets/src/spectral/test/avoid-additional-properties.test.ts +++ b/packages/rulesets/src/spectral/test/avoid-additional-properties.test.ts @@ -143,22 +143,29 @@ test("AvoidAdditionalProperties should find errors", () => { }, required: ["type"], }, + ThisRef: { + properties: { + $ref: "#/definitions/This", + }, + }, }, } return linter.run(oasDoc).then((results) => { - expect(results.length).toBe(6) + expect(results.length).toBe(7) expect(results[0].path.join(".")).toBe("definitions.This") expect(results[1].path.join(".")).toBe("definitions.That.properties.nonTags") expect(results[2].path.join(".")).toBe("definitions.ThaOther.properties") expect(results[3].path.join(".")).toBe("definitions.Other.properties") expect(results[4].path.join(".")).toBe("definitions.ThisOther.properties.tags.nonTags") expect(results[5].path.join(".")).toBe("definitions.UserAssignedIdentitiy") + expect(results[6].path.join(".")).toBe("definitions.ThisRef.properties") expect(results[0].message).toBe(errorMessage) expect(results[1].message).toBe(errorMessage) expect(results[2].message).toBe(errorMessage) expect(results[3].message).toBe(errorMessage) expect(results[4].message).toBe(errorMessage) expect(results[5].message).toBe(errorMessage) + expect(results[6].message).toBe(errorMessage) }) }) From ea0295fd2929e7a71f96fcad814991af5d5de744 Mon Sep 17 00:00:00 2001 From: Mike Harder Date: Sat, 1 Jun 2024 06:01:26 +0000 Subject: [PATCH 2/5] Set resolved:false --- packages/rulesets/src/spectral/az-arm.ts | 3 ++- .../src/spectral/test/avoid-additional-properties.test.ts | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/rulesets/src/spectral/az-arm.ts b/packages/rulesets/src/spectral/az-arm.ts index 1fefae6aa..0a1a2239a 100644 --- a/packages/rulesets/src/spectral/az-arm.ts +++ b/packages/rulesets/src/spectral/az-arm.ts @@ -299,7 +299,8 @@ const ruleset: any = { message: "{{description}}", disableForTypeSpec: true, disableForTypeSpecReason: "Covered by TSP's '@azure-tools/typespec-azure-resource-manager/no-record' rule.", - resolved: true, + // Only report errors at the source, not from inside $refs (the resolved document) + resolved: false, formats: [oas2], // In some cases, variable "@" will be "null" when evaluating the expression, so it must be checked before dereferencing given: diff --git a/packages/rulesets/src/spectral/test/avoid-additional-properties.test.ts b/packages/rulesets/src/spectral/test/avoid-additional-properties.test.ts index e8ebae5c6..2600de39f 100644 --- a/packages/rulesets/src/spectral/test/avoid-additional-properties.test.ts +++ b/packages/rulesets/src/spectral/test/avoid-additional-properties.test.ts @@ -144,6 +144,7 @@ test("AvoidAdditionalProperties should find errors", () => { required: ["type"], }, ThisRef: { + description: "Ensure error is NOT raised from inside $refs (rule sets resolved:false)" properties: { $ref: "#/definitions/This", }, @@ -151,21 +152,19 @@ test("AvoidAdditionalProperties should find errors", () => { }, } return linter.run(oasDoc).then((results) => { - expect(results.length).toBe(7) + expect(results.length).toBe(6) expect(results[0].path.join(".")).toBe("definitions.This") expect(results[1].path.join(".")).toBe("definitions.That.properties.nonTags") expect(results[2].path.join(".")).toBe("definitions.ThaOther.properties") expect(results[3].path.join(".")).toBe("definitions.Other.properties") expect(results[4].path.join(".")).toBe("definitions.ThisOther.properties.tags.nonTags") expect(results[5].path.join(".")).toBe("definitions.UserAssignedIdentitiy") - expect(results[6].path.join(".")).toBe("definitions.ThisRef.properties") expect(results[0].message).toBe(errorMessage) expect(results[1].message).toBe(errorMessage) expect(results[2].message).toBe(errorMessage) expect(results[3].message).toBe(errorMessage) expect(results[4].message).toBe(errorMessage) expect(results[5].message).toBe(errorMessage) - expect(results[6].message).toBe(errorMessage) }) }) From c859e27780b7f7724326672e19d7e610d2b8d9fe Mon Sep 17 00:00:00 2001 From: Mike Harder Date: Sat, 1 Jun 2024 07:22:25 +0000 Subject: [PATCH 3/5] Increment version --- packages/rulesets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rulesets/package.json b/packages/rulesets/package.json index c141b5bbe..ba96f1b78 100644 --- a/packages/rulesets/package.json +++ b/packages/rulesets/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft.azure/openapi-validator-rulesets", - "version": "2.0.6", + "version": "2.0.7", "description": "Azure OpenAPI Validator", "main": "dist/index.js", "scripts": { From 82f35b0a222e3e4207785b339ce407b963162eed Mon Sep 17 00:00:00 2001 From: Mike Harder Date: Mon, 3 Jun 2024 18:14:17 +0000 Subject: [PATCH 4/5] Add missing comma --- .../src/spectral/test/avoid-additional-properties.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rulesets/src/spectral/test/avoid-additional-properties.test.ts b/packages/rulesets/src/spectral/test/avoid-additional-properties.test.ts index 2600de39f..5be6f5372 100644 --- a/packages/rulesets/src/spectral/test/avoid-additional-properties.test.ts +++ b/packages/rulesets/src/spectral/test/avoid-additional-properties.test.ts @@ -144,7 +144,7 @@ test("AvoidAdditionalProperties should find errors", () => { required: ["type"], }, ThisRef: { - description: "Ensure error is NOT raised from inside $refs (rule sets resolved:false)" + description: "Ensure error is NOT raised from inside $refs (rule sets resolved:false)", properties: { $ref: "#/definitions/This", }, From 158de19ad1ad4aa47df8c16e20bba60158dd24c0 Mon Sep 17 00:00:00 2001 From: Mike Harder Date: Mon, 3 Jun 2024 19:18:21 +0000 Subject: [PATCH 5/5] Update generated JS --- packages/rulesets/generated/spectral/az-arm.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rulesets/generated/spectral/az-arm.js b/packages/rulesets/generated/spectral/az-arm.js index 890e6c6b4..f4a47a603 100644 --- a/packages/rulesets/generated/spectral/az-arm.js +++ b/packages/rulesets/generated/spectral/az-arm.js @@ -3159,7 +3159,7 @@ const ruleset = { message: "{{description}}", disableForTypeSpec: true, disableForTypeSpecReason: "Covered by TSP's '@azure-tools/typespec-azure-resource-manager/no-record' rule.", - resolved: true, + resolved: false, formats: [oas2], given: "$.definitions..[?(@property !== 'tags' && @property !== 'delegatedResources' && @property !== 'userAssignedIdentities' && @ && @.additionalProperties)]", then: {