package org.axway.grapes.server.core;
import org.axway.grapes.server.GrapesTestUtils;
import org.axway.grapes.server.db.RepositoryHandler;
import org.axway.grapes.server.db.datamodel.DbArtifact;
import org.axway.grapes.server.db.datamodel.DbModule;
import org.axway.grapes.server.db.datamodel.DbOrganization;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertNull;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
public class OrganizationHandlerTest {
@Test
public void checkStoreOrganization(){
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
final OrganizationHandler handler = new OrganizationHandler(repositoryHandler);
final DbOrganization dbOrganization = new DbOrganization();
handler.store(dbOrganization);
verify(repositoryHandler, times(1)).store(dbOrganization);
}
@Test
public void getAllOrganizationNames(){
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
final OrganizationHandler handler = new OrganizationHandler(repositoryHandler);
handler.getOrganizationNames();
verify(repositoryHandler, times(1)).getOrganizationNames();
}
@Test
public void getAnExistingOrganization(){
final DbOrganization organization = new DbOrganization();
organization.setName("test");
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getOrganization(organization.getName())).thenReturn(organization);
final OrganizationHandler handler = new OrganizationHandler(repositoryHandler);
final DbOrganization gotOrganization = handler.getOrganization(organization.getName());
assertNotNull(gotOrganization);
assertEquals(organization, gotOrganization);
verify(repositoryHandler, times(1)).getOrganization(organization.getName());
}
@Test
public void getAnOrganizationThatDoesNotExist(){
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
final OrganizationHandler handler = new OrganizationHandler(repositoryHandler);
WebApplicationException exception = null;
try {
handler.getOrganization("doesNotExist");
}catch (WebApplicationException e){
exception = e;
}
assertNotNull(exception);
Assert.assertEquals(Response.Status.NOT_FOUND.getStatusCode(), exception.getResponse().getStatus());
}
@Test
public void deleteAnExistingOrganization(){
final DbOrganization organization = new DbOrganization();
organization.setName("test");
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getOrganization(organization.getName())).thenReturn(organization);
final OrganizationHandler handler = new OrganizationHandler(repositoryHandler);
handler.deleteOrganization(organization.getName());
verify(repositoryHandler, times(1)).deleteOrganization(organization.getName());
}
@Test
public void deleteAnOrganizationThatDoesNotExist(){
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
final OrganizationHandler handler = new OrganizationHandler(repositoryHandler);
WebApplicationException exception = null;
try {
handler.deleteOrganization("doesNotExist");
}catch (WebApplicationException e){
exception = e;
}
assertNotNull(exception);
Assert.assertEquals(Response.Status.NOT_FOUND.getStatusCode(), exception.getResponse().getStatus());
}
@Test
public void addCorporateGroupId(){
final DbOrganization dbOrganization= new DbOrganization();
dbOrganization.setName("organization1");
dbOrganization.getCorporateGroupIdPrefixes().add("org.test");
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
ArgumentCaptor<DbOrganization> captor = ArgumentCaptor.forClass(DbOrganization.class);
when(repositoryHandler.getOrganization(dbOrganization.getName())).thenReturn(dbOrganization);
final OrganizationHandler handler = new OrganizationHandler(repositoryHandler);
handler.addCorporateGroupId(dbOrganization.getName(), "com.test");
verify(repositoryHandler, times(1)).store(captor.capture());
assertTrue(captor.getValue().getCorporateGroupIdPrefixes().contains("com.test"));
verify(repositoryHandler, times(1)).addModulesOrganization("com.test", dbOrganization);
}
@Test
public void addCorporateGroupIdThatAlreadyExist(){
final DbOrganization dbOrganization= new DbOrganization();
dbOrganization.setName("organization1");
dbOrganization.getCorporateGroupIdPrefixes().add("org.test");
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
ArgumentCaptor<DbOrganization> captor = ArgumentCaptor.forClass(DbOrganization.class);
when(repositoryHandler.getOrganization(dbOrganization.getName())).thenReturn(dbOrganization);
final OrganizationHandler handler = new OrganizationHandler(repositoryHandler);
handler.addCorporateGroupId(dbOrganization.getName(), "org.test");
verify(repositoryHandler, never()).store(captor.capture());
}
@Test
public void removeCorporateGroupId(){
final DbOrganization dbOrganization= new DbOrganization();
dbOrganization.setName("organization1");
dbOrganization.getCorporateGroupIdPrefixes().add("org.test");
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
ArgumentCaptor<DbOrganization> captor = ArgumentCaptor.forClass(DbOrganization.class);
when(repositoryHandler.getOrganization(dbOrganization.getName())).thenReturn(dbOrganization);
final OrganizationHandler handler = new OrganizationHandler(repositoryHandler);
handler.removeCorporateGroupId(dbOrganization.getName(), "org.test");
verify(repositoryHandler, times(1)).store((DbOrganization)captor.capture());
assertFalse(captor.getValue().getCorporateGroupIdPrefixes().contains("org.test"));
verify(repositoryHandler, times(1)).removeModulesOrganization("org.test", dbOrganization);
}
@Test
public void removeCorporateGroupIdThatDoesNotExist(){
final DbOrganization dbOrganization= new DbOrganization();
dbOrganization.setName("organization1");
dbOrganization.getCorporateGroupIdPrefixes().add("org.test");
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
ArgumentCaptor<DbOrganization> captor = ArgumentCaptor.forClass(DbOrganization.class);
when(repositoryHandler.getOrganization(dbOrganization.getName())).thenReturn(dbOrganization);
final OrganizationHandler handler = new OrganizationHandler(repositoryHandler);
handler.removeCorporateGroupId(dbOrganization.getName(), "com.test");
verify(repositoryHandler, never()).store(captor.capture());
}
@Test
public void getMatchingOrganizationOfAModuleWhenIsAlreadyOne(){
final DbOrganization organization = new DbOrganization();
organization.setName("test");
final DbModule module = new DbModule();
module.setOrganization(organization.getName());
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getOrganization(organization.getName())).thenReturn(organization);
final OrganizationHandler handler = new OrganizationHandler(repositoryHandler);
final DbOrganization gotOrganization = handler.getMatchingOrganization(module);
verify(repositoryHandler, times(1)).getOrganization(organization.getName());
verify(repositoryHandler, never()).getAllOrganizations();
assertEquals(organization, gotOrganization);
}
@Test
public void getMatchingOrganizationOfAModule(){
final DbModule module = new DbModule();
final DbArtifact artifact = new DbArtifact();
artifact.setGroupId(GrapesTestUtils.CORPORATE_GROUPID_4TEST);
module.addArtifact(artifact);
final RepositoryHandler repositoryHandler = GrapesTestUtils.getRepoHandlerMock();
final OrganizationHandler handler = new OrganizationHandler(repositoryHandler);
final DbOrganization gotOrganization = handler.getMatchingOrganization(module);
verify(repositoryHandler, times(1)).getAllOrganizations();
assertEquals(GrapesTestUtils.ORGANIZATION_NAME_4TEST, gotOrganization.getName());
}
@Test
public void getMatchingOrganizationOfAModuleWhenThereIsNone(){
final DbModule module = new DbModule();
final DbArtifact artifact = new DbArtifact();
artifact.setGroupId("unknown.production");
module.addArtifact(artifact);
final RepositoryHandler repositoryHandler = GrapesTestUtils.getRepoHandlerMock();
final OrganizationHandler handler = new OrganizationHandler(repositoryHandler);
final DbOrganization organization = handler.getMatchingOrganization(new DbModule());
assertNull(organization);
}
}