package com.xebialabs.restito.server; import org.apache.mina.util.AvailablePortFinder; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.jayway.restassured.RestAssured; import com.xebialabs.restito.semantics.Call; import com.xebialabs.restito.semantics.Stub; import static com.jayway.restassured.RestAssured.expect; import static com.xebialabs.restito.builder.stub.StubHttp.whenHttp; import static com.xebialabs.restito.semantics.Action.ok; import static com.xebialabs.restito.semantics.Condition.get; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class StubServerTest { private StubServer server; @Before public void start() { server = new StubServer().run(); RestAssured.port = server.getPort(); } @After public void stop() { server.stop(); } @Test public void shouldStartServerInRangeStartingFromDefaultPort() { assertTrue("Server port not in range", server.getPort() >= StubServer.DEFAULT_PORT && server.getPort() <= AvailablePortFinder.MAX_PORT_NUMBER); server.stop(); } @Test public void shouldStartServerOnRandomPortWhenDefaultPortIsBusy() { StubServer server1 = new StubServer().run(); StubServer server2 = new StubServer().run(); assertTrue(server2.getPort() != server1.getPort()); } @Test public void shouldBePossibleToSpecifyPort() { StubServer server = new StubServer(8888).run(); assertEquals(8888, server.getPort()); server.stop(); } @Test public void shouldBePossibleToStubRootUri() { whenHttp(server).match(get("/")).then(ok()).mustHappen(); expect().statusCode(200).get("/"); } @Test public void shouldBePossibleToIterateThroughCallsWhileNewItemsAreAdded() { whenHttp(server).match(get("/")).then(ok()).mustHappen(); expect().statusCode(200).get("/"); expect().statusCode(200).get("/"); for (Call call : server.getCalls()) { expect().statusCode(200).get("/"); expect().statusCode(200).get("/"); } } @Test public void shouldBePossibleToIterateThroughStubsAndModifyIt() { whenHttp(server).match(get("/")).then(ok()); expect().statusCode(200).get("/"); for (Stub stub : server.getStubs()) { whenHttp(server).match(get("/newstub")).then(ok()); } } @Test public void shouldClearRegisteredStubs() { whenHttp(server).match(get("/")).then(ok()); assertEquals(1, server.getStubs().size()); server.clearStubs(); assertEquals(0, server.getStubs().size()); } @Test public void shouldClearStubCalls() { whenHttp(server).match(get("/")).then(ok()); expect().statusCode(200).get("/"); assertEquals(1, server.getCalls().size()); server.clearCalls(); assertEquals(0, server.getCalls().size()); } @Test public void shouldClearStubAndCalls() { whenHttp(server).match(get("/")).then(ok()); expect().statusCode(200).get("/"); assertEquals(1, server.getStubs().size()); assertEquals(1, server.getCalls().size()); server.clear(); assertEquals(0, server.getStubs().size()); assertEquals(0, server.getCalls().size()); } @Test public void shouldReturn404WhenTheRequestIsNotCoveredByStubs() { expect().statusCode(404).get("/"); } }