package org.nextprot.api.core.utils.annot.comp; import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; import org.nextprot.api.commons.constants.AnnotationCategory; import org.nextprot.api.commons.exception.NextProtException; import org.nextprot.api.core.domain.annotation.Annotation; import org.nextprot.api.core.domain.annotation.AnnotationIsoformSpecificity; import org.nextprot.api.core.domain.annotation.AnnotationVariant; import java.util.HashMap; import java.util.Map; import static org.mockito.Mockito.when; public class ByAnnotationVariantComparatorTest { @Test public void compareVariantsSame() throws Exception { ByAnnotationVariantComparator comparator = new ByAnnotationVariantComparator(); Annotation variant1 = mockAnnotationVariant(AnnotationCategory.VARIANT, "A", "V", new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-1", 14, 14), new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-4", 12, 12)); Annotation variant2 = mockAnnotationVariant(AnnotationCategory.VARIANT, "A", "V", new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-1", 14, 14), new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-4", 12, 12)); int cmp = comparator.compare(variant1, variant2); Assert.assertEquals(0, cmp); } @Test public void compareVariantsMutagenesisSamePositionSameVariation() throws Exception { ByAnnotationVariantComparator comparator = new ByAnnotationVariantComparator(); Annotation variant1 = mockAnnotationVariant(AnnotationCategory.VARIANT, "A", "V", new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-1", 14, 14), new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-4", 12, 12)); Annotation variant2 = mockAnnotationVariant(AnnotationCategory.MUTAGENESIS, "A", "V", new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-1", 14, 14), new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-4", 12, 12)); int cmp = comparator.compare(variant1, variant2); Assert.assertEquals(0, cmp); } @Test(expected = NextProtException.class) public void comparingNonVariantsThrowNextprotException() throws Exception { ByAnnotationVariantComparator comparator = new ByAnnotationVariantComparator(); Annotation variant2 = mockAnnotationVariant(AnnotationCategory.MUTAGENESIS, "A", "V", new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-1", 14, 14), new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-4", 12, 12)); comparator.compare(new Annotation(), variant2); } @Test public void compareVariantsSamePositionDiffVariant() throws Exception { ByAnnotationVariantComparator comparator = new ByAnnotationVariantComparator(); Annotation variant1 = mockAnnotationVariant(AnnotationCategory.VARIANT, "A", "W", new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-1", 14, 14), new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-4", 12, 12)); Annotation variant2 = mockAnnotationVariant(AnnotationCategory.VARIANT, "A", "L", new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-1", 14, 14), new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-4", 12, 12)); int cmp = comparator.compare(variant1, variant2); Assert.assertTrue(cmp>0); } @Test public void compareVariantsSamePositionDiffOriginal() throws Exception { ByAnnotationVariantComparator comparator = new ByAnnotationVariantComparator(); Annotation variant1 = mockAnnotationVariant(AnnotationCategory.VARIANT, "A", "V", new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-4", 12, 12)); Annotation variant2 = mockAnnotationVariant(AnnotationCategory.VARIANT, "C", "V", new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-4", 12, 12)); int cmp = comparator.compare(variant1, variant2); Assert.assertTrue(cmp<0); } @Test public void comparePositionOfLowestLocatedFeature() throws Exception { ByAnnotationVariantComparator comparator = new ByAnnotationVariantComparator(); Annotation variant1 = mockAnnotationVariant(AnnotationCategory.VARIANT, "A", "V", new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-1", 1489, 1489), new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-4", 12, 36)); Annotation variant2 = mockAnnotationVariant(AnnotationCategory.VARIANT, "A", "V", new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-1", 17378, 18000), new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-4", 12, 36)); int cmp = comparator.compare(variant1, variant2); Assert.assertEquals(0, cmp); } @Test public void compareVariantsDiffEndingLocation() throws Exception { ByAnnotationVariantComparator comparator = new ByAnnotationVariantComparator(); Annotation variant1 = mockAnnotationVariant(AnnotationCategory.VARIANT, "X", "W", new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-1", 14, 14), new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-4", 12, 36)); Annotation variant2 = mockAnnotationVariant(AnnotationCategory.VARIANT, "A", "V", new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-1", 14, 14), new ByIsoformPositionComparatorTest.TargetIsoform("NX_P51610-4", 12, 12)); int cmp = comparator.compare(variant1, variant2); Assert.assertEquals(-1, cmp); } private static Annotation mockAnnotationVariant(AnnotationCategory category, String original, String variant, ByIsoformPositionComparatorTest.TargetIsoform... targets) { Annotation mock = Mockito.mock(Annotation.class); when(mock.getVariant()).thenReturn(new AnnotationVariant(original, variant, "")); when(mock.getAPICategory()).thenReturn(category); Map<String, AnnotationIsoformSpecificity> map = new HashMap<>(); for (ByIsoformPositionComparatorTest.TargetIsoform target : targets) { AnnotationIsoformSpecificity specificity = Mockito.mock(AnnotationIsoformSpecificity.class); when(specificity.getFirstPosition()).thenReturn(target.getStart()); when(specificity.getLastPosition()).thenReturn(target.getEnd()); when(specificity.getIsoformAccession()).thenReturn(target.getIsoformAccession()); when(mock.getStartPositionForIsoform(target.getIsoformAccession())).thenReturn(target.getStart()); when(mock.getEndPositionForIsoform(target.getIsoformAccession())).thenReturn(target.getEnd()); map.put(target.getIsoformAccession(), specificity); } when(mock.getTargetingIsoformsMap()).thenReturn(map); return mock; } }