package org.nextprot.api.tasks.solr.indexer.entry.diff;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import org.junit.Assert;
import org.junit.Test;
import org.nextprot.api.core.domain.Entry;
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.CVFieldBuilder;
import org.springframework.beans.factory.annotation.Autowired;
public class CVFieldBuilderDiffTest extends SolrDiffTest {
@Autowired TerminologyService terminologyService;
@Test
public void testCVs() {
String[] test_list = {"NX_Q6H8Q1", "NX_O00116","NX_Q7Z6P3","NX_E5RQL4","NX_O00115","NX_Q7Z6P3",
"NX_Q7Z713", "NX_P22102", "NX_Q7Z713", "NX_O00116", "NX_Q7Z713", "NX_O15056"};
for(int i=0; i < test_list.length; i++){ testCVs(getEntry(test_list[i])); }
//for(int i=0; i < 1; i++){ testCVs(getEntry(test_list[i])); } // random entries
//Entry entry = getEntry("NX_P20594");
//Entry entry = getEntry("NX_P14060");
//testCVs(entry);
}
public void testCVs(Entry entry) {
String entryName = entry.getUniqueName();
System.out.println("Testing: " + entryName);
CVFieldBuilder cfb = new CVFieldBuilder();
cfb.setTerminologyService(terminologyService);
cfb.initializeBuilder(entry);
// CV_ACS
Set<String> expectedCVs = new TreeSet<String>((List) getValueForFieldInCurrentSolrImplementation(entryName, Fields.CV_ACS));
Set<String> CvSet = new TreeSet<String>(cfb.getFieldValue(Fields.CV_ACS, List.class));
if(CvSet.size() > expectedCVs.size()) {
CvSet.removeAll(expectedCVs);
System.err.println(CvSet);
}
Assert.assertEquals(expectedCVs.size(), CvSet.size());
// CV_ANCESTORS_ACS
Set<String> expectedCVancestorsAcs = new TreeSet<String>((List) getValueForFieldInCurrentSolrImplementation(entryName, Fields.CV_ANCESTORS_ACS));
Set<String> CvancestorsAcsSet = new TreeSet<String>(cfb.getFieldValue(Fields.CV_ANCESTORS_ACS, List.class));
Assert.assertEquals(expectedCVancestorsAcs.size(), CvancestorsAcsSet.size());
if (CvancestorsAcsSet.size() > expectedCVancestorsAcs.size()) {
CvancestorsAcsSet.removeAll(expectedCVancestorsAcs);
System.err.println(CvancestorsAcsSet);
}
else if (CvancestorsAcsSet.size() < expectedCVancestorsAcs.size()) {
expectedCVancestorsAcs.removeAll(CvancestorsAcsSet);
System.err.println(expectedCVancestorsAcs);
}
// CV_ANCESTORS
Set<String> expectedCVancestors = new TreeSet<String>((List) getValueForFieldInCurrentSolrImplementation(entryName, Fields.CV_ANCESTORS));
Set<String> CvancestorsSet = new TreeSet<String>(cfb.getFieldValue(Fields.CV_ANCESTORS, List.class));
Assert.assertEquals(expectedCVancestors.size(), CvancestorsSet.size());
//System.err.println("CV ancestors OK");
// CV_SYNONYMS
List<String> synolist = (List) getValueForFieldInCurrentSolrImplementation(entryName, Fields.CV_SYNONYMS);
if(synolist != null) {
Set<String> expectedSynonyms = new TreeSet<String>(synolist);
Set<String> SynonymsSet = new TreeSet<String>(cfb.getFieldValue(Fields.CV_SYNONYMS, List.class));
//Assert.assertEquals(expectedSynonyms.size(), SynonymsSet.size());
Assert.assertEquals(expectedSynonyms, SynonymsSet);
}
// CV_NAMES
Set<String> expectedCVNames = new TreeSet<String>((List) getValueForFieldInCurrentSolrImplementation(entryName, Fields.CV_NAMES));
Set<String> CVNamesSet = new TreeSet<String>(cfb.getFieldValue(Fields.CV_NAMES, List.class));
Assert.assertEquals(expectedCVNames.size(), CVNamesSet.size());
//Assert.assertTrue(true);
if (CVNamesSet.size() < expectedCVNames.size()) {
expectedCVNames.removeAll(CVNamesSet);
System.err.println(expectedCVNames);
}
// EC_NAME -> current solr implementation doesn't index ECs for multifunctional enzymes (eg:NX_P14060) discuss with PAM
String expected = (String) getValueForFieldInCurrentSolrImplementation(entryName, Fields.EC_NAME);
if(expected != null) {
String ECsString = cfb.getFieldValue(Fields.EC_NAME, String.class);
Assert.assertEquals(expected, ECsString);
}
}
}