package org.nextprot.api.web.controller.genomic.misctobeorganized;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.xpath;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup;

import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.nextprot.api.web.dbunit.base.mvc.MVCBaseIntegrationTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.web.context.WebApplicationContext;


@Ignore // TODO make mocks or test values on dao / service
public class AnnotationControllerTest extends MVCBaseIntegrationTest {
 
  @Autowired
  private WebApplicationContext wac;
 
  private MockMvc mockMvc;
 
  @Before
  public void setup() {
    this.mockMvc = webAppContextSetup(this.wac).build();
  }
 
  
  @Test
  @Ignore
  public void getAnnotations() throws Exception {
    this.mockMvc.perform(get("/entry/NX_P01903/annotation.xml"))
        .andExpect(status().isOk())
        .andExpect(xpath("/annotation-list").exists())
    	.andExpect(xpath("/annotation-list/annotation-to-be-renamed/annotation//@qualityQualifier").string("GOLD"))
    	.andExpect(xpath("/annotation-list/annotation-to-be-renamed/annotation/variant//@original").string("V"))
    	.andExpect(xpath("/annotation-list/annotation-to-be-renamed/annotation/evidence-list").exists())
    	.andExpect(xpath("/annotation-list/annotation-to-be-renamed/annotation/evidence-list//@isNegative").string("false"))
    	.andExpect(xpath("/annotation-list/annotation-to-be-renamed/annotation/evidence-list//@qualifierType").string("UNKNOWN"))
    	.andExpect(xpath("/annotation-list/annotation-to-be-renamed/annotation/evidence-list//@resourceAssocType").string("evidence"));
    
  }
  
  @Test
  @Ignore
  public void shouldGetAVariant() throws Exception {
    this.mockMvc.perform(get("/entry/NX_A2RRP1/annotation.xml"))
        .andExpect(xpath("/annotation-list/annotation-to-be-renamed/annotation/variant//@original").string("I")) //should exist a variant
        .andExpect(xpath("/annotation-list/annotation-to-be-renamed/annotation/variant//@variation").string("E")); //should exist a variant
  }

  @Test
  public void shouldNotGetAVariant() throws Exception {
    this.mockMvc.perform(get("/entry/NX_P01308/annotation.xml"))
        .andExpect(xpath("/annotation-list/annotation-to-be-renamed/annotation[0]/variant//@original").string("")) //Should not exist any variant
        .andExpect(xpath("/annotation-list/annotation-to-be-renamed/annotation[0]/variant//@variation").string("")); //Should not exist any variant
  }

  @Test
  public void shouldFixIssue11() throws Exception {
    this.mockMvc.perform(get("/entry/NX_P48730/annotation.xml"))
        .andExpect(xpath("/annotation-list/annotation-to-be-renamed/annotation[0]/variant//@original").string("")) //Should not exist any variant
        .andExpect(xpath("/annotation-list/annotation-to-be-renamed/annotation[0]/variant//@variation").string("")); //Should not exist any variant
  }
  
}

