package org.opencb.opencga.storage.mongodb.variant.load; import org.junit.Before; import org.junit.Test; import org.opencb.biodata.models.variant.Variant; import org.opencb.commons.datastore.core.ObjectMap; import org.opencb.commons.datastore.core.Query; import org.opencb.commons.datastore.core.QueryOptions; import org.opencb.opencga.storage.core.metadata.StudyConfiguration; import org.opencb.opencga.storage.core.variant.VariantStorageBaseTest; import org.opencb.opencga.storage.core.variant.adaptors.VariantDBAdaptor; import org.opencb.opencga.storage.core.variant.adaptors.VariantField; import org.opencb.opencga.storage.core.variant.io.VariantWriterFactory.VariantOutputFormat; import org.opencb.opencga.storage.mongodb.variant.MongoDBVariantStorageTest; import java.net.URI; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; import static org.junit.Assert.assertEquals; /** * Created on 08/12/16. * * @author Jacobo Coll <jacobo167@gmail.com> */ public class MongoVariantImporterTest extends VariantStorageBaseTest implements MongoDBVariantStorageTest { private StudyConfiguration studyConfiguration; @Before public void setUp() throws Exception { studyConfiguration = newStudyConfiguration(); runDefaultETL(smallInputUri, variantStorageManager, studyConfiguration); } @Test public void testSimpleImport() throws Exception { URI outputFile = newOutputUri().resolve("export.avro"); System.out.println("outputFile = " + outputFile); variantStorageManager.exportData(outputFile, VariantOutputFormat.AVRO, DB_NAME, new Query(), new QueryOptions()); clearDB(DB_NAME); variantStorageManager.importData(outputFile, DB_NAME, new ObjectMap()); for (Variant variant : variantStorageManager.getDBAdaptor(DB_NAME)) { assertEquals(4, variant.getStudies().get(0).getSamplesData().size()); } } @Test public void testImportSomeSamples() throws Exception { URI outputFile = newOutputUri().resolve("export.avro"); System.out.println("outputFile = " + outputFile); List<String> samples = new LinkedList<>(studyConfiguration.getSampleIds().keySet()).subList(1, 3); Set<String> samplesSet = new HashSet<>(samples); Query query = new Query(VariantDBAdaptor.VariantQueryParams.RETURNED_SAMPLES.key(), samples); variantStorageManager.exportData(outputFile, VariantOutputFormat.AVRO, DB_NAME, query, new QueryOptions()); clearDB(DB_NAME); variantStorageManager.importData(outputFile, DB_NAME, new ObjectMap()); for (Variant variant : variantStorageManager.getDBAdaptor(DB_NAME)) { assertEquals(2, variant.getStudies().get(0).getSamplesData().size()); assertEquals(samplesSet, variant.getStudies().get(0).getSamplesName()); } } @Test public void testImportExcludeSamples() throws Exception { URI outputFile = newOutputUri().resolve("export.avro"); System.out.println("outputFile = " + outputFile); Query query = new Query(); QueryOptions queryOptions = new QueryOptions(QueryOptions.EXCLUDE, VariantField.STUDIES_SAMPLES_DATA.toString()); variantStorageManager.exportData(outputFile, VariantOutputFormat.AVRO, DB_NAME, query, queryOptions); clearDB(DB_NAME); variantStorageManager.importData(outputFile, DB_NAME, new ObjectMap()); for (Variant variant : variantStorageManager.getDBAdaptor(DB_NAME)) { assertEquals(0, variant.getStudies().get(0).getSamplesData().size()); } } @Test public void testImportEmptySamples() throws Exception { URI outputFile = newOutputUri().resolve("export.avro"); System.out.println("outputFile = " + outputFile); Query query = new Query(VariantDBAdaptor.VariantQueryParams.RETURNED_SAMPLES.key(), "."); QueryOptions queryOptions = new QueryOptions(); variantStorageManager.exportData(outputFile, VariantOutputFormat.AVRO, DB_NAME, query, queryOptions); clearDB(DB_NAME); variantStorageManager.importData(outputFile, DB_NAME, new ObjectMap()); for (Variant variant : variantStorageManager.getDBAdaptor(DB_NAME)) { assertEquals(0, variant.getStudies().get(0).getSamplesData().size()); } } }