package service.filestore; import static org.fest.assertions.Assertions.assertThat; import static play.test.Helpers.running; import static test.AorraTestUtils.fakeAorraApp; import static test.AorraTestUtils.fileStore; import static test.AorraTestUtils.jcrom; import static test.AorraTestUtils.injector; import static test.AorraTestUtils.sessionFactory; import java.io.ByteArrayInputStream; import javax.jcr.RepositoryException; import javax.jcr.Session; import models.Flag; import models.GroupManager; import models.User; import models.UserDAO; import org.junit.Test; import play.libs.F.Function; import service.filestore.FlagStore.FlagType; import service.filestore.roles.Admin; public class FlagStoreTest { @Test public void canAddAndRemoveFlags() { running(fakeAorraApp(), new Runnable() { @Override public void run() { final FlagStore fl = injector().getInstance(FlagStore.class); sessionFactory().inSession(new Function<Session,Session>() { @Override public Session apply(Session session) throws RepositoryException { final User user = getAdminUser(session); final FileStore.Manager fm = fileStore().getManager(session); final FlagStore.Manager flm = fl.getManager(session); final FileStore.File file = fm.getRoot().createFile( "test.txt", "text/plain", new ByteArrayInputStream("Some content".getBytes())); // Check initial state assertThat(flm.getFlags(FlagType.WATCH)).hasSize(0); // Create flag final Flag flag = flm.setFlag(FlagType.WATCH, file.getIdentifier(), user); // Check the flag exists in the collection assertThat(flm.getFlags(FlagType.WATCH)).hasSize(1); assertThat(flm.getFlags(FlagType.WATCH)).contains(flag); assertThat(flm.getFlags(FlagType.EDIT)).hasSize(0); // Try getting the single flag assertThat(flm.getFlag(flag.getId())).isEqualTo(flag); assertThat(flm.getFlag(FlagType.WATCH, flag.getId())) .isEqualTo(flag); assertThat(flm.getFlag(FlagType.EDIT, flag.getId())).isNull(); // Try adding it again (should have no effect) flm.setFlag(FlagType.WATCH, file.getIdentifier(), user); assertThat(flm.getFlags(FlagType.WATCH)).hasSize(1); // Remove the flag flm.unsetFlag(FlagType.WATCH, flag.getId()); assertThat(flm.getFlags(FlagType.WATCH)).hasSize(0); // Deleting missing ID doesn't throw an exception flm.unsetFlag(FlagType.WATCH, flag.getId()); return session; } }); } }); } private User getAdminUser(final Session session) throws RepositoryException { // Create new user final String userId; UserDAO dao = new UserDAO(session, jcrom()); User user = new User(); user.setEmail("user@example.com"); user.setName("Test User"); user = dao.create(user); String token = user.createVerificationToken(); user.checkVerificationToken(token); dao.setPassword(user, "password"); userId = user.getJackrabbitUserId(); final GroupManager gm = new GroupManager(session); Admin.getInstance(session).getGroup().addMember(gm.create("testAdmin")); gm.addMember("testAdmin", userId); return user; } }