From ccd2e0595b45662f9e41f314b940ada578943c29 Mon Sep 17 00:00:00 2001 From: Wanchang Ryu Date: Tue, 31 Oct 2023 11:50:31 +0900 Subject: [PATCH 1/2] Added GERRIT_EVENT_UPDATED_APPROVALS parameter --- .../GerritTriggerParameters.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTriggerParameters.java b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTriggerParameters.java index 548959751..8d01fdc7a 100644 --- a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTriggerParameters.java +++ b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTriggerParameters.java @@ -55,6 +55,7 @@ import java.util.List; import java.util.Set; import java.util.TreeSet; +import java.util.stream.Collectors; /** * The parameters to add to a build. @@ -246,7 +247,11 @@ public enum GerritTriggerParameters { /** * Comment posted to Gerrit in a comment-added event. */ - GERRIT_EVENT_COMMENT_TEXT; + GERRIT_EVENT_COMMENT_TEXT, + /** + * Updated approvals. + */ + GERRIT_EVENT_UPDATED_APPROVALS; private static final Logger logger = LoggerFactory.getLogger(GerritTriggerParameters.class); @@ -490,6 +495,8 @@ public static void setOrCreateParameters(GerritTriggeredEvent gerritEvent, Job p commentTextMode.setOrCreateParameterValue(GERRIT_EVENT_COMMENT_TEXT, parameters, comment, ParameterMode.PlainMode.TEXT, escapeQuotes); } + GERRIT_EVENT_UPDATED_APPROVALS.setOrCreateStringParameterValue(parameters, + getUpdateApprovals((CommentAdded)event), false); } } else if (gerritEvent instanceof RefUpdated) { RefUpdated event = (RefUpdated)gerritEvent; @@ -526,6 +533,18 @@ public static void setOrCreateParameters(GerritTriggeredEvent gerritEvent, Job p } } + /** + * Get the update approvals as json string from a CommentAddedEvent. + * + * @param event the event + * @return json string of updated approvals + */ + private static String getUpdateApprovals(CommentAdded event) { + return String.format("{%s}", ((CommentAdded)event).getApprovals().stream() + .filter(a -> a.isUpdated()).map(o -> String.format("\"%s\":{\"value\":\"%s\",\"old_value\":\"%s\"}", + o.getType(), o.getValue(), o.getOldValue())).collect(Collectors.joining(","))); + } + /** * Get the front end url from a ChangeBasedEvent. * From 7a8ec7d6f92cd16fdf9807c22677031beb101eea Mon Sep 17 00:00:00 2001 From: rsandell Date: Tue, 20 Feb 2024 13:56:38 +0100 Subject: [PATCH 2/2] Suggested code review changes --- .../GerritTriggerParameters.java | 21 ++++--- .../GerritTriggerParametersTest.java | 59 +++++++++++++++++-- 2 files changed, 67 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTriggerParameters.java b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTriggerParameters.java index 8d01fdc7a..dbd37cab1 100644 --- a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTriggerParameters.java +++ b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTriggerParameters.java @@ -30,7 +30,9 @@ import com.sonyericsson.hudson.plugins.gerrit.trigger.config.IGerritHudsonTriggerConfig; import com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.parameters.Base64EncodedStringParameterValue; import com.sonyericsson.hudson.plugins.gerrit.trigger.utils.StringUtil; +import com.sonymobile.tools.gerrit.gerritevents.dto.GerritEventKeys; import com.sonymobile.tools.gerrit.gerritevents.dto.attr.Account; +import com.sonymobile.tools.gerrit.gerritevents.dto.attr.Approval; import com.sonymobile.tools.gerrit.gerritevents.dto.attr.Provider; import com.sonymobile.tools.gerrit.gerritevents.dto.events.ChangeAbandoned; import com.sonymobile.tools.gerrit.gerritevents.dto.events.ChangeBasedEvent; @@ -44,6 +46,7 @@ import hudson.model.ParameterValue; import hudson.model.StringParameterValue; import hudson.model.TextParameterValue; +import net.sf.json.JSONObject; import org.jvnet.localizer.Localizable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -55,7 +58,6 @@ import java.util.List; import java.util.Set; import java.util.TreeSet; -import java.util.stream.Collectors; /** * The parameters to add to a build. @@ -496,7 +498,7 @@ public static void setOrCreateParameters(GerritTriggeredEvent gerritEvent, Job p parameters, comment, ParameterMode.PlainMode.TEXT, escapeQuotes); } GERRIT_EVENT_UPDATED_APPROVALS.setOrCreateStringParameterValue(parameters, - getUpdateApprovals((CommentAdded)event), false); + getUpdatedApprovals((CommentAdded)event), false); } } else if (gerritEvent instanceof RefUpdated) { RefUpdated event = (RefUpdated)gerritEvent; @@ -534,15 +536,20 @@ public static void setOrCreateParameters(GerritTriggeredEvent gerritEvent, Job p } /** - * Get the update approvals as json string from a CommentAddedEvent. + * Get the updated approvals as json string from a CommentAddedEvent. * * @param event the event * @return json string of updated approvals */ - private static String getUpdateApprovals(CommentAdded event) { - return String.format("{%s}", ((CommentAdded)event).getApprovals().stream() - .filter(a -> a.isUpdated()).map(o -> String.format("\"%s\":{\"value\":\"%s\",\"old_value\":\"%s\"}", - o.getType(), o.getValue(), o.getOldValue())).collect(Collectors.joining(","))); + static String getUpdatedApprovals(CommentAdded event) { + JSONObject updatedApprovals = event.getApprovals().stream() + .filter(Approval::isUpdated).collect(JSONObject::new, (JSONObject json, Approval apr) -> { + JSONObject j = new JSONObject(); + j.put(GerritEventKeys.VALUE, apr.getValue()); + j.put(GerritEventKeys.OLD_VALUE, apr.getOldValue()); + json.put(apr.getType(), j); + }, (jsonObject, jsonObject2) -> { }); + return updatedApprovals.toString(); } /** diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTriggerParametersTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTriggerParametersTest.java index 0a38c30ec..11e71fe5f 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTriggerParametersTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTriggerParametersTest.java @@ -27,20 +27,27 @@ import com.sonyericsson.hudson.plugins.gerrit.trigger.PluginImpl; import com.sonyericsson.hudson.plugins.gerrit.trigger.mock.MockGerritHudsonTriggerConfig; import com.sonyericsson.hudson.plugins.gerrit.trigger.mock.Setup; +import com.sonymobile.tools.gerrit.gerritevents.dto.GerritEventKeys; +import com.sonymobile.tools.gerrit.gerritevents.dto.events.CommentAdded; import com.sonymobile.tools.gerrit.gerritevents.dto.events.PatchsetCreated; import hudson.model.AbstractProject; import hudson.model.ParameterValue; import hudson.model.StringParameterValue; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.WithoutJenkins; import java.util.Collections; import java.util.LinkedList; import java.util.List; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; /** @@ -64,12 +71,14 @@ public class GerritTriggerParametersTest { */ @Before public void setup() { - config = Setup.createConfig(); - GerritServer server = new GerritServer(PluginImpl.DEFAULT_SERVER_NAME); - server.setConfig(config); - PluginImpl plugin = PluginImpl.getInstance(); - assertNotNull(plugin); - plugin.setServers(Collections.singletonList(server)); + if (j.jenkins != null) { + config = Setup.createConfig(); + GerritServer server = new GerritServer(PluginImpl.DEFAULT_SERVER_NAME); + server.setConfig(config); + PluginImpl plugin = PluginImpl.getInstance(); + assertNotNull(plugin); + plugin.setServers(Collections.singletonList(server)); + } //else running @WithoutJenkins } // CS IGNORE LineLength FOR NEXT 3 LINES. REASON: JavaDoc. @@ -131,6 +140,44 @@ public void setOrCreateParametersUrlNoProviderAnyServer() throws Exception { assertTrue(param.value.startsWith(config.getGerritFrontEndUrl())); } + @Test @WithoutJenkins + public void testGetUpdatedApprovals() { + JSONArray approvals = new JSONArray(); + JSONObject approval = new JSONObject(); + approval + .accumulate(GerritEventKeys.TYPE, "CODE") + .accumulate(GerritEventKeys.VALUE, "+1") + .accumulate(GerritEventKeys.OLD_VALUE, "0"); + approvals.add(approval); + approval = new JSONObject(); + approval + .accumulate(GerritEventKeys.TYPE, "CI") + .accumulate(GerritEventKeys.VALUE, "0") + .accumulate(GerritEventKeys.OLD_VALUE, "-1"); + approvals.add(approval); + approval = new JSONObject(); + approval + .accumulate(GerritEventKeys.TYPE, "VRF") + .accumulate(GerritEventKeys.VALUE, "0"); + approvals.add(approval); + + JSONObject e = new JSONObject() + .accumulate(GerritEventKeys.COMMENT, "Test") + .accumulate(GerritEventKeys.APPROVALS, approvals); + CommentAdded event = new CommentAdded(); + event.fromJson(e); + String updatedApprovalsStr = GerritTriggerParameters.getUpdatedApprovals(event); + JSONObject updatedApprovals = JSONObject.fromObject(updatedApprovalsStr); + JSONObject code = updatedApprovals.getJSONObject("CODE"); + assertEquals("+1", code.optString(GerritEventKeys.VALUE)); + assertEquals("0", code.optString(GerritEventKeys.OLD_VALUE)); + JSONObject ci = updatedApprovals.getJSONObject("CI"); + assertEquals("0", ci.optString(GerritEventKeys.VALUE)); + assertEquals("-1", ci.optString(GerritEventKeys.OLD_VALUE)); + assertNull(updatedApprovals.optJSONObject("VRF")); + + } + /** * Finds the given parameter in the list. *