Slide 1

Slide 1 text

DSL Builders [email protected]

Slide 2

Slide 2 text

public final class MockResponse implements Cloneable

Slide 3

Slide 3 text

public final class MockResponse implements Cloneable

Slide 4

Slide 4 text

public class MockResponseBuilder { private final MockResponse response = new MockResponse(); public MockResponseBuilder withAsset(String asset) { response.addHeader("Content-Type", "application/json"); try (InputStream in = InstrumentationRegistry.getContext().getAssets().open(asset)){ response.setBody(new Buffer().readFrom(in)); } return this; }

Slide 5

Slide 5 text

public class MockResponseBuilder { private final MockResponse response = new MockResponse(); public MockResponseBuilder withAsset(String asset) { response.addHeader("Content-Type", "application/json"); try (InputStream in = InstrumentationRegistry.getContext().getAssets().open(asset)){ response.setBody(new Buffer().readFrom(in)); } return this; } new MockResponseBuilder.withAsset(“my-awesome.json”).build()

Slide 6

Slide 6 text

public class MockResponseBuilder { private final MockResponse response = new MockResponse() ; public MockResponseBuilder withAsset(String asset) { response.addHeader( "Content-Type" , "application/json" ); try (InputStream in = InstrumentationRegistry. getContext().getAssets().open(asset)){ response.setBody( new Buffer().readFrom(in)) ; } return this; } new MockResponseBuilder.withAsset(“my-awesome.json”) .setResponseCode(404) .addHeader(“foo”, “bar”).build()

Slide 7

Slide 7 text

fun MockResponse.body(init: Buffer.() -> Unit) { val buffer = Buffer() buffer.init() body = buffer } fun Buffer.readFromTestAsset(responseJsonPath: String) { InstrumentationRegistry.context.assets.open(responseJsonPath).use { readFrom(it) } }

Slide 8

Slide 8 text

fun mockResponse(init: MockResponse.() -> Unit): MockResponse { val response = MockResponse() response.init() return response }

Slide 9

Slide 9 text

fun mockResponse(init: MockResponse.() -> Unit): MockResponse { val response = MockResponse() response.init() return response } mockResponse { body { readFromTestAsset(“my-awesome.json”) } }

Slide 10

Slide 10 text

fun MockResponse.addHeaders(vararg pairs: Pair) { pairs.forEach { addHeader(it.first, it.second) } } mockResponse { body { readFromTestAsset(“my-awesome.json”) } statusCode = 404 addHeaders(“foo” to “bar”, “baz” to “qux”) }

Slide 11

Slide 11 text

new MockResponseBuilder.withAsset(“my-awesome.json”).build() .setResponseCode(404) .addHeader(“foo”, “bar”) .addHeader(“baz”, “qux”).build(); mockResponse { body { readFromTestAsset(“my-awesome.json”) } statusCode = 404 addHeaders(“foo” to “bar”, “baz” to “qux”) }