diff --git a/pom.xml b/pom.xml index e61597ee3a1..00f9153130e 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.springframework.boot spring-boot-starter-parent - 3.1.4 + 3.4.1 org.cbioportal @@ -38,6 +38,7 @@ 2.12.5 8.0.28 + 8.2.0 3.0.0 UTF-8 UTF-8 @@ -72,14 +73,14 @@ 1.6.3 - 3.0.2 + 3.0.4 1.19.4 5.15.0 4.1.1 - 3.13.2 + 3.22.0 3.6.1 2.2.0 4.4 @@ -93,13 +94,12 @@ 1.1.1 3.12.14 0.8.2 - 8.0.33 3.2.0 3.14.0 4.17.0 7.1.0 - 5.2.1 1.19.7 + 1.78 @@ -211,6 +211,12 @@ com.github.romain-warnan simple-java-bitly ${simple_java_bitly.version} + + + org.apache.httpcomponents + httpclient + + org.ehcache @@ -249,11 +255,11 @@ jwks-rsa 0.22.1 - - mysql - mysql-connector-java - ${mysql_driver.version} - + + com.mysql + mysql-connector-j + ${mysql.version} + org.springframework.boot spring-boot-starter-thymeleaf @@ -351,7 +357,6 @@ org.apache.httpcomponents.client5 httpclient5 - ${apache_httpclient.version} test diff --git a/src/main/resources/org/cbioportal/persistence/mybatis/ClinicalEventMapper.xml b/src/main/resources/org/cbioportal/persistence/mybatis/ClinicalEventMapper.xml index 828500a579c..48e446aeccb 100644 --- a/src/main/resources/org/cbioportal/persistence/mybatis/ClinicalEventMapper.xml +++ b/src/main/resources/org/cbioportal/persistence/mybatis/ClinicalEventMapper.xml @@ -228,9 +228,9 @@ clinical_event.EVENT_TYPE = #{element.eventType} - (clinical_event.EVENT_TYPE, clinical_event_data.KEY, clinical_event_data.VALUE) IN + (CONCAT(clinical_event.EVENT_TYPE, '_', clinical_event_data.KEY, '_', clinical_event_data.VALUE)) IN - (#{element.eventType}, #{attribute.key}, #{attribute.value}) + CONCAT(#{element.eventType}, '_', #{attribute.key}, '_', #{attribute.value}) @@ -291,9 +291,9 @@ clinical_event.EVENT_TYPE = #{element.eventType} - (clinical_event.EVENT_TYPE, clinical_event_data.KEY) IN + (CONCAT(clinical_event.EVENT_TYPE, '_', clinical_event_data.KEY)) IN - (#{element.eventType}, #{attribute.key}) + CONCAT(#{element.eventType}, '_', #{attribute.key}) diff --git a/src/test/java/org/cbioportal/persistence/mybatis/CopyNumberSegmentMyBatisRepositoryTest.java b/src/test/java/org/cbioportal/persistence/mybatis/CopyNumberSegmentMyBatisRepositoryTest.java index 38a7720a823..b8e72afac33 100644 --- a/src/test/java/org/cbioportal/persistence/mybatis/CopyNumberSegmentMyBatisRepositoryTest.java +++ b/src/test/java/org/cbioportal/persistence/mybatis/CopyNumberSegmentMyBatisRepositoryTest.java @@ -181,16 +181,16 @@ public void fetchCopyNumberSegments() throws Exception { studyIds, sampleIds, "3", "SUMMARY"); Assert.assertEquals(3, result0.size()); - Assert.assertEquals("TCGA-A1-B0SO-01", result0.get(0).getSampleStableId()); + Assert.assertEquals("TCGA-A1-A0SB-01", result0.get(0).getSampleStableId()); Assert.assertEquals("TCGA-A1-A0SB-01", result0.get(1).getSampleStableId()); - Assert.assertEquals("TCGA-A1-A0SB-01", result0.get(2).getSampleStableId()); + Assert.assertEquals("TCGA-A1-B0SO-01", result0.get(2).getSampleStableId()); Assert.assertEquals(1, result1.size()); Assert.assertEquals("TCGA-A1-A0SB-01", result1.get(0).getSampleStableId()); Assert.assertEquals(2, result2.size()); - Assert.assertEquals("TCGA-A1-B0SO-01", result2.get(0).getSampleStableId()); - Assert.assertEquals("TCGA-A1-A0SB-01", result2.get(1).getSampleStableId()); + Assert.assertEquals("TCGA-A1-A0SB-01", result2.get(0).getSampleStableId()); + Assert.assertEquals("TCGA-A1-B0SO-01", result2.get(1).getSampleStableId()); Assert.assertEquals(0, result3.size()); } diff --git a/src/test/java/org/cbioportal/persistence/util/fakeclient/MockInMemoryRedissonClient.java b/src/test/java/org/cbioportal/persistence/util/fakeclient/MockInMemoryRedissonClient.java index 92f69db4a88..145be13601c 100644 --- a/src/test/java/org/cbioportal/persistence/util/fakeclient/MockInMemoryRedissonClient.java +++ b/src/test/java/org/cbioportal/persistence/util/fakeclient/MockInMemoryRedissonClient.java @@ -4,6 +4,7 @@ import org.redisson.api.redisnode.BaseRedisNodes; import org.redisson.api.redisnode.RedisNodes; import org.redisson.client.codec.Codec; +import org.redisson.codec.JsonCodec; import org.redisson.config.Config; import java.util.concurrent.ConcurrentHashMap; @@ -32,12 +33,12 @@ public RKeys getKeys() { } @Override - public RTimeSeries getTimeSeries(String s) { + public RTimeSeries getTimeSeries(String s) { throw new UnsupportedOperationException(); } @Override - public RTimeSeries getTimeSeries(String s, Codec codec) { + public RTimeSeries getTimeSeries(String s, Codec codec) { throw new UnsupportedOperationException(); } @@ -51,6 +52,16 @@ public RStream getStream(String s, Codec codec) { throw new UnsupportedOperationException(); } + @Override + public RSearch getSearch() { + throw new UnsupportedOperationException(); + } + + @Override + public RSearch getSearch(Codec codec) { + throw new UnsupportedOperationException(); + } + @Override public RRateLimiter getRateLimiter(String s) { throw new UnsupportedOperationException(); @@ -116,6 +127,11 @@ public RBuckets getBuckets(Codec codec) { throw new UnsupportedOperationException(); } + @Override + public RJsonBucket getJsonBucket(String name, JsonCodec codec) { + throw new UnsupportedOperationException(); + } + @Override public RHyperLogLog getHyperLogLog(String s) { throw new UnsupportedOperationException(); @@ -221,6 +237,21 @@ public RLock getLock(String s) { throw new UnsupportedOperationException(); } + @Override + public RLock getSpinLock(String s) { + throw new UnsupportedOperationException(); + } + + @Override + public RLock getSpinLock(String s, LockOptions.BackOff backOff) { + throw new UnsupportedOperationException(); + } + + @Override + public RFencedLock getFencedLock(String s) { + throw new UnsupportedOperationException(); + } + @Override public RLock getMultiLock(RLock... rLocks) { throw new UnsupportedOperationException(); @@ -281,6 +312,16 @@ public RLexSortedSet getLexSortedSet(String s) { throw new UnsupportedOperationException(); } + @Override + public RShardedTopic getShardedTopic(String s) { + throw new UnsupportedOperationException(); + } + + @Override + public RShardedTopic getShardedTopic(String s, Codec codec) { + throw new UnsupportedOperationException(); + } + @Override public RTopic getTopic(String s) { throw new UnsupportedOperationException(); @@ -291,6 +332,16 @@ public RTopic getTopic(String s, Codec codec) { throw new UnsupportedOperationException(); } + @Override + public RReliableTopic getReliableTopic(String s) { + throw new UnsupportedOperationException(); + } + + @Override + public RReliableTopic getReliableTopic(String s, Codec codec) { + throw new UnsupportedOperationException(); + } + @Override public RPatternTopic getPatternTopic(String s) { throw new UnsupportedOperationException(); @@ -456,6 +507,21 @@ public RBloomFilter getBloomFilter(String s, Codec codec) { throw new UnsupportedOperationException(); } + @Override + public RIdGenerator getIdGenerator(String s) { + throw new UnsupportedOperationException(); + } + + @Override + public RFunction getFunction() { + throw new UnsupportedOperationException(); + } + + @Override + public RFunction getFunction(Codec codec) { + throw new UnsupportedOperationException(); + } + @Override public RScript getScript() { throw new UnsupportedOperationException(); @@ -526,6 +592,16 @@ public RLiveObjectService getLiveObjectService() { throw new UnsupportedOperationException(); } + @Override + public RedissonRxClient rxJava() { + throw new UnsupportedOperationException(); + } + + @Override + public RedissonReactiveClient reactive() { + throw new UnsupportedOperationException(); + } + @Override public void shutdown() { diff --git a/src/test/java/org/cbioportal/persistence/util/fakeclient/MockRBucket.java b/src/test/java/org/cbioportal/persistence/util/fakeclient/MockRBucket.java index e721381fdca..642509fd28a 100644 --- a/src/test/java/org/cbioportal/persistence/util/fakeclient/MockRBucket.java +++ b/src/test/java/org/cbioportal/persistence/util/fakeclient/MockRBucket.java @@ -5,6 +5,8 @@ import org.redisson.api.RFuture; import org.redisson.client.codec.Codec; +import java.time.Duration; +import java.time.Instant; import java.util.Date; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; @@ -40,6 +42,11 @@ public void set(Object o, long l, TimeUnit timeUnit) { } } + @Override + public void setAndKeepTTL(Object o) { + + } + @Override public RFuture setAsync(Object o) { set(o); @@ -52,6 +59,11 @@ public RFuture setAsync(Object o, long l, TimeUnit timeUnit) { return null; } + @Override + public RFuture setAndKeepTTLAsync(Object o) { + return null; + } + @Override public RFuture expireAsync(long l, TimeUnit timeUnit) { // This cache is really primitive, so ttl isn't fully implemented @@ -86,6 +98,16 @@ public boolean trySet(Object o, long l, TimeUnit timeUnit) { throw new UnsupportedOperationException(); } + @Override + public boolean setIfAbsent(Object o) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean setIfAbsent(Object o, Duration duration) { + throw new UnsupportedOperationException(); + } + @Override public boolean setIfExists(Object o) { throw new UnsupportedOperationException(); @@ -111,6 +133,26 @@ public Object getAndSet(Object o, long l, TimeUnit timeUnit) { throw new UnsupportedOperationException(); } + @Override + public Object getAndExpire(Duration duration) { + throw new UnsupportedOperationException(); + } + + @Override + public Object getAndExpire(Instant instant) { + throw new UnsupportedOperationException(); + } + + @Override + public Object getAndClearExpire() { + throw new UnsupportedOperationException(); + } + + @Override + public Long getIdleTime() { + throw new UnsupportedOperationException(); + } + @Override public long sizeInMemory() { throw new UnsupportedOperationException(); @@ -231,6 +273,16 @@ public RFuture trySetAsync(Object o, long l, TimeUnit timeUnit) { throw new UnsupportedOperationException(); } + @Override + public RFuture setIfAbsentAsync(Object o) { + throw new UnsupportedOperationException(); + } + + @Override + public RFuture setIfAbsentAsync(Object o, Duration duration) { + throw new UnsupportedOperationException(); + } + @Override public RFuture setIfExistsAsync(Object o) { throw new UnsupportedOperationException(); @@ -256,6 +308,21 @@ public RFuture getAndSetAsync(Object o, long l, TimeUnit timeUnit) { throw new UnsupportedOperationException(); } + @Override + public RFuture getAndExpireAsync(Duration duration) { + throw new UnsupportedOperationException(); + } + + @Override + public RFuture getAndExpireAsync(Instant instant) { + throw new UnsupportedOperationException(); + } + + @Override + public RFuture getAndClearExpireAsync() { + throw new UnsupportedOperationException(); + } + @Override public boolean expire(long l, TimeUnit timeUnit) { throw new UnsupportedOperationException(); @@ -271,6 +338,56 @@ public boolean expireAt(Date date) { throw new UnsupportedOperationException(); } + @Override + public boolean expire(Instant instant) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean expireIfSet(Instant instant) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean expireIfNotSet(Instant instant) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean expireIfGreater(Instant instant) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean expireIfLess(Instant instant) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean expire(Duration duration) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean expireIfSet(Duration duration) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean expireIfNotSet(Duration duration) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean expireIfGreater(Duration duration) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean expireIfLess(Duration duration) { + throw new UnsupportedOperationException(); + } + @Override public boolean clearExpire() { throw new UnsupportedOperationException(); @@ -281,6 +398,11 @@ public long remainTimeToLive() { throw new UnsupportedOperationException(); } + @Override + public long getExpireTime() { + throw new UnsupportedOperationException(); + } + @Override public RFuture expireAtAsync(Date date) { throw new UnsupportedOperationException(); @@ -291,6 +413,56 @@ public RFuture expireAtAsync(long l) { throw new UnsupportedOperationException(); } + @Override + public RFuture expireAsync(Instant instant) { + throw new UnsupportedOperationException(); + } + + @Override + public RFuture expireIfSetAsync(Instant instant) { + throw new UnsupportedOperationException(); + } + + @Override + public RFuture expireIfNotSetAsync(Instant instant) { + throw new UnsupportedOperationException(); + } + + @Override + public RFuture expireIfGreaterAsync(Instant instant) { + throw new UnsupportedOperationException(); + } + + @Override + public RFuture expireIfLessAsync(Instant instant) { + throw new UnsupportedOperationException(); + } + + @Override + public RFuture expireAsync(Duration duration) { + throw new UnsupportedOperationException(); + } + + @Override + public RFuture expireIfSetAsync(Duration duration) { + throw new UnsupportedOperationException(); + } + + @Override + public RFuture expireIfNotSetAsync(Duration duration) { + throw new UnsupportedOperationException(); + } + + @Override + public RFuture expireIfGreaterAsync(Duration duration) { + throw new UnsupportedOperationException(); + } + + @Override + public RFuture expireIfLessAsync(Duration duration) { + throw new UnsupportedOperationException(); + } + @Override public RFuture clearExpireAsync() { throw new UnsupportedOperationException(); @@ -301,6 +473,16 @@ public RFuture remainTimeToLiveAsync() { throw new UnsupportedOperationException(); } + @Override + public RFuture getExpireTimeAsync() { + throw new UnsupportedOperationException(); + } + + @Override + public RFuture getIdleTimeAsync() { + throw new UnsupportedOperationException(); + } + @Override public RFuture sizeInMemoryAsync() { throw new UnsupportedOperationException(); diff --git a/src/test/java/org/cbioportal/persistence/util/fakeclient/MockRKeys.java b/src/test/java/org/cbioportal/persistence/util/fakeclient/MockRKeys.java index 81b219e49fa..3866c31ddca 100644 --- a/src/test/java/org/cbioportal/persistence/util/fakeclient/MockRKeys.java +++ b/src/test/java/org/cbioportal/persistence/util/fakeclient/MockRKeys.java @@ -32,6 +32,16 @@ public long deleteByPattern(String s) { .count(); } + @Override + public Iterable getKeysWithLimit(int i) { + throw new UnsupportedOperationException(); + } + + @Override + public Iterable getKeysWithLimit(String s, int i) { + throw new UnsupportedOperationException(); + } + /* * Methods we don't use */ diff --git a/src/test/java/org/cbioportal/service/impl/ExpressionEnrichmentServiceImplTest.java b/src/test/java/org/cbioportal/service/impl/ExpressionEnrichmentServiceImplTest.java index 280cd706adf..0b612d5f9ea 100644 --- a/src/test/java/org/cbioportal/service/impl/ExpressionEnrichmentServiceImplTest.java +++ b/src/test/java/org/cbioportal/service/impl/ExpressionEnrichmentServiceImplTest.java @@ -18,7 +18,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) @@ -34,8 +33,7 @@ public class ExpressionEnrichmentServiceImplTest extends BaseServiceImplTest { private MolecularDataRepository molecularDataRepository; @Mock private GeneService geneService; - @Spy - @InjectMocks + @Mock private ExpressionEnrichmentUtil expressionEnrichmentUtil; @Mock private GenericAssayService genericAssayService; @@ -125,13 +123,7 @@ public void setup() throws MolecularProfileNotFoundException { molecularProfilePatientLevelCaseSets.put("unaltered samples", unalteredPatientLevelSampleIdentifieres); Mockito.when(molecularProfileService.getMolecularProfile(MOLECULAR_PROFILE_ID)) - .thenReturn(geneMolecularProfile); - - Mockito.when(molecularDataRepository.getCommaSeparatedSampleIdsOfMolecularProfile(MOLECULAR_PROFILE_ID)) - .thenReturn(molecularProfileSamples); - - Mockito.when(sampleService.fetchSamples(Arrays.asList(STUDY_ID, STUDY_ID, STUDY_ID, STUDY_ID), - Arrays.asList(SAMPLE_ID3, SAMPLE_ID4, SAMPLE_ID1, SAMPLE_ID2), "ID")).thenReturn(samples); + .thenReturn(geneMolecularProfile); } @Test @@ -149,7 +141,40 @@ public void getGenomicEnrichments() throws Exception { geneMolecularAlteration2.setValues("1.1,5,2.3,3"); molecularDataList.add(geneMolecularAlteration2); Mockito.when(molecularDataRepository.getGeneMolecularAlterationsIterableFast(MOLECULAR_PROFILE_ID)) - .thenReturn(molecularDataList); + .thenReturn(molecularDataList); + + List expectedEnrichments = new ArrayList<>(); + GenomicEnrichment enrichment1 = new GenomicEnrichment(); + enrichment1.setEntrezGeneId(ENTREZ_GENE_ID_2); + enrichment1.setHugoGeneSymbol(HUGO_GENE_SYMBOL_2); + GroupStatistics unalteredGroupStats1 = new GroupStatistics(); + unalteredGroupStats1.setName("unaltered samples"); + unalteredGroupStats1.setMeanExpression(new BigDecimal("2.55")); + unalteredGroupStats1.setStandardDeviation(new BigDecimal("0.6363961030678927")); + GroupStatistics alteredGroupStats1 = new GroupStatistics(); + alteredGroupStats1.setName("altered samples"); + alteredGroupStats1.setMeanExpression(new BigDecimal("2.5")); + alteredGroupStats1.setStandardDeviation(new BigDecimal("0.7071067811865476")); + enrichment1.setGroupsStatistics(List.of(unalteredGroupStats1, alteredGroupStats1)); + enrichment1.setpValue(new BigDecimal("0.9475795430163914")); + expectedEnrichments.add(enrichment1); + + GenomicEnrichment enrichment2 = new GenomicEnrichment(); + enrichment2.setEntrezGeneId(ENTREZ_GENE_ID_3); + enrichment2.setHugoGeneSymbol(HUGO_GENE_SYMBOL_3); + GroupStatistics unalteredGroupStats2 = new GroupStatistics(); + unalteredGroupStats2.setName("unaltered samples"); + unalteredGroupStats2.setMeanExpression(new BigDecimal("2.65")); + unalteredGroupStats2.setStandardDeviation(new BigDecimal("0.4949747468305834")); + GroupStatistics alteredGroupStats2 = new GroupStatistics(); + alteredGroupStats2.setName("altered samples"); + alteredGroupStats2.setMeanExpression(new BigDecimal("3.05")); + alteredGroupStats2.setStandardDeviation(new BigDecimal("2.7577164466275352")); + enrichment2.setGroupsStatistics(List.of(unalteredGroupStats2, alteredGroupStats2)); + enrichment2.setpValue(new BigDecimal("0.8716148250471419")); + expectedEnrichments.add(enrichment2); + Mockito.when(expressionEnrichmentUtil.getEnrichments(geneMolecularProfile, molecularProfileCaseSets, EnrichmentType.SAMPLE, molecularDataList)) + .thenReturn(expectedEnrichments); List expectedGeneList = new ArrayList<>(); Gene gene1 = new Gene(); @@ -162,10 +187,10 @@ public void getGenomicEnrichments() throws Exception { expectedGeneList.add(gene2); Mockito.when(geneService.fetchGenes(Arrays.asList("2", "3"), "ENTREZ_GENE_ID", "SUMMARY")) - .thenReturn(expectedGeneList); + .thenReturn(expectedGeneList); List result = enrichmentServiceImpl.getGenomicEnrichments(MOLECULAR_PROFILE_ID, - molecularProfileCaseSets, EnrichmentType.SAMPLE); + molecularProfileCaseSets, EnrichmentType.SAMPLE); Assert.assertEquals(2, result.size()); GenomicEnrichment expressionEnrichment = result.get(0); @@ -221,16 +246,47 @@ public void getGenericAssayNumericalEnrichments() throws Exception { genericAssayMolecularAlteration2.setValues("1.1,5,2.3,3"); molecularDataList.add(genericAssayMolecularAlteration2); Mockito.when(molecularDataRepository.getGenericAssayMolecularAlterationsIterable(MOLECULAR_PROFILE_ID, null, - "SUMMARY")).thenReturn(molecularDataList); + "SUMMARY")).thenReturn(molecularDataList); + + List expectedEnrichments = new ArrayList<>(); + GenericAssayEnrichment enrichment1 = new GenericAssayEnrichment(); + enrichment1.setStableId(HUGO_GENE_SYMBOL_1); + GroupStatistics unalteredGroupStats1 = new GroupStatistics(); + unalteredGroupStats1.setName("unaltered samples"); + unalteredGroupStats1.setMeanExpression(new BigDecimal("2.55")); + unalteredGroupStats1.setStandardDeviation(new BigDecimal("0.6363961030678927")); + GroupStatistics alteredGroupStats1 = new GroupStatistics(); + alteredGroupStats1.setName("altered samples"); + alteredGroupStats1.setMeanExpression(new BigDecimal("2.5")); + alteredGroupStats1.setStandardDeviation(new BigDecimal("0.7071067811865476")); + enrichment1.setGroupsStatistics(List.of(unalteredGroupStats1, alteredGroupStats1)); + enrichment1.setpValue(new BigDecimal("0.9475795430163914")); + expectedEnrichments.add(enrichment1); + + GenericAssayEnrichment enrichment2 = new GenericAssayEnrichment(); + enrichment2.setStableId(HUGO_GENE_SYMBOL_2); + GroupStatistics unalteredGroupStats2 = new GroupStatistics(); + unalteredGroupStats2.setName("unaltered samples"); + unalteredGroupStats2.setMeanExpression(new BigDecimal("2.65")); + unalteredGroupStats2.setStandardDeviation(new BigDecimal("0.4949747468305834")); + GroupStatistics alteredGroupStats2 = new GroupStatistics(); + alteredGroupStats2.setName("altered samples"); + alteredGroupStats2.setMeanExpression(new BigDecimal("3.05")); + alteredGroupStats2.setStandardDeviation(new BigDecimal("2.7577164466275352")); + enrichment2.setGroupsStatistics(List.of(unalteredGroupStats2, alteredGroupStats2)); + enrichment2.setpValue(new BigDecimal("0.8716148250471419")); + expectedEnrichments.add(enrichment2); + Mockito.when(expressionEnrichmentUtil.getEnrichments(geneMolecularProfile, molecularProfileCaseSets, EnrichmentType.SAMPLE, molecularDataList)) + .thenReturn(expectedEnrichments); Mockito.when(genericAssayService.getGenericAssayMetaByStableIdsAndMolecularIds( Arrays.asList(HUGO_GENE_SYMBOL_1, HUGO_GENE_SYMBOL_2), Arrays.asList(MOLECULAR_PROFILE_ID, MOLECULAR_PROFILE_ID), "SUMMARY")) - .thenReturn(Arrays.asList(new GenericAssayMeta(HUGO_GENE_SYMBOL_1), - new GenericAssayMeta(HUGO_GENE_SYMBOL_2))); + .thenReturn(Arrays.asList(new GenericAssayMeta(HUGO_GENE_SYMBOL_1), + new GenericAssayMeta(HUGO_GENE_SYMBOL_2))); List result = enrichmentServiceImpl.getGenericAssayNumericalEnrichments(MOLECULAR_PROFILE_ID, - molecularProfileCaseSets, EnrichmentType.SAMPLE); + molecularProfileCaseSets, EnrichmentType.SAMPLE); Assert.assertEquals(2, result.size()); GenericAssayEnrichment genericAssayEnrichment = result.get(0); @@ -283,13 +339,44 @@ public void getGenericAssayPatientLevelEnrichments() throws Exception { genericAssayMolecularAlteration2.setValues("1.1,5,2.3,3,3"); molecularDataList.add(genericAssayMolecularAlteration2); Mockito.when(molecularDataRepository.getGenericAssayMolecularAlterationsIterable(MOLECULAR_PROFILE_ID, null, - "SUMMARY")).thenReturn(molecularDataList); + "SUMMARY")).thenReturn(molecularDataList); + + List expectedEnrichments = new ArrayList<>(); + GenericAssayEnrichment enrichment1 = new GenericAssayEnrichment(); + enrichment1.setStableId(HUGO_GENE_SYMBOL_1); + GroupStatistics unalteredGroupStats1 = new GroupStatistics(); + unalteredGroupStats1.setName("unaltered samples"); + unalteredGroupStats1.setMeanExpression(new BigDecimal("2.55")); + unalteredGroupStats1.setStandardDeviation(new BigDecimal("0.6363961030678927")); + GroupStatistics alteredGroupStats1 = new GroupStatistics(); + alteredGroupStats1.setName("altered samples"); + alteredGroupStats1.setMeanExpression(new BigDecimal("2.5")); + alteredGroupStats1.setStandardDeviation(new BigDecimal("0.7071067811865476")); + enrichment1.setGroupsStatistics(List.of(unalteredGroupStats1, alteredGroupStats1)); + enrichment1.setpValue(new BigDecimal("0.9475795430163914")); + expectedEnrichments.add(enrichment1); + + GenericAssayEnrichment enrichment2 = new GenericAssayEnrichment(); + enrichment2.setStableId(HUGO_GENE_SYMBOL_2); + GroupStatistics unalteredGroupStats2 = new GroupStatistics(); + unalteredGroupStats2.setName("unaltered samples"); + unalteredGroupStats2.setMeanExpression(new BigDecimal("2.65")); + unalteredGroupStats2.setStandardDeviation(new BigDecimal("0.4949747468305834")); + GroupStatistics alteredGroupStats2 = new GroupStatistics(); + alteredGroupStats2.setName("altered samples"); + alteredGroupStats2.setMeanExpression(new BigDecimal("3.05")); + alteredGroupStats2.setStandardDeviation(new BigDecimal("2.7577164466275352")); + enrichment2.setGroupsStatistics(List.of(unalteredGroupStats2, alteredGroupStats2)); + enrichment2.setpValue(new BigDecimal("0.8716148250471419")); + expectedEnrichments.add(enrichment2); + Mockito.when(expressionEnrichmentUtil.getEnrichments(geneMolecularProfile, molecularProfileCaseSets, EnrichmentType.SAMPLE, molecularDataList)) + .thenReturn(expectedEnrichments); Mockito.when(genericAssayService.getGenericAssayMetaByStableIdsAndMolecularIds( Arrays.asList(HUGO_GENE_SYMBOL_1, HUGO_GENE_SYMBOL_2), Arrays.asList(MOLECULAR_PROFILE_ID, MOLECULAR_PROFILE_ID), "SUMMARY")) - .thenReturn(Arrays.asList(new GenericAssayMeta(HUGO_GENE_SYMBOL_1), - new GenericAssayMeta(HUGO_GENE_SYMBOL_2))); + .thenReturn(Arrays.asList(new GenericAssayMeta(HUGO_GENE_SYMBOL_1), + new GenericAssayMeta(HUGO_GENE_SYMBOL_2))); // add 5th sample which is the second sample of patient 4 Sample sample5 = new Sample(); @@ -337,4 +424,4 @@ public void getGenericAssayPatientLevelEnrichments() throws Exception { Assert.assertEquals(new BigDecimal("0.8716148250471419"), genericAssayEnrichment.getpValue()); } -} +} \ No newline at end of file diff --git a/src/test/java/org/cbioportal/service/impl/GenericAssayEnrichmentServiceImplTest.java b/src/test/java/org/cbioportal/service/impl/GenericAssayEnrichmentServiceImplTest.java index 017a5ab005f..ea9e489e13a 100644 --- a/src/test/java/org/cbioportal/service/impl/GenericAssayEnrichmentServiceImplTest.java +++ b/src/test/java/org/cbioportal/service/impl/GenericAssayEnrichmentServiceImplTest.java @@ -1,5 +1,6 @@ package org.cbioportal.service.impl; +import org.cbioportal.model.ExpressionEnrichment; import org.cbioportal.model.meta.GenericAssayMeta; import org.cbioportal.model.EnrichmentType; import org.cbioportal.model.MolecularProfileCaseIdentifier; @@ -26,7 +27,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner; import java.math.BigDecimal; @@ -51,8 +51,7 @@ public class GenericAssayEnrichmentServiceImplTest extends BaseServiceImplTest{ @Mock private GenericAssayService genericAssayService; - @Spy - @InjectMocks + @Mock private ExpressionEnrichmentUtil expressionEnrichmentUtil; CancerStudy cancerStudy = new CancerStudy(); @@ -142,14 +141,8 @@ public void setup() throws MolecularProfileNotFoundException { Mockito.when(molecularProfileService.getMolecularProfile(MOLECULAR_PROFILE_ID)) .thenReturn(geneMolecularProfile); - - Mockito.when(molecularDataRepository.getCommaSeparatedSampleIdsOfMolecularProfile(MOLECULAR_PROFILE_ID)) - .thenReturn(molecularProfileSamples); - - Mockito.when(sampleService.fetchSamples(Arrays.asList(STUDY_ID, STUDY_ID, STUDY_ID, STUDY_ID), - Arrays.asList(SAMPLE_ID3, SAMPLE_ID4, SAMPLE_ID1, SAMPLE_ID2), "ID")).thenReturn(samples); } - + @Test public void getGenericAssayBinaryEnrichments() throws Exception { geneMolecularProfile.setMolecularAlterationType(MolecularProfile.MolecularAlterationType.GENERIC_ASSAY); @@ -169,6 +162,40 @@ public void getGenericAssayBinaryEnrichments() throws Exception { Mockito.when(molecularDataRepository.getGenericAssayMolecularAlterationsIterable(MOLECULAR_PROFILE_ID, null, "SUMMARY")).thenReturn(molecularDataList); + List expectedEnrichments = new ArrayList<>(); + GenericAssayBinaryEnrichment enrichment1 = new GenericAssayBinaryEnrichment(); + enrichment1.setStableId(HUGO_GENE_SYMBOL_1); + GroupStatistics unalteredGroupStats1 = new GroupStatistics(); + unalteredGroupStats1.setName("unaltered samples"); + unalteredGroupStats1.setMeanExpression(new BigDecimal("0.5")); + unalteredGroupStats1.setStandardDeviation(new BigDecimal("0.7071067811865476")); + GroupStatistics alteredGroupStats1 = new GroupStatistics(); + alteredGroupStats1.setName("altered samples"); + alteredGroupStats1.setMeanExpression(new BigDecimal("1.0")); + alteredGroupStats1.setStandardDeviation(new BigDecimal("0.0")); + enrichment1.setGroupsStatistics(List.of(unalteredGroupStats1, alteredGroupStats1)); + enrichment1.setpValue(new BigDecimal("0.49999999999999983")); + enrichment1.setqValue(new BigDecimal("0.99999999999999966")); + expectedEnrichments.add(enrichment1); + + GenericAssayBinaryEnrichment enrichment2 = new GenericAssayBinaryEnrichment(); + enrichment2.setStableId(HUGO_GENE_SYMBOL_2); + GroupStatistics unalteredGroupStats2 = new GroupStatistics(); + unalteredGroupStats2.setName("unaltered samples"); + unalteredGroupStats2.setMeanExpression(new BigDecimal("0.5")); + unalteredGroupStats2.setStandardDeviation(new BigDecimal("0.7071067811865476")); + GroupStatistics alteredGroupStats2 = new GroupStatistics(); + alteredGroupStats2.setName("altered samples"); + alteredGroupStats2.setMeanExpression(new BigDecimal("0.5")); + alteredGroupStats2.setStandardDeviation(new BigDecimal("0.7071067811865476")); + enrichment2.setGroupsStatistics(List.of(unalteredGroupStats2, alteredGroupStats2)); + enrichment2.setpValue(new BigDecimal("1.0")); + enrichment2.setqValue(new BigDecimal("1.0")); + expectedEnrichments.add(enrichment2); + + Mockito.when(expressionEnrichmentUtil.getGenericAssayBinaryEnrichments(geneMolecularProfile, molecularProfileCaseSets, EnrichmentType.SAMPLE, molecularDataList)) + .thenReturn(expectedEnrichments); + Mockito.when(genericAssayService.getGenericAssayMetaByStableIdsAndMolecularIds( Arrays.asList(HUGO_GENE_SYMBOL_1, HUGO_GENE_SYMBOL_2), Arrays.asList(MOLECULAR_PROFILE_ID, MOLECULAR_PROFILE_ID), "SUMMARY")) @@ -232,6 +259,32 @@ public void getGenericAssayCategoricalEnrichments() throws MolecularProfileNotFo Mockito.when(molecularDataRepository.getGenericAssayMolecularAlterationsIterable(MOLECULAR_PROFILE_ID, null, "SUMMARY")).thenReturn(molecularDataList); + List expectedEnrichments = new ArrayList<>(); + GenericAssayCategoricalEnrichment enrichment1 = new GenericAssayCategoricalEnrichment(); + enrichment1.setStableId(HUGO_GENE_SYMBOL_1); + GroupStatistics unalteredGroupStats1 = new GroupStatistics(); + unalteredGroupStats1.setName("unaltered samples"); + GroupStatistics alteredGroupStats1 = new GroupStatistics(); + alteredGroupStats1.setName("altered samples"); + enrichment1.setGroupsStatistics(List.of(unalteredGroupStats1, alteredGroupStats1)); + enrichment1.setpValue(new BigDecimal("0.04550026389635764")); + enrichment1.setqValue(new BigDecimal("0.04550026389635764")); + expectedEnrichments.add(enrichment1); + + GenericAssayCategoricalEnrichment enrichment2 = new GenericAssayCategoricalEnrichment(); + enrichment2.setStableId(HUGO_GENE_SYMBOL_2); + GroupStatistics unalteredGroupStats2 = new GroupStatistics(); + unalteredGroupStats2.setName("unaltered samples"); + GroupStatistics alteredGroupStats2 = new GroupStatistics(); + alteredGroupStats2.setName("altered samples"); + enrichment2.setGroupsStatistics(List.of(unalteredGroupStats2, alteredGroupStats2)); + enrichment2.setpValue(new BigDecimal("0.04550026389635764")); + enrichment2.setqValue(new BigDecimal("0.04550026389635764")); + expectedEnrichments.add(enrichment2); + + Mockito.when(expressionEnrichmentUtil.getGenericAssayCategoricalEnrichments(geneMolecularProfile, molecularProfileCaseSets, EnrichmentType.SAMPLE, molecularDataList)) + .thenReturn(expectedEnrichments); + Mockito.when(genericAssayService.getGenericAssayMetaByStableIdsAndMolecularIds( Arrays.asList(HUGO_GENE_SYMBOL_1, HUGO_GENE_SYMBOL_2), Arrays.asList(MOLECULAR_PROFILE_ID, MOLECULAR_PROFILE_ID), "SUMMARY")) @@ -269,4 +322,4 @@ public void getGenericAssayCategoricalEnrichments() throws MolecularProfileNotFo Assert.assertEquals(new BigDecimal("0.04550026389635764"), genericAssayCategoricalEnrichment.getqValue()); } -} +} \ No newline at end of file