/** * Parse the given filename and returns the Fixture object. * * @param fileName filename should not contain extension or relative path. ie: login */ public static Fixture parseFrom(String fileName) { return parseFrom(fileName, new YamlParser()); }
@Test public void enqueueSingleResponse() throws Exception { server.enqueue(Fixtures.SIMPLE); Response response = execute(); assertFixture(response) .body(JSON_RESPONSE) .statusCode(200) .header("Auth", "auth") .header("key", "value"); }
/** * Parse the given filename and returns the Fixture object. * * @param fileName filename should not contain extension or relative path. ie: login * @param parser parser is required for parsing operation, it should not be null */ public static Fixture parseFrom(String fileName, Parser parser) { if (fileName == null) { throw new NullPointerException("File name should not be null"); } String path = "fixtures/" + fileName + ".yaml"; InputStream inputStream = openPathAsStream(path); Fixture result = parser.parse(inputStream); if (result.body != null && !result.body.startsWith("{")) { String bodyPath = "fixtures/" + result.body; try { result.body = readPathIntoString(bodyPath); } catch (IOException e) { throw new IllegalStateException("Error reading body: " + bodyPath, e); } } return result; }
/** * Given paths will be parsed to fixtures and added to the queue. Can be multiple */ public List<MockResponse> enqueue(String... paths) { if (paths == null) { return null; } List<MockResponse> mockResponseList = new ArrayList<>(); for (String path : paths) { Fixture fixture = Fixture.parseFrom(path, parser); MockResponse mockResponse = fixture.toMockResponse(); mockWebServer.enqueue(mockResponse); mockResponseList.add(mockResponse); } return mockResponseList; }
@Test public void getRecordedRequest() throws IOException, InterruptedException { server.enqueue(new MockResponse()); execute(); RecordedRequest recordedRequest = server.takeRequest(); assertThat(recordedRequest).isNotNull(); }
@Test public void interceptDispatch() throws InterruptedException, IOException { Dispatcher dispatcher = spy(new QueueDispatcher()); server.setDispatcher(dispatcher); server.enqueue(new MockResponse()); execute(); verify(dispatcher).dispatch(any(RecordedRequest.class)); }
@Test public void invalidPathThrowsExceptionOnParse() { try { Fixture.parseFrom("invalid_path", parser); fail("should fail"); } catch (Exception e) { assertThat(e).hasMessage("Invalid path: fixtures/invalid_path.yaml"); } try { Fixture.parseFrom(null, parser); fail("should fail"); } catch (Exception e) { assertThat(e).hasMessage("File name should not be null"); } }
@Test public void useDefaultMockWebServer() { assertThat(new MockWebServerPlus().server()).isNotNull(); }
@Test public void enqueueSocketPolicy() throws IOException { server.enqueue(SocketPolicy.KEEP_OPEN); QueueDispatcher dispatcher = new QueueDispatcher(); server.setDispatcher(dispatcher); MockResponse mockResponse = dispatcher.peek(); assertThat(mockResponse.getSocketPolicy()).isEqualTo(SocketPolicy.KEEP_OPEN); }
private Response execute(String url) throws IOException { Request request = new Request.Builder() .url(server.url(url)) .get() .build(); return httpClient.newCall(request).execute(); }
static AssertFixture assertFixture(Response response) { return new AssertFixture(response); }
private static String readPathIntoString(String path) throws IOException { InputStream inputStream = openPathAsStream(path); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder out = new StringBuilder(); int read; while ((read = reader.read()) != -1) { out.append((char) read); } reader.close(); return out.toString(); }
@Test public void getMockServerInstance() { assertThat(server.server()).isEqualTo(mockWebServer); }
@Test public void enqueueWithoutHeaders() throws Exception { server.enqueue(Fixtures.SIMPLE_NO_HEADERS); Response response = execute(); assertFixture(response) .body(JSON_RESPONSE) .statusCode(200); }
@Test public void parseFixtureFromYaml() { Fixture fixture = Fixture.parseFrom(Fixtures.SIMPLE_WITH_DELAY, parser); assertThat(fixture.statusCode).isEqualTo(200); assertThat(fixture.delay).isEqualTo(300); assertThat(fixture.body).isEqualTo("{result:{}}"); assertThat(fixture.headers).containsExactly("Auth:auth", "key:value"); }
@Test public void generateValidUrl() { assertThat(server.url("")).isNotNull(); }
@Test public void enqueueMultipleResponse() throws Exception { server.enqueue(Fixtures.SIMPLE, Fixtures.SIMPLE); Response response = execute(); assertFixture(response) .body(JSON_RESPONSE) .statusCode(200) .header("Auth", "auth") .header("key", "value"); Response response2 = execute(); assertFixture(response2) .body(JSON_RESPONSE) .statusCode(200) .header("Auth", "auth") .header("key", "value"); }
@Test public void enqueueWithoutStatusCode() throws Exception { server.enqueue(Fixtures.SIMPLE_NO_STATUS_CODE); Response response = execute(); assertFixture(response) .body(JSON_RESPONSE) .statusCode(200); }
@Test public void enqueueWithoutBody() throws Exception { server.enqueue(Fixtures.SIMPLE_NO_BODY); Response response = execute(); assertFixture(response).statusCode(200); }