package me.atam.atam4jsampleapp; import me.atam.atam4j.PollingPredicate; import me.atam.atam4j.dummytests.PassingTestWithNoCategory; import me.atam.atam4j.dummytests.TestThatKnowsIfItsBeingRun; import me.atam.atam4jdomain.IndividualTestResult; import me.atam.atam4jdomain.TestsRunResult; import me.atam.atam4jsampleapp.testsupport.AcceptanceTest; import me.atam.atam4jsampleapp.testsupport.Atam4jApplicationStarter; import org.junit.Test; import javax.ws.rs.core.Response; import static me.atam.atam4jsampleapp.testsupport.AcceptanceTestTimeouts.TEN_SECONDS_IN_MILLIS; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; public class PassingTestAcceptanceTest extends AcceptanceTest { @Test public void givenPassingTest_whenTestsEndpointCalledBeforeTestRun_thenTooEarlyMessageReceived() { //given dropwizardTestSupportAppConfig = Atam4jApplicationStarter .startApplicationWith(TEN_SECONDS_IN_MILLIS, PassingTestWithNoCategory.class, 1); //when Response testRunResultFromServer = getTestRunResultFromServer(getTestsURI()); //then assertThat(testRunResultFromServer.getStatus(), is(Response.Status.OK.getStatusCode())); assertThat( testRunResultFromServer.readEntity(TestsRunResult.class).getStatus(), is(TestsRunResult.Status.TOO_EARLY) ); } @Test public void givenPassingTest_whenTestsEndpointCalledAfterTestRun_thenOKMessageReceived() { //given dropwizardTestSupportAppConfig = Atam4jApplicationStarter .startApplicationWith(0, PassingTestWithNoCategory.class, 1); //when Response response = getResponseFromTestsEndpointOnceTestsRunHasCompleted(); TestsRunResult testRunResult = response.readEntity(TestsRunResult.class); //then assertThat(response.getStatus(), is(Response.Status.OK.getStatusCode())); assertThat(testRunResult.getTests().size(), is(1)); assertThat( testRunResult.getTests(), hasItem(new IndividualTestResult(PassingTestWithNoCategory.class.getName(), "testThatPasses", true)) ); } /* TODO - Currently this test relies on a junit test that "knows" if it is being run or not. Once/if we build support for exposing the if a test run is in progress then this test's implementation can change. */ @Test public void givenPassingTest_whenTestsEndpointCalledDuringTestRun_thenStatusOfLastRunReturned() throws InterruptedException { //given test run completed dropwizardTestSupportAppConfig = Atam4jApplicationStarter .startApplicationWith(0, TestThatKnowsIfItsBeingRun.class, 1000); TestsRunResult firstTestRunResult = getResponseFromTestsEndpointOnceTestsRunHasCompleted() .readEntity(TestsRunResult.class); //when tests are in progress new PollingPredicate<>(100, 10, o -> TestThatKnowsIfItsBeingRun.testInProgress(), () -> null) .pollUntilPassedOrFail("Tests were never seen to be In Progress"); TestsRunResult testRunResultWhenTestsInProgress = getTestRunResultFromServer(getTestsURI()) .readEntity(TestsRunResult.class); //check they are still in progress once the status endpoint has been called. assertTrue(TestThatKnowsIfItsBeingRun.testInProgress()); //then number of tests run are the same assertThat(testRunResultWhenTestsInProgress.getStatus(), is(equalTo(firstTestRunResult.getStatus()))); assertThat(testRunResultWhenTestsInProgress.getTests().size(), is(equalTo(firstTestRunResult.getTests().size()))); } }