@Test
public void countersTest() throws IOException
{
initAccount();
LabelCounters allCounters = new LabelCounters();
LabelCounters inboxCounters = new LabelCounters();
LabelCounters spamCounters = new LabelCounters();
// check label counter before message added
String jsonResponse = expect().statusCode(200).when().get(REST_PATH + "/mailbox?metadata=true").asString();
allCounters = getCounters(jsonResponse, ReservedLabels.ALL_MAILS.getId());
inboxCounters = getCounters(jsonResponse, ReservedLabels.INBOX.getId());
spamCounters = getCounters(jsonResponse, ReservedLabels.SPAM.getId());
// add message A
long fileSizeA = getResourceSize(EMAIL_REGULAR);
UUID messageIdA = addMessage(EMAIL_REGULAR, ReservedLabels.INBOX.getId());
// check label counters
jsonResponse =
expect().
statusCode(200).and().
body("'" + ReservedLabels.ALL_MAILS.getId() + "'.size",
equalTo((int) (allCounters.getTotalBytes().longValue() + fileSizeA))).
body("'" + ReservedLabels.ALL_MAILS.getId() + "'.total",
equalTo((int) (allCounters.getTotalMessages().longValue() + 1))).
body("'" + ReservedLabels.ALL_MAILS.getId() + "'.unread",
equalTo((int) (allCounters.getUnreadMessages().longValue() + 1))).
body("'" + ReservedLabels.INBOX.getId() + "'.total",
equalTo((int) (inboxCounters.getTotalMessages().longValue() + 1))).
body("'" + ReservedLabels.INBOX.getId() + "'.unread",
equalTo((int) (inboxCounters.getUnreadMessages().longValue() + 1))).
when().
get(REST_PATH + "/mailbox?metadata=true").asString();
// add label SPAM to message A
given().
pathParam("messageId", messageIdA.toString()).
pathParam("labelId", ReservedLabels.SPAM.getId()).
expect().
statusCode(204).
when().
put(REST_PATH + "/mailbox/message/{messageId}?addlabel={labelId}");
// check label counters
jsonResponse =
expect().
statusCode(200).and().
body("'" + ReservedLabels.SPAM.getId() + "'.total",
equalTo((int) (spamCounters.getTotalMessages().longValue() + 1))).
body("'" + ReservedLabels.SPAM.getId() + "'.unread",
equalTo((int) (spamCounters.getUnreadMessages().longValue() + 1))).
when().
get(REST_PATH + "/mailbox?metadata=true").asString();
// update counters
allCounters = getCounters(jsonResponse, ReservedLabels.ALL_MAILS.getId());
inboxCounters = getCounters(jsonResponse, ReservedLabels.INBOX.getId());
spamCounters = getCounters(jsonResponse, ReservedLabels.SPAM.getId());
// mark message as read
given().
pathParam("messageId", messageIdA.toString()).
pathParam("marker", Marker.SEEN.toString().toLowerCase()).
expect().
statusCode(204).
when().
put(REST_PATH + "/mailbox/message/{messageId}?addmarker={marker}");
// check label counters
jsonResponse =
expect().
statusCode(200).and().
body("'" + ReservedLabels.ALL_MAILS.getId() + "'.unread",
equalTo((int) (allCounters.getUnreadMessages().longValue() - 1))).
body("'" + ReservedLabels.INBOX.getId() + "'.unread",
equalTo((int) (inboxCounters.getUnreadMessages().longValue() - 1))).
body("'" + ReservedLabels.SPAM.getId() + "'.unread",
equalTo((int) (spamCounters.getUnreadMessages().longValue() - 1))).
when().
get(REST_PATH + "/mailbox?metadata=true").asString();
// update counters
allCounters = getCounters(jsonResponse, ReservedLabels.ALL_MAILS.getId());
inboxCounters = getCounters(jsonResponse, ReservedLabels.INBOX.getId());
spamCounters = getCounters(jsonResponse, ReservedLabels.SPAM.getId());
// remove label INBOX from message A
given().
pathParam("messageId", messageIdA.toString()).
pathParam("labelId", ReservedLabels.INBOX.getId()).
expect().
statusCode(204).
when().
put(REST_PATH + "/mailbox/message/{messageId}?removelabel={labelId}");
// check label counters
jsonResponse =
expect().
statusCode(200).and().
body("'" + ReservedLabels.ALL_MAILS.getId() + "'.size",
equalTo((int) (allCounters.getTotalBytes().longValue()))).
body("'" + ReservedLabels.ALL_MAILS.getId() + "'.total",
equalTo((int) (allCounters.getTotalMessages().longValue()))).
body("'" + ReservedLabels.ALL_MAILS.getId() + "'.unread",
equalTo((int) (allCounters.getUnreadMessages().longValue()))).
body("'" + ReservedLabels.INBOX.getId() + "'.total",
equalTo((int) (inboxCounters.getTotalMessages().longValue() - 1))).
body("'" + ReservedLabels.INBOX.getId() + "'.unread",
equalTo((int) (inboxCounters.getUnreadMessages().longValue()))).
body("'" + ReservedLabels.SPAM.getId() + "'.total",
equalTo((int) (spamCounters.getTotalMessages().longValue()))).
body("'" + ReservedLabels.SPAM.getId() + "'.unread",
equalTo((int) (spamCounters.getUnreadMessages().longValue()))).
when().
get(REST_PATH + "/mailbox?metadata=true").asString();
// update counters
allCounters = getCounters(jsonResponse, ReservedLabels.ALL_MAILS.getId());
inboxCounters = getCounters(jsonResponse, ReservedLabels.INBOX.getId());
spamCounters = getCounters(jsonResponse, ReservedLabels.SPAM.getId());
// add message B to SPAM
long fileSizeB = getResourceSize(EMAIL_LARGE_ATT);
addMessage(EMAIL_LARGE_ATT, ReservedLabels.SPAM.getId());
// check label counters
jsonResponse =
expect().
statusCode(200).and().
body("'" + ReservedLabels.ALL_MAILS.getId() + "'.size",
equalTo((int) (allCounters.getTotalBytes().longValue() + fileSizeB))).
body("'" + ReservedLabels.ALL_MAILS.getId() + "'.total",
equalTo((int) (allCounters.getTotalMessages().longValue() + 1))).
body("'" + ReservedLabels.ALL_MAILS.getId() + "'.unread",
equalTo((int) (allCounters.getUnreadMessages().longValue() + 1))).
body("'" + ReservedLabels.INBOX.getId() + "'.total",
equalTo((int) (inboxCounters.getTotalMessages().longValue()))).
body("'" + ReservedLabels.INBOX.getId() + "'.unread",
equalTo((int) (inboxCounters.getUnreadMessages().longValue()))).
body("'" + ReservedLabels.SPAM.getId() + "'.total",
equalTo((int) (spamCounters.getTotalMessages().longValue() + 1))).
body("'" + ReservedLabels.SPAM.getId() + "'.unread",
equalTo((int) (spamCounters.getUnreadMessages().longValue() + 1))).
when().
get(REST_PATH + "/mailbox?metadata=true").asString();
// update counters
allCounters = getCounters(jsonResponse, ReservedLabels.ALL_MAILS.getId());
inboxCounters = getCounters(jsonResponse, ReservedLabels.INBOX.getId());
spamCounters = getCounters(jsonResponse, ReservedLabels.SPAM.getId());
// remove message A
given().
pathParam("messageId", messageIdA.toString()).
expect().
statusCode(204).
when().
delete(REST_PATH + "/mailbox/message/{messageId}");
// check label counters
jsonResponse =
expect().
statusCode(200).and().
body("'" + ReservedLabels.ALL_MAILS.getId() + "'.size",
equalTo((int) (allCounters.getTotalBytes().longValue() - fileSizeA))).
body("'" + ReservedLabels.ALL_MAILS.getId() + "'.total",
equalTo((int) (allCounters.getTotalMessages().longValue() - 1))).
body("'" + ReservedLabels.ALL_MAILS.getId() + "'.unread",
equalTo((int) (allCounters.getUnreadMessages().longValue()))).
body("'" + ReservedLabels.SPAM.getId() + "'.total",
equalTo((int) (spamCounters.getTotalMessages().longValue() - 1))).
body("'" + ReservedLabels.SPAM.getId() + "'.unread",
equalTo((int) (spamCounters.getUnreadMessages().longValue()))).
when().
get(REST_PATH + "/mailbox?metadata=true").asString();
logger.info("Counters Test OK");
}