Skip to content

Commit

Permalink
WIP 6
Browse files Browse the repository at this point in the history
  • Loading branch information
pvannierop committed Sep 13, 2023
1 parent 5067e88 commit 179fb9f
Show file tree
Hide file tree
Showing 6 changed files with 155 additions and 104 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@

public class SampleClinicalDataCollection {

private Map<String, List<ClinicalData>> sampleClinicalData = new HashMap<>();
private Map<String, List<ClinicalData>> byUniqueSampleKey = new HashMap<>();

public Map<String, List<ClinicalData>> getSampleClinicalData() {
return sampleClinicalData;
public Map<String, List<ClinicalData>> getByUniqueSampleKey() {
return byUniqueSampleKey;
}

public void setSampleClinicalData(Map<String, List<ClinicalData>> sampleClinicalData) {
this.sampleClinicalData = sampleClinicalData;
public void setByUniqueSampleKey(Map<String, List<ClinicalData>> byUniqueSampleKey) {
this.byUniqueSampleKey = byUniqueSampleKey;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,4 @@ List<ClinicalData> getPatientClinicalDataDetailedToSample(List<String> studyIds,
SampleClinicalDataCollection fetchSampleClinicalTable(List<String> studyIds, List<String> sampleIds, Integer pageSize,
Integer pageNumber, String searchTerm, String sortBy, String direction);

List<ClinicalData> getSampleAndPatientClinicalDataBySampleInternalIds(List<Integer> sampleInternalIds);

List<Integer> getVisibleSampleInternalIdsForClinicalTable(List<String> sampleStudyIds, List<String> sampleIds,
Integer pageSize, Integer pageNumber, String searchTerm,
String sortBy, String direction);
}
Original file line number Diff line number Diff line change
Expand Up @@ -231,32 +231,26 @@ public List<ClinicalData> getPatientClinicalDataDetailedToSample(List<String> st
@Override
public SampleClinicalDataCollection fetchSampleClinicalTable(List<String> studyIds, List<String> sampleIds, Integer pageSize, Integer pageNumber, String searchTerm, String sortBy, String direction) {

if (sampleIds.isEmpty()) {
return new SampleClinicalDataCollection();
SampleClinicalDataCollection sampleClinicalDataCollection = new SampleClinicalDataCollection();
if (studyIds == null || studyIds.isEmpty() || sampleIds == null || sampleIds.isEmpty()) {
return sampleClinicalDataCollection;
}

List<Integer> visibleSampleInternalIds = this.getVisibleSampleInternalIdsForClinicalTable(
studyIds,
sampleIds,
pageSize,
pageNumber,
searchTerm,
sortBy,
direction
List<Integer> visibleSampleInternalIds = clinicalDataRepository.getVisibleSampleInternalIdsForClinicalTable(
studyIds, sampleIds,
pageSize, pageNumber,
searchTerm, sortBy, direction
);

List<ClinicalData> clinicalData = this.getSampleAndPatientClinicalDataBySampleInternalIds(visibleSampleInternalIds);
List<ClinicalData> clinicalData = clinicalDataRepository.getSampleAndPatientClinicalDataBySampleInternalIds(
visibleSampleInternalIds
);

SampleClinicalDataCollection clinicalDataByUniqueSampleKey = clinicalData.stream().collect(Collectors.groupingBy(clinicalDatum ->
sampleClinicalDataCollection.setByUniqueSampleKey(clinicalData.stream().collect(Collectors.groupingBy(clinicalDatum ->
calculateBase64(clinicalDatum.getSampleId(), clinicalDatum.getStudyId())
));

Map<String, Map<String, String>> sampleAggregatedClinicalData = clinicalDataByUniqueSampleKey.entrySet().stream().collect(Collectors.toMap(
entry -> entry.getKey(),
entry -> aggregateSampleClinicalData(entry.getValue())
));
)));

return sampleAggregatedClinicalData;
return sampleClinicalDataCollection;
}

/*
Expand All @@ -278,17 +272,4 @@ private Map<String, String> aggregateSampleClinicalData(List<ClinicalData> clini
return returnData;
}

@Override
public List<Integer> getVisibleSampleInternalIdsForClinicalTable(List<String> studyIds, List<String> sampleIds,
Integer pageSize, Integer pageNumber, String searchTerm,
String sortBy, String direction) {
return clinicalDataRepository.getVisibleSampleInternalIdsForClinicalTable(studyIds, sampleIds, pageSize,
pageNumber, searchTerm, sortBy, direction);
}

@Override
public List<ClinicalData> getSampleAndPatientClinicalDataBySampleInternalIds(List<Integer> sampleInternalIds) {
return clinicalDataRepository.getSampleAndPatientClinicalDataBySampleInternalIds(sampleInternalIds);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
import org.cbioportal.service.*;
import org.cbioportal.service.exception.*;
import org.cbioportal.service.util.ClinicalAttributeUtil;
import org.cbioportal.utils.Encoding;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
Expand All @@ -17,6 +19,9 @@

import java.util.*;

import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)
public class ClinicalDataServiceImplTest extends BaseServiceImplTest {

Expand All @@ -35,6 +40,34 @@ public class ClinicalDataServiceImplTest extends BaseServiceImplTest {
private ClinicalAttributeService clinicalAttributeService;
@Spy
private ClinicalAttributeUtil clinicalAttributeUtil = new ClinicalAttributeUtil();

ClinicalData datum1 = new ClinicalData();
ClinicalData datum2 = new ClinicalData();
String uniqueKeySample1;
String uniqueKeySample2;
List<String> sampleStudyIds = Arrays.asList(STUDY_ID, STUDY_ID, STUDY_ID);
List<String> sampleIds = Arrays.asList(SAMPLE_ID1, SAMPLE_ID2, SAMPLE_ID3);

Integer pageSize = 100;
Integer pageNumber = 0;
String searchTerm = "mySearch";
String sortBy = "column name";
String direction = "ASC";
List<Integer> sampleInternalIds = Arrays.asList(0, 1);

@Before
public void init() {

datum1.setSampleId("SampleA");
List<String> sampleIds;
datum1.setStudyId("Study1");
uniqueKeySample1 = Encoding.calculateBase64("SampleA", "Study1");

datum2.setSampleId("SampleA");
datum2.setStudyId("Study2");
uniqueKeySample2 = Encoding.calculateBase64("SampleA", "Study2");

}

@Test
public void getAllClinicalDataOfSampleInStudy() throws Exception {
Expand All @@ -43,7 +76,7 @@ public void getAllClinicalDataOfSampleInStudy() throws Exception {
ClinicalData sampleClinicalData = new ClinicalData();
expectedSampleClinicalDataList.add(sampleClinicalData);

Mockito.when(clinicalDataRepository.getAllClinicalDataOfSampleInStudy(STUDY_ID, SAMPLE_ID1,
when(clinicalDataRepository.getAllClinicalDataOfSampleInStudy(STUDY_ID, SAMPLE_ID1,
CLINICAL_ATTRIBUTE_ID_1, PROJECTION, PAGE_SIZE, PAGE_NUMBER, SORT, DIRECTION))
.thenReturn(expectedSampleClinicalDataList);

Expand All @@ -56,7 +89,7 @@ public void getAllClinicalDataOfSampleInStudy() throws Exception {
@Test(expected = SampleNotFoundException.class)
public void getAllClinicalDataOfSampleInStudySampleNotFound() throws Exception {

Mockito.when(sampleService.getSampleInStudy(STUDY_ID, SAMPLE_ID1))
when(sampleService.getSampleInStudy(STUDY_ID, SAMPLE_ID1))
.thenThrow(new SampleNotFoundException(STUDY_ID, SAMPLE_ID1));
clinicalDataService.getAllClinicalDataOfSampleInStudy(STUDY_ID, SAMPLE_ID1, CLINICAL_ATTRIBUTE_ID_1, PROJECTION,
PAGE_SIZE, PAGE_NUMBER, SORT, DIRECTION);
Expand All @@ -67,7 +100,7 @@ public void getMetaSampleClinicalData() throws Exception {

BaseMeta expectedBaseMeta = new BaseMeta();

Mockito.when(clinicalDataRepository.getMetaSampleClinicalData(STUDY_ID, SAMPLE_ID1, CLINICAL_ATTRIBUTE_ID_1))
when(clinicalDataRepository.getMetaSampleClinicalData(STUDY_ID, SAMPLE_ID1, CLINICAL_ATTRIBUTE_ID_1))
.thenReturn(expectedBaseMeta);

BaseMeta result = clinicalDataService.getMetaSampleClinicalData(STUDY_ID, SAMPLE_ID1, CLINICAL_ATTRIBUTE_ID_1);
Expand All @@ -78,7 +111,7 @@ public void getMetaSampleClinicalData() throws Exception {
@Test(expected = SampleNotFoundException.class)
public void getMetaSampleClinicalDataSampleNotFound() throws Exception {

Mockito.when(sampleService.getSampleInStudy(STUDY_ID, SAMPLE_ID1))
when(sampleService.getSampleInStudy(STUDY_ID, SAMPLE_ID1))
.thenThrow(new SampleNotFoundException(STUDY_ID, SAMPLE_ID1));
clinicalDataService.getMetaSampleClinicalData(STUDY_ID, SAMPLE_ID1, CLINICAL_ATTRIBUTE_ID_1);
}
Expand All @@ -90,7 +123,7 @@ public void getAllClinicalDataOfPatientInStudy() throws Exception {
ClinicalData patientClinicalData = new ClinicalData();
expectedPatientClinicalDataList.add(patientClinicalData);

Mockito.when(clinicalDataRepository.getAllClinicalDataOfPatientInStudy(STUDY_ID, PATIENT_ID_1,
when(clinicalDataRepository.getAllClinicalDataOfPatientInStudy(STUDY_ID, PATIENT_ID_1,
CLINICAL_ATTRIBUTE_ID_1, PROJECTION, PAGE_SIZE, PAGE_NUMBER, SORT, DIRECTION))
.thenReturn(expectedPatientClinicalDataList);

Expand All @@ -103,7 +136,7 @@ public void getAllClinicalDataOfPatientInStudy() throws Exception {
@Test(expected = PatientNotFoundException.class)
public void getAllClinicalDataOfPatientInStudyPatientNotFound() throws Exception {

Mockito.when(patientService.getPatientInStudy(STUDY_ID, PATIENT_ID_1))
when(patientService.getPatientInStudy(STUDY_ID, PATIENT_ID_1))
.thenThrow(new PatientNotFoundException(STUDY_ID, PATIENT_ID_1));
clinicalDataService.getAllClinicalDataOfPatientInStudy(STUDY_ID, PATIENT_ID_1, CLINICAL_ATTRIBUTE_ID_1,
PROJECTION, PAGE_SIZE, PAGE_NUMBER, SORT, DIRECTION);
Expand All @@ -114,7 +147,7 @@ public void getMetaPatientClinicalData() throws Exception {

BaseMeta expectedBaseMeta = new BaseMeta();

Mockito.when(clinicalDataRepository.getMetaPatientClinicalData(STUDY_ID, PATIENT_ID_1, CLINICAL_ATTRIBUTE_ID_1))
when(clinicalDataRepository.getMetaPatientClinicalData(STUDY_ID, PATIENT_ID_1, CLINICAL_ATTRIBUTE_ID_1))
.thenReturn(expectedBaseMeta);

BaseMeta result = clinicalDataService.getMetaPatientClinicalData(STUDY_ID, PATIENT_ID_1,
Expand All @@ -126,7 +159,7 @@ public void getMetaPatientClinicalData() throws Exception {
@Test(expected = PatientNotFoundException.class)
public void getMetaPatientClinicalDataPatientNotFound() throws Exception {

Mockito.when(patientService.getPatientInStudy(STUDY_ID, PATIENT_ID_1))
when(patientService.getPatientInStudy(STUDY_ID, PATIENT_ID_1))
.thenThrow(new PatientNotFoundException(STUDY_ID, PATIENT_ID_1));
clinicalDataService.getMetaPatientClinicalData(STUDY_ID, PATIENT_ID_1, CLINICAL_ATTRIBUTE_ID_1);
}
Expand All @@ -138,7 +171,7 @@ public void getAllClinicalDataInStudy() throws Exception {
ClinicalData sampleClinicalData = new ClinicalData();
expectedSampleClinicalDataList.add(sampleClinicalData);

Mockito.when(clinicalDataRepository.getAllClinicalDataInStudy(STUDY_ID, CLINICAL_ATTRIBUTE_ID_1,
when(clinicalDataRepository.getAllClinicalDataInStudy(STUDY_ID, CLINICAL_ATTRIBUTE_ID_1,
CLINICAL_DATA_TYPE, PROJECTION, PAGE_SIZE, PAGE_NUMBER, SORT, DIRECTION))
.thenReturn(expectedSampleClinicalDataList);

Expand All @@ -151,7 +184,7 @@ public void getAllClinicalDataInStudy() throws Exception {
@Test(expected = StudyNotFoundException.class)
public void getAllClinicalDataInStudyNotFound() throws Exception {

Mockito.when(studyService.getStudy(STUDY_ID)).thenThrow(new StudyNotFoundException(STUDY_ID));
when(studyService.getStudy(STUDY_ID)).thenThrow(new StudyNotFoundException(STUDY_ID));
clinicalDataService.getAllClinicalDataInStudy(STUDY_ID, CLINICAL_ATTRIBUTE_ID_1, CLINICAL_DATA_TYPE, PROJECTION,
PAGE_SIZE, PAGE_NUMBER, SORT, DIRECTION);
}
Expand All @@ -162,7 +195,7 @@ public void getMetaAllClinicalData() throws Exception {
BaseMeta expectedBaseMeta = new BaseMeta();
expectedBaseMeta.setTotalCount(5);

Mockito.when(
when(
clinicalDataRepository.getMetaAllClinicalData(STUDY_ID, CLINICAL_ATTRIBUTE_ID_1, CLINICAL_DATA_TYPE))
.thenReturn(expectedBaseMeta);

Expand All @@ -175,7 +208,7 @@ public void getMetaAllClinicalData() throws Exception {
@Test(expected = StudyNotFoundException.class)
public void getMetaAllClinicalDataStudyNotFound() throws Exception {

Mockito.when(studyService.getStudy(STUDY_ID)).thenThrow(new StudyNotFoundException(STUDY_ID));
when(studyService.getStudy(STUDY_ID)).thenThrow(new StudyNotFoundException(STUDY_ID));
clinicalDataService.getMetaAllClinicalData(STUDY_ID, CLINICAL_ATTRIBUTE_ID_1, CLINICAL_DATA_TYPE);
}

Expand All @@ -191,7 +224,7 @@ public void fetchClinicalDataPatientClinicalDataType() throws Exception {
ClinicalData patientClinicalData = new ClinicalData();
expectedPatientClinicalDataList.add(patientClinicalData);

Mockito.when(clinicalDataRepository.fetchClinicalData(studyIds, patientIds,
when(clinicalDataRepository.fetchClinicalData(studyIds, patientIds,
Arrays.asList(CLINICAL_ATTRIBUTE_ID_1), CLINICAL_DATA_TYPE, PROJECTION))
.thenReturn(expectedPatientClinicalDataList);

Expand All @@ -212,7 +245,7 @@ public void fetchMetaClinicalDataPatientClinicalDataType() throws Exception {
BaseMeta expectedBaseMeta = new BaseMeta();
expectedBaseMeta.setTotalCount(5);

Mockito.when(clinicalDataRepository.fetchMetaClinicalData(studyIds, patientIds,
when(clinicalDataRepository.fetchMetaClinicalData(studyIds, patientIds,
Arrays.asList(CLINICAL_ATTRIBUTE_ID_1), CLINICAL_DATA_TYPE)).thenReturn(expectedBaseMeta);

BaseMeta result = clinicalDataService.fetchMetaClinicalData(studyIds, patientIds,
Expand All @@ -238,7 +271,7 @@ public void fetchClinicalDataCounts() throws Exception {
clinicalAttribute4.setAttrId(CLINICAL_ATTRIBUTE_ID_1);
clinicalAttribute4.setPatientAttribute(false);

Mockito.when(clinicalAttributeService.getClinicalAttributesByStudyIdsAndAttributeIds(
when(clinicalAttributeService.getClinicalAttributesByStudyIdsAndAttributeIds(
Arrays.asList(STUDY_ID, STUDY_ID, STUDY_ID),
Arrays.asList(CLINICAL_ATTRIBUTE_ID_1, CLINICAL_ATTRIBUTE_ID_2, CLINICAL_ATTRIBUTE_ID_3)))
.thenReturn(
Expand All @@ -257,7 +290,7 @@ public void fetchClinicalDataCounts() throws Exception {
clinicalDataCount6.setValue("value1");
clinicalDataCount6.setCount(2);

Mockito.when(clinicalDataRepository.fetchClinicalDataCounts(Arrays.asList(STUDY_ID, STUDY_ID, STUDY_ID),
when(clinicalDataRepository.fetchClinicalDataCounts(Arrays.asList(STUDY_ID, STUDY_ID, STUDY_ID),
Arrays.asList(SAMPLE_ID1, SAMPLE_ID2, SAMPLE_ID3),
Arrays.asList(CLINICAL_ATTRIBUTE_ID_3, CLINICAL_ATTRIBUTE_ID_1), "SAMPLE", "SUMMARY"))
.thenReturn(Arrays.asList(clinicalDataCount2, clinicalDataCount5, clinicalDataCount6));
Expand All @@ -271,7 +304,7 @@ public void fetchClinicalDataCounts() throws Exception {
clinicalDataCount4.setValue("value3");
clinicalDataCount4.setCount(1);

Mockito.when(clinicalDataRepository.fetchClinicalDataCounts(Arrays.asList(STUDY_ID, STUDY_ID, STUDY_ID),
when(clinicalDataRepository.fetchClinicalDataCounts(Arrays.asList(STUDY_ID, STUDY_ID, STUDY_ID),
Arrays.asList(SAMPLE_ID1, SAMPLE_ID2, SAMPLE_ID3), Arrays.asList(CLINICAL_ATTRIBUTE_ID_2), "PATIENT",
"SUMMARY")).thenReturn(Arrays.asList(clinicalDataCount3, clinicalDataCount4));

Expand All @@ -280,7 +313,7 @@ public void fetchClinicalDataCounts() throws Exception {
clinicalDataCount1.setValue("value1");
clinicalDataCount1.setCount(2);

Mockito.when(clinicalDataRepository.fetchClinicalDataCounts(Arrays.asList(STUDY_ID, STUDY_ID, STUDY_ID),
when(clinicalDataRepository.fetchClinicalDataCounts(Arrays.asList(STUDY_ID, STUDY_ID, STUDY_ID),
Arrays.asList(SAMPLE_ID1, SAMPLE_ID2, SAMPLE_ID3), Arrays.asList(CLINICAL_ATTRIBUTE_ID_1), "PATIENT",
"DETAILED")).thenReturn(Arrays.asList(clinicalDataCount1));

Expand All @@ -298,7 +331,7 @@ public void fetchClinicalDataCounts() throws Exception {
patient3.setCancerStudyIdentifier(STUDY_ID);
patients.add(patient3);

Mockito.when(patientService.getPatientsOfSamples(Arrays.asList(STUDY_ID, STUDY_ID, STUDY_ID),
when(patientService.getPatientsOfSamples(Arrays.asList(STUDY_ID, STUDY_ID, STUDY_ID),
Arrays.asList(SAMPLE_ID1, SAMPLE_ID2, SAMPLE_ID3))).thenReturn(patients);

List<ClinicalDataCountItem> result = clinicalDataService.fetchClinicalDataCounts(
Expand Down Expand Up @@ -339,4 +372,47 @@ public void fetchClinicalDataCounts() throws Exception {
Assert.assertEquals((Integer) 4, count1.getCount());

}

@Test
public void fetchSampleClinicalTableHappyCase() {

when(clinicalDataRepository.getVisibleSampleInternalIdsForClinicalTable(
sampleStudyIds, sampleIds, pageSize, pageNumber, searchTerm, sortBy, direction
)).thenReturn(sampleInternalIds);

when(clinicalDataRepository.getSampleAndPatientClinicalDataBySampleInternalIds(sampleInternalIds)).thenReturn(
List.of(datum1, datum2)
);

SampleClinicalDataCollection collection = clinicalDataService.fetchSampleClinicalTable(
sampleStudyIds, sampleIds, pageSize, pageNumber, searchTerm, sortBy, direction
);

Assert.assertEquals(2, collection.getByUniqueSampleKey().size());
Assert.assertTrue(collection.getByUniqueSampleKey().containsKey(uniqueKeySample1));
Assert.assertTrue(collection.getByUniqueSampleKey().containsKey(uniqueKeySample2));
Assert.assertEquals(1, collection.getByUniqueSampleKey().get(uniqueKeySample1).size());
Assert.assertEquals(1, collection.getByUniqueSampleKey().get(uniqueKeySample2).size());
Assert.assertEquals("SampleA", collection.getByUniqueSampleKey().get(uniqueKeySample1).get(0).getSampleId());
Assert.assertEquals("Study1", collection.getByUniqueSampleKey().get(uniqueKeySample1).get(0).getStudyId());
Assert.assertEquals("SampleA", collection.getByUniqueSampleKey().get(uniqueKeySample2).get(0).getSampleId());
Assert.assertEquals("Study2", collection.getByUniqueSampleKey().get(uniqueKeySample2).get(0).getStudyId());
}

@Test
public void fetchSampleClinicalTableEmptyIdLists() {
Assert.assertEquals(0, clinicalDataService.fetchSampleClinicalTable(
null, sampleIds, pageSize, pageNumber, searchTerm, sortBy, direction
).getByUniqueSampleKey().size());
Assert.assertEquals(0, clinicalDataService.fetchSampleClinicalTable(
sampleStudyIds, null, pageSize, pageNumber, searchTerm, sortBy, direction
).getByUniqueSampleKey().size());
Assert.assertEquals(0, clinicalDataService.fetchSampleClinicalTable(
new ArrayList<>(), sampleIds, pageSize, pageNumber, searchTerm, sortBy, direction
).getByUniqueSampleKey().size());
Assert.assertEquals(0, clinicalDataService.fetchSampleClinicalTable(
sampleStudyIds, new ArrayList<>(), pageSize, pageNumber, searchTerm, sortBy, direction
).getByUniqueSampleKey().size());
}

}
Loading

0 comments on commit 179fb9f

Please sign in to comment.