Skip to content

Instantly share code, notes, and snippets.

@dherges
dherges / Tweet.java
Last active September 25, 2016 12:38
ok-testing-reloaded-medium
/**
* Representation of a Tweet object transferred from/to Twitter REST API in JSON format.
*/
public class Tweet {
public long id;
public String text;
public User user;
@Json(name="created_at") public Date createdAt;
public boolean favorited;
@dherges
dherges / MyAssertions.java
Last active September 25, 2016 11:53
ok-testing-reloaded-medium
public final class MyAssertions {
public static RecordedRequestAssert assertThat(RecordedRequest recordedRequest) {
return new RecordedRequestAssert(recordedRequest);
}
public static ResponseAssert assertThat(Response<?> response) {
return new ResponseAssert(response);
}
}
@dherges
dherges / TwitterApiTest.java
Last active September 25, 2016 11:10
ok-testing-reloaded-medium
public class TwitterApiTest {
@Rule
public MockWebServerPlus server = new MockWebServerPlus();
@Test
public void tweet_success() throws IOException {
server.enqueue("twitter/statuses/update_ok");
final Response<Tweet> response = twitterApi()
@dherges
dherges / TwitterApp.java
Created September 25, 2016 11:57
ok-testing-reloaded-medium
import static spark.Spark.get;
public class TwitterApp implements SparkApplication {
@Override
public void init() {
get("/", (req, res) -> "Hello again!");
}
}
@dherges
dherges / SparkApplicationTest.java
Last active September 25, 2016 12:02
ok-testing-reloaded-medium
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface SparkApplicationTest {
/** SparkApplication that will be tested */
Class<? extends SparkApplication> value();
/** Port number for the embedded web server */
int port() default spark.Service.SPARK_DEFAULT_PORT;
}
@dherges
dherges / RetweetsIdRoute.java
Created September 25, 2016 12:08
ok-testing-reloaded-medium
public class RetweetsIdRoute implements Route {
@Override
public Object handle(Request request, Response response) throws Exception {
final String idParam = request.params(":id");
final String count = request.queryParams("count");
final List<Tweet> tweetList = fetchTweets(
Long.valueOf(idParam),
Integer.valueOf(count != null && count.length() > 0 ? count : "100")
@dherges
dherges / ContentTypeRoute.java
Last active September 25, 2016 12:15
ok-testing-reloaded-medium
public class ContentTypeRoute implements Route {
private final String contentType;
private final Route delegate;
private final Optional<ResponseTransformer> responseTransformer;
private ContentTypeRoute(String contentType, Route delegate,
ResponseTransformer responseTransformer) {
this.contentType = contentType;
this.delegate = delegate;
@dherges
dherges / RetweetsIdRoute.java
Last active September 25, 2016 12:18
ok-testing-reloaded-medium
public class RetweetsIdRoute implements Route {
private List<Tweet> fetchTweets(long id, int count) {
return IntStream.range(0, 99)
.mapToObj((i) -> {
final Tweet tweet = new Tweet();
tweet.id = id + i;
tweet.text = String.format("Retweet #%s of %s for %s", i, count, id);
tweet.favorited = i % 2 == 0;
@dherges
dherges / TwitterAppTest.java
Created September 25, 2016 12:20
ok-testing-reloaded-medium
import static org.assertj.core.api.Assertions.assertThat;
import static ext.assertj.MyAssertions.assertThat;
@RunWith(SparkRunner.class)
@SparkApplicationTest(value = TwitterApp.class, port = 4444)
public class TwitterAppTest {
private final OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
@Test
@dherges
dherges / OkHttpResponseAssert.java
Last active September 25, 2016 12:23
ok-testing-reloaded-medium
import static org.assertj.core.api.Assertions.fail;
public class OkHttpResponseAssert
extends AbstractAssert<OkHttpResponseAssert, Response>
implements Assert<OkHttpResponseAssert, Response> {
/* ... */
public <T> OkHttpResponseAssert jsonPath(String jsonPath, Class<T> type, T expected) {
T object = JsonPath.parse(consumeResponseBody()).read(jsonPath, type);