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.PermitType; import org.ovirt.engine.core.common.action.ActionGroupsToRoleParameter; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.ActionGroup; import org.ovirt.engine.core.common.queries.MultilevelAdministrationByRoleIdParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.api.restapi.types.PermitMapper; public class BackendPermitsResourceTest extends AbstractBackendCollectionResourceTest<Permit, ActionGroup, BackendPermitsResource> { public BackendPermitsResourceTest() { super(new BackendPermitsResource(GUIDS[1]), null, ""); } @Test @Ignore @Override public void testQuery() throws Exception { } @Test public void testRemoveBadId() throws Exception { doTestRemoveNotFound("foo"); } @Test public void testRemoveNotFound() throws Exception { doTestRemoveNotFound("11111"); } private void doTestRemoveNotFound(String id) throws Exception { control.replay(); try { collection.remove(id); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyNotFoundException(wae); } } @Test public void testRemove() throws Exception { List<ActionGroup> actionGroups = new ArrayList<ActionGroup>(); actionGroups.add(ActionGroup.forValue(1)); setUriInfo(setUpActionExpectations(VdcActionType.DetachActionGroupsFromRole, ActionGroupsToRoleParameter.class, new String[] { "RoleId", "ActionGroups" }, new Object[] { GUIDS[1], actionGroups }, true, true)); verifyRemove(collection.remove("1")); } @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 { List<ActionGroup> actionGroups = new ArrayList<ActionGroup>(); actionGroups.add(ActionGroup.forValue(1)); setUriInfo(setUpActionExpectations(VdcActionType.DetachActionGroupsFromRole, ActionGroupsToRoleParameter.class, new String[] { "RoleId", "ActionGroups" }, new Object[] { GUIDS[1], actionGroups }, canDo, success)); try { collection.remove("1"); fail("expected WebApplicationException"); } catch (WebApplicationException wae) { verifyFault(wae, detail); } } @Test public void testAddPermit() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpCreationExpectations(VdcActionType.AttachActionGroupsToRole, ActionGroupsToRoleParameter.class, new String[] { "RoleId" }, new Object[] { GUIDS[1] }, true, true, GUIDS[2], null, null, null, null, getEntity(1)); Permit model = new Permit(); model.setId("1"); Response response = collection.add(model); assertEquals(201, response.getStatus()); assertTrue(response.getEntity() instanceof Permit); verifyModel((Permit)response.getEntity(), 0); } @Override protected List<Permit> getCollection() { return collection.list().getPermits(); } @Override protected void setUpQueryExpectations(String query, Object failure) throws Exception { assert(query.equals("")); setUpEntityQueryExpectations(VdcQueryType.GetRoleActionGroupsByRoleId, MultilevelAdministrationByRoleIdParameters.class, new String[] { "RoleId" }, new Object[] { GUIDS[1] }, setUpActionGroups(), failure); control.replay(); } static List<ActionGroup> setUpActionGroups() { List<ActionGroup> actionGroups = new ArrayList<ActionGroup>(); for (int i = 1; i <= NAMES.length; i++) { actionGroups.add(ActionGroup.forValue(i)); } return actionGroups; } @Override protected ActionGroup getEntity(int index) { return ActionGroup.forValue(index); } static Permit getModel(int index) { Permit model = new Permit(); model.setId(Integer.toString(index)); model.setName(ActionGroup.forValue(index).toString()); return model; } protected void verifyModel(Permit model, int index) { assertEquals(Integer.toString(index + 1), model.getId()); PermitType permitType = PermitMapper.map(ActionGroup.forValue(index + 1), (PermitType)null); assertEquals(permitType.value(), model.getName()); } }