import static play.test.Helpers.routeAndCall;
import static play.test.Helpers.running;
import java.util.List;
import java.util.TreeSet;
import java.util.UUID;
import junit.framework.Assert;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.junit.Before;
import org.junit.Test;
import play.Logger;
import play.mvc.Result;
import play.test.FakeRequest;
import play.test.Helpers;
import com.baasbox.security.SessionKeys;
import com.baasbox.security.SessionTokenProvider;
import com.baasbox.service.scripting.js.Json;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.ImmutableMap;
import core.AbstractUserTest;
import core.TestConfig;
/**
* Created by eto on 29/09/14.
*/
public class ScriptSessionTokensCommandTest extends AbstractUserTest{
private static TreeSet<String> sRandUsers;
private static String sTestUser;
private static final Json.ObjectMapperExt mapper = Json.mapper();
private static final String USER_PREFIX = "script-sessions-test-";
private static String key;
private String user1=null;
private String user2=null;
private String password="passw1"; //in adminUserCreatePayload.json
private String token1=null;
private String token2=null;
//let's create a couple of users to use during the tests
@Before
public void createUsers() {
running
(
getFakeApplication(),
new Runnable()
{
public void run()
{
try{
user1 = USER_PREFIX + UUID.randomUUID();
// Prepare test user
JsonNode node = updatePayloadFieldValue("/adminUserCreatePayload.json", "username", user1);
// Create user
FakeRequest request = new FakeRequest("POST", "/user");
request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
request = request.withJsonBody(node, "POST");
Result result = routeAndCall(request);
String resAsString = Helpers.contentAsString(result);
ObjectNode resAsJson = (ObjectNode) mapper.readTree(resAsString);
token1 = resAsJson.get("data").get("X-BB-SESSION").asText();
user2 = USER_PREFIX + UUID.randomUUID();
// Prepare test user
node = updatePayloadFieldValue("/adminUserCreatePayload.json", "username", user2);
// Create user
request = new FakeRequest("POST", "/user");
request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
request = request.withJsonBody(node, "POST");
result = routeAndCall(request);
resAsString = Helpers.contentAsString(result);
resAsJson = (ObjectNode) mapper.readTree(resAsString);
token2 = resAsJson.get("data").get("X-BB-SESSION").asText();
}catch(Exception e){
assertFail(ExceptionUtils.getFullStackTrace(e));
}
}
});
}
@Test
public void test(){
running
(
getFakeApplication(),
new Runnable()
{
public void run()
{
try{
List<ImmutableMap<SessionKeys, ? extends Object>> sessions = SessionTokenProvider.getSessionTokenProvider().getSessions(user1);
Assert.assertEquals(1, sessions.size());
Assert.assertEquals(true,sessions.get(0).get(SessionKeys.USERNAME).equals(user1));
Assert.assertEquals("token1: " + token1 + ", received: " + sessions.get(0).get(SessionKeys.TOKEN),true,sessions.get(0).get(SessionKeys.TOKEN).equals(token1));
List<ImmutableMap<SessionKeys, ? extends Object>> sessionsUser2 = SessionTokenProvider.getSessionTokenProvider().getSessions(user2);
Assert.assertEquals(1, sessionsUser2.size());
Assert.assertEquals(true,sessionsUser2.get(0).get(SessionKeys.USERNAME).equals(user2));
Assert.assertEquals(true,sessionsUser2.get(0).get(SessionKeys.TOKEN).equals(token2));
SessionTokenProvider.getSessionTokenProvider().removeSession(token1);
sessions = SessionTokenProvider.getSessionTokenProvider().getSessions(user1);
Assert.assertEquals(0, sessions.size());
SessionTokenProvider.getSessionTokenProvider().setSession("1234567890", user1, password);
sessions = SessionTokenProvider.getSessionTokenProvider().getSessions(user1);
Assert.assertEquals(1, sessions.size());
}catch(Exception e){
assertFail(ExceptionUtils.getFullStackTrace(e));
}
}
});
}
@Override
public String getRouteAddress() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getMethod() {
// TODO Auto-generated method stub
return null;
}
@Override
protected void assertContent(String s) {
// TODO Auto-generated method stub
}
}