@Test public void testGetMetadataFromVcfWithSomeExistingSamples() throws CatalogException, FileNotFoundException { catalogManager.getSampleManager().create(study.getFqn(), new Sample().setId(expectedSampleNames.get(2)), new QueryOptions(), sessionIdUser); catalogManager.getSampleManager().create(study.getFqn(), new Sample().setId(expectedSampleNames.get(0)), new QueryOptions(), sessionIdUser); testGetMetadataFromVcf(); }
@Test public void testAssignPermissionsWithPropagationAndNoIndividual() throws CatalogException { Sample sample = new Sample().setId("sample"); catalogManager.getSampleManager().create(studyFqn, sample, QueryOptions.empty(), sessionIdUser); List<QueryResult<SampleAclEntry>> queryResults = catalogManager.getSampleManager().updateAcl(studyFqn, Arrays.asList("sample"), "user2", new Sample.SampleAclParams("VIEW", AclParams.Action.SET, null, null, null, true), sessionIdUser); assertEquals(1, queryResults.size()); assertEquals(1, queryResults.get(0).getNumResults()); assertEquals(1, queryResults.get(0).first().getPermissions().size()); assertTrue(queryResults.get(0).first().getPermissions().contains(SampleAclEntry.SamplePermissions.VIEW)); }
@Test public void testCreateSample() throws CatalogException { QueryResult<Sample> sampleQueryResult = catalogManager.getSampleManager().create(studyFqn, new Sample().setId("HG007"), null, sessionIdUser); assertEquals(1, sampleQueryResult.getNumResults()); }
@Test public void testAssignPermissionsWithPropagationWithIndividualAndNoIndividual() throws CatalogException { Sample sample = new Sample().setId("sample").setIndividual(new Individual().setId("individual")); catalogManager.getSampleManager().create(studyFqn, sample, QueryOptions.empty(), sessionIdUser); Sample sample2 = new Sample().setId("sample2"); catalogManager.getSampleManager().create(studyFqn, sample2, QueryOptions.empty(), sessionIdUser); List<QueryResult<SampleAclEntry>> queryResults = catalogManager.getSampleManager().updateAcl(studyFqn, Arrays.asList("sample", "sample2"), "user2", new Sample.SampleAclParams("VIEW", AclParams.Action.SET, null, null, null, true), sessionIdUser); assertEquals(2, queryResults.size()); assertEquals(1, queryResults.get(0).getNumResults()); assertEquals(1, queryResults.get(0).first().getPermissions().size()); assertTrue(queryResults.get(0).first().getPermissions().contains(SampleAclEntry.SamplePermissions.VIEW)); assertTrue(queryResults.get(1).first().getPermissions().contains(SampleAclEntry.SamplePermissions.VIEW)); List<QueryResult<IndividualAclEntry>> individualAcl = catalogManager.getIndividualManager().getAcls(studyFqn, Collections.singletonList("individual"), "user2", false, sessionIdUser); assertEquals(1, individualAcl.size()); assertEquals(1, individualAcl.get(0).getNumResults()); assertEquals(1, individualAcl.get(0).first().getPermissions().size()); assertTrue(individualAcl.get(0).first().getPermissions().contains(IndividualAclEntry.IndividualPermissions.VIEW)); }
@Test public void testAddSamples() throws Exception { long studyUid = user3.getProjects().get(0).getStudies().get(0).getUid(); Sample sample1 = catalogDBAdaptor.getCatalogSampleDBAdaptor().insert(studyUid, new Sample().setId("sample1").setStatus(new Status()), QueryOptions.empty()).first(); Sample sample2 = catalogDBAdaptor.getCatalogSampleDBAdaptor().insert(studyUid, new Sample().setId("sample2").setStatus(new Status()), QueryOptions.empty()).first(); File file = user3.getProjects().get(0).getStudies().get(0).getFiles().get(0); catalogFileDBAdaptor.addSamplesToFile(file.getUid(), Arrays.asList(sample1, sample2)); QueryResult<File> fileQueryResult = catalogFileDBAdaptor.get(file.getUid(), QueryOptions.empty()); assertEquals(2, fileQueryResult.first().getSamples().size()); assertTrue(Arrays.asList(sample1.getUid(), sample2.getUid()).containsAll( fileQueryResult.first().getSamples().stream().map(Sample::getUid).collect(Collectors.toList()))); Sample sample3 = catalogDBAdaptor.getCatalogSampleDBAdaptor().insert(studyUid, new Sample().setId("sample3").setStatus(new Status()), QueryOptions.empty()).first(); // Test we avoid duplicities catalogFileDBAdaptor.addSamplesToFile(file.getUid(), Arrays.asList(sample1, sample2, sample2, sample3)); fileQueryResult = catalogFileDBAdaptor.get(file.getUid(), QueryOptions.empty()); assertEquals(3, fileQueryResult.first().getSamples().size()); assertTrue(Arrays.asList(sample1.getUid(), sample2.getUid(), sample3.getUid()).containsAll( fileQueryResult.first().getSamples().stream().map(Sample::getUid).collect(Collectors.toList()))); }
@Test public void testCreateSampleWithDotInName() throws CatalogException { String name = "HG007.sample"; QueryResult<Sample> sampleQueryResult = catalogManager.getSampleManager().create(studyFqn, new Sample().setId(name), null, sessionIdUser); assertEquals(name, sampleQueryResult.first().getId()); }
@Test public void testAvoidDuplicatedSamples() throws CatalogDBException { long studyId = user3.getProjects().get(0).getStudies().get(0).getUid(); Sample sample1 = catalogDBAdaptor.getCatalogSampleDBAdaptor().insert(studyId, new Sample().setId("sample1").setStatus(new Status()), QueryOptions.empty()).first(); Sample sample2 = catalogDBAdaptor.getCatalogSampleDBAdaptor().insert(studyId, new Sample().setId("sample2").setStatus(new Status()), QueryOptions.empty()).first(); Individual individual = new Individual() .setName("in2") .setStatus(new Status()) .setSamples(Arrays.asList(sample1, sample1, sample2, new Sample().setUid(-1).setStatus(new Status()))); Individual individualStored = catalogIndividualDBAdaptor.insert(studyId, individual, null).first(); assertEquals(2, individualStored.getSamples().size()); assertTrue(individualStored.getSamples().stream().map(Sample::getUid).collect(Collectors.toSet()).containsAll(Arrays.asList( sample1.getUid(), sample2.getUid()))); // Update samples ObjectMap params = new ObjectMap(IndividualDBAdaptor.QueryParams.SAMPLES.key(), individual.getSamples()); Individual update = catalogIndividualDBAdaptor.update(individualStored.getUid(), params, QueryOptions.empty()).first(); assertEquals(2, update.getSamples().size()); assertTrue(update.getSamples().stream().map(Sample::getUid).collect(Collectors.toSet()).containsAll(Arrays.asList(sample1.getUid(), sample2.getUid()))); }
@Test public void testRemoveSamples() throws Exception { long studyUid = user3.getProjects().get(0).getStudies().get(0).getUid(); Sample sample1 = catalogDBAdaptor.getCatalogSampleDBAdaptor().insert(studyUid, new Sample().setId("sample1").setStatus(new Status()), QueryOptions.empty()).first(); Sample sample2 = catalogDBAdaptor.getCatalogSampleDBAdaptor().insert(studyUid, new Sample().setId("sample2").setStatus(new Status()), QueryOptions.empty()).first(); Sample sample3 = catalogDBAdaptor.getCatalogSampleDBAdaptor().insert(studyUid, new Sample().setId("sample3").setStatus(new Status()), QueryOptions.empty()).first(); File file = user3.getProjects().get(0).getStudies().get(0).getFiles().get(0); catalogFileDBAdaptor.addSamplesToFile(file.getUid(), Arrays.asList(sample1, sample2, sample3)); QueryResult<File> fileQueryResult = catalogFileDBAdaptor.get(file.getUid(), QueryOptions.empty()); assertEquals(3, fileQueryResult.first().getSamples().size()); assertTrue(Arrays.asList(sample1.getUid(), sample2.getUid(), sample3.getUid()) .containsAll(fileQueryResult.first().getSamples().stream().map(Sample::getUid).collect(Collectors.toList()))); catalogFileDBAdaptor.extractSampleFromFiles(new Query(FileDBAdaptor.QueryParams.UID.key(), file.getUid()), Arrays.asList(sample1.getUid(), sample3.getUid())); fileQueryResult = catalogFileDBAdaptor.get(file.getUid(), QueryOptions.empty()); assertEquals(1, fileQueryResult.first().getSamples().size()); assertTrue(fileQueryResult.first().getSamples().get(0).getUid() == sample2.getUid()); }
@Test public void testCreateSampleWithIndividual() throws CatalogException { String individualId = catalogManager.getIndividualManager().create(studyFqn, new Individual().setId("Individual1"), new QueryOptions(), sessionIdUser).first().getId(); String sampleId1 = catalogManager.getSampleManager().create(studyFqn, new Sample() .setId("SAMPLE_1") .setIndividual(new Individual().setId(individualId)), new QueryOptions(), sessionIdUser).first().getId(); QueryResult<Individual> individualQueryResult = catalogManager.getIndividualManager().get(studyFqn, individualId, QueryOptions.empty(), sessionIdUser); assertEquals(sampleId1, individualQueryResult.first().getSamples().get(0).getId()); // Create sample linking to individual based on the individual name String sampleId2 = catalogManager.getSampleManager().create(studyFqn, new Sample() .setId("SAMPLE_2") .setIndividual(new Individual().setId("Individual1")), new QueryOptions(), sessionIdUser).first().getId(); individualQueryResult = catalogManager.getIndividualManager().get(studyFqn, individualId, QueryOptions.empty(), sessionIdUser); assertEquals(2, individualQueryResult.first().getSamples().size()); assertTrue(individualQueryResult.first().getSamples().stream().map(Sample::getId).collect(Collectors.toSet()).containsAll( Arrays.asList(sampleId1, sampleId2) )); }
@Test public void testUpdateSampleStats() throws CatalogException { catalogManager.getSampleManager().create(studyFqn, new Sample().setId("HG007"), null, sessionIdUser); QueryResult<Sample> update = catalogManager.getSampleManager().update(studyFqn, "HG007", new ObjectMap (SampleDBAdaptor.QueryParams.STATS.key(), new ObjectMap("one", "two")), new QueryOptions(), sessionIdUser); assertEquals(1, update.first().getStats().size()); assertTrue(update.first().getStats().containsKey("one")); assertEquals("two", update.first().getStats().get("one")); update = catalogManager.getSampleManager().update(studyFqn, "HG007", new ObjectMap(SampleDBAdaptor.QueryParams.STATS.key(), new ObjectMap("two", "three")), new QueryOptions(), sessionIdUser); assertEquals(2, update.first().getStats().size()); }
@Test public void testCreateCohortAlreadyExisting() throws CatalogException { Sample sampleId1 = catalogManager.getSampleManager().create(studyFqn, new Sample().setId("SAMPLE_1"), new QueryOptions(), sessionIdUser).first(); catalogManager.getCohortManager().create(studyFqn, new Cohort().setId("MyCohort").setType(Study.Type.FAMILY) .setSamples(Collections.singletonList(sampleId1)), null, sessionIdUser).first(); thrown.expect(CatalogDBException.class); catalogManager.getCohortManager().create(studyFqn, new Cohort().setId("MyCohort").setType(Study.Type.FAMILY) .setSamples(Collections.singletonList(sampleId1)), null, sessionIdUser).first(); }
private QueryResult<ClinicalAnalysis> createDummyEnvironment(boolean createFamily) throws CatalogException { createDummyFamily(); ClinicalAnalysis clinicalAnalysis = new ClinicalAnalysis() .setId("analysis").setDescription("My description").setType(ClinicalAnalysis.Type.FAMILY) .setDueDate("20180510100000") .setProband(new Individual().setId("child1").setSamples(Arrays.asList(new Sample().setId("sample2")))); if (createFamily) { clinicalAnalysis.setFamily(new Family().setId("family")); } return catalogManager.getClinicalAnalysisManager().create(STUDY, clinicalAnalysis, QueryOptions.empty(), sessionIdUser); }
@Test public void updateSubjectsNoFamilyTest() throws CatalogException { createDummyEnvironment(false); ObjectMap params = new ObjectMap(ClinicalAnalysisDBAdaptor.QueryParams.PROBAND.key(), new Individual().setId("child1").setSamples(Arrays.asList(new Sample().setId("sample2")))); QueryResult<ClinicalAnalysis> updateResult = catalogManager.getClinicalAnalysisManager().update(STUDY, "analysis", params, QueryOptions.empty(), sessionIdUser); assertEquals(1, updateResult.getNumResults()); assertEquals(0, updateResult.first().getInterpretations().size()); assertEquals(catalogManager.getIndividualManager().getUid("child1", STUDY, sessionIdUser).getResource().getUid(), updateResult.first().getProband().getUid()); assertEquals(1, updateResult.first().getProband().getSamples().size()); assertEquals(catalogManager.getSampleManager().getUid("sample2", STUDY, sessionIdUser).getResource().getUid(), updateResult.first().getProband().getSamples().get(0).getUid()); }
@Test public void testModifySample() throws CatalogException { String sampleId1 = catalogManager.getSampleManager() .create(studyFqn, new Sample().setId("SAMPLE_1"), new QueryOptions(), sessionIdUser).first().getId(); String individualId = catalogManager.getIndividualManager().create(studyFqn, new Individual().setId("Individual1"), new QueryOptions(), sessionIdUser).first().getId(); Sample sample = catalogManager.getSampleManager() .update(studyFqn, sampleId1, new ObjectMap(SampleDBAdaptor.QueryParams.INDIVIDUAL.key(), individualId), new QueryOptions("lazy", false), sessionIdUser).first(); assertEquals(individualId, ((Individual) sample.getAttributes().get("individual")).getId()); }
@Test public void testDoNotOverwriteSampleIds() throws CatalogException, FileNotFoundException { File file = catalogManager.getFileManager().upload(study.getFqn(), vcfFileUri, new File().setPath(folder.getPath() + VCF_FILE_NAME), false, false, sessionIdUser).first(); assertEquals(File.FileStatus.READY, file.getStatus().getName()); assertEquals(File.Format.VCF, file.getFormat()); assertEquals(File.Bioformat.VARIANT, file.getBioformat()); assertNotNull(file.getAttributes().get(VARIANT_FILE_METADATA)); assertEquals(4, file.getSamples().size()); //Add a sampleId String sampleId = catalogManager.getSampleManager().create(study.getFqn(), new Sample().setId("Bad_Sample"), null, sessionIdUser) .first().getId(); catalogManager.getFileManager().update(study.getFqn(), file.getPath(), new ObjectMap(FileDBAdaptor.QueryParams.SAMPLES.key(), Collections.singletonList(sampleId)), new QueryOptions(), sessionIdUser); file = catalogManager.getFileManager().get(study.getFqn(), file.getPath(), null, sessionIdUser).first(); assertEquals(5, file.getSamples().size()); assertEquals(sampleId, file.getSamples().get(4).getId()); }
@Test public void searchSamplesByIndividual() throws CatalogException { catalogManager.getIndividualManager().create(studyFqn, new Individual().setId("Individual1") .setSamples(Arrays.asList(new Sample().setId("sample1"), new Sample().setId("sample2"))), new QueryOptions(), sessionIdUser); QueryResult<Sample> sampleQueryResult = catalogManager.getSampleManager().search(studyFqn, new Query(SampleDBAdaptor.QueryParams.INDIVIDUAL.key(), "Individual1"), QueryOptions.empty(), sessionIdUser); assertEquals(2, sampleQueryResult.getNumResults()); sampleQueryResult = catalogManager.getSampleManager().search(studyFqn, new Query().append(SampleDBAdaptor.QueryParams.INDIVIDUAL.key(), "Individual1") .append(SampleDBAdaptor.QueryParams.ID.key(), "sample1"), QueryOptions.empty(), sessionIdUser); assertEquals(1, sampleQueryResult.getNumResults()); catalogManager.getIndividualManager().create(studyFqn, new Individual().setId("Individual2"), new QueryOptions(), sessionIdUser); sampleQueryResult = catalogManager.getSampleManager().search(studyFqn, new Query().append(SampleDBAdaptor.QueryParams.INDIVIDUAL.key(), "Individual2"), QueryOptions.empty(), sessionIdUser); assertEquals(0, sampleQueryResult.getNumResults()); }
@Test public void testDeleteSample() throws CatalogException { long sampleUid = catalogManager.getSampleManager().create(studyFqn, new Sample().setId("SAMPLE_1"), new QueryOptions(), sessionIdUser).first().getUid(); Query query = new Query(SampleDBAdaptor.QueryParams.ID.key(), "SAMPLE_1"); WriteResult delete = catalogManager.getSampleManager().delete("1000G:phase1", query, null, sessionIdUser); assertEquals(1, delete.getNumModified()); query = new Query() .append(SampleDBAdaptor.QueryParams.UID.key(), sampleUid) .append(SampleDBAdaptor.QueryParams.STATUS_NAME.key(), Status.DELETED); QueryResult<Sample> sampleQueryResult = catalogManager.getSampleManager().get("1000G:phase1", query, new QueryOptions(), sessionIdUser); // QueryResult<Sample> sample = catalogManager.getSample(sampleId, new QueryOptions(), sessionIdUser); assertEquals(1, sampleQueryResult.getNumResults()); assertTrue(sampleQueryResult.first().getId().contains("DELETED")); }
@Test public void updateSubjectsAndFamilyTest() throws CatalogException { createDummyEnvironment(false); ObjectMap params = new ObjectMap() .append(ClinicalAnalysisDBAdaptor.QueryParams.PROBAND.key(), new Individual().setId("child1").setSamples(Arrays.asList(new Sample().setId("sample2")))) .append(ClinicalAnalysisDBAdaptor.QueryParams.FAMILY.key(), new Family().setId("family")); QueryResult<ClinicalAnalysis> updateResult = catalogManager.getClinicalAnalysisManager().update(STUDY, "analysis", params, QueryOptions.empty(), sessionIdUser); assertEquals(1, updateResult.getNumResults()); assertEquals(0, updateResult.first().getInterpretations().size()); assertEquals(catalogManager.getFamilyManager().getUid("family", STUDY, sessionIdUser).getResource().getUid(), updateResult.first().getFamily().getUid()); assertEquals(catalogManager.getIndividualManager().getUid("child1", STUDY, sessionIdUser).getResource().getUid(), updateResult.first().getProband().getUid()); assertEquals(1, updateResult.first().getProband().getSamples().size()); assertEquals(catalogManager.getSampleManager().getUid("sample2", STUDY, sessionIdUser).getResource().getUid(), updateResult.first().getProband().getSamples().get(0).getUid()); }
@Test public void updateCollectionField() throws CatalogException { catalogManager.getSampleManager().create(studyFqn, new Sample().setId("testSample").setDescription("description"), null, sessionIdUser); SampleCollection collection = new SampleCollection("tissue", "organ", "quantity", "method", "date", Collections.emptyMap()); ObjectMap params = new ObjectMap(SampleDBAdaptor.UpdateParams.COLLECTION.key(), collection); catalogManager.getSampleManager().update(studyFqn, "testSample", params, new QueryOptions(Constants.INCREMENT_VERSION, true), sessionIdUser); QueryResult<Sample> testSample = catalogManager.getSampleManager().get(studyFqn, "testSample", new QueryOptions(), sessionIdUser); assertEquals("tissue", testSample.first().getCollection().getTissue()); assertEquals("organ", testSample.first().getCollection().getOrgan()); assertEquals("quantity", testSample.first().getCollection().getQuantity()); assertEquals("method", testSample.first().getCollection().getMethod()); assertEquals("date", testSample.first().getCollection().getDate()); assertTrue(testSample.first().getCollection().getAttributes().isEmpty()); }
@Test public void updateProcessingField() throws CatalogException { catalogManager.getSampleManager().create(studyFqn, new Sample().setId("testSample").setDescription("description"), null, sessionIdUser); SampleProcessing processing = new SampleProcessing("product", "preparationMethod", "extractionMethod", "labSampleId", "quantity", "date", Collections.emptyMap()); ObjectMap params = new ObjectMap(SampleDBAdaptor.UpdateParams.PROCESSING.key(), processing); catalogManager.getSampleManager().update(studyFqn, "testSample", params, new QueryOptions(Constants.INCREMENT_VERSION, true), sessionIdUser); QueryResult<Sample> testSample = catalogManager.getSampleManager().get(studyFqn, "testSample", new QueryOptions(), sessionIdUser); assertEquals("product", testSample.first().getProcessing().getProduct()); assertEquals("preparationMethod", testSample.first().getProcessing().getPreparationMethod()); assertEquals("extractionMethod", testSample.first().getProcessing().getExtractionMethod()); assertEquals("labSampleId", testSample.first().getProcessing().getLabSampleId()); assertEquals("quantity", testSample.first().getProcessing().getQuantity()); assertEquals("date", testSample.first().getProcessing().getDate()); assertTrue(testSample.first().getProcessing().getAttributes().isEmpty()); }