/**
* Abiquo community edition
* cloud management application for hybrid clouds
* Copyright (C) 2008-2010 - Abiquo Holdings S.L.
*
* This application is free software; you can redistribute it and/or
* modify it under the terms of the GNU LESSER GENERAL PUBLIC
* LICENSE as published by the Free Software Foundation under
* version 3 of the License
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* LESSER GENERAL PUBLIC LICENSE v.3 for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
package com.abiquo.api.services.enterprise;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.springframework.security.context.SecurityContextHolder;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.abiquo.api.common.AbstractUnitTest;
import com.abiquo.api.common.Assert;
import com.abiquo.api.common.SysadminAuthentication;
import com.abiquo.api.services.RoleService;
import com.abiquo.model.enumerator.Privileges;
import com.abiquo.server.core.enterprise.Enterprise;
import com.abiquo.server.core.enterprise.Privilege;
import com.abiquo.server.core.enterprise.Role;
import com.abiquo.server.core.enterprise.User;
public class RoleServiceTest extends AbstractUnitTest
{
private Enterprise e;
private Role r;
private User u;
@BeforeMethod
public void setupSysadmin()
{
e = enterpriseGenerator.createUniqueInstance();
Privilege p1 = new Privilege(Privileges.USERS_MANAGE_OTHER_ENTERPRISES);
Privilege p2 = new Privilege(Privileges.USERS_MANAGE_USERS);
r = roleGenerator.createInstance("sys", p1, p2);
u = userGenerator.createInstance(e, r, "sysadmin", "sysadmin");
setup(e, p1, p2, r, u);
SecurityContextHolder.getContext().setAuthentication(new SysadminAuthentication());
}
@Test
public void findRoles()
{
Enterprise e1 = enterpriseGenerator.createUniqueInstance();
Enterprise e2 = enterpriseGenerator.createUniqueInstance();
Role r1 = roleGenerator.createInstance(e1);
Role r2 = roleGenerator.createInstance(e2);
List<Object> entitiesToPersist = new ArrayList<Object>();
entitiesToPersist.add(e1);
entitiesToPersist.add(e2);
entitiesToPersist.add(r1);
entitiesToPersist.add(r2);
setup(entitiesToPersist.toArray());
RoleService service = new RoleService(getEntityManagerWithAnActiveTransaction());
Collection<Role> roles = service.getRolesByEnterprise(e1.getId(), null, null, false);
Assert.assertSize(roles, 2);
roles = service.getRolesByEnterprise(e2.getId(), null, null, false);
Assert.assertSize(roles, 2);
// There is the adminRole, without enterprise, created before each method.
roles = service.getRolesByEnterprise(0, null, null, false);
Assert.assertSize(roles, 1);
}
@Test
public void findRolesFiltered()
{
Enterprise e1 = enterpriseGenerator.createUniqueInstance();
Role r1 = roleGenerator.createInstance("r1", e1);
Role r2 = roleGenerator.createInstance("r2", e1);
List<Object> entitiesToPersist = new ArrayList<Object>();
entitiesToPersist.add(e1);
entitiesToPersist.add(r1);
entitiesToPersist.add(r2);
setup(entitiesToPersist.toArray());
RoleService service = new RoleService(getEntityManagerWithAnActiveTransaction());
Collection<Role> roles =
service.getRolesByEnterprise(e1.getId(), r1.getName(), null, false);
Assert.assertSize(roles, 1);
roles = service.getRolesByEnterprise(e1.getId(), r2.getName(), null, false);
Assert.assertSize(roles, 1);
roles = service.getRolesByEnterprise(e1.getId(), "Any", null, false);
Assert.assertSize(roles, 0);
}
@Test
public void findRolesOrdered()
{
Enterprise e1 = enterpriseGenerator.createUniqueInstance();
Role r1 = roleGenerator.createInstance("r1", e1);
Role r2 = roleGenerator.createInstance("r2", e1);
List<Object> entitiesToPersist = new ArrayList<Object>();
entitiesToPersist.add(e1);
entitiesToPersist.add(r1);
entitiesToPersist.add(r2);
setup(entitiesToPersist.toArray());
RoleService service = new RoleService(getEntityManagerWithAnActiveTransaction());
Collection<Role> roles = service.getRolesByEnterprise(e1.getId(), null, "name", false);
Role r = roles.iterator().next();
org.testng.Assert.assertEquals(r.getName(), "r1");
roles = service.getRolesByEnterprise(e1.getId(), null, "name", true);
r = roles.iterator().next();
org.testng.Assert.assertEquals(u.getNick(), "sysadmin");
}
}