package io.dropwizard.testing.junit;
import io.dropwizard.testing.DropwizardTestSupport;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.RuleChain;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.times;
public class DropwizardAppRuleReentrantTest {
@Rule
public MockitoRule mockitoRule = MockitoJUnit.rule();
@Mock
DropwizardTestSupport<TestConfiguration> testSupport;
@Mock
Statement statement;
@Mock
Description description;
@Test
public void testReentrantRuleStartsApplicationOnlyOnce() throws Throwable {
DropwizardAppRule<TestConfiguration> dropwizardAppRule = new DropwizardAppRule<>(testSupport);
RuleChain.outerRule(dropwizardAppRule)
.around(dropwizardAppRule) // recursive
.apply(statement, description)
.evaluate();
InOrder inOrder = inOrder(testSupport, statement, description);
inOrder.verify(testSupport, times(1)).before();
inOrder.verify(statement).evaluate();
inOrder.verify(testSupport, times(1)).after();
inOrder.verifyNoMoreInteractions();
}
}