From 0b150caaf2e836afb5a0bc1a95ec019a2460d59c Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 22 Oct 2025 15:42:00 +0200 Subject: [PATCH 1/5] decouple self merged merge request, and merged merge request --- .../MergedMergeRequestMetricTest.class.st | 37 ++- .../SelfMergedMergeRequestMetricTest.class.st | 286 ++++++++++++++++++ .../MergedMergeRequestMetric.class.st | 35 +-- .../SelfMergedMergeRequestMetric.class.st | 53 ++++ 4 files changed, 370 insertions(+), 41 deletions(-) create mode 100644 src/GitLabHealth-Model-Analysis-Tests/SelfMergedMergeRequestMetricTest.class.st create mode 100644 src/GitLabHealth-Model-Analysis/SelfMergedMergeRequestMetric.class.st diff --git a/src/GitLabHealth-Model-Analysis-Tests/MergedMergeRequestMetricTest.class.st b/src/GitLabHealth-Model-Analysis-Tests/MergedMergeRequestMetricTest.class.st index b52ee8e0..75ac574c 100644 --- a/src/GitLabHealth-Model-Analysis-Tests/MergedMergeRequestMetricTest.class.st +++ b/src/GitLabHealth-Model-Analysis-Tests/MergedMergeRequestMetricTest.class.st @@ -120,7 +120,7 @@ MergedMergeRequestMetricTest >> testCalculate1MROpenedButNotMerged [ { #category : #tests } MergedMergeRequestMetricTest >> testCalculate2MROneForEachUser [ - | result glhImporter mergedMergeRequest user2 | + | result glhImporter mergedMergeRequest user2 | "Given" @@ -212,55 +212,52 @@ MergedMergeRequestMetricTest >> testCalculate3MROpenButMergedByOthers [ { #category : #tests } MergedMergeRequestMetricTest >> testCalculate3MROpenByOther [ - | result glhImporter mergedMergeRequest user2 | + | result glhImporter mergedMergeRequest user2 | "Given" - user2 := GLHUser new name: 'user2'; id: 2; - contributedProjects: - { project1 }. + contributedProjects: { project1 }. glhImporter := GLPHImporterMock new. glhImporter mergeRequests: { (GLHMergeRequest new author: user2; title: 'MR1'; - created_at: createdAt ; + created_at: createdAt; merge_user: user; - project: project1 ; - state: #merged; - merged_at: mergedAt ). + project: project1; + state: #merged; + merged_at: mergedAt). (GLHMergeRequest new author: user2; - state: #merged; + state: #merged; title: 'MR2'; - created_at: createdAt ; - project: project1 ; + created_at: createdAt; + project: project1; merge_user: user; - merged_at: mergedAt ). + merged_at: mergedAt). (GLHMergeRequest new author: user2; - state: #merged; + state: #merged; title: 'MR3'; - created_at: createdAt ; - project: project1 ; + created_at: createdAt; + project: project1; merge_user: user; - merged_at: mergedAt ) }. + merged_at: mergedAt) }. mergedMergeRequest := MergedMergeRequestMetric new user: user; glhImporter: glhImporter; - setPeriodSince: since - until: until; + setPeriodSince: since until: until; over: Week. "When" result := mergedMergeRequest calculate. "Then" - self assert: result equals: 3 + self assert: result equals: 0 ] { #category : #tests } diff --git a/src/GitLabHealth-Model-Analysis-Tests/SelfMergedMergeRequestMetricTest.class.st b/src/GitLabHealth-Model-Analysis-Tests/SelfMergedMergeRequestMetricTest.class.st new file mode 100644 index 00000000..936da967 --- /dev/null +++ b/src/GitLabHealth-Model-Analysis-Tests/SelfMergedMergeRequestMetricTest.class.st @@ -0,0 +1,286 @@ +" +A MergedMergeRequestMetricTest is a test class for testing the behavior of MergedMergeRequestMetric +" +Class { + #name : #SelfMergedMergeRequestMetricTest, + #superclass : #UserMetricTest, + #category : #'GitLabHealth-Model-Analysis-Tests' +} + +{ #category : #tests } +SelfMergedMergeRequestMetricTest >> testCalculate [ + + | result glhImporter mergedMergeRequest | + "Given" + + + glhImporter := GLPHImporterMock new. + glhImporter mergeRequests: { + (GLHMergeRequest new + author: user; + merge_user: user; + project: project1; + created_at: createdAt ; + merged_at: mergedAt ). + + (GLHMergeRequest new + author: user; + merge_user: user; + project: project1; + created_at: createdAt - 20 days; + merged_at: nil) }. + + + mergedMergeRequest := SelfMergedMergeRequestMetric new + user: user; + glhImporter: glhImporter; + setPeriodSince: since + until: until; + over: Week. + + "When" + result := mergedMergeRequest calculate. + + "Then" + self assert: result equals: 1 +] + +{ #category : #tests } +SelfMergedMergeRequestMetricTest >> testCalculate1MRInPeriod1Outside [ + + | result glhImporter mergedMergeRequest | + "Given" + glhImporter := GLPHImporterMock new. + glhImporter mergeRequests: { + (GLHMergeRequest new + author: user; + project: project1; + merge_user: user; + created_at: createdAt; + merged_at: mergedAt). + + "open but merged anotherWeek" + (GLHMergeRequest new + author: user; + merge_user: user; + project: project1; + created_at: createdAt; + merged_at: createdAt + 10 days) }. + "open and merge during the same week" + + + mergedMergeRequest := SelfMergedMergeRequestMetric new + user: user; + glhImporter: glhImporter; + setPeriodSince: since until: until; + over: Week. + + "When" + result := mergedMergeRequest calculate. + + "Then" + self assert: result equals: 1 +] + +{ #category : #tests } +SelfMergedMergeRequestMetricTest >> testCalculate1MROpenedButNotMerged [ + + | result glhImporter mergedMergeRequest | + "Given" + glhImporter := GLPHImporterMock new. + glhImporter mergeRequests: { + (GLHMergeRequest new + author: user; + merge_user: user; + project: project1; + created_at: createdAt; + merged_at: mergedAt; + state: #merged). + + (GLHMergeRequest new + author: user; + project: project1; + created_at: createdAt; + state: #opened) }. + + + mergedMergeRequest := SelfMergedMergeRequestMetric new + user: user; + glhImporter: glhImporter; + setPeriodSince: since until: until; + over: Week. + + "When" + result := mergedMergeRequest calculate. + + "Then" + self assert: result equals: 1 +] + +{ #category : #tests } +SelfMergedMergeRequestMetricTest >> testCalculate2MROneForEachUser [ + + | result glhImporter mergedMergeRequest user2 | + "Given" + + + user2 := GLHUser new + name: 'user2'; + id: 2; + contributedProjects: { project1 }. + + glhImporter := GLPHImporterMock new. + glhImporter mergeRequests: { + (GLHMergeRequest new + author: user; + title: 'MR1'; + project: project1; + created_at: createdAt; + merge_user: user; + merged_at: mergedAt). + (GLHMergeRequest new + author: user2; + title: 'MR2'; + project: project1; + created_at: createdAt; + merge_user: user2; + merged_at: mergedAt) }. + + + mergedMergeRequest := SelfMergedMergeRequestMetric new + user: user; + glhImporter: glhImporter; + setPeriodSince: since until: until; + over: Week. + + "When" + result := mergedMergeRequest calculate. + + "Then" + self assert: result equals: 1 +] + +{ #category : #tests } +SelfMergedMergeRequestMetricTest >> testCalculate3MROpenButMergedByOthers [ + + | result glhImporter mergedMergeRequest user2 | + "Given" + + + user2 := GLHUser new + name: 'user2'; + id: 2; + contributedProjects: + { project1 }. + + glhImporter := GLPHImporterMock new. + glhImporter mergeRequests: { + (GLHMergeRequest new + author: user; + title: 'MR1'; + created_at: createdAt; + merge_user: user2; + merged_at: mergedAt ). + (GLHMergeRequest new + author: user; + title: 'MR2'; + created_at: createdAt ; + merge_user: user2; + merged_at: mergedAt ). + (GLHMergeRequest new + author: user; + title: 'MR3'; + created_at: createdAt ; + merge_user: user2; + merged_at: mergedAt ) }. + + + mergedMergeRequest := SelfMergedMergeRequestMetric new + user: user; + glhImporter: glhImporter; + setPeriodSince: since + until: until; + over: Week. + + "When" + result := mergedMergeRequest calculate. + + "Then" + self assert: result equals: 0 +] + +{ #category : #tests } +SelfMergedMergeRequestMetricTest >> testCalculate3MROpenByOther [ + + | result glhImporter mergedMergeRequest user2 | + "Given" + + user2 := GLHUser new + name: 'user2'; + id: 2; + contributedProjects: + { project1 }. + + glhImporter := GLPHImporterMock new. + glhImporter mergeRequests: { + (GLHMergeRequest new + author: user2; + title: 'MR1'; + created_at: createdAt ; + merge_user: user; + project: project1 ; + state: #merged; + merged_at: mergedAt ). + (GLHMergeRequest new + author: user2; + state: #merged; + title: 'MR2'; + created_at: createdAt ; + project: project1 ; + merge_user: user; + merged_at: mergedAt ). + (GLHMergeRequest new + author: user2; + state: #merged; + title: 'MR3'; + created_at: createdAt ; + project: project1 ; + merge_user: user; + merged_at: mergedAt ) }. + + + mergedMergeRequest := SelfMergedMergeRequestMetric new + user: user; + glhImporter: glhImporter; + setPeriodSince: since + until: until; + over: Week. + + "When" + result := mergedMergeRequest calculate. + + "Then" + self assert: result equals: 3 +] + +{ #category : #tests } +SelfMergedMergeRequestMetricTest >> testCalculateNoMergeRequests [ + + | result glhImporter mergedMergeRequest | + "Given" + glhImporter := GLPHImporterMock new. + + + mergedMergeRequest := SelfMergedMergeRequestMetric new + user: user; + glhImporter: glhImporter; + setPeriodSince: since + until: until; + over: Week. + + "When" + result := mergedMergeRequest calculate. + + "Then" + self assert: result equals: 0 +] diff --git a/src/GitLabHealth-Model-Analysis/MergedMergeRequestMetric.class.st b/src/GitLabHealth-Model-Analysis/MergedMergeRequestMetric.class.st index 5c94dcf5..5357c35f 100644 --- a/src/GitLabHealth-Model-Analysis/MergedMergeRequestMetric.class.st +++ b/src/GitLabHealth-Model-Analysis/MergedMergeRequestMetric.class.st @@ -1,3 +1,9 @@ +" +I compute the case where an MR has for author the _user_, and has been merged + +If the merge is merged by someone else, it counts since my _user_ created the MR +If the merge is created by someone else, and my _user_ merge it, it does not cound (the important is that the _user_ created it) +" Class { #name : #MergedMergeRequestMetric, #superclass : #UserMergeRequestMetric, @@ -7,22 +13,17 @@ Class { { #category : #calculating } MergedMergeRequestMetric >> calculate [ - | groupedByDate userMergedMergeRequests dateOver | - userMergeRequests ifNil: [ self load ]. + | groupedByDate dateOver | + userMergeRequests ifNil: [ self load ]. groupedByDate := self setupGroupedDate. - "filter to see the MR associated to one user" - userMergedMergeRequests := userMergeRequests select: [ - :userMergeRequest | - userMergeRequest merge_user isNotNil - and: [ userMergeRequest merge_user id = user id ] ]. - + "filter to reject MR that are not merge" - userMergedMergeRequests := userMergedMergeRequests reject: [ :mr | mr merged_at isNil ]. - - userMergedMergeRequests do: [ :userMergeRequest | - "here we look at the specific date of its merged" + userMergeRequests := userMergeRequests reject: [ :mr | + mr merged_at isNil ]. + + userMergeRequests do: [ :userMergeRequest | "here we look at the specific date of its merged" dateOver := self transformDate: userMergeRequest merged_at to: over. groupedByDate at: dateOver printString @@ -35,15 +36,7 @@ MergedMergeRequestMetric >> calculate [ { #category : #accessing } MergedMergeRequestMetric >> description [ - ^ 'number of merge request merged by this user' -] - -{ #category : #loading } -MergedMergeRequestMetric >> load [ - - userMergeRequests := self - loadMergeRequestsSince: (period at: #since) - until: (period at: #until) + ^ 'number of merge request created by this user that is merged' ] { #category : #accessing } diff --git a/src/GitLabHealth-Model-Analysis/SelfMergedMergeRequestMetric.class.st b/src/GitLabHealth-Model-Analysis/SelfMergedMergeRequestMetric.class.st new file mode 100644 index 00000000..5381b140 --- /dev/null +++ b/src/GitLabHealth-Model-Analysis/SelfMergedMergeRequestMetric.class.st @@ -0,0 +1,53 @@ +Class { + #name : #SelfMergedMergeRequestMetric, + #superclass : #UserMergeRequestMetric, + #category : #'GitLabHealth-Model-Analysis' +} + +{ #category : #calculating } +SelfMergedMergeRequestMetric >> calculate [ + + | groupedByDate userMergedMergeRequests dateOver | + userMergeRequests ifNil: [ self load ]. + + groupedByDate := self setupGroupedDate. + + "filter to see the MR associated to one user" + userMergedMergeRequests := userMergeRequests select: [ + :userMergeRequest | + userMergeRequest merge_user isNotNil + and: [ userMergeRequest merge_user id = user id ] ]. + + "filter to reject MR that are not merge" + userMergedMergeRequests := userMergedMergeRequests reject: [ :mr | mr merged_at isNil ]. + + userMergedMergeRequests do: [ :userMergeRequest | + "here we look at the specific date of its merged" + dateOver := self transformDate: userMergeRequest merged_at to: over. + groupedByDate + at: dateOver printString + ifPresent: [ :value | value add: userMergeRequest ] ]. + groupedByDate := groupedByDate collect: [ :group | group size ]. + + ^ groupedByDate average asFloat +] + +{ #category : #accessing } +SelfMergedMergeRequestMetric >> description [ + + ^ 'number of merge request merged by this user' +] + +{ #category : #'as yet unclassified' } +SelfMergedMergeRequestMetric >> load [ + + userMergeRequests := self + loadMergeRequestsSince: (period at: #since) + until: (period at: #until) +] + +{ #category : #accessing } +SelfMergedMergeRequestMetric >> name [ + + ^ 'selfMergedMergeRequest' +] From 5336fc472c575a7ea3385f07aa4f28caef945d13 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 22 Oct 2025 15:48:56 +0200 Subject: [PATCH 2/5] rename MergeRequestMergedByUser --- ...rgeRequestMergedByUserMetricTest.class.st} | 30 +++++++++---------- ...> MergeRequestMergedByUserMetric.class.st} | 10 +++---- 2 files changed, 20 insertions(+), 20 deletions(-) rename src/GitLabHealth-Model-Analysis-Tests/{SelfMergedMergeRequestMetricTest.class.st => MergeRequestMergedByUserMetricTest.class.st} (86%) rename src/GitLabHealth-Model-Analysis/{SelfMergedMergeRequestMetric.class.st => MergeRequestMergedByUserMetric.class.st} (86%) diff --git a/src/GitLabHealth-Model-Analysis-Tests/SelfMergedMergeRequestMetricTest.class.st b/src/GitLabHealth-Model-Analysis-Tests/MergeRequestMergedByUserMetricTest.class.st similarity index 86% rename from src/GitLabHealth-Model-Analysis-Tests/SelfMergedMergeRequestMetricTest.class.st rename to src/GitLabHealth-Model-Analysis-Tests/MergeRequestMergedByUserMetricTest.class.st index 936da967..44afbd81 100644 --- a/src/GitLabHealth-Model-Analysis-Tests/SelfMergedMergeRequestMetricTest.class.st +++ b/src/GitLabHealth-Model-Analysis-Tests/MergeRequestMergedByUserMetricTest.class.st @@ -2,13 +2,13 @@ A MergedMergeRequestMetricTest is a test class for testing the behavior of MergedMergeRequestMetric " Class { - #name : #SelfMergedMergeRequestMetricTest, + #name : #MergeRequestMergedByUserMetricTest, #superclass : #UserMetricTest, #category : #'GitLabHealth-Model-Analysis-Tests' } { #category : #tests } -SelfMergedMergeRequestMetricTest >> testCalculate [ +MergeRequestMergedByUserMetricTest >> testCalculate [ | result glhImporter mergedMergeRequest | "Given" @@ -31,7 +31,7 @@ SelfMergedMergeRequestMetricTest >> testCalculate [ merged_at: nil) }. - mergedMergeRequest := SelfMergedMergeRequestMetric new + mergedMergeRequest := MergeRequestMergedByUserMetric new user: user; glhImporter: glhImporter; setPeriodSince: since @@ -46,7 +46,7 @@ SelfMergedMergeRequestMetricTest >> testCalculate [ ] { #category : #tests } -SelfMergedMergeRequestMetricTest >> testCalculate1MRInPeriod1Outside [ +MergeRequestMergedByUserMetricTest >> testCalculate1MRInPeriod1Outside [ | result glhImporter mergedMergeRequest | "Given" @@ -69,7 +69,7 @@ SelfMergedMergeRequestMetricTest >> testCalculate1MRInPeriod1Outside [ "open and merge during the same week" - mergedMergeRequest := SelfMergedMergeRequestMetric new + mergedMergeRequest := MergeRequestMergedByUserMetric new user: user; glhImporter: glhImporter; setPeriodSince: since until: until; @@ -83,7 +83,7 @@ SelfMergedMergeRequestMetricTest >> testCalculate1MRInPeriod1Outside [ ] { #category : #tests } -SelfMergedMergeRequestMetricTest >> testCalculate1MROpenedButNotMerged [ +MergeRequestMergedByUserMetricTest >> testCalculate1MROpenedButNotMerged [ | result glhImporter mergedMergeRequest | "Given" @@ -104,7 +104,7 @@ SelfMergedMergeRequestMetricTest >> testCalculate1MROpenedButNotMerged [ state: #opened) }. - mergedMergeRequest := SelfMergedMergeRequestMetric new + mergedMergeRequest := MergeRequestMergedByUserMetric new user: user; glhImporter: glhImporter; setPeriodSince: since until: until; @@ -118,7 +118,7 @@ SelfMergedMergeRequestMetricTest >> testCalculate1MROpenedButNotMerged [ ] { #category : #tests } -SelfMergedMergeRequestMetricTest >> testCalculate2MROneForEachUser [ +MergeRequestMergedByUserMetricTest >> testCalculate2MROneForEachUser [ | result glhImporter mergedMergeRequest user2 | "Given" @@ -147,7 +147,7 @@ SelfMergedMergeRequestMetricTest >> testCalculate2MROneForEachUser [ merged_at: mergedAt) }. - mergedMergeRequest := SelfMergedMergeRequestMetric new + mergedMergeRequest := MergeRequestMergedByUserMetric new user: user; glhImporter: glhImporter; setPeriodSince: since until: until; @@ -161,7 +161,7 @@ SelfMergedMergeRequestMetricTest >> testCalculate2MROneForEachUser [ ] { #category : #tests } -SelfMergedMergeRequestMetricTest >> testCalculate3MROpenButMergedByOthers [ +MergeRequestMergedByUserMetricTest >> testCalculate3MROpenButMergedByOthers [ | result glhImporter mergedMergeRequest user2 | "Given" @@ -195,7 +195,7 @@ SelfMergedMergeRequestMetricTest >> testCalculate3MROpenButMergedByOthers [ merged_at: mergedAt ) }. - mergedMergeRequest := SelfMergedMergeRequestMetric new + mergedMergeRequest := MergeRequestMergedByUserMetric new user: user; glhImporter: glhImporter; setPeriodSince: since @@ -210,7 +210,7 @@ SelfMergedMergeRequestMetricTest >> testCalculate3MROpenButMergedByOthers [ ] { #category : #tests } -SelfMergedMergeRequestMetricTest >> testCalculate3MROpenByOther [ +MergeRequestMergedByUserMetricTest >> testCalculate3MROpenByOther [ | result glhImporter mergedMergeRequest user2 | "Given" @@ -249,7 +249,7 @@ SelfMergedMergeRequestMetricTest >> testCalculate3MROpenByOther [ merged_at: mergedAt ) }. - mergedMergeRequest := SelfMergedMergeRequestMetric new + mergedMergeRequest := MergeRequestMergedByUserMetric new user: user; glhImporter: glhImporter; setPeriodSince: since @@ -264,14 +264,14 @@ SelfMergedMergeRequestMetricTest >> testCalculate3MROpenByOther [ ] { #category : #tests } -SelfMergedMergeRequestMetricTest >> testCalculateNoMergeRequests [ +MergeRequestMergedByUserMetricTest >> testCalculateNoMergeRequests [ | result glhImporter mergedMergeRequest | "Given" glhImporter := GLPHImporterMock new. - mergedMergeRequest := SelfMergedMergeRequestMetric new + mergedMergeRequest := MergeRequestMergedByUserMetric new user: user; glhImporter: glhImporter; setPeriodSince: since diff --git a/src/GitLabHealth-Model-Analysis/SelfMergedMergeRequestMetric.class.st b/src/GitLabHealth-Model-Analysis/MergeRequestMergedByUserMetric.class.st similarity index 86% rename from src/GitLabHealth-Model-Analysis/SelfMergedMergeRequestMetric.class.st rename to src/GitLabHealth-Model-Analysis/MergeRequestMergedByUserMetric.class.st index 5381b140..6e7fd5bb 100644 --- a/src/GitLabHealth-Model-Analysis/SelfMergedMergeRequestMetric.class.st +++ b/src/GitLabHealth-Model-Analysis/MergeRequestMergedByUserMetric.class.st @@ -1,11 +1,11 @@ Class { - #name : #SelfMergedMergeRequestMetric, + #name : #MergeRequestMergedByUserMetric, #superclass : #UserMergeRequestMetric, #category : #'GitLabHealth-Model-Analysis' } { #category : #calculating } -SelfMergedMergeRequestMetric >> calculate [ +MergeRequestMergedByUserMetric >> calculate [ | groupedByDate userMergedMergeRequests dateOver | userMergeRequests ifNil: [ self load ]. @@ -33,13 +33,13 @@ SelfMergedMergeRequestMetric >> calculate [ ] { #category : #accessing } -SelfMergedMergeRequestMetric >> description [ +MergeRequestMergedByUserMetric >> description [ ^ 'number of merge request merged by this user' ] { #category : #'as yet unclassified' } -SelfMergedMergeRequestMetric >> load [ +MergeRequestMergedByUserMetric >> load [ userMergeRequests := self loadMergeRequestsSince: (period at: #since) @@ -47,7 +47,7 @@ SelfMergedMergeRequestMetric >> load [ ] { #category : #accessing } -SelfMergedMergeRequestMetric >> name [ +MergeRequestMergedByUserMetric >> name [ ^ 'selfMergedMergeRequest' ] From 0e66413204bf3215dd3c8b8b2539f66095669798 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 22 Oct 2025 15:53:13 +0200 Subject: [PATCH 3/5] update name --- .../MergeRequestMergedByUserMetric.class.st | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GitLabHealth-Model-Analysis/MergeRequestMergedByUserMetric.class.st b/src/GitLabHealth-Model-Analysis/MergeRequestMergedByUserMetric.class.st index 6e7fd5bb..f0c718d2 100644 --- a/src/GitLabHealth-Model-Analysis/MergeRequestMergedByUserMetric.class.st +++ b/src/GitLabHealth-Model-Analysis/MergeRequestMergedByUserMetric.class.st @@ -49,5 +49,5 @@ MergeRequestMergedByUserMetric >> load [ { #category : #accessing } MergeRequestMergedByUserMetric >> name [ - ^ 'selfMergedMergeRequest' + ^ 'mergeRequestMergedByThisUser' ] From a5896feed889056b924670bd946d77cf75dd1188 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 22 Oct 2025 15:56:31 +0200 Subject: [PATCH 4/5] add tests on period --- .../MergedMergeRequestMetricTest.class.st | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/src/GitLabHealth-Model-Analysis-Tests/MergedMergeRequestMetricTest.class.st b/src/GitLabHealth-Model-Analysis-Tests/MergedMergeRequestMetricTest.class.st index 75ac574c..88d40560 100644 --- a/src/GitLabHealth-Model-Analysis-Tests/MergedMergeRequestMetricTest.class.st +++ b/src/GitLabHealth-Model-Analysis-Tests/MergedMergeRequestMetricTest.class.st @@ -45,6 +45,80 @@ MergedMergeRequestMetricTest >> testCalculate [ self assert: result equals: 1 ] +{ #category : #tests } +MergedMergeRequestMetricTest >> testCalculate1MRCreatedBeforeAndMergeAfterPeriod [ + + | result glhImporter mergedMergeRequest | + "Given" + glhImporter := GLPHImporterMock new. + glhImporter mergeRequests: { + (GLHMergeRequest new + author: user; + project: project1; + merge_user: user; + created_at: createdAt; + merged_at: mergedAt). + + "opened anotherWeek" + (GLHMergeRequest new + author: user; + merge_user: user; + project: project1; + created_at: createdAt - 10 days; + merged_at: createdAt + 10 days) }. + "open and merge during the same week" + + + mergedMergeRequest := MergedMergeRequestMetric new + user: user; + glhImporter: glhImporter; + setPeriodSince: since until: until; + over: Week. + + "When" + result := mergedMergeRequest calculate. + + "Then" + self assert: result equals: 1 +] + +{ #category : #tests } +MergedMergeRequestMetricTest >> testCalculate1MRCreatedBeforePeriod [ + + | result glhImporter mergedMergeRequest | + "Given" + glhImporter := GLPHImporterMock new. + glhImporter mergeRequests: { + (GLHMergeRequest new + author: user; + project: project1; + merge_user: user; + created_at: createdAt; + merged_at: mergedAt). + + "opened anotherWeek" + (GLHMergeRequest new + author: user; + merge_user: user; + project: project1; + created_at: createdAt - 10 days; + merged_at: createdAt) }. + "open and merge during the same week" + + + mergedMergeRequest := MergedMergeRequestMetric new + user: user; + glhImporter: glhImporter; + setPeriodSince: since until: until; + over: Week. + + "When" + result := mergedMergeRequest calculate. + + "Then" + self assert: result equals: 2 +] + { #category : #tests } MergedMergeRequestMetricTest >> testCalculate1MRInPeriod1Outside [ From bb78c65d377eb15472cf8ab65bc83d020dd26655 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Mon, 3 Nov 2025 09:23:48 +0100 Subject: [PATCH 5/5] fix variable usage --- .../MergeRequestMergedByUserMetric.class.st | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/GitLabHealth-Model-Analysis/MergeRequestMergedByUserMetric.class.st b/src/GitLabHealth-Model-Analysis/MergeRequestMergedByUserMetric.class.st index f0c718d2..fe35e940 100644 --- a/src/GitLabHealth-Model-Analysis/MergeRequestMergedByUserMetric.class.st +++ b/src/GitLabHealth-Model-Analysis/MergeRequestMergedByUserMetric.class.st @@ -1,6 +1,9 @@ Class { #name : #MergeRequestMergedByUserMetric, #superclass : #UserMergeRequestMetric, + #instVars : [ + 'allMergeRequestDuringPeriod' + ], #category : #'GitLabHealth-Model-Analysis' } @@ -8,21 +11,22 @@ Class { MergeRequestMergedByUserMetric >> calculate [ | groupedByDate userMergedMergeRequests dateOver | - userMergeRequests ifNil: [ self load ]. + allMergeRequestDuringPeriod ifNil: [ self load ]. groupedByDate := self setupGroupedDate. "filter to see the MR associated to one user" - userMergedMergeRequests := userMergeRequests select: [ + userMergedMergeRequests := allMergeRequestDuringPeriod select: [ :userMergeRequest | - userMergeRequest merge_user isNotNil - and: [ userMergeRequest merge_user id = user id ] ]. - + userMergeRequest merge_user isNotNil + and: [ + userMergeRequest merge_user id = user id ] ]. + "filter to reject MR that are not merge" - userMergedMergeRequests := userMergedMergeRequests reject: [ :mr | mr merged_at isNil ]. - - userMergedMergeRequests do: [ :userMergeRequest | - "here we look at the specific date of its merged" + userMergedMergeRequests := userMergedMergeRequests reject: [ :mr | + mr merged_at isNil ]. + + userMergedMergeRequests do: [ :userMergeRequest | "here we look at the specific date of its merged" dateOver := self transformDate: userMergeRequest merged_at to: over. groupedByDate at: dateOver printString @@ -38,10 +42,10 @@ MergeRequestMergedByUserMetric >> description [ ^ 'number of merge request merged by this user' ] -{ #category : #'as yet unclassified' } +{ #category : #loading } MergeRequestMergedByUserMetric >> load [ - userMergeRequests := self + allMergeRequestDuringPeriod := self loadMergeRequestsSince: (period at: #since) until: (period at: #until) ]