gov.nih.nci.caintegrator.mockito.AbstractMockitoTest.java Source code

Java tutorial

Introduction

Here is the source code for gov.nih.nci.caintegrator.mockito.AbstractMockitoTest.java

Source

/**
 * Copyright 5AM Solutions Inc, ESAC, ScenPro & SAIC
 *
 * Distributed under the OSI-approved BSD 3-Clause License.
 * See http://ncip.github.com/caintegrator/LICENSE.txt for details.
 */
package gov.nih.nci.caintegrator.mockito;

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyCollectionOf;
import static org.mockito.Matchers.anyListOf;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import edu.wustl.icr.asrv1.segment.SampleWithChromosomalSegmentSet;
import gov.nih.nci.caintegrator.TestDataFiles;
import gov.nih.nci.caintegrator.application.analysis.AbstractKMParameters;
import gov.nih.nci.caintegrator.application.analysis.AnalysisMethod;
import gov.nih.nci.caintegrator.application.analysis.AnalysisMethodInvocation;
import gov.nih.nci.caintegrator.application.analysis.AnalysisParameter;
import gov.nih.nci.caintegrator.application.analysis.AnalysisParameterType;
import gov.nih.nci.caintegrator.application.analysis.AnalysisService;
import gov.nih.nci.caintegrator.application.analysis.CBSToHeatmapFactory;
import gov.nih.nci.caintegrator.application.analysis.GctDataset;
import gov.nih.nci.caintegrator.application.analysis.JobInfoWrapper;
import gov.nih.nci.caintegrator.application.analysis.SampleClassificationParameterValue;
import gov.nih.nci.caintegrator.application.analysis.StringParameterValue;
import gov.nih.nci.caintegrator.application.analysis.heatmap.HeatmapFileTypeEnum;
import gov.nih.nci.caintegrator.application.analysis.heatmap.HeatmapParameters;
import gov.nih.nci.caintegrator.application.analysis.heatmap.HeatmapResult;
import gov.nih.nci.caintegrator.application.analysis.igv.IGVFileTypeEnum;
import gov.nih.nci.caintegrator.application.arraydata.ArrayDataService;
import gov.nih.nci.caintegrator.application.arraydata.ArrayDataValueType;
import gov.nih.nci.caintegrator.application.arraydata.ArrayDataValues;
import gov.nih.nci.caintegrator.application.arraydata.DataRetrievalRequest;
import gov.nih.nci.caintegrator.application.arraydata.PlatformChannelTypeEnum;
import gov.nih.nci.caintegrator.application.arraydata.PlatformDataTypeEnum;
import gov.nih.nci.caintegrator.application.arraydata.PlatformTypeEnum;
import gov.nih.nci.caintegrator.application.arraydata.PlatformVendorEnum;
import gov.nih.nci.caintegrator.application.kmplot.KMPlotImpl;
import gov.nih.nci.caintegrator.application.query.QueryManagementService;
import gov.nih.nci.caintegrator.application.study.GenomicDataSourceConfiguration;
import gov.nih.nci.caintegrator.application.study.Status;
import gov.nih.nci.caintegrator.application.study.StudyConfiguration;
import gov.nih.nci.caintegrator.application.study.deployment.DeploymentService;
import gov.nih.nci.caintegrator.application.workspace.WorkspaceService;
import gov.nih.nci.caintegrator.common.ConfigurationHelper;
import gov.nih.nci.caintegrator.common.ConfigurationParameter;
import gov.nih.nci.caintegrator.data.CaIntegrator2Dao;
import gov.nih.nci.caintegrator.domain.AbstractCaIntegrator2Object;
import gov.nih.nci.caintegrator.domain.application.AbstractPersistedAnalysisJob;
import gov.nih.nci.caintegrator.domain.application.CopyNumberCriterionTypeEnum;
import gov.nih.nci.caintegrator.domain.application.GenomicDataQueryResult;
import gov.nih.nci.caintegrator.domain.application.Query;
import gov.nih.nci.caintegrator.domain.application.QueryResult;
import gov.nih.nci.caintegrator.domain.application.ResultColumn;
import gov.nih.nci.caintegrator.domain.application.ResultsZipFile;
import gov.nih.nci.caintegrator.domain.application.StudySubscription;
import gov.nih.nci.caintegrator.domain.application.SubjectList;
import gov.nih.nci.caintegrator.domain.application.UserWorkspace;
import gov.nih.nci.caintegrator.domain.genomic.AbstractReporter;
import gov.nih.nci.caintegrator.domain.genomic.Array;
import gov.nih.nci.caintegrator.domain.genomic.ArrayData;
import gov.nih.nci.caintegrator.domain.genomic.ArrayDataType;
import gov.nih.nci.caintegrator.domain.genomic.GeneExpressionReporter;
import gov.nih.nci.caintegrator.domain.genomic.GeneLocationConfiguration;
import gov.nih.nci.caintegrator.domain.genomic.GenomeBuildVersionEnum;
import gov.nih.nci.caintegrator.domain.genomic.Platform;
import gov.nih.nci.caintegrator.domain.genomic.PlatformConfiguration;
import gov.nih.nci.caintegrator.domain.genomic.ReporterList;
import gov.nih.nci.caintegrator.domain.genomic.ReporterTypeEnum;
import gov.nih.nci.caintegrator.domain.genomic.Sample;
import gov.nih.nci.caintegrator.domain.genomic.SegmentData;
import gov.nih.nci.caintegrator.domain.imaging.ImageSeriesAcquisition;
import gov.nih.nci.caintegrator.domain.translational.Study;
import gov.nih.nci.caintegrator.external.ServerConnectionProfile;
import gov.nih.nci.caintegrator.external.biodbnet.BioDbNetRemoteService;
import gov.nih.nci.caintegrator.external.biodbnet.domain.Db2DbParams;
import gov.nih.nci.caintegrator.external.biodbnet.domain.DbWalkParams;
import gov.nih.nci.caintegrator.external.caarray.CaArrayFacade;
import gov.nih.nci.caintegrator.external.ncia.NCIABasket;
import gov.nih.nci.caintegrator.external.ncia.NCIADicomJob;
import gov.nih.nci.caintegrator.external.ncia.NCIAFacade;
import gov.nih.nci.caintegrator.file.AnalysisFileManager;
import gov.nih.nci.caintegrator.file.FileManager;
import gov.nih.nci.caintegrator.plots.kaplanmeier.dto.KMSampleGroupCriteriaDTO;
import gov.nih.nci.caintegrator.plots.services.KMPlotService;
import gov.nih.nci.caintegrator.web.DisplayableStudySummary;
import gov.nih.nci.caintegrator.web.action.query.DisplayableResultRow;

