package endtoend;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.List;
import java.util.Map;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.GenericType;
import me.moodcat.api.models.ChatMessageModel;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;
import com.google.common.collect.Maps;
public class ChatMessagesEndToEndTest extends EndToEndTest {
@Test
public void canPostMessages() {
ChatMessageModel message = postMessage("System", "hallo");
assertEquals("hallo", message.getMessage());
assertEquals("System", message.getAuthor());
assertNotNull(message.getId());
assertNotNull(message.getTimestamp());
}
@Test
public void canPostMultipleMessagesIdIncreases() {
ChatMessageModel message1 = postMessage("System", "Message 1");
ChatMessageModel message2 = postMessage("System", "Message 2");
assertEquals(-1, message1.getId().compareTo(message2.getId()));
}
@Test
public void canRetrieveMessagesAfterPosting() {
ChatMessageModel message1 = postMessage("System", "First message");
ChatMessageModel message2 = postMessage("System", "Second message");
List<ChatMessageModel> messages = this.performGETRequestWithGenericType(new GenericType<List<ChatMessageModel>>(){}, "rooms/1/messages");
Assert.assertThat(messages, Matchers.hasItems(message1, message2));
}
@Test
public void canRetrieveMessagesAfterCertainMessage() {
ChatMessageModel message1 = postMessage("System", "Second-last message");
ChatMessageModel message2 = postMessage("System", "Last message");
List<ChatMessageModel> messages = this.performGETRequestWithGenericType(new GenericType<List<ChatMessageModel>>(){},
"rooms/1/messages/" + message1.getId());
Assert.assertThat(messages, Matchers.contains(message2));
}
private ChatMessageModel postMessage(final String author, final String contents) {
ChatMessageModel postMessage = new ChatMessageModel();
postMessage.setAuthor(author);
postMessage.setMessage(contents);
Map<String, Object> queryParams = Maps.newHashMap();
queryParams.put("token", "asdf");
ChatMessageModel message = this.performPOSTRequestWithQueryParams(ChatMessageModel.class,
"rooms/1/messages",
Entity.json(postMessage), queryParams);
return message;
}
}