From e788e0d40554ddb338dbe9f97622e400ecd69c10 Mon Sep 17 00:00:00 2001 From: Kilian B <60846047+knowbased@users.noreply.github.com> Date: Tue, 10 Mar 2026 10:42:00 +0100 Subject: [PATCH] fix: handle source path (#12) --- .../MRESonarqubeHelperTest.class.st | 68 +++++++++++++++++++ .../MRESonarqubeHelper.class.st | 6 +- 2 files changed, 72 insertions(+), 2 deletions(-) diff --git a/src/MooseRuleEngine-Tests/MRESonarqubeHelperTest.class.st b/src/MooseRuleEngine-Tests/MRESonarqubeHelperTest.class.st index 133e0b9..c1c3acf 100644 --- a/src/MooseRuleEngine-Tests/MRESonarqubeHelperTest.class.st +++ b/src/MooseRuleEngine-Tests/MRESonarqubeHelperTest.class.st @@ -86,6 +86,74 @@ MRESonarqubeHelperTest >> testAllViolationsOfInFileUsingRuleId [ self assert: entity model equals: expectedEntity model ] ] +{ #category : 'tests' } +MRESonarqubeHelperTest >> testAllViolationsOfInFileUsingRuleIdWithFilePath [ + + + | mergeRequestId rule file ruleId helper violations projectKey sonarqubeApi issue1 issue2 params expectedEntity path paramPath | + mergeRequestId := 1. + rule := MRERule new. + file := MREFile new + path: 'test/test.ts'; + content: 'class Java {}'. + ruleId := 'java:1111'. + projectKey := 'projectKey'. + path := 'test'. + + sonarqubeApi := SonarAPIMock new. + + issue1 := { + (#textRange -> textRange). + (#status -> 'OPEN'). + (#flows -> { }). + + #message -> 'message' + } asDictionary. + + + + + issue2 := { + (#textRange -> textRange). + (#status -> 'CLOSE'). + (#flows -> { }) . + + #message -> 'message'} asDictionary. + + paramPath := file path removePrefix: (path, '/'). + params := { + (#componentKeys -> (projectKey , ':' , paramPath)). + (#rules -> ruleId) } asDictionary. + + (sonarqubeApi issues stub searchWithParams: params) willReturn: { + issue1. + issue2 }. + + + helper := MRESonarqubeHelper new + mergeRequestId: 1; + type: 'all'; + projectKey: projectKey; + sonarqubeApi: sonarqubeApi; + sourcePath: path. + + violations := helper + allViolationsOf: rule inFile: file usingRuleId: ruleId. + + self assert: violations size equals: 1. + self assert: violations first rule name equals: rule name. + + expectedEntity := helper + parseTextRangeIntoEntity: textRange + ofFile: file. + + violations first entities do: [ :entity | + self assert: entity file equals: expectedEntity file. + self assert: entity startPos equals: expectedEntity startPos. + self assert: entity endPos equals: expectedEntity endPos. + self assert: entity model equals: expectedEntity model ] +] + { #category : 'tests' } MRESonarqubeHelperTest >> testParseIssueIntoViolationOfRuleInFile [ diff --git a/src/MooseRuleEngine/MRESonarqubeHelper.class.st b/src/MooseRuleEngine/MRESonarqubeHelper.class.st index cafee5f..b266eed 100644 --- a/src/MooseRuleEngine/MRESonarqubeHelper.class.st +++ b/src/MooseRuleEngine/MRESonarqubeHelper.class.st @@ -15,9 +15,11 @@ Class { { #category : 'as yet unclassified' } MRESonarqubeHelper >> allViolationsOf: rule inFile: file usingRuleId: ruleId [ - | params issues | + | params issues filePath | + filePath := sourcePath ifNotNil: [ file path removePrefix: (sourcePath, '/') ]ifNil: [ file path ]. + params := { - (#componentKeys -> (projectKey , ':' , file path)). + (#componentKeys -> (projectKey , ':' , filePath)). (#rules -> ruleId) } asDictionary. issues := sonarqubeApi issues searchWithParams: params.