import java.util.Optional.of
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicReference
+import net.pterodactylus.rhynodge.Action
import org.mockito.Mockito.mock
/**
}
@Test
+ fun `reaction runner triggers mail when last state does not exist and current state is successful`() {
+ val reactionState = createReactionState()
+ val emailSent = AtomicReference<String>()
+ val reaction = createReaction { emailSent.set(it.text("text/plain")) }
+ val reactionRunner = ReactionRunner(reaction, reactionState, nullEmailAction)
+ reactionRunner.run()
+ assertThat(emailSent.get(), equalTo("Test Output"))
+ }
+
+ @Test
fun `reaction runner saves state when unsuccessful and last state is failed`() {
val savedState = AtomicReference<State>()
val failedState = FailedState().apply { setFailCount(12) }
override fun execute(output: Output) = action()
}
+ private fun createReaction(action: (output: Output) -> Unit = {}) = object : Reaction("Test", mock(), mock(), Action { output, _ -> action(output) }) {
+ override fun query() = Query {
+ object : AbstractState(true, false) {
+ override fun plainText() = "Test Output"
+ }
+ }
+ }
+
private val reactionState = createReactionState()
private val failingReaction = object : Reaction("Test", mock(), mock(), mock()) {
override fun query() = Query { FailedState() }