import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.genepattern.gistic.Marker;
import org.genepattern.webservice.JobInfo;
import org.junit.Before;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

/**
 * @author Abraham J. Evans-EL <aevansel@5amsolutions.com>
 *
 */
public abstract class AbstractMockitoTest {
    private static final String GENE_ID_RESULTS_FILE_LOCATION = "/bioDbNet/gene_id_search.txt";
    private static final String GENE_SYMBOL_RESULTS_FILE_LOCATION = "/bioDbNet/gene_by_id_search.txt";
    private static final String GENE_ALIAS_RESULTS_FILE_LOCATION = "/bioDbNet/gene_alias_search.txt";
    private static final String PATHWAY_RESULTS_FILE_LOCATION = "/bioDbNet/gene_pathway_search.txt";
    private static final String PATHWAY_BY_GENE_RESULTS_FILE_LOCATION = "/bioDbNet/pathway_by_gene_search.txt";

    protected CaArrayFacade caArrayFacade;
    protected CaIntegrator2Dao dao;
    protected ArrayDataService arrayDataService;
    protected AnalysisService analysisService;
    protected DeploymentService deploymentService;
    protected WorkspaceService workspaceService;
    protected ConfigurationHelper configurationHelper;
    protected NCIAFacade nciaFacade;
    protected AnalysisFileManager analysisFileManager;
    protected FileManager fileManager;
    protected QueryManagementService queryManagementService;
    protected KMPlotService kmPlotService;
    protected BioDbNetRemoteService bioDbNetRemoteService;
    private StudySubscription studySubscription;

    /**
     * Sets up mocks.
     * @throws Exception on error
     */
    @Before
    public void setUpMocks() throws Exception {
        setUpCaArrayFacade();
        setUpDao();
        setUpArrayDataService();
        setUpAnalysisService();
        setUpDeploymentService();
        setUpConfigurationHelper();
        setUpWorkspaceService();
        setUpNCIAFacade();
        setUpAnalysisFileManager();
        setUpFileManager();
        setUpQueryManagementService();
        setUpKmPlotService();
        setUpBioDbNetRemoteService();
    }

    /**
     * Sets up the caIntegrator dao mock objects.
     */
    private void setUpDao() throws Exception {
        Study study = new Study();
        study.setStudyConfiguration(new StudyConfiguration());

        GenomicDataSourceConfiguration dataSource = new GenomicDataSourceConfiguration();
        dataSource.setExperimentIdentifier("EXP-1");
        dataSource.setLastModifiedDate(new Date());
        study.getStudyConfiguration().getGenomicDataSources().add(dataSource);

        dao = mock(CaIntegrator2Dao.class);
        when(dao.getStudies(anyString())).thenReturn(Arrays.asList(study));
        when(dao.getAllGenomicDataSources()).thenReturn(Arrays.asList(dataSource));
        when(dao.getPlatform(anyString())).thenAnswer(new Answer<Platform>() {
            @Override
            public Platform answer(InvocationOnMock invocation) throws Throwable {
                String platformName = (String) invocation.getArguments()[0];
                Platform platform = new Platform();
                platform.setName(platformName);
                platform.setPlatformConfiguration(new PlatformConfiguration());
                platform.getPlatformConfiguration().setPlatformType(PlatformTypeEnum.AFFYMETRIX_GENE_EXPRESSION);
                platform.getPlatformConfiguration().setPlatformChannelType(PlatformChannelTypeEnum.ONE_COLOR);

                ReporterList reporterList = new ReporterList("reporterName", ReporterTypeEnum.GENE_EXPRESSION_GENE);
                reporterList.setGenomeVersion(platformName);
                reporterList.setPlatform(platform);
                platform.addReporterList(reporterList);
                return platform;
            }
        });
    }

