Package org.hudsonci.service.internal

Source Code of org.hudsonci.service.internal.ProjectServiceImplTest

/**
* The MIT License
*
* Copyright (c) 2010-2011 Sonatype, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

package org.hudsonci.service.internal;

import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
import static org.powermock.api.mockito.PowerMockito.*;
import hudson.model.Item;
import hudson.model.TopLevelItem;
import hudson.model.AbstractProject;
import hudson.model.Hudson;

import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.List;
import java.util.UUID;

import org.hudsonci.service.ProjectNotFoundException;
import org.hudsonci.service.ProjectService;
import org.hudsonci.service.SecurityService;
import org.hudsonci.service.ServiceRuntimeException;
import org.hudsonci.service.SystemIntegrityViolationException;
import org.hudsonci.service.internal.ProjectServiceImpl;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import org.hudsonci.utils.tasks.JobUuid;

@RunWith(PowerMockRunner.class)
@PrepareForTest({ Hudson.class, JobUuid.class })
public class ProjectServiceImplTest {

    @Mock
    private SecurityService securityService;

    @SuppressWarnings("rawtypes")
    @Mock
    private AbstractProject project;

    @Mock
    private InputStream input;

    private Hudson hudson;

    private ProjectServiceImpl projectService;

    @Before
    public void setUp() throws Exception {
        mockStatic(Hudson.class);
        hudson = PowerMockito.mock(Hudson.class);
        PowerMockito.mockStatic(JobUuid.class);

        MockitoAnnotations.initMocks(this);
        this.projectService = new ProjectServiceImpl(securityService);
        this.projectService.setHudson(hudson);
       
        assertThat(getInst(), notNullValue());
    }

    private ProjectServiceImpl getInst() {
        return projectService;
    }

    // constructors ---------------

    @SuppressWarnings("unused")
    @Test(expected = NullPointerException.class)
    public void constructorNullArg() {
        new ProjectServiceImpl(null);
    }

    // getProjectByUuid --------------

    @Test(expected = NullPointerException.class)
    public void getProjectByUUIDNullArg() {
        getInst().getProject((UUID) null);
    }

    @Test(expected = ProjectNotFoundException.class)
    public void getProjectByUUIDNotFound() {
        ProjectService inst = spy(getInst());
        UUID id = UUID.randomUUID();
        doReturn(null).when(inst).findProject(id);
        inst.getProject(id);
    }

    // getProjectByFullname ----------------

    @Test(expected = NullPointerException.class)
    public void getProjectByFullnameNullArg() {
        getInst().getProjectByFullName(null);
    }

    @Test(expected = ProjectNotFoundException.class)
    public void getProjectByFullnameProjectNotFoundException() {
        getInst().getProjectByFullName("fullname");
    }

    @Test
    public void getProjectByFullnameSecurity() {
        doReturn(project).when(hudson).getItemByFullName("fullname", AbstractProject.class);

        AbstractProject<?, ?> result = getInst().getProjectByFullName("fullname");

        assertThat(result, equalTo(project));
        Mockito.verify(securityService).checkPermission(project, Item.READ);
    }

    // getProjectByProjectName ---------

    @Test(expected = ProjectNotFoundException.class)
    public void getProjectByProjectNameProjectNotFoundException() {
        getInst().getProject("projectName");
    }

    @Test(expected = NullPointerException.class)
    public void getProjectByProjectNameNullArg() {
        getInst().getProject((String) null);
    }

    @Test
    public void getProjectByProjectNameSecurity() {
        ProjectService inst = spy(getInst());

        doReturn(project).when(hudson).getItemByFullName("projectName", AbstractProject.class);
        @SuppressWarnings("unchecked")
        Collection<String> names = Mockito.mock(Collection.class);
        when(names.contains("projectName")).thenReturn(true);
        when(inst.getProjectNames()).thenReturn(names);

        AbstractProject<?, ?> result = getInst().getProject("projectName");

        assertThat(result, equalTo(project));
        Mockito.verify(securityService).checkPermission(project, Item.READ);
    }

    // findProjectByUUID -------

    @Test(expected = NullPointerException.class)
    public void findProjectByUUIDNullArg() {
        getInst().findProject((UUID) null);
    }

    @Test
    public void findProjectByUUIDNotFound() {
        UUID id = UUID.randomUUID();
        assertThat(getInst().findProject(id), nullValue());
    }

    // findProjectByProjectName

    @Test(expected = NullPointerException.class)
    public void findProjectByProjectNameNullArg() {
        getInst().findProject((String) null);
    }

    @Test
    public void findProjectByProjectNameProjectNotFoundException() {
        assertThat(getInst().findProject("projectName"), nullValue());
    }

    @Test
    public void findProjectByProjectNameSecurity() {
        ProjectService inst = spy(getInst());

        doReturn(project).when(hudson).getItemByFullName("projectName", AbstractProject.class);
        @SuppressWarnings("unchecked")
        Collection<String> names = Mockito.mock(Collection.class);
        when(names.contains("projectName")).thenReturn(true);
        when(inst.getProjectNames()).thenReturn(names);

        AbstractProject<?, ?> result = getInst().findProject("projectName");

        assertThat(result, equalTo(project));
        Mockito.verify(securityService).checkPermission(project, Item.READ);
    }

    // findProjectByFullname ------------

    @Test(expected = NullPointerException.class)
    public void findProjectByFullnameNullArg() {
        getInst().findProjectByFullName(null);
    }

    @Test
    public void findProjectByFullnameNotFound() {
        assertThat(getInst().findProjectByFullName("fullname"), nullValue());
    }

    @Test
    public void findProjectByFullnameSecurity() {
        doReturn(project).when(hudson).getItemByFullName("fullname", AbstractProject.class);

        AbstractProject<?, ?> result = getInst().findProjectByFullName("fullname");

        assertThat(result, equalTo(project));
        Mockito.verify(securityService).checkPermission(project, Item.READ);
    }

    // getAllProjects -----------
    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Test
    public void getAllProjectsSecurity() {
        @SuppressWarnings("unchecked")
        List<AbstractProject> projects = Mockito.mock(List.class);
        doReturn(projects).when(hudson).getAllItems(AbstractProject.class);

        List<AbstractProject> result = getInst().getAllProjects();

        assertThat(result, equalTo(projects));

        // Hudson getAllItems has permission check.
        Mockito.verify(hudson).getAllItems(Mockito.isA(Class.class));
    }

    // copyProject -----------
    @Test(expected = NullPointerException.class)
    public void copyProjectNullArg1() {
        getInst().copyProject(null, "toProject");
    }

    @Test(expected = NullPointerException.class)
    public void copyProjectNullArg2() {
        getInst().copyProject(project, null);
    }

    @Test
    public void copyProjectSecurity() throws IOException {

        // mocks
        AbstractProject<?, ?> toProject = Mockito.mock(AbstractProject.class);
        ProjectService inst = spy(getInst());

        // make method succeed
        doReturn(false).when(inst).projectExists("toProject");
        when(hudson.copy(project, "toProject")).thenReturn(toProject);

        // test
        inst.copyProject(project, "toProject");

        // verify
        Mockito.verify(securityService).checkPermission(Item.CREATE);
        Mockito.verify(securityService).checkPermission(project, Item.EXTENDED_READ);

    }

    @Test(expected = SystemIntegrityViolationException.class)
    public void copyProjectToProjectAlreadyExists() throws IOException {
        ProjectService inst = spy(getInst());
        doReturn(true).when(inst).projectExists("toProject");
        inst.copyProject(project, "toProject");
    }

    @Test(expected = ServiceRuntimeException.class)
    public void copyProjectIOException() throws IOException {

        // mocks
        ProjectService inst = spy(getInst());

        // make method succeed
        doReturn(false).when(inst).projectExists("toProject");
        when(hudson.copy(project, "toProject")).thenThrow(new IOException());

        // test
        inst.copyProject(project, "toProject");

    }

    // createProjectfromXml ------

    @Test(expected = NullPointerException.class)
    public void createProjectFromXMLNullArg1() {
        getInst().createProjectFromXML(null, input);
    }

    @Test(expected = NullPointerException.class)
    public void createProjectFromXMLNullArg2() {
        getInst().createProjectFromXML("toProject", null);
    }

    @Test
    public void createProjectFromXMLSecurity() throws IOException {
        // mocks
        TopLevelItem toProject = Mockito.mock(TopLevelItem.class);
        ProjectService inst = spy(getInst());

        // make method succeed
        doReturn(false).when(inst).projectExists("toProject");
        when(hudson.createProjectFromXML("toProject", input)).thenReturn(toProject);

        assertThat(inst.createProjectFromXML("toProject", input), equalTo(toProject));

        Mockito.verify(securityService).checkPermission(Item.CREATE);
    }

    @Test(expected = SystemIntegrityViolationException.class)
    public void createProjectFromXMLToProjectAlreadyExists() throws IOException {
        ProjectService inst = spy(getInst());
        doReturn(true).when(inst).projectExists("toProject");
        inst.createProjectFromXML("toProject", input);
    }

    @Test(expected = ServiceRuntimeException.class)
    public void createProjectFromXMLIOException() throws IOException {

        // mocks
        ProjectService inst = spy(getInst());

        // make method succeed
        doReturn(false).when(inst).projectExists("toProject");
        when(hudson.createProjectFromXML("toProject", input)).thenThrow(new IOException());

        // test
        inst.createProjectFromXML("toProject", input);

    }

    // getProjectNames -----------
    @Test
    public void getProjectNamesSecurity() {
        // blank, security Item.READ check performed by Hudson internals
    }

    // projectExists ------------

    @Test
    public void projectExistsSecurity() {
        // blank, security Item.READ check performed by Hudson internals
    }

    @Test(expected = NullPointerException.class)
    public void projectExistsNullArg() {
        getInst().projectExists(null);
    }

    @Test
    public void projectExistsTrue() {
        ProjectService inst = spy(getInst());

        @SuppressWarnings("unchecked")
        Collection<String> names = Mockito.mock(Collection.class);
        when(names.contains("projectName")).thenReturn(true);
        when(inst.getProjectNames()).thenReturn(names);

        assertThat(inst.projectExists("projectName"), is(true));
    }

}
TOP

Related Classes of org.hudsonci.service.internal.ProjectServiceImplTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.