uk.ac.ebi.atlas.solr.admin.index.conditions.ConditionsIndexTest.java Source code

Java tutorial

Introduction

Here is the source code for uk.ac.ebi.atlas.solr.admin.index.conditions.ConditionsIndexTest.java

Source

/*
 * Copyright 2008-2013 Microarray Informatics Team, EMBL-European Bioinformatics Institute
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *
 * For further details of the Gene Expression Atlas project, including source code,
 * downloads and documentation, please see:
 *
 * http://gxa.github.com/gxa
 */

package uk.ac.ebi.atlas.solr.admin.index.conditions;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSetMultimap;
import com.google.common.collect.SetMultimap;
import org.apache.commons.collections.CollectionUtils;
import org.apache.solr.client.solrj.SolrServer;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import uk.ac.ebi.atlas.model.AssayGroup;
import uk.ac.ebi.atlas.model.AssayGroups;
import uk.ac.ebi.atlas.model.ExperimentDesign;
import uk.ac.ebi.atlas.model.baseline.BaselineExperiment;
import uk.ac.ebi.atlas.model.differential.DifferentialExperiment;
import uk.ac.ebi.atlas.solr.admin.index.conditions.baseline.BaselineConditionsBuilder;
import uk.ac.ebi.atlas.solr.admin.index.conditions.baseline.BaselineConditionsIndex;
import uk.ac.ebi.atlas.solr.admin.index.conditions.differential.DifferentialConditionsBuilder;
import uk.ac.ebi.atlas.solr.admin.index.conditions.differential.DifferentialConditionsIndex;

import java.util.Collection;
import java.util.Collections;

import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.verify;

@RunWith(MockitoJUnitRunner.class)
public class ConditionsIndexTest {

    private static final String EXPERIMENT_ACCESSION = "AN_ACCESSION";

    @Mock
    private SolrServer solrServerMock;

    @Mock
    private DifferentialConditionsBuilder conditionsPropertiesBuilderMock;

    @Mock
    private DifferentialExperiment differentialExperimentMock;

    @Mock
    private BaselineExperiment baselineExperimentMock;

    @Mock
    private ExperimentDesign experimentDesignMock;

    @Before
    public void setUp() throws Exception {
        given(differentialExperimentMock.getAccession()).willReturn(EXPERIMENT_ACCESSION);
        given(baselineExperimentMock.getAccession()).willReturn(EXPERIMENT_ACCESSION);
    }

    @Test
    public void updateConditionsShouldReindexDiffExperiment() throws Exception {
        given(conditionsPropertiesBuilderMock.buildProperties(Mockito.eq(differentialExperimentMock),
                Mockito.any(SetMultimap.class))).willReturn(CollectionUtils.EMPTY_COLLECTION);
        DifferentialConditionsIndex subject = new DifferentialConditionsIndex(solrServerMock,
                conditionsPropertiesBuilderMock);

        subject.updateConditions(differentialExperimentMock, null);

        ArgumentCaptor<String> deleteQueryCaptor = ArgumentCaptor.forClass(String.class);

        verify(solrServerMock).deleteByQuery(deleteQueryCaptor.capture());
        assertThat(deleteQueryCaptor.getValue(), endsWith(EXPERIMENT_ACCESSION));

        verify(conditionsPropertiesBuilderMock).buildProperties(Mockito.eq(differentialExperimentMock),
                Mockito.any(SetMultimap.class));

        verify(solrServerMock).addBeans(CollectionUtils.EMPTY_COLLECTION);
    }

    @Test
    public void addConditionsBaselineExtractsFactorAndSampleValues() throws Exception {
        given(baselineExperimentMock.getAssayGroups())
                .willReturn(new AssayGroups(Collections.singleton(new AssayGroup("g1", "a1"))));
        given(baselineExperimentMock.getExperimentDesign()).willReturn(experimentDesignMock);
        given(experimentDesignMock.getFactorValues("a1")).willReturn(ImmutableMap.of("ORGANISM_PART", "brain"));
        given(experimentDesignMock.getSampleCharacteristicsValues("a1"))
                .willReturn(ImmutableMap.of("sex", "female"));

        BaselineConditionsIndex subject = new BaselineConditionsIndex(solrServerMock,
                new BaselineConditionsBuilder());

        SetMultimap<String, String> emptyOntologyTerms = ImmutableSetMultimap.of();
        subject.addConditions(baselineExperimentMock, emptyOntologyTerms);

        ArgumentCaptor<Collection> addBeansQueryCaptor = ArgumentCaptor.forClass(Collection.class);

        verify(solrServerMock).addBeans(addBeansQueryCaptor.capture());

        Collection<Condition> beans = addBeansQueryCaptor.getValue();

        assertThat(beans,
                containsInAnyOrder(new Condition(EXPERIMENT_ACCESSION, "g1", ImmutableList.of("female", "brain"))));

    }

    @Test
    public void addConditionsBaselineIncludesOntologyTerms() throws Exception {
        given(baselineExperimentMock.getAssayGroups())
                .willReturn(new AssayGroups(Collections.singleton(new AssayGroup("g1", "a1"))));
        given(baselineExperimentMock.getExperimentDesign()).willReturn(experimentDesignMock);
        given(experimentDesignMock.getFactorValues("a1")).willReturn(ImmutableMap.of("ORGANISM_PART", "brain"));
        given(experimentDesignMock.getSampleCharacteristicsValues("a1"))
                .willReturn(ImmutableMap.of("sex", "female"));

        SetMultimap<String, String> ontologyTerms = new ImmutableSetMultimap.Builder<String, String>()
                .putAll("a1", "obo", "efo").build();

        BaselineConditionsIndex subject = new BaselineConditionsIndex(solrServerMock,
                new BaselineConditionsBuilder());

        subject.addConditions(baselineExperimentMock, ontologyTerms);

        ArgumentCaptor<Collection> addBeansQueryCaptor = ArgumentCaptor.forClass(Collection.class);

        verify(solrServerMock).addBeans(addBeansQueryCaptor.capture());

        Collection<Condition> beans = addBeansQueryCaptor.getValue();
        Condition condition = beans.iterator().next();

        assertThat(beans, hasSize(1));
        assertThat(condition.getExperimentAccession(), is(EXPERIMENT_ACCESSION));
        assertThat(condition.getAssayGroupId(), is("g1"));
        assertThat(condition.getValues(), containsInAnyOrder("brain", "female", "obo", "efo"));

    }

}