    /**
     * Sets up the caArray facade mock objects.
     */
    private void setUpCaArrayFacade() throws Exception {
        caArrayFacade = mock(CaArrayFacade.class);
        Sample sample = new Sample();
        sample.setName("testSample");
        when(caArrayFacade.getSamples(anyString(), any(ServerConnectionProfile.class)))
                .thenReturn(Arrays.asList(sample));
        when(caArrayFacade.retrieveFile(any(GenomicDataSourceConfiguration.class), anyString()))
                .thenReturn(ArrayUtils.EMPTY_BYTE_ARRAY);
        when(caArrayFacade.retrieveFilesForGenomicSource(any(GenomicDataSourceConfiguration.class)))
                .thenReturn(Collections.<gov.nih.nci.caarray.external.v1_0.data.File>emptyList());
        when(caArrayFacade.getLastDataModificationDate(any(GenomicDataSourceConfiguration.class)))
                .thenReturn(new Date());

        Map<String, Date> updateMap = new HashMap<String, Date>();
        updateMap.put("test1", new Date());
        updateMap.put("test2", new Date());
        updateMap.put("test3", new Date());
        when(caArrayFacade.checkForSampleUpdates(anyString(), any(ServerConnectionProfile.class)))
                .thenReturn(updateMap);
        setUpCaArrayFacadeRetrieveData();
        setUpCaArrayFacadeRetrieveDnaAnalysisData();
    }

    /**
     * Sets up the Array Data Service mock object.
     */
    private void setUpArrayDataService() throws Exception {
        arrayDataService = mock(ArrayDataService.class);
        when(arrayDataService.getData(any(DataRetrievalRequest.class))).thenAnswer(new Answer<ArrayDataValues>() {
            @Override
            public ArrayDataValues answer(InvocationOnMock invocation) throws Throwable {
                DataRetrievalRequest request = (DataRetrievalRequest) invocation.getArguments()[0];
                return generateArrayDataValues(request);
            }
        });
        when(arrayDataService.loadArrayDesign(any(PlatformConfiguration.class)))
                .thenReturn(new PlatformConfiguration());
        when(arrayDataService.getFoldChangeValues(any(DataRetrievalRequest.class), anyListOf(ArrayDataValues.class),
                any(PlatformChannelTypeEnum.class))).thenAnswer(new Answer<ArrayDataValues>() {
                    @Override
                    public ArrayDataValues answer(InvocationOnMock invocation) throws Throwable {
                        DataRetrievalRequest request = (DataRetrievalRequest) invocation.getArguments()[0];
                        return generateArrayDataValues(request);
                    }
                });
        when(arrayDataService.getFoldChangeValues(any(DataRetrievalRequest.class), any(Query.class)))
                .thenAnswer(new Answer<ArrayDataValues>() {
                    @Override
                    public ArrayDataValues answer(InvocationOnMock invocation) throws Throwable {
                        DataRetrievalRequest request = (DataRetrievalRequest) invocation.getArguments()[0];
                        return generateArrayDataValues(request);
                    }
                });

        List<Platform> platforms = new ArrayList<Platform>();
        Platform platform = new Platform();
        platform.setVendor(PlatformVendorEnum.AFFYMETRIX);
        platforms.add(platform);
        platform = new Platform();
        platform.setVendor(PlatformVendorEnum.AGILENT);
        platforms.add(platform);

        when(arrayDataService.getPlatforms()).thenReturn(platforms);

        List<PlatformConfiguration> platformConfigurations = new ArrayList<PlatformConfiguration>();
        PlatformConfiguration config1 = new PlatformConfiguration();
        config1.setId(1L);
        config1.setName("name");
        config1.setPlatformType(PlatformTypeEnum.AFFYMETRIX_GENE_EXPRESSION);
        config1.setPlatformChannelType(PlatformChannelTypeEnum.ONE_COLOR);
        config1.setStatus(Status.PROCESSING);
        config1.setDeploymentStartDate(new Date());
        PlatformConfiguration config2 = new PlatformConfiguration();
        config2.setId(1L);
        config2.setName("name2");
        config2.setStatus(Status.LOADED);
        config2.setPlatformType(PlatformTypeEnum.AFFYMETRIX_GENE_EXPRESSION);
        config2.setPlatformChannelType(PlatformChannelTypeEnum.ONE_COLOR);
        config2.setDeploymentStartDate(new Date());
        Platform affPlatform = new Platform();
        affPlatform.setName("name2");
        affPlatform.setVendor(PlatformVendorEnum.AFFYMETRIX);
        config2.setPlatform(affPlatform);
        platformConfigurations.add(config1);
        platformConfigurations.add(config2);
        when(arrayDataService.getPlatformConfigurations()).thenReturn(platformConfigurations);

        PlatformConfiguration config = new PlatformConfiguration();
        config.setId(1L);
        config.setName("name");
        config.setPlatformType(PlatformTypeEnum.AFFYMETRIX_GENE_EXPRESSION);
        config.setPlatformChannelType(PlatformChannelTypeEnum.ONE_COLOR);
        config.setStatus(Status.PROCESSING);
        config.setDeploymentStartDate(new Date());
        when(arrayDataService.getRefreshedPlatformConfiguration(anyLong())).thenReturn(config);

        when(arrayDataService.getPlatformsInStudy(any(Study.class), any(PlatformDataTypeEnum.class)))
                .thenReturn(createPlatforms());
        when(arrayDataService.loadGeneLocationFile(any(File.class), any(GenomeBuildVersionEnum.class)))
                .thenReturn(new GeneLocationConfiguration());
        when(arrayDataService.getPlatformsWithCghCallInStudy(any(Study.class), any(PlatformDataTypeEnum.class)))
                .thenReturn(createPlatforms());
        when(arrayDataService.getPlatform(anyString())).thenAnswer(new Answer<Platform>() {
            @Override
            public Platform answer(InvocationOnMock invocation) throws Throwable {
                String platformName = (String) invocation.getArguments()[0];
                Platform platform = new Platform();
                platform.setName(platformName);

                ReporterList reporterList = new ReporterList("reporterName", ReporterTypeEnum.GENE_EXPRESSION_GENE);
                reporterList.setGenomeVersion(platformName);
                reporterList.setPlatform(platform);
                platform.addReporterList(reporterList);
                return platform;
            }
        });
    }

