Cleanup classes Remove the complicated constructor SimpleSubmitRulesModule, it is error-prone and Guice might not be entirely ready at this point. Remove #getConfig, which was only used once from NoUnresolvedCommentsRule. Directly call the right method. Qualify sub-classes imports. Change-Id: Ic5a6a4875861279ae237ca6438adf5fd7694a29e
diff --git a/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/SimpleSubmitRulesModule.java b/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/SimpleSubmitRulesModule.java index 821f794..874f6d5 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/SimpleSubmitRulesModule.java +++ b/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/SimpleSubmitRulesModule.java
@@ -14,42 +14,19 @@ package com.googlesource.gerrit.plugins.simplesubmitrules; -import com.google.common.annotations.VisibleForTesting; -import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.gerrit.extensions.restapi.RestApiModule; -import com.google.gerrit.server.config.PluginConfig; -import com.google.gerrit.server.config.PluginConfigFactory; -import com.google.gerrit.server.project.NoSuchProjectException; import com.google.gerrit.server.project.ProjectResource; -import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.rules.SubmitRule; import com.google.inject.AbstractModule; -import com.google.inject.Inject; import com.googlesource.gerrit.plugins.simplesubmitrules.config.ConfigServlet; import com.googlesource.gerrit.plugins.simplesubmitrules.config.ConfigTranslator; import com.googlesource.gerrit.plugins.simplesubmitrules.rules.NoUnresolvedCommentsRule; import com.googlesource.gerrit.plugins.simplesubmitrules.rules.RequireNonAuthorApprovalRule; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Bootstraps the Simple Submit Rules plugin */ public class SimpleSubmitRulesModule extends AbstractModule { - private static final Logger log = LoggerFactory.getLogger(SimpleSubmitRulesModule.class); - - /** Name of this plugin, as defined in the BUILD file */ - @VisibleForTesting protected static final String PLUGIN_NAME = "simple-submit-rules"; - - private static final String API_ENDPOINT = PLUGIN_NAME; - private final PluginConfigFactory pluginConfigFactory; - private final String pluginName; - - @Inject - public SimpleSubmitRulesModule( - PluginConfigFactory pluginConfigFactory, @PluginName String pluginName) { - this.pluginConfigFactory = pluginConfigFactory; - this.pluginName = pluginName; - } + private static final String API_ENDPOINT = "simple-submit-rules"; @Override protected void configure() { @@ -67,13 +44,4 @@ DynamicSet.bind(binder(), SubmitRule.class).to(RequireNonAuthorApprovalRule.class); DynamicSet.bind(binder(), SubmitRule.class).to(NoUnresolvedCommentsRule.class); } - - public PluginConfig getConfig(ChangeData changeData) { - try { - return pluginConfigFactory.getFromProjectConfig(changeData.project(), pluginName); - } catch (NoSuchProjectException e) { - log.error("Could not load plugin configuration", e); - return null; - } - } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigServlet.java b/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigServlet.java index 468969b..bedff8d 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigServlet.java +++ b/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigServlet.java
@@ -15,7 +15,7 @@ package com.googlesource.gerrit.plugins.simplesubmitrules.config; import com.google.gerrit.extensions.restapi.AuthException; -import com.google.gerrit.extensions.restapi.RestApiException; +import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.IdentifiedUser; @@ -59,10 +59,8 @@ } @Override - public Object apply( - ProjectResource resource, - com.googlesource.gerrit.plugins.simplesubmitrules.config.SubmitConfig inConfig) - throws PermissionBackendException, RestApiException, IOException { + public Object apply(ProjectResource resource, SubmitConfig inConfig) + throws PermissionBackendException, AuthException, BadRequestException, IOException { permissionBackend .user(resource.getUser())
diff --git a/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/SubmitConfig.java b/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/SubmitConfig.java index 20712a9..9c05ffc 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/SubmitConfig.java +++ b/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/SubmitConfig.java
@@ -22,8 +22,8 @@ import java.util.Set; public class SubmitConfig { - public Map<String, LabelDefinition> labels = new HashMap<>(); - public CommentsRules comments = new CommentsRules(); + public Map<String, SubmitConfig.LabelDefinition> labels = new HashMap<>(); + public SubmitConfig.CommentsRules comments = new SubmitConfig.CommentsRules(); @Override public String toString() { @@ -53,7 +53,7 @@ } static class CommentsRules { - boolean blockIfUnresolvedComments = false; + boolean blockIfUnresolvedComments; @Override public String toString() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/NoUnresolvedCommentsRule.java b/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/NoUnresolvedCommentsRule.java index 6712782..bd6451c 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/NoUnresolvedCommentsRule.java +++ b/src/main/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/NoUnresolvedCommentsRule.java
@@ -16,16 +16,17 @@ import com.google.common.collect.ImmutableList; import com.google.gerrit.common.data.SubmitRecord; -import com.google.gerrit.common.data.SubmitRecord.Status; import com.google.gerrit.common.data.SubmitRequirement; +import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.server.config.PluginConfig; +import com.google.gerrit.server.config.PluginConfigFactory; +import com.google.gerrit.server.project.NoSuchProjectException; import com.google.gerrit.server.project.SubmitRuleOptions; import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.rules.SubmitRule; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.googlesource.gerrit.plugins.simplesubmitrules.SimpleSubmitRulesConfig; -import com.googlesource.gerrit.plugins.simplesubmitrules.SimpleSubmitRulesModule; import java.util.Collection; import java.util.Collections; import org.slf4j.Logger; @@ -39,20 +40,31 @@ .setType("unresolved_comments") .setFallbackText("Resolve all comments") .build(); - private final SimpleSubmitRulesModule plugin; + private final PluginConfigFactory pluginConfigFactory; + private final String pluginName; @Inject - public NoUnresolvedCommentsRule(SimpleSubmitRulesModule plugin) { - this.plugin = plugin; + public NoUnresolvedCommentsRule( + PluginConfigFactory pluginConfigFactory, @PluginName String pluginName) { + this.pluginConfigFactory = pluginConfigFactory; + this.pluginName = pluginName; } @Override public Collection<SubmitRecord> evaluate(ChangeData cd, SubmitRuleOptions options) { - PluginConfig config = plugin.getConfig(cd); - boolean blockIfUnresolvedComments = + PluginConfig config; + try { + config = pluginConfigFactory.getFromProjectConfig(cd.project(), pluginName); + } catch (NoSuchProjectException e) { + log.error("Error when fetching config of change {}'s project", cd.getId(), e); + + return error("Error when fetching configuration"); + } + + boolean ruleEnabled = config.getBoolean(SimpleSubmitRulesConfig.KEY_BLOCK_IF_UNRESOLVED_COMMENTS, false); - if (!blockIfUnresolvedComments) { + if (!ruleEnabled) { return Collections.emptyList(); } @@ -62,20 +74,23 @@ } catch (OrmException e) { log.error("Error when counting unresolved comments for change {}", cd.getId(), e); - SubmitRecord sr = new SubmitRecord(); - sr.status = Status.RULE_ERROR; - sr.errorMessage = "Error when counting unresolved comments"; - return ImmutableList.of(sr); + return error("Error when counting unresolved comments"); } SubmitRecord sr = new SubmitRecord(); sr.requirements = Collections.singletonList(REQUIREMENT); - if (unresolvedComments == null || unresolvedComments > 0) { - sr.status = Status.NOT_READY; - } else { - sr.status = Status.OK; - } + sr.status = + unresolvedComments == null || unresolvedComments > 0 + ? SubmitRecord.Status.NOT_READY + : SubmitRecord.Status.OK; return ImmutableList.of(sr); } + + private static Collection<SubmitRecord> error(String errorMessage) { + SubmitRecord sr = new SubmitRecord(); + sr.status = SubmitRecord.Status.RULE_ERROR; + sr.errorMessage = errorMessage; + return ImmutableList.of(sr); + } }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/AbstractSimpleSubmitRulesIT.java b/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/AbstractSimpleSubmitRulesIT.java index d1f4f45..e73172f 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/AbstractSimpleSubmitRulesIT.java +++ b/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/AbstractSimpleSubmitRulesIT.java
@@ -26,12 +26,11 @@ import org.eclipse.jgit.lib.Config; import org.junit.Ignore; -@TestPlugin( - name = SimpleSubmitRulesModule.PLUGIN_NAME, - sysModule = "com.googlesource.gerrit.plugins.simplesubmitrules.SimpleSubmitRulesModule" -) -@Ignore /** Base class used by IT tests, loads the Simple Submit Rules plugin. */ +@TestPlugin( + name = "my-plugin", + sysModule = "com.googlesource.gerrit.plugins.simplesubmitrules.SimpleSubmitRulesModule") +@Ignore public abstract class AbstractSimpleSubmitRulesIT extends LightweightPluginDaemonTest { /** Helper method to change the project.config file using a provided consumer. */ protected void changeProjectConfig(Consumer<Config> callback) throws Exception {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigServletIT.java b/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigServletIT.java index 6b1e2ba..e83b0e9 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigServletIT.java +++ b/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigServletIT.java
@@ -21,7 +21,7 @@ import com.google.gerrit.common.RawInputUtil; import com.google.gerrit.common.data.LabelFunction; import com.google.gerrit.extensions.restapi.RawInput; -import com.google.gerrit.reviewdb.client.Project.NameKey; +import com.google.gerrit.reviewdb.client.Project; import com.googlesource.gerrit.plugins.simplesubmitrules.AbstractSimpleSubmitRulesIT; import org.junit.Before; import org.junit.Test; @@ -86,7 +86,7 @@ "application/json"); } - private static String endpointUrl(NameKey project) { + private static String endpointUrl(Project.NameKey project) { return "/projects/" + project.get() + "/simple-submit-rules"; } }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigTranslatorTest.java b/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigTranslatorTest.java index f3b95ca..332afb5 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigTranslatorTest.java +++ b/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/config/ConfigTranslatorTest.java
@@ -18,7 +18,6 @@ import com.google.common.collect.ImmutableList; import com.google.gerrit.common.data.LabelType; -import com.googlesource.gerrit.plugins.simplesubmitrules.config.SubmitConfig.LabelDefinition; import java.util.function.BiConsumer; import java.util.function.Predicate; import org.junit.Test; @@ -67,7 +66,7 @@ String copyScoreName, BiConsumer<LabelType, Boolean> functionToSet) { LabelType label = LabelType.withDefaultValues("Verified"); - LabelDefinition labelDefinition = new SubmitConfig.LabelDefinition(); + SubmitConfig.LabelDefinition labelDefinition = new SubmitConfig.LabelDefinition(); functionToSet.accept(label, false); ConfigTranslator.extractLabelCopyScores(label, labelDefinition); @@ -81,7 +80,7 @@ String copyScoreName, BiConsumer<LabelType, Boolean> functionToSet) { LabelType label = LabelType.withDefaultValues("Verified"); - LabelDefinition labelDefinition = new SubmitConfig.LabelDefinition(); + SubmitConfig.LabelDefinition labelDefinition = new SubmitConfig.LabelDefinition(); functionToSet.accept(label, true); ConfigTranslator.extractLabelCopyScores(label, labelDefinition);
diff --git a/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/NoUnresolvedCommentsRuleIT.java b/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/NoUnresolvedCommentsRuleIT.java index 3ae48f1..8e80861 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/NoUnresolvedCommentsRuleIT.java +++ b/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/NoUnresolvedCommentsRuleIT.java
@@ -22,10 +22,9 @@ import com.google.gerrit.acceptance.PushOneCommit; import com.google.gerrit.common.data.SubmitRecord; import com.google.gerrit.extensions.api.changes.ReviewInput; -import com.google.gerrit.extensions.api.changes.ReviewInput.CommentInput; import com.google.gerrit.extensions.client.Side; import com.google.gerrit.server.project.SubmitRuleOptions; -import com.google.inject.Inject; +import com.google.gerrit.server.query.change.ChangeData; import com.googlesource.gerrit.plugins.simplesubmitrules.AbstractSimpleSubmitRulesIT; import com.googlesource.gerrit.plugins.simplesubmitrules.SimpleSubmitRulesConfig; import java.util.Collection; @@ -35,7 +34,6 @@ @NoHttpd public class NoUnresolvedCommentsRuleIT extends AbstractSimpleSubmitRulesIT { private static final String FILENAME = "my.file"; - @Inject private NoUnresolvedCommentsRule rule; @Before public void enableRuleBeforeTest() throws Exception { @@ -44,12 +42,11 @@ @Test public void blocksWithUnresolvedComments() throws Exception { - CommentInput comment = newFileComment(); + ReviewInput.CommentInput comment = newFileComment(); comment.unresolved = true; PushOneCommit.Result r = createChangeWithComment(comment); - Collection<SubmitRecord> submitRecords = - rule.evaluate(r.getChange(), SubmitRuleOptions.defaults()); + Collection<SubmitRecord> submitRecords = evaluate(r.getChange(), SubmitRuleOptions.defaults()); assertThat(submitRecords).hasSize(1); SubmitRecord result = submitRecords.iterator().next(); @@ -60,12 +57,11 @@ @Test public void doesNotBlockWithNoComments() throws Exception { - CommentInput comment = newFileComment(); + ReviewInput.CommentInput comment = newFileComment(); comment.unresolved = false; PushOneCommit.Result r = createChangeWithComment(comment); - Collection<SubmitRecord> submitRecords = - rule.evaluate(r.getChange(), SubmitRuleOptions.defaults()); + Collection<SubmitRecord> submitRecords = evaluate(r.getChange(), SubmitRuleOptions.defaults()); assertThat(submitRecords).hasSize(1); SubmitRecord result = submitRecords.iterator().next(); @@ -79,7 +75,7 @@ PushOneCommit.Result change = createChange("refs/for/master"); Collection<SubmitRecord> submitRecords = - rule.evaluate(change.getChange(), SubmitRuleOptions.defaults()); + evaluate(change.getChange(), SubmitRuleOptions.defaults()); assertThat(submitRecords).hasSize(1); SubmitRecord result = submitRecords.iterator().next(); @@ -90,19 +86,18 @@ @Test public void doesNothingByDefault() throws Exception { - CommentInput comment = newFileComment(); + ReviewInput.CommentInput comment = newFileComment(); comment.unresolved = true; PushOneCommit.Result r = createChangeWithComment(comment); enableRule(false); - Collection<SubmitRecord> submitRecords = - rule.evaluate(r.getChange(), SubmitRuleOptions.defaults()); + Collection<SubmitRecord> submitRecords = evaluate(r.getChange(), SubmitRuleOptions.defaults()); assertThat(submitRecords).isEmpty(); } - private PushOneCommit.Result createChangeWithComment(CommentInput comment) throws Exception { + private PushOneCommit.Result createChangeWithComment(ReviewInput.CommentInput comment) throws Exception { PushOneCommit.Result r = createChange("My change", FILENAME, "new content"); ReviewInput reviewInput = new ReviewInput(); reviewInput.comments = ImmutableMap.of(comment.path, ImmutableList.of(comment)); @@ -121,8 +116,15 @@ newState)); } - private static CommentInput newFileComment() { - CommentInput c = new CommentInput(); + private Collection<SubmitRecord> evaluate(ChangeData cd, SubmitRuleOptions options) { + NoUnresolvedCommentsRule rule = + plugin.getSysInjector().getInstance(NoUnresolvedCommentsRule.class); + + return rule.evaluate(cd, options); + } + + private static ReviewInput.CommentInput newFileComment() { + ReviewInput.CommentInput c = new ReviewInput.CommentInput(); c.path = FILENAME; c.side = Side.REVISION; c.message = "nit: double space.";
diff --git a/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/RequireNonAuthorApprovalRuleTest.java b/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/RequireNonAuthorApprovalRuleTest.java index b1e0082..7324f55 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/RequireNonAuthorApprovalRuleTest.java +++ b/src/test/java/com/googlesource/gerrit/plugins/simplesubmitrules/rules/RequireNonAuthorApprovalRuleTest.java
@@ -24,7 +24,6 @@ import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.LabelId; import com.google.gerrit.reviewdb.client.PatchSet; -import com.google.gerrit.reviewdb.client.PatchSet.Id; import com.google.gerrit.reviewdb.client.PatchSetApproval; import java.time.Instant; import java.util.ArrayList; @@ -87,7 +86,8 @@ return new PatchSetApproval(key, (short) value, Date.from(Instant.now())); } - private static PatchSetApproval.Key makeKey(Id psId, Account.Id accountId, LabelId labelId) { + private static PatchSetApproval.Key makeKey( + PatchSet.Id psId, Account.Id accountId, LabelId labelId) { return new PatchSetApproval.Key(psId, accountId, labelId); }