package fr.itldev.koya.services;
import java.util.List;
import java.util.Random;
import junit.framework.TestCase;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.web.client.RestClientException;
import fr.itldev.koya.model.impl.Activity;
import fr.itldev.koya.model.impl.Company;
import fr.itldev.koya.model.impl.Dossier;
import fr.itldev.koya.model.impl.Space;
import fr.itldev.koya.model.impl.User;
import fr.itldev.koya.model.json.KoyaInvite;
import fr.itldev.koya.model.json.KoyaShare;
import fr.itldev.koya.model.permissions.KoyaPermissionConsumer;
import fr.itldev.koya.model.permissions.SitePermission;
import fr.itldev.koya.services.exceptions.AlfrescoServiceException;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:koya-services-tests.xml")
public class ActivitiesTest extends TestCase {
private static String USER_MANAGER = "manager";
private static String USER_SHAREDCLIENT = "sharedClient";
private static String USER_MAILDOMAIN = "@itldev.net";
private static String USERS_PWD = "junittest";
@SuppressWarnings("unused")
private Logger logger = Logger.getLogger(this.getClass());
@Autowired
UserService userService;
@Autowired
private CompanyService companyService;
@Autowired
private SpaceService spaceService;
@Autowired
private DossierService dossierService;
@Autowired
private InvitationService invitationService;
@Autowired
private ShareService shareService;
private Company companyTests;
private Space spaceTests;
private User admin;
private User manager;
private User client1;
private User client2;
private Integer randomTestId;
@Before
public void init() throws RestClientException, AlfrescoServiceException {
randomTestId = new Random().nextInt(1000000);
admin = userService.login("admin", "admin");
companyTests = companyService.create(admin, "company" + randomTestId,
companyService.listSalesOffer(admin).get(0).getName(),
"default");
spaceTests = spaceService.create(admin, companyTests, "testSpace");
/**
* Create manager user
*/
KoyaInvite managerInviteWrapper = invitationService.inviteUser(admin,
companyTests, USER_MANAGER + randomTestId + USER_MAILDOMAIN,
SitePermission.MANAGER.toString());
// validate invitation with default password
manager = validateInvitationAndLogin(USER_MANAGER,
managerInviteWrapper);
Dossier d1 = dossierService.create(admin, spaceTests, "d1");
KoyaShare s1 = shareService.shareItem(manager, d1, USER_SHAREDCLIENT
+ "-1-" + randomTestId + USER_MAILDOMAIN,KoyaPermissionConsumer.CLIENT);
Dossier d2 = dossierService.create(admin, spaceTests, "d2");
KoyaShare s2 = shareService.shareItem(manager, d2, USER_SHAREDCLIENT
+ "-2-" + randomTestId + USER_MAILDOMAIN,KoyaPermissionConsumer.CLIENT);
client1 = validateInvitationAndLogin(USER_SHAREDCLIENT + "-1-",
s1.getKoyaInvite());
client2 = validateInvitationAndLogin(USER_SHAREDCLIENT + "-2-",
s2.getKoyaInvite());
// activates koya feed
}
@Test
public void testList() {
userService.listActivities(admin);
}
@Test
public void testFeedFilter() throws InterruptedException {
dumpFeed(manager);
dumpFeed(client1);
dumpFeed(client2);
}
private void dumpFeed(User u) throws InterruptedException {
System.out.println("User : " + u.getUserName());
List<Activity> result = readFeedTimeout(u);
System.err.println(result.size() + " notifications");
for (Activity n : result) {
System.out.println(" " + n.getId() + " - " + n.getPostUserId()
+ " - " + n.getActivityType() + "--" + n.getMessage());
}
}
private List<Activity> readFeedTimeout(User user)
throws InterruptedException {
List<Activity> result = userService.listActivities(user);
long t = System.currentTimeMillis();
long end = t + 60000;
while (result.size() == 0 && System.currentTimeMillis() < end) {
result = userService.listActivities(user);
Thread.sleep(5000);
System.out.print("+");
}
return result;
}
private User validateInvitationAndLogin(String loginPrefix, KoyaInvite
iw) {
String login = loginPrefix + randomTestId + USER_MAILDOMAIN;
User u = new User();
u.setPassword(USERS_PWD);
u.setName(loginPrefix);
invitationService.validateInvitation(u, iw.getInviteId(),
iw.getTicket());
u = userService.login(login, USERS_PWD);
return u;
}
}