From: David Roden Date: Fri, 20 Dec 2024 11:14:48 +0000 (+0100) Subject: ✨ Allow sending emails to multiple addresses again X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=48177c4a39af27cce9a68fe7bfd0f5a4183f2f26;p=rhynodge.git ✨ Allow sending emails to multiple addresses again --- diff --git a/src/main/java/net/pterodactylus/rhynodge/loader/Chain.java b/src/main/java/net/pterodactylus/rhynodge/loader/Chain.java index 3d6fbfe..516d0b0 100644 --- a/src/main/java/net/pterodactylus/rhynodge/loader/Chain.java +++ b/src/main/java/net/pterodactylus/rhynodge/loader/Chain.java @@ -105,6 +105,10 @@ public class Chain { @JsonProperty private List parameters = new ArrayList(); + /** Runtime arguments for the part. */ + @JsonProperty + private List runtimeArguments = new ArrayList<>(); + /** * Returns the name of the part’s class. * @@ -123,6 +127,10 @@ public class Chain { return parameters; } + public List getRuntimeArguments() { + return runtimeArguments; + } + /** * {@inheritDoc} */ @@ -133,6 +141,9 @@ public class Chain { for (Parameter parameter : parameters) { hashCode ^= parameter.hashCode(); } + for (Parameter runtimeArgument : runtimeArguments) { + hashCode ^= runtimeArgument.hashCode(); + } return hashCode; } @@ -144,18 +155,7 @@ public class Chain { if (!(object instanceof Part part)) { return false; } - if (!name.equals(part.name)) { - return false; - } - if (parameters.size() != part.parameters.size()) { - return false; - } - for (int parameterIndex = 0; parameterIndex < parameters.size(); ++parameterIndex) { - if (!parameters.get(parameterIndex).equals(part.parameters.get(parameterIndex))) { - return false; - } - } - return true; + return name.equals(part.name) && parameters.equals(part.parameters) && runtimeArguments.equals(part.runtimeArguments); } } diff --git a/src/main/java/net/pterodactylus/rhynodge/loader/ReactionLoader.java b/src/main/java/net/pterodactylus/rhynodge/loader/ReactionLoader.java index 44fa217..5632187 100644 --- a/src/main/java/net/pterodactylus/rhynodge/loader/ReactionLoader.java +++ b/src/main/java/net/pterodactylus/rhynodge/loader/ReactionLoader.java @@ -33,6 +33,7 @@ import net.pterodactylus.rhynodge.Watcher; import net.pterodactylus.rhynodge.loader.Chain.Parameter; import net.pterodactylus.rhynodge.loader.Chain.Part; import net.pterodactylus.rhynodge.Merger; +import net.pterodactylus.rhynodge.output.Output; /** * Creates {@link Reaction}s from {@link Chain}s. @@ -66,6 +67,9 @@ public class ReactionLoader { /* create action. */ Action action = createObject(chain.action().name(), "net.pterodactylus.rhynodge.actions", extractParameters(chain.action().parameters())); + if ((action == emailAction) && !chain.action().getRuntimeArguments().isEmpty()) { + action = (output, arguments) -> emailAction.execute(output, chain.action().getRuntimeArguments().stream().map(Parameter::value).toArray(String[]::new)); + } /* do we have a reaction defined? */ if (chain.watcher() != null) { diff --git a/src/test/kotlin/net/pterodactylus/rhynodge/loader/ReactionLoaderTest.kt b/src/test/kotlin/net/pterodactylus/rhynodge/loader/ReactionLoaderTest.kt index 767bf33..b96850c 100644 --- a/src/test/kotlin/net/pterodactylus/rhynodge/loader/ReactionLoaderTest.kt +++ b/src/test/kotlin/net/pterodactylus/rhynodge/loader/ReactionLoaderTest.kt @@ -10,6 +10,7 @@ import net.pterodactylus.rhynodge.Query import net.pterodactylus.rhynodge.State import net.pterodactylus.rhynodge.Watcher import net.pterodactylus.rhynodge.actions.EmailAction +import net.pterodactylus.rhynodge.output.DefaultOutput import net.pterodactylus.rhynodge.output.Output import net.pterodactylus.rhynodge.states.AbstractState import net.pterodactylus.util.inject.ObjectBinding @@ -17,6 +18,7 @@ import org.hamcrest.Matcher import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.Matchers.contains import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.hasItem import org.hamcrest.Matchers.instanceOf import org.hamcrest.Matchers.sameInstance import org.junit.jupiter.api.Test @@ -114,7 +116,15 @@ class ReactionLoaderTest { assertThat(reaction.action(), sameInstance(emailAction)) } - private val emailAction = EmailAction("local.host", "send@r", "recipi@nt") + @Test + fun `loader augments email action when runtime arguments are given`() { + val chain = objectMapper.readValue(javaClass.getResourceAsStream("chain-with-email-action-and-runtime-arguments.json")!!) + val reaction = reactionLoader.loadReaction(chain) + reaction.action().execute(DefaultOutput("")) + assertThat(emailAction.sentEmails, hasItem("test1@test.com")) + } + + private val emailAction = TestEmailAction("local.host", "send@r", "recipi@nt") private val reactionLoader = ReactionLoader(emailAction) } @@ -161,4 +171,14 @@ class TestWatcher3(val one: String, val two: String, val three: String) : Watche override fun merger() = TestMerger1(three) } +class TestEmailAction(hostname: String, sender: String, recipient: String) : EmailAction(hostname, sender, recipient) { + + override fun execute(output: Output, vararg additionalRecipients: String) { + additionalRecipients.forEach((sentEmails as MutableList)::add) + } + + val sentEmails: List = mutableListOf() + +} + private val objectMapper = ObjectMapper() diff --git a/src/test/resources/net/pterodactylus/rhynodge/loader/chain-with-email-action-and-runtime-arguments.json b/src/test/resources/net/pterodactylus/rhynodge/loader/chain-with-email-action-and-runtime-arguments.json new file mode 100644 index 0000000..bb63899 --- /dev/null +++ b/src/test/resources/net/pterodactylus/rhynodge/loader/chain-with-email-action-and-runtime-arguments.json @@ -0,0 +1,17 @@ +{ + "enabled": true, + "name": "Test Watcher", + "watcher": { + "class": "net.pterodactylus.rhynodge.loader.TestWatcher0" + }, + "action": { + "class": "EmailAction", + "runtimeArguments": [ + { + "name": "email", + "value": "test1@test.com" + } + ] + }, + "updateInterval": 7200 +}