Skip to content

Commit

Permalink
JAMES-2195 Factorize JMAP request posting
Browse files Browse the repository at this point in the history
  • Loading branch information
chibenwa authored and aduprat committed Oct 26, 2017
1 parent 940b85f commit e39e1f7
Show file tree
Hide file tree
Showing 5 changed files with 143 additions and 152 deletions.
Expand Up @@ -25,19 +25,13 @@

import javax.inject.Inject;

import org.apache.http.HttpResponse;
import org.apache.http.client.fluent.Request;
import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.modules.MailboxProbeImpl;

import com.github.steveash.guavate.Guavate;
import com.google.common.base.Joiner;
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.Option;

import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
Expand All @@ -48,16 +42,13 @@ public class GetMessageListMethodStepdefs {

private static final String ARGUMENTS = "[0][1]";
private final MainStepdefs mainStepdefs;
private final UserStepdefs userStepdefs;
private final HttpStepDefs httpStepDefs;
private final GetMessagesMethodStepdefs messagesMethodStepdefs;

private HttpResponse response;
private DocumentContext jsonPath;

@Inject
private GetMessageListMethodStepdefs(MainStepdefs mainStepdefs, UserStepdefs userStepdefs, GetMessagesMethodStepdefs messagesMethodStepdefs) {
private GetMessageListMethodStepdefs(MainStepdefs mainStepdefs, HttpStepDefs httpStepDefs, GetMessagesMethodStepdefs messagesMethodStepdefs) {
this.mainStepdefs = mainStepdefs;
this.userStepdefs = userStepdefs;
this.httpStepDefs = httpStepDefs;
this.messagesMethodStepdefs = messagesMethodStepdefs;
}

Expand All @@ -72,7 +63,7 @@ public void getMessageList(String username, List<String> mailboxes, String flag)
.serialize())
.collect(Guavate.toImmutableList()));

post(String.format(
httpStepDefs.post(String.format(
"[[\"getMessageList\", {\"filter\":{" +
" \"inMailboxes\":[\"%s\"]," +
" \"hasKeyword\":\"%s\"" +
Expand All @@ -88,7 +79,7 @@ public void getMessageList(String username, String mailbox, String flag) throws
.getMailbox(MailboxConstants.USER_NAMESPACE, username, mailbox)
.getMailboxId();

post(String.format(
httpStepDefs.post(String.format(
"[[\"getMessageList\", {\"filter\":{" +
" \"inMailboxes\":[\"%s\"]," +
" \"hasKeyword\":\"%s\"" +
Expand All @@ -99,7 +90,7 @@ public void getMessageList(String username, String mailbox, String flag) throws

@When("^the user asks for message list with flag \"([^\"]*)\"$")
public void getMessageList(String flag) throws Exception {
post(String.format(
httpStepDefs.post(String.format(
"[[\"getMessageList\", {\"filter\":{" +
" \"hasKeyword\":\"%s\"" +
"}}, \"#0\"]]",
Expand All @@ -108,32 +99,20 @@ public void getMessageList(String flag) throws Exception {

@Then("^the message list is empty$")
public void assertEmpty() throws Exception {
assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);
assertThat(jsonPath.<List<String>>read(ARGUMENTS + ".messageIds")).isEmpty();
assertThat(httpStepDefs.response.getStatusLine().getStatusCode()).isEqualTo(200);
assertThat(httpStepDefs.jsonPath.<List<String>>read(ARGUMENTS + ".messageIds")).isEmpty();
}

@Then("^the message list has size (\\d+)")
public void assertSize(int size) throws Exception {
assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);
assertThat(jsonPath.<List<String>>read(ARGUMENTS + ".messageIds")).hasSize(size);
assertThat(httpStepDefs.response.getStatusLine().getStatusCode()).isEqualTo(200);
assertThat(httpStepDefs.jsonPath.<List<String>>read(ARGUMENTS + ".messageIds")).hasSize(size);
}

@Then("^the message list contains \"([^\"]*)\"")
public void assertContains(String messsage) throws Exception {
MessageId messageId = messagesMethodStepdefs.getMessageId(messsage);
assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);
assertThat(jsonPath.<List<String>>read(ARGUMENTS + ".messageIds")).contains(messageId.serialize());
}

private void post(String requestBody) throws Exception {
response = Request.Post(mainStepdefs.baseUri().setPath("/jmap").build())
.addHeader("Authorization", userStepdefs.authenticate(userStepdefs.getConnectedUser()).serialize())
.addHeader("Accept", org.apache.http.entity.ContentType.APPLICATION_JSON.getMimeType())
.bodyString(requestBody, org.apache.http.entity.ContentType.APPLICATION_JSON)
.execute()
.returnResponse();
jsonPath = JsonPath.using(Configuration.defaultConfiguration()
.addOptions(Option.SUPPRESS_EXCEPTIONS))
.parse(response.getEntity().getContent());
assertThat(httpStepDefs.response.getStatusLine().getStatusCode()).isEqualTo(200);
assertThat(httpStepDefs.jsonPath.<List<String>>read(ARGUMENTS + ".messageIds")).contains(messageId.serialize());
}
}

0 comments on commit e39e1f7

Please sign in to comment.