package org.opencb.opencga.storage.core.manager.variant;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.opencb.biodata.models.variant.Variant;
import org.opencb.biodata.models.variant.VariantSource;
import org.opencb.commons.datastore.core.Query;
import org.opencb.commons.datastore.core.QueryOptions;
import org.opencb.commons.datastore.core.QueryResult;
import org.opencb.opencga.catalog.exceptions.CatalogAuthorizationException;
import org.opencb.opencga.catalog.models.Sample;
import org.opencb.opencga.catalog.models.acls.permissions.StudyAclEntry;
import org.opencb.opencga.storage.core.variant.adaptors.VariantDBAdaptor;
import org.opencb.opencga.storage.core.variant.adaptors.VariantField;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* Created on 16/12/16.
*
* @author Jacobo Coll <jacobo167@gmail.com>
*/
public class VariantManagerFetchTest extends AbstractVariantStorageOperationTest {
@Before
public void setUp() throws Exception {
indexFile(getSmallFile(), new QueryOptions(), outputId);
}
@Override
protected VariantSource.Aggregation getAggregation() {
return VariantSource.Aggregation.NONE;
}
@Test
public void testCount() throws Exception {
Query query = new Query(VariantDBAdaptor.VariantQueryParams.STUDIES.key(), studyId)
.append(VariantDBAdaptor.VariantQueryParams.RETURNED_SAMPLES.key(), Collections.singletonList("NA19600"));
variantManager.count(query, sessionId);
}
@Test
public void testQuery() throws Exception {
Query query = new Query(VariantDBAdaptor.VariantQueryParams.STUDIES.key(), studyId);
QueryResult<Variant> result = variantManager.get(query, new QueryOptions(), sessionId);
System.out.println("result.getNumResults() = " + result.getNumResults());
System.out.println("result.getResult().size() = " + result.getResult().size());
for (Variant variant : result.getResult()) {
System.out.println("variant = " + variant);
}
}
@Test
public void testQueryExcludeSamples() throws Exception {
QueryOptions queryOptions = new QueryOptions(QueryOptions.EXCLUDE, VariantField.STUDIES_SAMPLES_DATA);
Query query = new Query();
// Without studies
Map<Long, List<Sample>> longListMap = variantManager.checkSamplesPermissions(query, queryOptions, mockVariantDBAdaptor(), sessionId);
Assert.assertEquals(Collections.singletonMap(studyId, Collections.emptyList()), longListMap);
// With studies
query.append(VariantDBAdaptor.VariantQueryParams.STUDIES.key(), studyId);
longListMap = variantManager.checkSamplesPermissions(query, queryOptions, mockVariantDBAdaptor(), sessionId);
Assert.assertEquals(Collections.singletonMap(studyId, Collections.emptyList()), longListMap);
}
@Test
public void testQueryExcludeStudies() throws Exception {
Query query = new Query(VariantDBAdaptor.VariantQueryParams.STUDIES.key(), studyId);
QueryOptions queryOptions = new QueryOptions(QueryOptions.EXCLUDE, VariantField.STUDIES);
Map<Long, List<Sample>> longListMap = variantManager.checkSamplesPermissions(query, queryOptions, mockVariantDBAdaptor(), sessionId);
Assert.assertEquals(Collections.emptyMap(), longListMap);
}
@Test
public void testQueryAnonymous() throws Exception {
catalogManager.createStudyAcls(studyStr, "anonymous", StudyAclEntry.StudyPermissions.VIEW_STUDY.name(), null, sessionId);
// Query query = new Query(VariantDBAdaptor.VariantQueryParams.STUDIES.key(), "s1");
// Query query = new Query(VariantDBAdaptor.VariantQueryParams.STUDIES.key(), "p1:s1");
Query query = new Query(VariantDBAdaptor.VariantQueryParams.STUDIES.key(), userId + "@p1:s1");
// Query query = new Query(VariantDBAdaptor.VariantQueryParams.STUDIES.key(), studyId);
QueryResult<Variant> result = variantManager.get(query, new QueryOptions(), null);
System.out.println("result.getNumResults() = " + result.getNumResults());
System.out.println("result.getResult().size() = " + result.getResult().size());
for (Variant variant : result.getResult()) {
System.out.println("variant = " + variant);
}
}
@Test
public void testQueryAnonymousWithoutPermissions() throws Exception {
Query query = new Query(VariantDBAdaptor.VariantQueryParams.STUDIES.key(), studyId);
CatalogAuthorizationException exception = CatalogAuthorizationException
.deny("anonymous", StudyAclEntry.StudyPermissions.VIEW_STUDY.toString(), "Study", studyId, null);
thrown.expectMessage(exception.getMessage());
thrown.expect(exception.getClass());
variantManager.get(query, new QueryOptions(), null);
}
}