package org.nextprot.api.etl.service.impl;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.junit.Assert;
import org.junit.Test;
import org.nextprot.api.etl.statement.StatementETLBaseUnitTest;
import org.nextprot.commons.constants.IsoTargetSpecificity;
import org.nextprot.commons.statements.Statement;
import org.nextprot.commons.statements.StatementBuilder;
import org.nextprot.commons.statements.StatementField;
import org.nextprot.commons.statements.TargetIsoformSet;
import org.nextprot.commons.statements.TargetIsoformStatementPosition;
public class StatementETLServiceUnitTest extends StatementETLBaseUnitTest {
@Test
public void shouldComputeCorrectTargetIsoformsForVariants() throws Exception {
Set<Statement> subjectStatements = new HashSet<>(
Arrays.asList(StatementBuilder.createNew()
.addField(StatementField.ENTRY_ACCESSION, "NX_Q15858")
.addField(StatementField.ANNOTATION_NAME, "SCN9A-iso3-p.Ile848Thr")
.build()));
List<Statement> variantOnEntry =
StatementTransformationUtil.getPropagatedStatementsForEntry(
isoformMappingServiceMocked, subjectStatements, "NX_Q15858");
//It should return only one statement with target isoforms
Assert.assertTrue(variantOnEntry.size() == 1);
String targetIsoformsString = variantOnEntry.iterator().next().getValue(StatementField.TARGET_ISOFORMS);
Set<TargetIsoformStatementPosition> targetIsoforms = TargetIsoformSet.deSerializeFromJsonString(targetIsoformsString);
Assert.assertEquals(targetIsoforms.size(), 4);
TargetIsoformStatementPosition pos1 = targetIsoforms.stream().filter(ti -> ti.getIsoformAccession().equals("NX_Q15858-1")).collect(Collectors.toList()).get(0);
Assert.assertTrue(pos1.getBegin().equals(859));
Assert.assertTrue(pos1.getName().equals("SCN9A-iso1-p.Ile859Thr"));
}
@Test
public void shouldComputeCorrectTargetIsoformsForProteoformAnnotations() throws Exception {
Set<Statement> rawSubjectStatements = new HashSet<>(
Arrays.asList(StatementBuilder.createNew()
.addField(StatementField.ENTRY_ACCESSION, "NX_Q15858")
.addField(StatementField.ANNOTATION_NAME, "SCN9A-iso3-p.Met932Leu")
.build(),
StatementBuilder.createNew()
.addField(StatementField.ENTRY_ACCESSION, "NX_Q15858")
.addField(StatementField.ANNOTATION_NAME, "SCN9A-iso3-p.Val991Leu")
.build()));
List<Statement> subjectStatements =
StatementTransformationUtil.getPropagatedStatementsForEntry(
isoformMappingServiceMocked, rawSubjectStatements, "NX_Q15858");
Statement proteoformStatement = StatementBuilder.createNew()
.addField(StatementField.ENTRY_ACCESSION, "NX_Q15858")
.build();
{
Set<TargetIsoformStatementPosition> result = StatementTransformationUtil.computeTargetIsoformsForProteoformAnnotation(proteoformStatement, isoformMappingServiceMocked, subjectStatements, true, "NX_Q15858-3", Arrays.asList("NX_Q15858-1", "NX_Q15858-2", "NX_Q15858-3", "NX_Q15858-4"));
Assert.assertTrue(result.size() == 1);
Assert.assertTrue(result.iterator().next().getName().equals("SCN9A-iso3-p.Met932Leu + SCN9A-iso3-p.Val991Leu"));
Assert.assertTrue(result.iterator().next().getSpecificity().equals(IsoTargetSpecificity.SPECIFIC.name()));
}
{
Set<TargetIsoformStatementPosition> result = StatementTransformationUtil.computeTargetIsoformsForProteoformAnnotation(proteoformStatement, isoformMappingServiceMocked, subjectStatements, false, null, Arrays.asList("NX_Q15858-1", "NX_Q15858-2", "NX_Q15858-3", "NX_Q15858-4"));
System.err.println(result.size());
Assert.assertEquals(result.size(), 2); //Because SCN9A-iso1-p.Val991Leu can only be propagated on 1 and 3
Assert.assertTrue(result.iterator().next().getName().equals("SCN9A-iso1-p.Met943Leu + SCN9A-iso1-p.Val1002Leu"));
Assert.assertTrue(result.iterator().next().getSpecificity().equals(IsoTargetSpecificity.UNKNOWN.name()));
}
}
}