    private void setUpAnalysisService() throws Exception {
        analysisService = mock(AnalysisService.class);

        List<AnalysisMethod> methods = new ArrayList<AnalysisMethod>();
        AnalysisMethod method = new AnalysisMethod();
        method.setName("method");
        methods.add(method);
        AnalysisParameter parameter = new AnalysisParameter();
        parameter.setName("parameter");
        parameter.setType(AnalysisParameterType.STRING);
        StringParameterValue defaultValue = new StringParameterValue();
        defaultValue.setParameter(parameter);
        defaultValue.setValue("default");
        parameter.setDefaultValue(defaultValue);
        parameter.setRequired(true);
        method.getParameters().add(parameter);

        when(analysisService.getGenePatternMethods(any(ServerConnectionProfile.class))).thenReturn(methods);

        JobInfoWrapper jobInfo = new JobInfoWrapper();
        jobInfo.setUrl(new URL("http://localhost/resultUrl"));
        jobInfo.setJobInfo(new JobInfo());
        when(analysisService.executeGenePatternJob(any(ServerConnectionProfile.class),
                any(AnalysisMethodInvocation.class))).thenReturn(jobInfo);
        when(analysisService.createKMPlot(any(StudySubscription.class), any(AbstractKMParameters.class)))
                .thenReturn(new KMPlotImpl());
    }

    private void setUpDeploymentService() {
        deploymentService = mock(DeploymentService.class);
        when(deploymentService.performDeployment(any(StudyConfiguration.class), any(HeatmapParameters.class)))
                .thenAnswer(new Answer<StudyConfiguration>() {
                    @Override
                    public StudyConfiguration answer(InvocationOnMock invocation) throws Throwable {
                        StudyConfiguration studyConfig = (StudyConfiguration) invocation.getArguments()[0];
                        studyConfig.setStatus(Status.PROCESSING);
                        return studyConfig;
                    }
                });
        doAnswer(new Answer<StudyConfiguration>() {
            @Override
            public StudyConfiguration answer(InvocationOnMock invocation) throws Throwable {
                StudyConfiguration studyConfig = (StudyConfiguration) invocation.getArguments()[0];
                studyConfig.setStatus(Status.DEPLOYED);
                return null;
            }
        }).when(deploymentService).prepareForDeployment(any(StudyConfiguration.class));
    }

    private void setUpConfigurationHelper() {
        configurationHelper = mock(ConfigurationHelper.class);
        when(configurationHelper.getString(any(ConfigurationParameter.class))).thenAnswer(new Answer<String>() {
            @Override
            public String answer(InvocationOnMock invocation) throws Throwable {
                ConfigurationParameter cp = (ConfigurationParameter) invocation.getArguments()[0];
                return cp.getDefaultValue();
            }
        });
    }

