package org.ovirt.engine.api.restapi.resource;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import org.junit.Ignore;
import org.junit.Test;
import org.ovirt.engine.api.model.Permit;
import org.ovirt.engine.api.model.Permits;
import org.ovirt.engine.api.model.Role;
import org.ovirt.engine.core.common.action.RoleWithActionGroupsParameters;
import org.ovirt.engine.core.common.action.RolesParameterBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.RoleType;
import org.ovirt.engine.core.common.businessentities.roles;
import org.ovirt.engine.core.common.queries.MultilevelAdministrationByRoleIdParameters;
import org.ovirt.engine.core.common.queries.MultilevelAdministrationsQueriesParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
public class BackendRolesResourceTest
extends AbstractBackendCollectionResourceTest<Role, roles, BackendRolesResource> {
public BackendRolesResourceTest() {
super(new BackendRolesResource(), null, "");
}
@Test
@Ignore
@Override
public void testQuery() throws Exception {
}
@Test
public void testRemove() throws Exception {
setUpGetEntityExpectations();
setUriInfo(setUpActionExpectations(VdcActionType.RemoveRole,
RolesParameterBase.class,
new String[] { "RoleId" },
new Object[] { GUIDS[0] },
true,
true));
verifyRemove(collection.remove(GUIDS[0].toString()));
}
@Test
public void testRemoveNonExistant() throws Exception{
setUpGetEntityExpectations(VdcQueryType.GetRoleById,
MultilevelAdministrationByRoleIdParameters.class,
new String[] { "RoleId" },
new Object[] { NON_EXISTANT_GUID },
null);
control.replay();
try {
collection.remove(NON_EXISTANT_GUID.toString());
fail("expected WebApplicationException");
} catch (WebApplicationException wae) {
assertNotNull(wae.getResponse());
assertEquals(404, wae.getResponse().getStatus());
}
}
private void setUpGetEntityExpectations() throws Exception {
setUpGetEntityExpectations(VdcQueryType.GetRoleById,
MultilevelAdministrationByRoleIdParameters.class,
new String[] { "RoleId" },
new Object[] { GUIDS[0] },
getEntity(0));
}
@Test
public void testRemoveCantDo() throws Exception {
doTestBadRemove(false, true, CANT_DO);
}
@Test
public void testRemoveFailed() throws Exception {
doTestBadRemove(true, false, FAILURE);
}
protected void doTestBadRemove(boolean canDo, boolean success, String detail) throws Exception {
setUpGetEntityExpectations();
setUriInfo(setUpActionExpectations(VdcActionType.RemoveRole,
RolesParameterBase.class,
new String[] { "RoleId" },
new Object[] { GUIDS[0] },
canDo,
success));
try {
collection.remove(GUIDS[0].toString());
fail("expected WebApplicationException");
} catch (WebApplicationException wae) {
verifyFault(wae, detail);
}
}
@Test
public void testAddRole() throws Exception {
setUriInfo(setUpBasicUriExpectations());
setUpCreationExpectations(VdcActionType.AddRoleWithActionGroups,
RoleWithActionGroupsParameters.class,
new String[] { "Role.Id", "Role.name" },
new Object[] { GUIDS[0], NAMES[0] },
true,
true,
GUIDS[0],
VdcQueryType.GetRoleById,
MultilevelAdministrationByRoleIdParameters.class,
new String[] { "RoleId" },
new Object[] { GUIDS[0] },
getEntity(0));
Role model = new Role();
model.setName(NAMES[0].toString());
model.setPermits(new Permits());
model.getPermits().getPermits().add(new Permit());
model.getPermits().getPermits().get(0).setId("1");
Response response = collection.add(model);
assertEquals(201, response.getStatus());
assertTrue(response.getEntity() instanceof Role);
verifyModel((Role) response.getEntity(), 0);
}
@Test
public void testAddIncompleteParametersNoPermits() throws Exception {
Role model = new Role();
model.setName(NAMES[0].toString());
setUriInfo(setUpBasicUriExpectations());
control.replay();
try {
collection.add(model);
fail("expected WebApplicationException on incomplete parameters");
} catch (WebApplicationException wae) {
verifyIncompleteException(wae, "Role", "add", "permits.id");
}
}
@Test
public void testAddIncompleteParametersNoName() throws Exception {
Role model = new Role();
model.setPermits(new Permits());
model.getPermits().getPermits().add(new Permit());
model.getPermits().getPermits().get(0).setId("1");
setUriInfo(setUpBasicUriExpectations());
control.replay();
try {
collection.add(model);
fail("expected WebApplicationException on incomplete parameters");
} catch (WebApplicationException wae) {
verifyIncompleteException(wae, "Role", "add", "name");
}
}
@Override
protected List<Role> getCollection() {
return collection.list().getRoles();
}
@Override
protected void setUpQueryExpectations(String query, Object failure) throws Exception {
assert(query.equals(""));
setUpEntityQueryExpectations(VdcQueryType.GetAllRoles,
MultilevelAdministrationsQueriesParameters.class,
new String[] { },
new Object[] { },
setUpRoles(),
failure);
control.replay();
}
@Override
protected roles getEntity(int index) {
roles role = new roles();
role.setId(GUIDS[index]);
role.setname(NAMES[index]);
role.setdescription(DESCRIPTIONS[index]);
role.setis_readonly(false);
role.setType(RoleType.ADMIN);
return role;
}
protected List<roles> setUpRoles() {
List<roles> roles = new ArrayList<roles>();
for (int i = 0; i < NAMES.length; i++) {
roles.add(getEntity(i));
}
return roles;
}
@Override
protected void verifyModel(Role model, int index) {
super.verifyModel(model, index);
assertTrue(model.isMutable());
assertTrue(model.isAdministrative());
}
}