package org.axway.grapes.server.core;
import org.axway.grapes.commons.datamodel.Scope;
import org.axway.grapes.server.core.options.FiltersHolder;
import org.axway.grapes.server.db.RepositoryHandler;
import org.axway.grapes.server.db.datamodel.DbArtifact;
import org.axway.grapes.server.db.datamodel.DbLicense;
import org.axway.grapes.server.db.datamodel.DbModule;
import org.junit.Test;
import javax.ws.rs.WebApplicationException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertNotNull;
import static org.mockito.Mockito.*;
public class ModuleHandlerTest {
@Test
public void checkStoreModule(){
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
final ModuleHandler handler = new ModuleHandler(repositoryHandler);
final DbModule module = new DbModule();
handler.store(module);
verify(repositoryHandler, times(1)).store(module);
}
@Test
public void checkGetAllModuleNames(){
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
final ModuleHandler handler = new ModuleHandler(repositoryHandler);
final FiltersHolder filters = mock(FiltersHolder.class);
handler.getModuleNames(filters);
verify(repositoryHandler, times(1)).getModuleNames(filters);
}
@Test
public void getVersionsOfAModule(){
final DbModule module = new DbModule();
module.setName("module");
module.setVersion("1.0.0-SNAPSHOT");
final FiltersHolder filters = mock(FiltersHolder.class);
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getModuleVersions(module.getName(), filters)).thenReturn(Collections.singletonList("1.0.0-SNAPSHOT"));
final ModuleHandler handler = new ModuleHandler(repositoryHandler);
final List<String> versions = handler.getModuleVersions(module.getName(), filters);
assertNotNull(versions);
assertEquals(1, versions.size());
assertEquals(module.getVersion(), versions.get(0));
verify(repositoryHandler, times(1)).getModuleVersions(module.getName(),filters);
}
@Test
public void getVersionsOfAModuleWhichDoesNotExist(){
final FiltersHolder filters = mock(FiltersHolder.class);
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getModuleVersions("doesNotExist", filters)).thenReturn(new ArrayList<String>());
final ModuleHandler handler = new ModuleHandler(repositoryHandler);
WebApplicationException exception = null;
try{
handler.getModuleVersions("doesNotExist", filters);
}
catch (WebApplicationException e){
exception = e;
}
assertNotNull(exception);
assertEquals(javax.ws.rs.core.Response.Status.NOT_FOUND.getStatusCode(), exception.getResponse().getStatus());
}
@Test
public void getAModule(){
final DbModule module = new DbModule();
module.setName("module");
module.setVersion("1.0.0-SNAPSHOT");
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getModule(module.getId())).thenReturn(module);
final ModuleHandler handler = new ModuleHandler(repositoryHandler);
final DbModule gotModule = handler.getModule(module.getId());
assertNotNull(gotModule);
assertEquals(module, gotModule);
verify(repositoryHandler, times(1)).getModule(module.getId());
}
@Test
public void getAModuleThatDoesNotExist(){
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
final ModuleHandler handler = new ModuleHandler(repositoryHandler);
WebApplicationException exception = null;
try{
handler.getModule("doesNotExist");
}
catch (WebApplicationException e){
exception = e;
}
assertNotNull(exception);
assertEquals(javax.ws.rs.core.Response.Status.NOT_FOUND.getStatusCode(), exception.getResponse().getStatus());
}
@Test
public void deleteAModule(){
final DbModule module = new DbModule();
module.setName("module");
module.setVersion("1.0.0-SNAPSHOT");
final DbArtifact artifact1 = new DbArtifact();
artifact1.setArtifactId("artifact1");
artifact1.setVersion("1.0.0-SNAPSHOT");
module.addArtifact(artifact1);
final DbArtifact dependency = new DbArtifact();
dependency.setArtifactId("dependency");
dependency.setVersion("1.0.0-1");
module.addDependency(dependency.getGavc(), Scope.COMPILE);
final DbModule subModule = new DbModule();
subModule.setName("sub-module");
subModule.setVersion("1.0.0-SNAPSHOT");
module.addSubmodule(subModule);
final DbArtifact artifact2 = new DbArtifact();
artifact2.setArtifactId("artifact2");
artifact2.setVersion("1.0.0-SNAPSHOT");
subModule.addArtifact(artifact2);
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getModule(module.getId())).thenReturn(module);
when(repositoryHandler.getModule(subModule.getId())).thenReturn(subModule);
when(repositoryHandler.getArtifact(artifact1.getGavc())).thenReturn(artifact1);
when(repositoryHandler.getArtifact(artifact2.getGavc())).thenReturn(artifact2);
when(repositoryHandler.getArtifact(dependency.getGavc())).thenReturn(dependency);
final ModuleHandler handler = new ModuleHandler(repositoryHandler);
handler.deleteModule(module.getId());
verify(repositoryHandler, times(1)).deleteModule(module.getId());
verify(repositoryHandler, never()).deleteModule(subModule.getId());
verify(repositoryHandler, times(1)).deleteArtifact(artifact1.getGavc());
verify(repositoryHandler, times(1)).deleteArtifact(artifact2.getGavc());
verify(repositoryHandler, never()).deleteArtifact(dependency.getGavc());
}
@Test
public void deleteAModuleThatDoesNotExist(){
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
final ModuleHandler handler = new ModuleHandler(repositoryHandler);
WebApplicationException exception = null;
try{
handler.deleteModule("doesNotExist");
}
catch (WebApplicationException e){
exception = e;
}
assertNotNull(exception);
assertEquals(javax.ws.rs.core.Response.Status.NOT_FOUND.getStatusCode(), exception.getResponse().getStatus());
}
@Test
public void promoteAModule(){
final DbModule module = new DbModule();
module.setName("module");
module.setVersion("1.0.0-SNAPSHOT");
final DbArtifact artifact1 = new DbArtifact();
artifact1.setArtifactId("artifact1");
artifact1.setVersion("1.0.0-SNAPSHOT");
module.addArtifact(artifact1);
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getModule(module.getId())).thenReturn(module);
when(repositoryHandler.getArtifact(artifact1.getGavc())).thenReturn(artifact1);
final ModuleHandler handler = new ModuleHandler(repositoryHandler);
handler.promoteModule(module.getId());
verify(repositoryHandler, times(1)).promoteModule(module);
}
@Test
public void promoteAModuleThatDoesNotExist(){
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
final ModuleHandler handler = new ModuleHandler(repositoryHandler);
WebApplicationException exception = null;
try{
handler.promoteModule("doesNotExist");
}
catch (WebApplicationException e){
exception = e;
}
assertNotNull(exception);
assertEquals(javax.ws.rs.core.Response.Status.NOT_FOUND.getStatusCode(), exception.getResponse().getStatus());
}
@Test
public void getModuleLicenses(){
final DbModule module = new DbModule();
module.setName("module");
module.setVersion("1.0.0-SNAPSHOT");
final DbArtifact artifact1 = new DbArtifact();
artifact1.setArtifactId("artifact1");
artifact1.setVersion("1.0.0-SNAPSHOT");
module.addArtifact(artifact1);
final DbLicense license = new DbLicense();
license.setName("test");
license.setLongName("License for Grapes tests");
artifact1.addLicense(license);
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getModule(module.getId())).thenReturn(module);
when(repositoryHandler.getArtifact(artifact1.getGavc())).thenReturn(artifact1);
when(repositoryHandler.getLicense(license.getName())).thenReturn(license);
final ModuleHandler handler = new ModuleHandler(repositoryHandler);
final List<DbLicense> licenses = handler.getModuleLicenses(module.getId());
assertNotNull(licenses);
assertEquals(1, licenses.size());
assertEquals(license, licenses.get(0));
}
@Test
public void getModule(){
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
final ModuleHandler handler = new ModuleHandler(repositoryHandler);
final FiltersHolder filters = mock(FiltersHolder.class);
handler.getModules(filters);
verify(repositoryHandler, times(1)).getModules(filters);
}
}