    private void setUpWorkspaceService() throws Exception {
        workspaceService = mock(WorkspaceService.class);
        when(workspaceService.getWorkspace()).thenAnswer(new Answer<UserWorkspace>() {
            @Override
            public UserWorkspace answer(InvocationOnMock invocation) throws Throwable {
                UserWorkspace workspace = new UserWorkspace();
                workspace.setDefaultSubscription(getStudySubscription());
                workspace.getSubscriptionCollection().add(workspace.getDefaultSubscription());
                if (studySubscription != null) {
                    workspace.getSubscriptionCollection().add(studySubscription);
                }
                workspace.setUsername("username");
                return workspace;
            }
        });
        when(workspaceService.retrieveStudyConfigurationJobs(any(UserWorkspace.class)))
                .thenAnswer(new Answer<Set<StudyConfiguration>>() {
                    @Override
                    public Set<StudyConfiguration> answer(InvocationOnMock invocation) throws Throwable {
                        Set<StudyConfiguration> results = new HashSet<StudyConfiguration>();
                        StudyConfiguration config = new StudyConfiguration();
                        config.setStatus(Status.PROCESSING);
                        Date today = new Date();
                        config.setDeploymentStartDate(DateUtils.addHours(today, -13));
                        results.add(config);

                        config = new StudyConfiguration();
                        config.setStatus(Status.PROCESSING);
                        config.setDeploymentStartDate(today);
                        results.add(config);
                        return results;
                    }
                });
        when(workspaceService.createDisplayableStudySummary(any(Study.class)))
                .thenAnswer(new Answer<DisplayableStudySummary>() {
                    @Override
                    public DisplayableStudySummary answer(InvocationOnMock invocation) throws Throwable {
                        Study study = (Study) invocation.getArguments()[0];
                        return new DisplayableStudySummary(study);
                    }
                });
        when(workspaceService.getRefreshedEntity(any(AbstractCaIntegrator2Object.class)))
                .thenAnswer(new Answer<AbstractCaIntegrator2Object>() {
                    @Override
                    public AbstractCaIntegrator2Object answer(InvocationOnMock invocation) throws Throwable {
                        AbstractCaIntegrator2Object obj = (AbstractCaIntegrator2Object) invocation
                                .getArguments()[0];
                        return obj;
                    }
                });
        when(workspaceService.getWorkspaceReadOnly()).thenAnswer(new Answer<UserWorkspace>() {
            @Override
            public UserWorkspace answer(InvocationOnMock invocation) throws Throwable {
                UserWorkspace workspace = new UserWorkspace();
                workspace.setDefaultSubscription(getStudySubscription());
                workspace.getSubscriptionCollection().add(workspace.getDefaultSubscription());
                workspace.setUsername(UserWorkspace.ANONYMOUS_USER_NAME);
                return workspace;
            }
        });
        when(workspaceService.retrievePlatformsInStudy(any(Study.class))).thenReturn(new HashSet<Platform>());
    }

    private void setUpNCIAFacade() throws Exception {
        nciaFacade = mock(NCIAFacade.class);

        final File validFile = FileUtils
                .toFile(this.getClass().getResource(TestDataFiles.VALID_FILE_RESOURCE_PATH));

        when(nciaFacade.getAllCollectionNameProjects(any(ServerConnectionProfile.class)))
                .thenReturn(new ArrayList<String>());
        when(nciaFacade.getImageSeriesAcquisitions(anyString(), any(ServerConnectionProfile.class)))
                .thenReturn(Arrays.asList(new ImageSeriesAcquisition()));
        when(nciaFacade.retrieveDicomFiles(any(NCIADicomJob.class))).thenReturn(validFile);
    }

