Implemented delete user-group and member tasks.
Change-Id: Iacb799ca03234fbbd4b6cc06126cb78ed3521aad
diff --git a/full/src/test/java/de/ids_mannheim/korap/config/BeanConfigBaseTest.java b/full/src/test/java/de/ids_mannheim/korap/config/BeanConfigBaseTest.java
new file mode 100644
index 0000000..a625556
--- /dev/null
+++ b/full/src/test/java/de/ids_mannheim/korap/config/BeanConfigBaseTest.java
@@ -0,0 +1,83 @@
+package de.ids_mannheim.korap.config;
+
+import static org.junit.Assert.assertNotNull;
+
+import org.apache.log4j.Logger;
+import org.junit.runner.RunWith;
+import org.junit.runner.notification.RunNotifier;
+import org.junit.runners.model.InitializationError;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import net.jcip.annotations.NotThreadSafe;
+
+/**
+ * @author hanl
+ * @date 09/03/2016
+ */
+@Deprecated
+@NotThreadSafe
+@RunWith(BeanConfigBaseTest.SpringExtendedSetupListener.class)
+@ContextConfiguration("classpath:test-config.xml")
+@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
+public abstract class BeanConfigBaseTest {
+
+ private static Logger jlog = Logger.getLogger(BeanConfigBaseTest.class);
+ @Autowired
+ protected ApplicationContext context;
+
+ public void init () throws Exception {
+ assertNotNull("Application context must not be null!", this.context);
+ jlog.debug("running one-time before init for class "
+ + this.getClass().getSimpleName() + " ...");
+ BeansFactory.setKustvaktContext(getContext());
+ assertNotNull(BeansFactory.getKustvaktContext());
+ initMethod();
+ }
+
+ protected abstract ContextHolder getContext();
+
+ public abstract void initMethod () throws KustvaktException;
+
+ public void close () {
+ BeansFactory.closeApplication();
+ }
+
+ public static class SpringExtendedSetupListener extends
+ SpringJUnit4ClassRunner {
+
+ private BeanConfigBaseTest instanceSetupListener;
+
+
+ public SpringExtendedSetupListener (Class<?> clazz)
+ throws InitializationError {
+ super(clazz);
+ }
+
+
+ @Override
+ protected Object createTest () throws Exception {
+ Object test = super.createTest();
+ // Note that JUnit4 will call this createTest() multiple times for each
+ // test method, so we need to ensure to call "beforeClassSetup" only once.
+ if (test instanceof BeanConfigBaseTest && instanceSetupListener == null) {
+ instanceSetupListener = (BeanConfigBaseTest) test;
+ instanceSetupListener.init();
+ }
+ return test;
+ }
+
+
+ @Override
+ public void run (RunNotifier notifier) {
+ super.run(notifier);
+ if (instanceSetupListener != null){
+ instanceSetupListener.close();
+ }
+ }
+ }
+}
diff --git a/full/src/test/java/de/ids_mannheim/korap/config/BeanConfigTest.java b/full/src/test/java/de/ids_mannheim/korap/config/BeanConfigTest.java
index ff19b62..7603c18 100644
--- a/full/src/test/java/de/ids_mannheim/korap/config/BeanConfigTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/config/BeanConfigTest.java
@@ -1,12 +1,84 @@
package de.ids_mannheim.korap.config;
+import static org.junit.Assert.assertNotNull;
+
+import org.apache.log4j.Logger;
+import org.junit.runner.RunWith;
+import org.junit.runner.notification.RunNotifier;
+import org.junit.runners.model.InitializationError;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import net.jcip.annotations.NotThreadSafe;
+
/**
* @author hanl
* @date 09/03/2016
*/
-public abstract class BeanConfigTest extends BeanConfigBaseTest{
+@NotThreadSafe
+@RunWith(BeanConfigTest.SpringExtendedSetupListener.class)
+@ContextConfiguration("classpath:test-config.xml")
+@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
+public abstract class BeanConfigTest {
- @Override
+ private static Logger jlog = Logger.getLogger(BeanConfigTest.class);
+ @Autowired
+ protected ApplicationContext context;
+
+ public void init () throws Exception {
+ assertNotNull("Application context must not be null!", this.context);
+ jlog.debug("running one-time before init for class "
+ + this.getClass().getSimpleName() + " ...");
+ BeansFactory.setKustvaktContext(getContext());
+ assertNotNull(BeansFactory.getKustvaktContext());
+ initMethod();
+ }
+
+ public abstract void initMethod () throws KustvaktException;
+
+ public void close () {
+ BeansFactory.closeApplication();
+ }
+
+ public static class SpringExtendedSetupListener
+ extends SpringJUnit4ClassRunner {
+
+ private BeanConfigTest instanceSetupListener;
+
+
+ public SpringExtendedSetupListener (Class<?> clazz)
+ throws InitializationError {
+ super(clazz);
+ }
+
+
+ @Override
+ protected Object createTest () throws Exception {
+ Object test = super.createTest();
+ // Note that JUnit4 will call this createTest() multiple times for each
+ // test method, so we need to ensure to call "beforeClassSetup" only once.
+ if (test instanceof BeanConfigTest
+ && instanceSetupListener == null) {
+ instanceSetupListener = (BeanConfigTest) test;
+ instanceSetupListener.init();
+ }
+ return test;
+ }
+
+
+ @Override
+ public void run (RunNotifier notifier) {
+ super.run(notifier);
+ if (instanceSetupListener != null) {
+ instanceSetupListener.close();
+ }
+ }
+ }
+
protected ContextHolder getContext () {
return helper().getContext();
}
@@ -19,5 +91,4 @@
return null;
}
}
-
}
diff --git a/full/src/test/java/de/ids_mannheim/korap/dao/RolePrivilegeDaoTest.java b/full/src/test/java/de/ids_mannheim/korap/dao/RolePrivilegeDaoTest.java
index d7317a6..a4d770b 100644
--- a/full/src/test/java/de/ids_mannheim/korap/dao/RolePrivilegeDaoTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/dao/RolePrivilegeDaoTest.java
@@ -49,21 +49,21 @@
@Test
public void updateRole () {
- Role role = roleDao.retrieveRoleByName("group member");
- roleDao.editRoleName(role.getId(), "group member role");
+ Role role = roleDao.retrieveRoleByName("USER_GROUP_MEMBER");
+ roleDao.editRoleName(role.getId(), "USER_GROUP_MEMBER role");
role = roleDao.retrieveRoleById(role.getId());
- assertEquals("group member role", role.getName());
+ assertEquals("USER_GROUP_MEMBER role", role.getName());
- roleDao.editRoleName(role.getId(), "group member");
+ roleDao.editRoleName(role.getId(), "USER_GROUP_MEMBER");
role = roleDao.retrieveRoleById(role.getId());
- assertEquals("group member", role.getName());
+ assertEquals("USER_GROUP_MEMBER", role.getName());
}
@Test
public void addDeletePrivilegeOfExistingRole () {
- Role role = roleDao.retrieveRoleByName("group member");
+ Role role = roleDao.retrieveRoleByName("USER_GROUP_MEMBER");
List<Privilege> privileges = role.getPrivileges();
assertEquals(1, role.getPrivileges().size());
assertEquals(privileges.get(0).getName(), PrivilegeType.DELETE);
@@ -73,13 +73,13 @@
privilegeTypes.add(PrivilegeType.READ);
privilegeDao.addPrivilegesToRole(role, privilegeTypes);
- role = roleDao.retrieveRoleByName("group member");
+ role = roleDao.retrieveRoleByName("USER_GROUP_MEMBER");
assertEquals(2, role.getPrivileges().size());
//delete privilege
privilegeDao.deletePrivilegeFromRole(role.getId(), PrivilegeType.READ);
- role = roleDao.retrieveRoleByName("group member");
+ role = roleDao.retrieveRoleByName("USER_GROUP_MEMBER");
assertEquals(1, role.getPrivileges().size());
assertEquals(privileges.get(0).getName(), PrivilegeType.DELETE);
}
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/FastJerseyTest.java b/full/src/test/java/de/ids_mannheim/korap/web/FastJerseyTest.java
index 3ac9366..d576a26 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/FastJerseyTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/FastJerseyTest.java
@@ -22,11 +22,9 @@
import com.sun.jersey.test.framework.spi.container.grizzly.GrizzlyTestContainerFactory;
import com.sun.jersey.test.framework.spi.container.grizzly.web.GrizzlyWebTestContainerFactory;
-import de.ids_mannheim.korap.config.BeanConfigBaseTest;
-import de.ids_mannheim.korap.config.ContextHolder;
-import de.ids_mannheim.korap.config.TestHelper;
+import de.ids_mannheim.korap.config.BeanConfigTest;
-public abstract class FastJerseyTest extends BeanConfigBaseTest{
+public abstract class FastJerseyTest extends BeanConfigTest{
private static String[] classPackages =
new String[] { "de.ids_mannheim.korap.web.service.full",
@@ -114,20 +112,20 @@
return client.resource(getBaseUri());
}
- protected TestHelper helper () {
- try {
- return TestHelper.newInstance(this.context);
- }
- catch (Exception e) {
- return null;
- }
- }
-
-
- @Override
- protected ContextHolder getContext () {
- return helper().getContext();
- }
+// protected TestHelper helper () {
+// try {
+// return TestHelper.newInstance(this.context);
+// }
+// catch (Exception e) {
+// return null;
+// }
+// }
+//
+//
+// @Override
+// protected ContextHolder getContext () {
+// return helper().getContext();
+// }
public static void startServer () {
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/SearchWithAvailabilityTest.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/SearchWithAvailabilityTest.java
index 73e6880..02abd36 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/controller/SearchWithAvailabilityTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/SearchWithAvailabilityTest.java
@@ -14,20 +14,14 @@
import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
import de.ids_mannheim.korap.config.Attributes;
-import de.ids_mannheim.korap.config.TokenType;
+import de.ids_mannheim.korap.config.SpringJerseyTest;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.utils.JsonUtils;
-import de.ids_mannheim.korap.web.FastJerseyTest;
-public class SearchWithAvailabilityTest extends FastJerseyTest {
+public class SearchWithAvailabilityTest extends SpringJerseyTest {
@Autowired
- HttpAuthorizationHandler handler;
+ private HttpAuthorizationHandler handler;
- @Override
- public void initMethod () throws KustvaktException {
- // helper().runBootInterfaces();
- }
-
private void checkAndFree (String json) throws KustvaktException {
JsonNode node = JsonUtils.readTree(json);
assertEquals("availability",
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/StatisticsControllerTest.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/StatisticsControllerTest.java
index b043d69..6fb0dd7 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/controller/StatisticsControllerTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/StatisticsControllerTest.java
@@ -1,33 +1,28 @@
package de.ids_mannheim.korap.web.controller;
+import static org.junit.Assert.assertEquals;
+
import java.io.IOException;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.jersey.api.client.ClientResponse;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.web.FastJerseyTest;
+import de.ids_mannheim.korap.config.SpringJerseyTest;
/**
* @author margaretha
* @date 27/09/2017
*
*/
-public class StatisticsControllerTest extends FastJerseyTest {
+public class StatisticsControllerTest extends SpringJerseyTest {
private ObjectMapper mapper = new ObjectMapper();
- @Override
- public void initMethod () throws KustvaktException {
-
- }
-
@Test
public void testGetStatisticsNoResource ()
throws JsonProcessingException, IOException {
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/UserGroupControllerTest.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/UserGroupControllerTest.java
index fea07fb..edafea8 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/controller/UserGroupControllerTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/UserGroupControllerTest.java
@@ -2,8 +2,6 @@
import static org.junit.Assert.assertEquals;
-import java.util.ArrayList;
-
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
@@ -12,13 +10,17 @@
import org.springframework.beans.factory.annotation.Autowired;
import com.fasterxml.jackson.databind.JsonNode;
+import com.sun.jersey.api.client.ClientHandlerException;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.ClientResponse.Status;
+import com.sun.jersey.api.client.UniformInterfaceException;
import com.sun.jersey.core.util.MultivaluedMapImpl;
import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
import de.ids_mannheim.korap.config.Attributes;
import de.ids_mannheim.korap.config.SpringJerseyTest;
+import de.ids_mannheim.korap.constant.GroupMemberStatus;
+import de.ids_mannheim.korap.constant.PredefinedRole;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.exceptions.StatusCodes;
import de.ids_mannheim.korap.utils.JsonUtils;
@@ -28,10 +30,11 @@
@Autowired
private HttpAuthorizationHandler handler;
+ private String username = "UserGroupControllerTest";
// dory is a group admin in dory group
@Test
- public void testRetrieveDoryGroups () throws KustvaktException {
+ public void testListDoryGroups () throws KustvaktException {
ClientResponse response = resource().path("group").path("list")
.header(Attributes.AUTHORIZATION,
handler.createBasicAuthorizationHeaderValue("dory",
@@ -52,7 +55,7 @@
// nemo is a group member in dory group
@Test
- public void testRetrieveNemoGroups () throws KustvaktException {
+ public void testListNemoGroups () throws KustvaktException {
ClientResponse response = resource().path("group").path("list")
.header(Attributes.AUTHORIZATION,
handler.createBasicAuthorizationHeaderValue("nemo",
@@ -71,9 +74,9 @@
assertEquals(0, node.at("/0/members").size());
}
- // marlin has a group
+ // marlin has 2 groups
@Test
- public void testRetrieveMarlinGroups () throws KustvaktException {
+ public void testListMarlinGroups () throws KustvaktException {
ClientResponse response = resource().path("group").path("list")
.header(Attributes.AUTHORIZATION,
handler.createBasicAuthorizationHeaderValue("marlin",
@@ -83,12 +86,12 @@
String entity = response.getEntity(String.class);
assertEquals(Status.OK.getStatusCode(), response.getStatus());
JsonNode node = JsonUtils.readTree(entity);
- assertEquals(1, node.size());
+ assertEquals(2, node.size());
}
@Test
- public void testRetrieveUserGroupUnauthorized () throws KustvaktException {
+ public void testListUserGroupUnauthorized () throws KustvaktException {
ClientResponse response = resource().path("group").path("list")
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
.get(ClientResponse.class);
@@ -99,37 +102,192 @@
assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus());
assertEquals(StatusCodes.AUTHORIZATION_FAILED,
node.at("/errors/0/0").asInt());
- assertEquals("Operation is not permitted for user: guest",
+ assertEquals("Unauthorized operation for user: guest",
node.at("/errors/0/1").asText());
}
+ @Test
+ public void testCreateUserGroup () throws UniformInterfaceException,
+ ClientHandlerException, KustvaktException {
-// @Test
-// public void testInviteMember () {
-//
-// }
-//
-// @Test
-// public void testInviteDeletedMember () {
-//
-// }
-//
-// @Test
-// public void testDeletePendingMember () {
-//
-// }
+ UserGroupJson json = new UserGroupJson();
+ json.setName("new user group");
+ json.setMembers(new String[] { "marlin", "nemo" });
-
+ ClientResponse response = resource().path("group").path("create")
+ .type(MediaType.APPLICATION_JSON)
+ .header(Attributes.AUTHORIZATION,
+ handler.createBasicAuthorizationHeaderValue(username,
+ "pass"))
+ .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32").entity(json)
+ .post(ClientResponse.class);
+
+ assertEquals(Status.OK.getStatusCode(), response.getStatus());
+
+ // list user group
+ response = resource().path("group").path("list")
+ .header(Attributes.AUTHORIZATION,
+ handler.createBasicAuthorizationHeaderValue(username,
+ "pass"))
+ .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
+ .get(ClientResponse.class);
+
+ String entity = response.getEntity(String.class);
+ // System.out.println(entity);
+ JsonNode node = JsonUtils.readTree(entity);
+ assertEquals(1, node.size());
+ node = node.get(0);
+ assertEquals("new user group", node.get("name").asText());
+ String groupId = node.get("id").asText();
+
+ assertEquals(username, node.get("owner").asText());
+ assertEquals(3, node.get("members").size());
+ assertEquals(username, node.at("/members/0/userId").asText());
+ assertEquals(GroupMemberStatus.ACTIVE.name(),
+ node.at("/members/0/status").asText());
+ assertEquals(PredefinedRole.USER_GROUP_ADMIN.name(),
+ node.at("/members/0/roles/0").asText());
+ assertEquals(PredefinedRole.VC_ACCESS_ADMIN.name(),
+ node.at("/members/0/roles/1").asText());
+
+ assertEquals("marlin", node.at("/members/1/userId").asText());
+ assertEquals(GroupMemberStatus.PENDING.name(),
+ node.at("/members/1/status").asText());
+ assertEquals(PredefinedRole.USER_GROUP_MEMBER.name(),
+ node.at("/members/1/roles/0").asText());
+ assertEquals(PredefinedRole.VC_ACCESS_MEMBER.name(),
+ node.at("/members/1/roles/1").asText());
+
+ testDeleteGroupMemberUnauthorized(groupId);
+ testDeleteGroupMember(groupId);
+ testDeleteGroup(groupId);
+ }
+
+ private void testDeleteGroupMemberUnauthorized (String groupId)
+ throws UniformInterfaceException, ClientHandlerException,
+ KustvaktException {
+ // nemo is a group member
+ ClientResponse response = resource().path("group").path("member")
+ .path("delete").queryParam("memberId", "marlin")
+ .queryParam("groupId", groupId)
+ .header(Attributes.AUTHORIZATION,
+ handler.createBasicAuthorizationHeaderValue("nemo",
+ "pass"))
+ .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
+ .delete(ClientResponse.class);
+
+ String entity = response.getEntity(String.class);
+// System.out.println(entity);
+ JsonNode node = JsonUtils.readTree(entity);
+ assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus());
+ assertEquals(StatusCodes.AUTHORIZATION_FAILED,
+ node.at("/errors/0/0").asInt());
+ assertEquals("Unauthorized operation for user: nemo",
+ node.at("/errors/0/1").asText());
+ }
+
+ private void testDeleteGroupMember (String groupId)
+ throws UniformInterfaceException, ClientHandlerException,
+ KustvaktException {
+ // delete marlin from group
+ ClientResponse response = resource().path("group").path("member")
+ .path("delete").queryParam("memberId", "marlin")
+ .queryParam("groupId", groupId)
+ .header(Attributes.AUTHORIZATION,
+ handler.createBasicAuthorizationHeaderValue(username,
+ "pass"))
+ .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
+ .delete(ClientResponse.class);
+
+ // check group member
+ response = resource().path("group").path("list")
+ .header(Attributes.AUTHORIZATION,
+ handler.createBasicAuthorizationHeaderValue(username,
+ "pass"))
+ .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
+ .get(ClientResponse.class);
+ String entity = response.getEntity(String.class);
+ JsonNode node = JsonUtils.readTree(entity);
+ node = node.get(0);
+ assertEquals(2, node.get("members").size());
+ assertEquals("nemo", node.at("/members/1/userId").asText());
+ assertEquals(GroupMemberStatus.PENDING.name(),
+ node.at("/members/1/status").asText());
+
+ }
+
+ private void testDeleteGroup (String groupId)
+ throws UniformInterfaceException, ClientHandlerException,
+ KustvaktException {
+ //delete group
+ ClientResponse response = resource().path("group").path("delete")
+ .queryParam("groupId", groupId)
+ .header(Attributes.AUTHORIZATION,
+ handler.createBasicAuthorizationHeaderValue(username,
+ "pass"))
+ .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
+ .delete(ClientResponse.class);
+
+ assertEquals(Status.OK.getStatusCode(), response.getStatus());
+
+ // check group
+ response = resource().path("group").path("list")
+ .header(Attributes.AUTHORIZATION,
+ handler.createBasicAuthorizationHeaderValue(username,
+ "pass"))
+ .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
+ .get(ClientResponse.class);
+ String entity = response.getEntity(String.class);
+ assertEquals("[]", entity);
+ }
+
+ @Test
+ public void testDeleteGroupOwner () throws UniformInterfaceException,
+ ClientHandlerException, KustvaktException {
+ // delete marlin from marlin group
+ // dory is a VCA in marlin group
+ ClientResponse response = resource().path("group").path("member")
+ .path("delete").queryParam("memberId", "marlin")
+ .queryParam("groupId", "1")
+ .header(Attributes.AUTHORIZATION,
+ handler.createBasicAuthorizationHeaderValue("dory",
+ "pass"))
+ .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
+ .delete(ClientResponse.class);
+
+ String entity = response.getEntity(String.class);
+ // System.out.println(entity);
+ JsonNode node = JsonUtils.readTree(entity);
+ assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
+ assertEquals(StatusCodes.NOT_ALLOWED, node.at("/errors/0/0").asInt());
+ assertEquals("Operation 'delete group owner'is not allowed.",
+ node.at("/errors/0/1").asText());
+
+ }
+
+ // @Test
+ // public void testInviteMember () {
+ //
+ // }
+ //
+ // @Test
+ // public void testInviteDeletedMember () {
+ //
+ // }
+ //
+ // @Test
+ // public void testDeletePendingMember () {
+ //
+ // }
+
+
// marlin has GroupMemberStatus.PENDING in dory group
@Test
- public void testSubscribeUnsubscribeMarlinToDoryGroup ()
- throws KustvaktException {
+ public void testSubscribeMarlinToDoryGroup () throws KustvaktException {
MultivaluedMap<String, String> form = new MultivaluedMapImpl();
form.add("groupId", "2");
- ClientResponse response;
- String entity;
- response = resource().path("group").path("subscribe")
+ ClientResponse response = resource().path("group").path("subscribe")
.type(MediaType.APPLICATION_FORM_URLENCODED)
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
.header(Attributes.AUTHORIZATION,
@@ -140,71 +298,84 @@
assertEquals(Status.OK.getStatusCode(), response.getStatus());
// retrieve marlin group
- response = resource().path("group").path("list")
- .header(Attributes.AUTHORIZATION,
- handler.createBasicAuthorizationHeaderValue("marlin",
- "pass"))
- .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
- .get(ClientResponse.class);
- entity = response.getEntity(String.class);
-
- assertEquals(Status.OK.getStatusCode(), response.getStatus());
-
- JsonNode node = JsonUtils.readTree(entity);
+ JsonNode node = retrieveMarlinGroups();
+ System.out.println(node);
assertEquals(2, node.size());
- JsonNode group;
- for (int i = 0; i < node.size(); i++) {
- group = node.get(i);
- if (group.at("/id").asInt() == 2) {
- assertEquals("dory group", group.at("/name").asText());
- assertEquals("dory", group.at("/owner").asText());
- // group members are not allowed to see other members
- assertEquals(0, group.at("/members").size());
- }
- }
+ JsonNode group = node.get(1);
+ assertEquals(2, group.at("/id").asInt());
+ assertEquals("dory group", group.at("/name").asText());
+ assertEquals("dory", group.at("/owner").asText());
+ // group members are not allowed to see other members
+ assertEquals(0, group.at("/members").size());
+ assertEquals(GroupMemberStatus.ACTIVE.name(),
+ group.at("/userMemberStatus").asText());
- // unsubscribe
- response = resource().path("group").path("unsubscribe")
+ // unsubscribe marlin from dory group
+ testUnsubscribe(form);
+
+ // invite marlin to dory group to set back the GroupMemberStatus.PENDING
+ testInviteMember();
+ }
+
+ private JsonNode retrieveMarlinGroups () throws UniformInterfaceException,
+ ClientHandlerException, KustvaktException {
+ ClientResponse response = resource().path("group").path("list")
+ .header(Attributes.AUTHORIZATION,
+ handler.createBasicAuthorizationHeaderValue("marlin",
+ "pass"))
+ .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
+ .get(ClientResponse.class);
+ String entity = response.getEntity(String.class);
+
+ assertEquals(Status.OK.getStatusCode(), response.getStatus());
+
+ return JsonUtils.readTree(entity);
+ }
+
+ private void testUnsubscribe (MultivaluedMap<String, String> form)
+ throws UniformInterfaceException, ClientHandlerException,
+ KustvaktException {
+ ClientResponse response = resource().path("group").path("unsubscribe")
.type(MediaType.APPLICATION_FORM_URLENCODED)
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
.header(Attributes.AUTHORIZATION,
handler.createBasicAuthorizationHeaderValue("marlin",
"pass"))
.entity(form).post(ClientResponse.class);
- entity = response.getEntity(String.class);
-
- // retrieve marlin group
- response = resource().path("group").path("list")
- .header(Attributes.AUTHORIZATION,
- handler.createBasicAuthorizationHeaderValue("marlin",
- "pass"))
- .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
- .get(ClientResponse.class);
- entity = response.getEntity(String.class);
assertEquals(Status.OK.getStatusCode(), response.getStatus());
- node = JsonUtils.readTree(entity);
+ JsonNode node = retrieveMarlinGroups();
assertEquals(1, node.size());
+ }
- // add marlin to dory group again to set back the GroupMemberStatus.PENDING
- ArrayList<String> members = new ArrayList<String>();
- members.add("marlin");
+ private void testInviteMember () throws UniformInterfaceException,
+ ClientHandlerException, KustvaktException {
+ String[] members = new String[] { "marlin" };
UserGroupJson userGroup = new UserGroupJson();
userGroup.setMembers(members);
// dory group
userGroup.setId(2);
- response = resource().path("group").path("add")
- .type(MediaType.APPLICATION_JSON)
+ ClientResponse response = resource().path("group").path("member")
+ .path("invite").type(MediaType.APPLICATION_JSON)
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
.header(Attributes.AUTHORIZATION,
handler.createBasicAuthorizationHeaderValue("dory",
"pass"))
.entity(userGroup).post(ClientResponse.class);
- entity = response.getEntity(String.class);
+
+ assertEquals(Status.OK.getStatusCode(), response.getStatus());
+
+ // check member
+ JsonNode node = retrieveMarlinGroups();
+ assertEquals(2, node.size());
+ JsonNode group = node.get(1);
+ assertEquals(GroupMemberStatus.PENDING.name(),
+ group.at("/userMemberStatus").asText());
+
}
// pearl has GroupMemberStatus.DELETED in dory group
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/VirtualCorpusControllerTest.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/VirtualCorpusControllerTest.java
index 2b68543..6207cb2 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/controller/VirtualCorpusControllerTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/VirtualCorpusControllerTest.java
@@ -9,15 +9,13 @@
import java.io.InputStreamReader;
import java.util.List;
import java.util.Map.Entry;
+import java.util.Set;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
-import java.util.Set;
-
import org.apache.http.entity.ContentType;
import org.eclipse.jetty.http.HttpHeaders;
-import org.junit.Ignore;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -25,8 +23,8 @@
import com.sun.jersey.api.client.ClientHandlerException;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.ClientResponse.Status;
-import com.sun.jersey.core.util.MultivaluedMapImpl;
import com.sun.jersey.api.client.UniformInterfaceException;
+import com.sun.jersey.core.util.MultivaluedMapImpl;
import com.sun.jersey.spi.container.ContainerRequest;
import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
@@ -243,7 +241,7 @@
assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus());
assertEquals(StatusCodes.AUTHORIZATION_FAILED,
node.at("/errors/0/0").asInt());
- assertEquals("Operation is not permitted for user: guest",
+ assertEquals("Unauthorized operation for user: guest",
node.at("/errors/0/1").asText());
checkWWWAuthenticateHeader(response);
@@ -276,7 +274,7 @@
.get(ClientResponse.class);
entity = response.getEntity(String.class);
assertEquals(Status.OK.getStatusCode(), response.getStatus());
- System.out.println(entity);
+// System.out.println(entity);
JsonNode node = JsonUtils.readTree(entity);
assertEquals(2, node.size());
assertEquals("new vc", node.get(1).get("name").asText());
@@ -402,7 +400,7 @@
JsonNode node = JsonUtils.readTree(entity);
assertEquals(StatusCodes.AUTHORIZATION_FAILED,
node.at("/errors/0/0").asInt());
- assertEquals("Operation is not permitted for user: guest",
+ assertEquals("Unauthorized operation for user: guest",
node.at("/errors/0/1").asText());
checkWWWAuthenticateHeader(response);
@@ -663,10 +661,9 @@
handler.createBasicAuthorizationHeaderValue("dory",
"pass"))
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
- .header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON)
.get(ClientResponse.class);
String entity = response.getEntity(String.class);
- // System.out.println(entity);
+// System.out.println(entity);
JsonNode node = JsonUtils.readTree(entity);
assertEquals(1, node.at("/0/accessId").asInt());
assertEquals(2, node.at("/0/vcId").asInt());
@@ -684,7 +681,6 @@
handler.createBasicAuthorizationHeaderValue("nemo",
"pass"))
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
- .header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON)
.get(ClientResponse.class);
String entity = response.getEntity(String.class);
assertEquals("[]", entity);
@@ -698,8 +694,6 @@
handler.createBasicAuthorizationHeaderValue(
"VirtualCorpusControllerTest", "pass"))
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
- .header(HttpHeaders.CONTENT_TYPE,
- ContentType.APPLICATION_JSON)
.get(ClientResponse.class);
String entity = response.getEntity(String.class);
JsonNode node = JsonUtils.readTree(entity);
@@ -717,7 +711,6 @@
handler.createBasicAuthorizationHeaderValue("dory",
"pass"))
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
- .header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON)
.get(ClientResponse.class);
String entity = response.getEntity(String.class);
// System.out.println(entity);
@@ -727,7 +720,7 @@
assertEquals("group VC", node.at("/0/vcName").asText());
assertEquals(2, node.at("/0/userGroupId").asInt());
assertEquals("dory group", node.at("/0/userGroupName").asText());
- }
+ }
@Test