From 55dbfff763b2c0a98faf780e896df8a9a27f14e5 Mon Sep 17 00:00:00 2001 From: Yegor Bugayenko Date: Wed, 20 Jul 2022 17:36:08 +0300 Subject: [PATCH] #1379 DropsTalk introduced --- src/main/java/com/rultor/agents/Agents.java | 2 + .../com/rultor/agents/github/DropsTalk.java | 75 +++++++++++++++++++ .../rultor/agents/github/DropsTalkTest.java | 67 +++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 src/main/java/com/rultor/agents/github/DropsTalk.java create mode 100644 src/test/java/com/rultor/agents/github/DropsTalkTest.java diff --git a/src/main/java/com/rultor/agents/Agents.java b/src/main/java/com/rultor/agents/Agents.java index 976a3799de..8ba9c77451 100644 --- a/src/main/java/com/rultor/agents/Agents.java +++ b/src/main/java/com/rultor/agents/Agents.java @@ -49,6 +49,7 @@ import com.rultor.agents.docker.DockerExec; import com.rultor.agents.github.CommentsTag; import com.rultor.agents.github.Dephantomizes; +import com.rultor.agents.github.DropsTalk; import com.rultor.agents.github.Invitations; import com.rultor.agents.github.Question; import com.rultor.agents.github.ReleaseBinaries; @@ -235,6 +236,7 @@ public Agent agent(final Talk talk, final Profile profile) return new Agent.Iterative( new SanitizesDaemon(), new WipesDaemon(), + new DropsTalk(), new Understands( this.github, new QnSafe(question) diff --git a/src/main/java/com/rultor/agents/github/DropsTalk.java b/src/main/java/com/rultor/agents/github/DropsTalk.java new file mode 100644 index 0000000000..2265fe40f9 --- /dev/null +++ b/src/main/java/com/rultor/agents/github/DropsTalk.java @@ -0,0 +1,75 @@ +/** + * Copyright (c) 2009-2022 Yegor Bugayenko + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: 1) Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. 2) Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. 3) Neither the name of the rultor.com nor + * the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.rultor.agents.github; + +import com.jcabi.aspects.Immutable; +import com.jcabi.log.Logger; +import com.jcabi.xml.XML; +import com.rultor.agents.AbstractAgent; +import java.io.IOException; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.xembly.Directive; +import org.xembly.Directives; + +/** + * Drops talk if there is no 'wire' in it, but it's still + * set to 'later' processing. + * + * @author Yegor Bugayenko (yegor256@gmail.com) + * @version $Id$ + * @since 1.72 + */ +@Immutable +@ToString +@EqualsAndHashCode(callSuper = false) +public final class DropsTalk extends AbstractAgent { + + /** + * Ctor. + */ + public DropsTalk() { + super("/talk[not(wire) and @later='true']"); + } + + // @checkstyle ExecutableStatementCountCheck (50 lines) + // @checkstyle CyclomaticComplexityCheck (100 lines) + @Override + public Iterable process(final XML xml) throws IOException { + Logger.info( + this, "The talk %s is lost, has no wire, dropped it", + xml.xpath("/talk/@name").get(0) + ); + return new Directives() + .xpath("/talk") + .attr("later", Boolean.toString(false)); + } + +} diff --git a/src/test/java/com/rultor/agents/github/DropsTalkTest.java b/src/test/java/com/rultor/agents/github/DropsTalkTest.java new file mode 100644 index 0000000000..72d085ee52 --- /dev/null +++ b/src/test/java/com/rultor/agents/github/DropsTalkTest.java @@ -0,0 +1,67 @@ +/** + * Copyright (c) 2009-2022 Yegor Bugayenko + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: 1) Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. 2) Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. 3) Neither the name of the rultor.com nor + * the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT + * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.rultor.agents.github; + +import com.jcabi.matchers.XhtmlMatchers; +import com.rultor.spi.Agent; +import com.rultor.spi.Talk; +import org.hamcrest.MatcherAssert; +import org.junit.jupiter.api.Test; +import org.xembly.Directives; + +/** + * Tests for ${@link DropsTalk}. + * + * @author Yegor Bugayenko (yegor256@gmail.com) + * @version $Id$ + * @since 1.3 + */ +public final class DropsTalkTest { + + /** + * Removes 'later' attr. + * @throws Exception In case of error. + */ + @Test + public void dropsLostTalk() throws Exception { + final Talk talk = new Talk.InFile(); + talk.modify( + new Directives().xpath("/talk") + .attr("later", "true") + ); + final Agent agent = new DropsTalk(); + agent.execute(talk); + MatcherAssert.assertThat( + talk.read(), + XhtmlMatchers.hasXPaths("/talk[@later='false']") + ); + } + +}