package controllers;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import dao.DataAccessException;
import models.DaoManager;
import models.entities.Contact;
import models.entities.User;
import models.entities.UserRole;
import org.junit.Test;
import play.Logger;
import play.db.jpa.JPA;
import play.libs.F;
import play.libs.Json;
import play.mvc.Result;
import utils.DemoData;
import java.util.ArrayList;
import java.util.List;
import static org.fest.assertions.Assertions.assertThat;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static play.mvc.Http.Status.OK;
import static play.test.Helpers.*;
/**
* Created by kiryl on 18.08.2014.
*/
public class UserControllerTest {
@Test
public void getUserTest() {
running(fakeApplication(), new Runnable() {
public void run() {
DemoData.loadDemoData();
User user = DemoData.user1;
Result result = callAction(routes.ref.UserController.getUser(user.getId()));
Logger.debug("response: " + contentAsString(result));
JsonNode resultJson = Json.parse(contentAsString(result));
assertThat(status(result)).isEqualTo(OK);
assertThat(resultJson.get("login").asText()).isEqualTo(user.getLogin());
}
});
}
@Test
public void listTest() {
running(fakeApplication(), new Runnable() {
public void run() {
DemoData.loadDemoData();
Result result = callAction(routes.ref.UserController.list(1));
assertThat(status(result)).isEqualTo(OK);
JsonNode resultJson = Json.parse(contentAsString(result));
assertTrue(resultJson.isContainerNode());
}
});
}
@Test
public void addNewTest() {
running(fakeApplication(), new Runnable() {
public void run() {
final Contact c1 = new Contact();
c1.setFirstName("Jack");
c1.setLastName("Jones");
JPA.withTransaction(new F.Callback0() {
@Override
public void invoke() throws Throwable {
try {
DaoManager.getContactDao().persist(c1);
} catch (DataAccessException e) {
e.printStackTrace();
}
}
});
Integer contactId = c1.getId();
ObjectNode userNode = Json.newObject();
userNode.put("login", "login1");
userNode.put("password", "password");
userNode.put("contactId", contactId);
List<Integer> roles = new ArrayList<Integer>();
ArrayNode array = new ObjectMapper().valueToTree(roles);
userNode.putArray("roleIds").addAll(array);
Logger.debug(userNode.toString());
Result result = callAction(routes.ref.UserController.addNew(), fakeRequest().withJsonBody(userNode));
Logger.debug("response: " + contentAsString(result));
assertThat(status(result)).isEqualTo(OK);
JPA.withTransaction(new F.Callback0() {
@Override
public void invoke() throws Throwable {
try {
User savedUser = DaoManager.getUserDao().getBatch(0, 1).get(0);
assertNotNull(savedUser.getId());
assertThat(savedUser.getLogin()).isEqualTo("login1");
} catch (DataAccessException e) {
e.printStackTrace();
}
}
});
}
});
}
@Test
public void updateTest() {
running(fakeApplication(), new Runnable() {
public void run() {
DemoData.loadDemoData();
ObjectNode userNode = Json.newObject();
userNode.put("login", "login1");
userNode.put("password", "passwodr");
Logger.debug(userNode.toString());
Result result = callAction(routes.ref.UserController.update(DemoData.user1.getId()),
fakeRequest().withJsonBody(userNode));
Logger.debug("response: " + contentAsString(result));
assertThat(status(result)).isEqualTo(OK);
JPA.withTransaction(new F.Callback0() {
@Override
public void invoke() throws Throwable {
User savedUser = DaoManager.getUserDao().getBatch(0,2).get(0);
assertNotNull(savedUser.getId());
assertThat(savedUser.getLogin()).isEqualTo("login1");
}
});
}
});
}
@Test
public void removeTest() {
running(fakeApplication(), new Runnable() {
public void run() {
DemoData.loadDemoData();
Integer userId = DemoData.user1.getId();
Result result = callAction(routes.ref.UserController.remove(userId));
Logger.debug("response: " + contentAsString(result));
assertThat(status(result)).isEqualTo(OK);
result = callAction(routes.ref.UserController.getUser(userId));
assertThat(status(result)).isEqualTo(NOT_FOUND);
}
});
}
}