package fr.gouv.vitam.ihmdemo.common.pagination;
import static org.junit.Assert.assertEquals;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.Ini;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.junit.BeforeClass;
import org.junit.Test;
import com.fasterxml.jackson.databind.JsonNode;
import fr.gouv.vitam.common.exception.InvalidParseOperationException;
import fr.gouv.vitam.common.exception.VitamException;
import fr.gouv.vitam.common.json.JsonHandler;
public class PaginationHelperTest {
static String sessionId;
private static final String RESULT =
"{\"$query\":{}," +
"\"$hits\":{\"total\":100,\"offset\":0,\"limit\":25}," +
"\"$results\":";
private static final String OPERATION =
" \"evId\": \"aedqaaaaacaam7mxaaaamakvhiv4rsqaaaaq\"," +
" \"evType\": \"Process_SIP_unitary\"," +
" \"evDateTime\": \"2016-06-10T11:56:35.914\"," +
" \"evIdProc\": \"aedqaaaaacaam7mxaaaamakvhiv4rsiaaaaq\"," +
" \"evTypeProc\": \"INGEST\"," +
" \"outcome\": \"STARTED\"," +
" \"outDetail\": null," +
" \"outMessg\": \"SIP entry : SIP.zip\"," +
" \"agId\": {\"name\":\"ingest_1\",\"role\":\"ingest\",\"pid\":425367}," +
" \"agIdApp\": null," +
" \"agIdAppSession\": null," +
" \"evIdReq\": \"aedqaaaaacaam7mxaaaamakvhiv4rsiaaaaq\"," +
" \"agIdSubm\": null," +
" \"agIdOrig\": null," +
" \"obId\": null," +
" \"obIdReq\": null," +
" \"obIdIn\": null," +
" \"events\": []}";
@BeforeClass
public static void setup() {
final Ini ini = new Ini();
ini.loadFromPath("src/test/resources/shiro.ini");
final Factory<SecurityManager> factory = new IniSecurityManagerFactory(ini);
final SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
final UsernamePasswordToken token = new UsernamePasswordToken("user", "user", true);
final Subject currentUser = new Subject.Builder(securityManager).buildSubject();
currentUser.getSession().stop();
currentUser.login(token);
sessionId = currentUser.getSession(true).getId().toString();
}
@Test
public void givenSessionAlreadyExistsWhenPaginateResultThenReturnJsonNode() throws Exception {
PaginationHelper.setResult(sessionId, createResult());
JsonNode result = PaginationHelper.getResult(sessionId, new OffsetBasedPagination());
assertEquals(result.get("$results").size(), 100);
result = PaginationHelper.getResult(createResult(), new OffsetBasedPagination());
assertEquals(result.get("$results").size(), 100);
}
@Test(expected = VitamException.class)
public void givenSessionNotFoundWhenSetResultThenRaiseAnException() throws Exception {
PaginationHelper.setResult("SessionNotFound", createResult());
}
private JsonNode createResult() throws InvalidParseOperationException {
String result = RESULT + "[";
for (int i = 0; i < 100; i++) {
String s_i = "{\"#id\": \"aedqaaaaacaam7mxaaaamakvhiv4rsiaaa" + i + "\",";
s_i += OPERATION;
result += s_i;
if (i < 99) {
result += ",";
}
}
result += "]}";
return JsonHandler.getFromString(result);
}
}