package org.nextprot.api.tasks.solr.indexer.entry.diff;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import org.junit.Assert;
import org.junit.Test;
import org.nextprot.api.commons.service.MasterIdentifierService;
import org.nextprot.api.commons.utils.StringUtils;
import org.nextprot.api.core.domain.Entry;
import org.nextprot.api.core.service.EntryBuilderService;
import org.nextprot.api.core.service.TerminologyService;
import org.nextprot.api.solr.index.EntryIndex.Fields;
import org.nextprot.api.tasks.solr.indexer.entry.SolrDiffTest;
import org.nextprot.api.tasks.solr.indexer.entry.impl.AnnotationFieldBuilder;
import org.nextprot.api.tasks.solr.indexer.entry.impl.CVFieldBuilder;
import org.nextprot.api.tasks.solr.indexer.entry.impl.ExpressionFieldBuilder;
import org.nextprot.api.tasks.solr.indexer.entry.impl.InteractionFieldBuilder;
import org.springframework.beans.factory.annotation.Autowired;
public class AnnotationFieldBuilderGoldDiffTest extends SolrDiffTest {
@Autowired
private EntryBuilderService entryBuilderService = null;
@Autowired
private MasterIdentifierService masterIdentifierService = null;
@Autowired
TerminologyService terminologyService;
@Test
public void testGoldAnnotations() {
// Since the functional tests are already done in the various fieldbuilder diff tests we will only test
// the fields that have quality qualifiers (GOs, PTMs, variants and expression...
String[] test_list = {"NX_Q13158", "NX_Q06830","NX_Q7Z6P3","NX_E5RQL4","NX_Q14721","NX_Q7Z6P3",
"NX_Q7Z713", "NX_P22102", "NX_O00115", "NX_Q13286", "NX_Q9UNK4", "NX_Q9NWT6"};
for(int i=0; i < test_list.length; i++){
//for(int i=0; i < 120; i++){
Entry entry = getEntry(test_list[i]);
//Entry entry = getEntry(i); // 'random' entry
//Entry entry = getEntry("NX_P20592");
System.out.println(entry.getUniqueName());
testGoldAnnotations(entry);
}
}
@SuppressWarnings("unchecked")
public void testGoldAnnotations(Entry entry) {
String entryName = entry.getUniqueName();
// Variants
AnnotationFieldBuilder afb = new AnnotationFieldBuilder();
afb.setGold(true);
afb.setTerminologyService(terminologyService);
afb.initializeBuilder(entry);
Integer oldgoldvarcnt = 0, newgoldvarcnt = 0;
List<String> expectedRawValues = (List<String>) getValueForFieldInCurrentGoldSolrImplementation(entryName, Fields.ANNOTATIONS);
for(String rawAnnot : expectedRawValues)
if(rawAnnot.contains(">sequence variant<"))
oldgoldvarcnt++;
List<String> annotations = afb.getFieldValue(Fields.ANNOTATIONS, List.class);
for (String s : annotations)
if(s.startsWith("Variant"))
newgoldvarcnt++;
Assert.assertEquals(oldgoldvarcnt, newgoldvarcnt);
// Expression
ExpressionFieldBuilder efb = new ExpressionFieldBuilder();
efb.setTerminologyService(terminologyService);
efb.setGold(true);
efb.initializeBuilder(entry);
List<String> explist = (List) getValueForFieldInCurrentGoldSolrImplementation(entryName, Fields.EXPRESSION);
Set<String> expectedCVSet = new TreeSet<String>();
Set<String> expressionCVSet = new TreeSet<String>();
Set<String> exprSet = null;
if(explist != null) {
exprSet = new TreeSet<String>(efb.getFieldValue(Fields.EXPRESSION, List.class));
// Consider only tissue CVs
for (String s : explist) {
if(s.startsWith("TS-"))
expectedCVSet.add(s.split("<")[0]);
String aux = getValueFromRawData(s,"cv_ac");
if(aux != null)
expectedCVSet.add(StringUtils.getSortedValueFromPipeSeparatedField(aux));
aux = getValueFromRawData(s,"cv_ancestors_acs");
if(aux != null)
expectedCVSet.add(StringUtils.getSortedValueFromPipeSeparatedField(aux));
//else System.err.println("no ancestor in: " + s);
}
for (String s2 : exprSet) {
if(s2.startsWith("TS-"))
expressionCVSet.add(s2);
}
}
//System.err.println("expect: " + expectedCVSet.size() + " now: " + expressionCVSet.size());
//expressionCVSet.removeAll(expectedCVSet);
//System.err.println("only in current: " + expressionCVSet);
Assert.assertEquals(expectedCVSet.size(), expressionCVSet.size());
// Interactions
List<String> expectedInteractions = (List) getValueForFieldInCurrentGoldSolrImplementation(entryName, Fields.INTERACTIONS);
if(expectedInteractions != null) {
Integer oldcnt = 0, newcnt = 0;
InteractionFieldBuilder ifb = new InteractionFieldBuilder();
ifb.setTerminologyService(terminologyService);
ifb.setEntryBuilderService(entryBuilderService);
ifb.setGold(true);
ifb.initializeBuilder(entry);
Set<String> itSet = new TreeSet<String>(ifb.getFieldValue(Fields.INTERACTIONS, List.class));
for(String intactIt : expectedInteractions) if(intactIt.startsWith("<p>Interacts")) oldcnt++;
for(String newintactIt : itSet) if(newintactIt.startsWith("AC:") || newintactIt.equals("selfInteraction")) newcnt++;
// There may be one more interaction in the new index (the subunit annotation)
Assert.assertEquals(oldcnt, newcnt);
}
// CVs
Set<String> expectedCVs = new TreeSet<String>((List) getValueForFieldInCurrentGoldSolrImplementation(entryName, Fields.CV_ACS));
CVFieldBuilder cfb = new CVFieldBuilder();
cfb.setTerminologyService(terminologyService);
cfb.setGold(true);
cfb.initializeBuilder(entry);
Set<String> CvSet = new TreeSet<String>(cfb.getFieldValue(Fields.CV_ACS, List.class));
Assert.assertTrue(expectedCVs.size() == CvSet.size());
}
}