    private void setUpAnalysisFileManager() throws Exception {
        analysisFileManager = mock(AnalysisFileManager.class);
        when(analysisFileManager.getIGVDirectory(anyString())).thenReturn(getTmpFile());
        when(analysisFileManager.createIGVGctFile(any(GctDataset.class), anyString())).thenReturn(getTmpFile());
        when(analysisFileManager.createIGVSegFile(anyCollectionOf(SegmentData.class), anyString(), anyBoolean()))
                .thenReturn(getTmpFile());
        when(analysisFileManager.createIGVSampleClassificationFile(any(QueryResult.class), anyString(),
                anyCollectionOf(ResultColumn.class), any(CopyNumberCriterionTypeEnum.class)))
                        .thenReturn(getTmpFile());
        when(analysisFileManager.createIGVGctFile(any(GctDataset.class), any(Study.class), anyString()))
                .thenReturn(getTmpFile());
        when(analysisFileManager.createIGVSegFile(anyCollectionOf(SegmentData.class), any(Study.class), anyString(),
                anyBoolean())).thenReturn(getTmpFile());
        when(analysisFileManager.retrieveIGVFile(any(Study.class), any(IGVFileTypeEnum.class), anyString()))
                .thenReturn(getTmpFile());
        when(analysisFileManager.createHeatmapSampleClassificationFile(any(QueryResult.class), anyString(),
                anyCollectionOf(ResultColumn.class))).thenReturn(getTmpFile());
        when(analysisFileManager.retrieveHeatmapFile(any(Study.class), any(HeatmapFileTypeEnum.class), anyString()))
                .thenReturn(getTmpFile());
        doAnswer(new Answer<Object>() {
            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                HeatmapResult result = (HeatmapResult) invocation.getArguments()[1];
                result.setGenomicDataFile(new File("Dummy"));
                return null;
            }
        }).when(analysisFileManager).createHeatmapGenomicFile(any(HeatmapParameters.class),
                any(HeatmapResult.class), anyCollectionOf(SegmentData.class), any(GeneLocationConfiguration.class),
                any(CBSToHeatmapFactory.class));
    }

    private void setUpFileManager() throws Exception {
        fileManager = mock(FileManager.class);
        when(fileManager.storeStudyFile(any(File.class), anyString(), any(StudyConfiguration.class)))
                .thenAnswer(new Answer<File>() {
                    @Override
                    public File answer(InvocationOnMock invocation) throws Throwable {
                        return (File) invocation.getArguments()[0];
                    }
                });
        when(fileManager.getStudyDirectory(any(Study.class)))
                .thenReturn(new File(System.getProperty("java.io.tmpdir")));
        when(fileManager.getNewTemporaryDirectory(anyString()))
                .thenReturn(new File(System.getProperty("java.io.tmpdir")));
        when(fileManager.getUserDirectory(any(StudySubscription.class)))
                .thenReturn(new File(System.getProperty("java.io.tmpdir")));
        when(fileManager.createNewStudySubscriptionFile(any(StudySubscription.class), anyString()))
                .thenReturn(getTmpFile());
        when(fileManager.createClassificationFile(any(StudySubscription.class),
                any(SampleClassificationParameterValue.class), anyString())).thenReturn(getTmpFile());
        when(fileManager.renameCnvFile(any(File.class))).thenAnswer(new Answer<File>() {
            @Override
            public File answer(InvocationOnMock invocation) throws Throwable {
                return (File) invocation.getArguments()[0];
            }
        });
        when(fileManager.createGctFile(any(StudySubscription.class), any(GctDataset.class), anyString()))
                .thenReturn(getTmpFile());
        when(fileManager.createMarkersFile(any(StudySubscription.class), any(Marker[].class)))
                .thenReturn(getTmpFile());
        when(fileManager.createSamplesFile(any(StudySubscription.class),
                any(SampleWithChromosomalSegmentSet[].class))).thenReturn(getTmpFile());
        when(fileManager.getTempDirectory()).thenReturn(getTmpFile().getAbsolutePath());
        when(fileManager.createInputZipFile(any(StudySubscription.class), any(AbstractPersistedAnalysisJob.class),
                anyString(), any(File[].class))).thenAnswer(new Answer<ResultsZipFile>() {
                    @Override
                    public ResultsZipFile answer(InvocationOnMock invocation) throws Throwable {
                        ResultsZipFile zipFile = new ResultsZipFile();
                        zipFile.setPath(getTmpFile().getAbsolutePath());
                        return zipFile;
                    }
                });
    }

    private final File getTmpFile() {
        File tmpFile = new File(System.getProperty("java.io.tmpdir") + File.separator + "tmpFile");
        tmpFile.deleteOnExit();
        return tmpFile;
    }

    private void setUpQueryManagementService() throws Exception {
        queryManagementService = mock(QueryManagementService.class);
        doAnswer(new Answer<Query>() {
            @Override
            public Query answer(InvocationOnMock invocation) throws Throwable {
                Query query = (Query) invocation.getArguments()[0];
                query.setId(1L);
                return query;
            }
        }).when(queryManagementService).save(any(Query.class));
        when(queryManagementService.execute(any(Query.class))).then(new Answer<QueryResult>() {
            @Override
            public QueryResult answer(InvocationOnMock invocation) throws Throwable {
                Query query = (Query) invocation.getArguments()[0];
                QueryResult qr = new QueryResult();
                qr.setQuery(query);
                return qr;
            }
        });
        when(queryManagementService.executeGenomicDataQuery(any(Query.class)))
                .thenReturn(new GenomicDataQueryResult());
        when(queryManagementService.retrieveSegmentDataQuery(any(Query.class)))
                .thenReturn(new ArrayList<SegmentData>());
        when(queryManagementService.createDicomJob(anyListOf(DisplayableResultRow.class)))
                .thenReturn(new NCIADicomJob());
        when(queryManagementService.createNciaBasket(anyListOf(DisplayableResultRow.class)))
                .thenReturn(new NCIABasket());
        when(queryManagementService.createCsvFileFromGenomicResults(any(GenomicDataQueryResult.class)))
                .thenReturn(getTmpFile());
        when(queryManagementService.createQueryFromSubjectList(any(StudySubscription.class),
                any(SubjectList.class))).then(new Answer<Query>() {
                    @Override
                    public Query answer(InvocationOnMock invocation) throws Throwable {
                        SubjectList sl = (SubjectList) invocation.getArguments()[1];
                        Query query = new Query();
                        query.setName(sl.getName());
                        query.setSubjectListQuery(true);
                        query.setSubjectListVisibility(sl.getVisibility());
                        return query;
                    }
                });
        when(queryManagementService.createQueriesFromSubjectLists(any(StudySubscription.class)))
                .then(new Answer<List<Query>>() {
                    @Override
                    public List<Query> answer(InvocationOnMock invocation) throws Throwable {
                        StudySubscription subscription = (StudySubscription) invocation.getArguments()[0];
                        List<Query> results = new ArrayList<Query>();
                        for (SubjectList subjectList : subscription.getStudy().getStudyConfiguration()
                                .getSubjectLists()) {
                            results.add(
                                    queryManagementService.createQueryFromSubjectList(subscription, subjectList));
                        }
                        for (SubjectList subjectList : subscription.getSubjectLists()) {
                            results.add(
                                    queryManagementService.createQueryFromSubjectList(subscription, subjectList));
                        }
                        return results;
                    }
                });
        when(queryManagementService.getRefreshedEntity(any(AbstractCaIntegrator2Object.class)))
                .then(new Answer<AbstractCaIntegrator2Object>() {
                    @Override
                    public AbstractCaIntegrator2Object answer(InvocationOnMock invocation) throws Throwable {
                        AbstractCaIntegrator2Object obj = (AbstractCaIntegrator2Object) invocation
                                .getArguments()[0];
                        return obj;
                    }
                });
        when(queryManagementService.validateGeneSymbols(any(StudySubscription.class), anyListOf(String.class)))
                .thenReturn(new ArrayList<String>());
        when(queryManagementService.retrieveCopyNumberPlatformsForStudy(any(Study.class)))
                .thenReturn(new HashSet<String>());
        when(queryManagementService.getAllSubjectsNotFoundInCriteria(any(Query.class)))
                .thenReturn(new HashSet<String>());
        when(queryManagementService.retrieveCopyNumberPlatformsWithCghCallForStudy(any(Study.class)))
                .thenReturn(new HashSet<String>());
        when(queryManagementService.retrieveQueryToExecute(any(Query.class))).then(new Answer<Query>() {
            @Override
            public Query answer(InvocationOnMock invocation) throws Throwable {
                return (Query) invocation.getArguments()[0];
            }
        });
    }

    private void setUpKmPlotService() {
        kmPlotService = mock(KMPlotService.class);
        when(kmPlotService.computeLogRankPValueBetween(any(KMSampleGroupCriteriaDTO.class),
                any(KMSampleGroupCriteriaDTO.class))).thenReturn(1.1);
    }

    private void setUpCaArrayFacadeRetrieveData() throws Exception {
        when(caArrayFacade.retrieveData(any(GenomicDataSourceConfiguration.class)))
                .thenAnswer(new Answer<ArrayDataValues>() {
                    @Override
                    public ArrayDataValues answer(InvocationOnMock invocation) throws Throwable {
                        GenomicDataSourceConfiguration dataSource = (GenomicDataSourceConfiguration) invocation
                                .getArguments()[0];
                        List<AbstractReporter> reporters = new ArrayList<AbstractReporter>();
                        GeneExpressionReporter reporter = new GeneExpressionReporter();
                        reporters.add(reporter);
                        ArrayDataValues values = new ArrayDataValues(reporters);
                        Platform platform = new Platform();
                        ReporterList reporterList = platform.addReporterList("reporterList",
                                ReporterTypeEnum.GENE_EXPRESSION_PROBE_SET);
                        reporter.setReporterList(reporterList);
                        reporterList.getReporters().addAll(reporters);
                        platform.addReporterList("reporterList2", ReporterTypeEnum.GENE_EXPRESSION_GENE);
                        for (Sample sample : dataSource.getSamples()) {
                            addExpressionArrayData(sample, platform, reporterList, values);
                        }
                        return values;
                    }
                });
    }

    private void setUpCaArrayFacadeRetrieveDnaAnalysisData() throws Exception {
        when(caArrayFacade.retrieveDnaAnalysisData(any(GenomicDataSourceConfiguration.class),
                any(ArrayDataService.class))).thenAnswer(new Answer<List<ArrayDataValues>>() {
                    @Override
                    public List<ArrayDataValues> answer(InvocationOnMock invocation) throws Throwable {
                        GenomicDataSourceConfiguration dataSource = (GenomicDataSourceConfiguration) invocation
                                .getArguments()[0];
                        List<ArrayDataValues> valuesList = new ArrayList<ArrayDataValues>();
                        List<AbstractReporter> reporters = new ArrayList<AbstractReporter>();
                        GeneExpressionReporter reporter = new GeneExpressionReporter();
                        reporters.add(reporter);
                        ArrayDataValues values = new ArrayDataValues(reporters);
                        Platform platform = new Platform();
                        ReporterList reporterList = platform.addReporterList("reporterList",
                                ReporterTypeEnum.DNA_ANALYSIS_REPORTER);
                        reporter.setReporterList(reporterList);
                        reporterList.getReporters().addAll(reporters);
                        for (Sample sample : dataSource.getSamples()) {
                            addDnaAnalysisArrayData(sample, platform, reporterList, values);
                        }
                        valuesList.add(values);
                        return valuesList;
                    }
                });
    }

    private void setUpBioDbNetRemoteService() {
        final File geneIdResultsFile = new File(
                this.getClass().getResource(GENE_ID_RESULTS_FILE_LOCATION).getFile());
        final File geneSymbolResultsFile = new File(
                this.getClass().getResource(GENE_SYMBOL_RESULTS_FILE_LOCATION).getFile());
        final File geneAliasResultsFile = new File(
                this.getClass().getResource(GENE_ALIAS_RESULTS_FILE_LOCATION).getFile());
        final File genePathwayResultsFile = new File(
                this.getClass().getResource(PATHWAY_RESULTS_FILE_LOCATION).getFile());
        final File pathwayByGeneResultsFile = new File(
                this.getClass().getResource(PATHWAY_BY_GENE_RESULTS_FILE_LOCATION).getFile());

        bioDbNetRemoteService = mock(BioDbNetRemoteService.class);
        when(bioDbNetRemoteService.db2db(any(Db2DbParams.class))).thenAnswer(new Answer<String>() {
            @Override
            public String answer(InvocationOnMock invocation) throws Throwable {
                Db2DbParams params = (Db2DbParams) invocation.getArguments()[0];
                String results = StringUtils.EMPTY;
                if (StringUtils.equals("Gene Symbol", params.getInput())
                        && StringUtils.equals("Biocarta Pathway Name", params.getOutputs())) {
                    results = FileUtils.readFileToString(pathwayByGeneResultsFile);
                } else if (StringUtils.equals("Gene ID", params.getOutputs())) {
                    results = FileUtils.readFileToString(geneIdResultsFile);
                } else if (StringUtils.equals("Gene ID", params.getInput())) {
                    results = FileUtils.readFileToString(geneSymbolResultsFile);
                } else if (StringUtils.equals("Biocarta Pathway Name", params.getInput())) {
                    results = FileUtils.readFileToString(genePathwayResultsFile);
                }
                return results;
            }
        });
        when(bioDbNetRemoteService.dbWalk(any(DbWalkParams.class))).thenAnswer(new Answer<String>() {
            @Override
            public String answer(InvocationOnMock invocation) throws Throwable {
                DbWalkParams params = (DbWalkParams) invocation.getArguments()[0];
                String results = StringUtils.EMPTY;
                if (StringUtils.equals("Gene Symbol and Synonyms->Gene ID", params.getDbPath())) {
                    results = FileUtils.readFileToString(geneAliasResultsFile);
                }
                return results;
            }
        });
    }

    private void addExpressionArrayData(Sample sample, Platform platform, ReporterList reporterList,
            ArrayDataValues values) {
        Array array = new Array();
        array.setPlatform(platform);
        array.setName(sample.getName());
        array.getSampleCollection().add(sample);
        ArrayData arrayData = new ArrayData();
        arrayData.setType(ArrayDataType.GENE_EXPRESSION);
        arrayData.setArray(array);
        array.getArrayDataCollection().add(arrayData);
        arrayData.setSample(sample);
        arrayData.getReporterLists().add(reporterList);
        sample.getArrayCollection().add(array);
        sample.getArrayDataCollection().add(arrayData);
        values.setFloatValues(arrayData, reporterList.getReporters(), ArrayDataValueType.EXPRESSION_SIGNAL,
                new float[reporterList.getReporters().size()]);
    }

    private void addDnaAnalysisArrayData(Sample sample, Platform platform, ReporterList reporterList,
            ArrayDataValues values) {
        Array array = new Array();
        array.setPlatform(platform);
        array.setName(sample.getName());
        array.getSampleCollection().add(sample);
        ArrayData arrayData = new ArrayData();
        arrayData.setType(ArrayDataType.COPY_NUMBER);
        arrayData.setArray(array);
        array.getArrayDataCollection().add(arrayData);
        arrayData.setSample(sample);
        arrayData.getReporterLists().add(reporterList);
        sample.getArrayCollection().add(array);
        sample.getArrayDataCollection().add(arrayData);
        values.setFloatValues(arrayData, reporterList.getReporters(), ArrayDataValueType.DNA_ANALYSIS_LOG2_RATIO,
                new float[reporterList.getReporters().size()]);
    }

    private ArrayDataValues generateArrayDataValues(DataRetrievalRequest request) {
        ArrayDataValues values = new ArrayDataValues(request.getReporters());
        for (AbstractReporter reporter : request.getReporters()) {
            for (ArrayData arrayData : request.getArrayDatas()) {
                for (ArrayDataValueType type : request.getTypes()) {
                    values.setFloatValue(arrayData, reporter, type, (float) 1.23);
                }
            }
        }
        return values;
    }

    private List<Platform> createPlatforms() {
        Platform platform = new Platform();
        platform.setName("0");
        return Arrays.asList(platform);
    }

    /**
     * @return the studySubscription
     */
    protected StudySubscription getStudySubscription() {
        if (studySubscription == null) {
            studySubscription = new StudySubscription();
            studySubscription.setId(Long.valueOf(1));
            studySubscription.setStudy(new Study());
            studySubscription.getStudy().setShortTitleText("Study Name");
            studySubscription.getStudy().setStudyConfiguration(new StudyConfiguration());
        }
        return studySubscription;
    }

    /**
     * @param studySubscription the studySubscription to set
     */
    protected void setStudySubscription(StudySubscription studySubscription) {
        this.studySubscription = studySubscription;
    }
}