package org.openstack.atlas.api.mgmt.resources;
import junit.framework.Assert;
import org.dozer.DozerBeanMapper;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import org.openstack.atlas.api.mgmt.integration.ManagementAsyncService;
import org.openstack.atlas.service.domain.entities.GroupRateLimit;
import org.openstack.atlas.service.domain.operations.OperationResponse;
import org.openstack.atlas.service.domain.pojos.AccountLoadBalancer;
import org.openstack.atlas.service.domain.pojos.ExtendedAccountLoadBalancer;
import org.openstack.atlas.service.domain.repository.GroupRepository;
import org.openstack.atlas.service.domain.services.LoadBalancerService;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.List;
import static org.mockito.Mockito.*;
@RunWith(Enclosed.class)
public class AccountsResourceTest {
public static class whenRetrievingAccountDetails {
private ManagementAsyncService asyncService;
private AccountsResource accountsResource;
private OperationResponse operationResponse;
private AccountResource accountResource;
private LoadBalancerService lbService;
private GroupRepository groupRepository;
@Before
public void setUp() {
accountsResource = new AccountsResource();
accountResource = new AccountResource();
accountResource.setMockitoAuth(true);
accountResource.setId(12);
accountsResource.setAccountResource(accountResource);
asyncService = mock(ManagementAsyncService.class);
lbService = mock(LoadBalancerService.class);
accountResource.setLoadBalancerService(lbService);
groupRepository = mock(GroupRepository.class);
accountResource.setGroupRepository(groupRepository);
accountResource.setManagementAsyncService(asyncService);
operationResponse = new OperationResponse();
operationResponse.setExecutedOkay(true);
List<String> mappingFiles = new ArrayList<String>();
mappingFiles.add("loadbalancing-dozer-management-mapping.xml");
accountResource.setDozerMapper(new DozerBeanMapper(mappingFiles));
}
@Test
public void shouldReturnAccountResource() throws Exception {
AccountResource resource = accountsResource.retrieveAccountResource(12);
Assert.assertEquals(12, resource.getId());
}
@Test
public void shouldReturnAccountLoadBalancers() throws Exception {
List<AccountLoadBalancer> elbs = new ArrayList<AccountLoadBalancer>();
AccountLoadBalancer elb = new AccountLoadBalancer();
elb.setClusterId(2);
elbs.add(elb);
when(lbService.getAccountLoadBalancers(12)).thenReturn(elbs);
AccountResource resource = accountsResource.retrieveAccountResource(12);
Response response = resource.retrieveLoadBalancers();
Assert.assertEquals(200, response.getStatus());
}
@Test
public void shouldReturnExtendedAccountLoadBalancers() throws Exception {
List<ExtendedAccountLoadBalancer> elbs = new ArrayList<ExtendedAccountLoadBalancer>();
ExtendedAccountLoadBalancer elb = new ExtendedAccountLoadBalancer();
elb.setClusterId(2);
elbs.add(elb);
when(lbService.getExtendedAccountLoadBalancer(12)).thenReturn(elbs);
AccountResource resource = accountsResource.retrieveAccountResource(12);
Response response = resource.retrieveExtendedAccountLoadBalancers();
Assert.assertEquals(200, response.getStatus());
}
@Test
public void shouldReturnGroups() throws Exception {
List<GroupRateLimit> elbs = new ArrayList<GroupRateLimit>();
GroupRateLimit elb = new GroupRateLimit();
elb.setDescription("Description");
elbs.add(elb);
when(groupRepository.getByAccountId(12)).thenReturn(elbs);
AccountResource resource = accountsResource.retrieveAccountResource(12);
Response response = resource.retrieveGroups();
Assert.assertEquals(200, response.getStatus());
}
@Ignore
@Test
public void shouldDeleteGroup() throws Exception {
AccountResource resource = accountsResource.retrieveAccountResource(12);
// Response response = resource.deleteAccountGroup();
verify(groupRepository).deleteAllForAccount(12);
// Assert.assertEquals(200, response.getStatus());
}
}
}