package org.nextprot.api.web.controller.genomic;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.xpath;
import org.junit.Ignore;
import org.junit.Test;
import org.nextprot.api.web.dbunit.base.mvc.MVCDBUnitBaseTest;
import com.github.springtestdbunit.annotation.DatabaseOperation;
import com.github.springtestdbunit.annotation.DatabaseSetup;
/**
* Class used for testing Genomic Mapping controller
*
* @author dteixeira
*/
@DatabaseSetup(value = "GenomicMappingTest.xml", type = DatabaseOperation.INSERT)
@Ignore
public class GenomicMappingWebTest extends MVCDBUnitBaseTest {
@Test
public void shouldGetAMonoExon() throws Exception {
this.mockMvc
.perform(get("/entry/NX_P41134/genomic-mappings.xml"))
.andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[2]/transcriptMappings/transcriptMapping/exonsComposition/exon//@codingStatus").string("MONO"))
.andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[2]/transcriptMappings/transcriptMapping/exonsComposition/exon//@accession").string("ENSE00001469386"))
.andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[2]/transcriptMappings/transcriptMapping/exonsComposition/exon/positionOnGene//@first").string("7"))
.andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[2]/transcriptMappings/transcriptMapping/exonsComposition/exon/positionOnGene//@last").string("1228"))
.andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[2]/transcriptMappings/transcriptMapping/exonsComposition/exon/aminoAcid[1]//@rank").string("first"))
.andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[2]/transcriptMappings/transcriptMapping/exonsComposition/exon/aminoAcid[1]//@sequence").string("M"))
.andExpect(
xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[2]/transcriptMappings/transcriptMapping/exonsComposition/exon/aminoAcid[1]//@sequencePosition").string(
"1"))
.andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[2]/transcriptMappings/transcriptMapping/exonsComposition/exon/aminoAcid[1]//@phase").string("0"))
.andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[2]/transcriptMappings/transcriptMapping/exonsComposition/exon/aminoAcid[2]//@rank").string("last"))
.andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[2]/transcriptMappings/transcriptMapping/exonsComposition/exon/aminoAcid[2]//@sequence").string("H"))
.andExpect(
xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[2]/transcriptMappings/transcriptMapping/exonsComposition/exon/aminoAcid[2]//@sequencePosition").string(
"149"))
.andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[2]/transcriptMappings/transcriptMapping/exonsComposition/exon/aminoAcid[2]//@phase").string("0"));
}
@Test
public void shouldGetAStopOnlyExon() throws Exception {
this.mockMvc
.perform(get("/entry/NX_Q96M20/genomic-mappings.xml"))
.andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[3]/transcriptMappings/transcriptMapping/exonsComposition/exon[11]//@codingStatus").string("STOP_ONLY"))
.andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[3]/transcriptMappings/transcriptMapping/exonsComposition/exon[11]//@rank").string("10"))
.andExpect(
xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[3]/transcriptMappings/transcriptMapping/exonsComposition/exon[11]//@accession").string("ENSE00002283130"))
.andExpect(
xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[3]/transcriptMappings/transcriptMapping/exonsComposition/exon[11]/positionOnGene//@first")
.string("61768"))
.andExpect(
xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[3]/transcriptMappings/transcriptMapping/exonsComposition/exon[11]/positionOnGene//@last").string("62080"));
}
@Test
public void shouldGetCorrectAAsForExons() throws Exception {
this.mockMvc.perform(get("/entry/NX_P59103/genomic-mappings.xml")).andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[1]//@uniqueName").string("NX_P59103-1"))
.andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[1]//@isoMainName").string("Iso 1"))
.andExpect(xpath(suf(1, 1, 0, 0) + "//@database").string("Ensembl")).andExpect(xpath(suf(1, 1, 0, 0) + "//@accession").string("ENST00000375936"))
.andExpect(xpath(suf(1, 1, 0, 0) + "//@proteinID").string("ENSP00000365103")).andExpect(xpath(suf(1, 1, 1, 0) + "//@rank").string("0"))
.andExpect(xpath(suf(1, 1, 1, 0) + "//@codingStatus").string("START")).andExpect(xpath(suf(1, 1, 1, 0) + "//@accession").string("ENSE00001942959"))
.andExpect(xpath(suf(1, 1, 1, 0) + "/positionOnGene//@first").string("377")).andExpect(xpath(suf(1, 1, 1, 0) + "/positionOnGene//@last").string("466"))
.andExpect(xpath(suf(1, 1, 1, 1) + "//@rank").string("first")).andExpect(xpath(suf(1, 1, 1, 1) + "//@sequence").string("M"))
.andExpect(xpath(suf(1, 1, 1, 1) + "//@sequencePosition").string("1")).andExpect(xpath(suf(1, 1, 1, 1) + "//@phase").string("0"))
.andExpect(xpath(suf(1, 1, 1, 2) + "//@rank").string("last")).andExpect(xpath(suf(1, 1, 1, 2) + "//@sequence").string("R"))
.andExpect(xpath(suf(1, 1, 1, 2) + "//@sequencePosition").string("15")).andExpect(xpath(suf(1, 1, 1, 2) + "//@phase").string("2"));
}
@Test
public void shouldGetDifferentIsoforMainmName() throws Exception {
this.mockMvc.perform(get("/entry/NX_P31994/genomic-mappings.xml")).andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[1]//@uniqueName").string("NX_P31994-1"))
.andExpect(xpath("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[1]//@isoMainName").string("IIB1"));
}
@Test
public void shouldCountMultipleGenesIsoformsAndTranscripts() throws Exception {
this.mockMvc.perform(get("/entry/NX_Q8NHW4/genomic-mappings.xml")).andExpect(xpath("genomicMappings/genomicMapping").nodeCount(2))
.andExpect(xpath("genomicMappings/genomicMapping[1]/isoformMappings/isoformMapping").nodeCount(9))
.andExpect(xpath("genomicMappings/genomicMapping[1]/isoformMappings/isoformMapping[1]/transcriptMappings/transcriptMapping").nodeCount(1));
}
private static String suf(int isoform, int transcript, int exon, int aminoAcid) {
StringBuilder sb = new StringBuilder("/genomicMappings/genomicMapping/isoformMappings/isoformMapping[");
sb.append(isoform);
sb.append("]");
if (transcript > 0) {
sb.append("/transcriptMappings/transcriptMapping[");
sb.append(transcript);
sb.append("]");
}
if (exon > 0) {
sb.append("/exonsComposition/exon[");
sb.append(exon);
sb.append("]");
}
if (aminoAcid > 0) {
sb.append("/aminoAcid[");
sb.append(aminoAcid);
sb.append("]");
}
return sb.toString();
}
// TODO how to guarantee the order?
// check a transcript shared
}