/*
* Copyright (C) 2003-2014 eXo Platform SAS.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.exoplatform.platform.common.rest;
import org.apache.commons.lang.StringUtils;
import org.exoplatform.commons.testing.BaseResourceTestCase;
import org.exoplatform.services.cache.CacheService;
import org.exoplatform.services.cache.ExoCache;
import org.exoplatform.services.jcr.core.ManageableRepository;
import org.exoplatform.services.rest.impl.ContainerResponse;
import org.exoplatform.services.rest.wadl.research.HTTPMethods;
import org.exoplatform.services.security.ConversationState;
import org.exoplatform.services.security.Identity;
import org.exoplatform.services.user.UserStateModel;
import org.exoplatform.services.user.UserStateService;
import org.junit.Ignore;
import javax.ws.rs.core.Response;
import java.io.Serializable;
import java.util.Date;
/**
* Created by The eXo Platform SAS
* Author : eXoPlatform
* exo@exoplatform.com
* Apr 23, 2014
*/
@Ignore
public class RESTUserServiceTest extends BaseResourceTestCase {
private final String WORKSPACE_COLLABORATION = "collaboration";
private UserStateService userStateService;
private RESTUserService restUserService;
public void setUp() throws Exception {
super.setUp();
ConversationState c = new ConversationState(new Identity(session.getUserID()));
ConversationState.setCurrent(c);
userStateService = getService(UserStateService.class);
restUserService = getService(RESTUserService.class);
//
ManageableRepository repo = repositoryService.getRepository(REPO_NAME);
repo.getConfiguration().setDefaultWorkspaceName(WORKSPACE_COLLABORATION);
session = repo.getSystemSession(WORKSPACE_COLLABORATION);
root = session.getRootNode();
//
this.resourceBinder.addResource(restUserService, null);
}
public void tearDown() throws Exception {
ManageableRepository repo = repositoryService.getRepository(REPO_NAME);
repo.getConfiguration().setDefaultWorkspaceName(WORKSPACE_NAME);
//
ExoCache<Serializable, UserStateModel> cache = getService(CacheService.class)
.getCacheInstance(UserStateService.class.getName() + REPO_NAME);
//
cache.clearCache();
}
public void testUpdateState() throws Exception {
String restPath = "/state/ping";
UserStateModel userModel =
new UserStateModel(session.getUserID(),
new Date().getTime(),
UserStateService.DEFAULT_STATUS);
userStateService.save(userModel);
ContainerResponse response = service(HTTPMethods.GET.toString(), restPath, StringUtils.EMPTY, null, null);
assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
assertTrue(userModel.getLastActivity() != userStateService.getUserState(session.getUserID()).getLastActivity());
}
public void testOnline() throws Exception {
String restPath = "/state/status";
UserStateModel userModel =
new UserStateModel(session.getUserID(),
new Date().getTime(),
UserStateService.DEFAULT_STATUS);
userStateService.save(userModel);
userStateService.ping(userModel.getUserId());
ContainerResponse response = service(HTTPMethods.GET.toString(), restPath, StringUtils.EMPTY, null, null);
assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
assertTrue(response.getEntity().toString().contains("\"activity\":\"online\""));
assertTrue(response.getEntity().toString().contains("\"status\":\"" + userModel.getStatus() + "\""));
assertTrue(response.getEntity().toString().contains("\"userId\":\"" + userModel.getUserId() + "\""));
assertFalse(response.getEntity().toString().contains("\"userId\":\"" + userModel.getUserId() + "temp\""));
}
public void testGetStatus() throws Exception {
String restPath = "/state/status/" + session.getUserID();
UserStateModel userModel =
new UserStateModel(session.getUserID(),
new Date().getTime(),
"offline");
userStateService.save(userModel);
userStateService.ping(userModel.getUserId());
ContainerResponse response = service(HTTPMethods.GET.toString(), restPath, StringUtils.EMPTY, null, null);
assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
assertTrue(response.getEntity().toString().contains("\"activity\":\"online\""));
assertTrue(response.getEntity().toString().contains("\"status\":\"" + userModel.getStatus() + "\""));
assertTrue(response.getEntity().toString().contains("\"userId\":\"" + userModel.getUserId() + "\""));
assertFalse(response.getEntity().toString().contains("\"userId\":\"" + userModel.getUserId() + "temp\""));
}
public void testSetStatus() throws Exception {
String restPath = "/state/status/" + session.getUserID() + "?status=offline";
UserStateModel userModel =
new UserStateModel(session.getUserID(),
new Date().getTime(),
UserStateService.DEFAULT_STATUS);
userStateService.save(userModel);
userStateService.ping(userModel.getUserId());
assertTrue(userStateService.getUserState(session.getUserID()).getStatus().equals(UserStateService.DEFAULT_STATUS));
ContainerResponse response = service(HTTPMethods.PUT.toString(), restPath, StringUtils.EMPTY, null, null);
assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
assertTrue(userStateService.getUserState(userModel.getUserId()).getStatus().equals("offline"));
}
}