package org.molgenis.fair.controller;
import org.mockito.Mockito;
import org.molgenis.data.DataService;
import org.molgenis.data.Entity;
import org.molgenis.util.GsonConfig;
import org.molgenis.util.GsonHttpMessageConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.converter.FormHttpMessageConverter;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import javax.servlet.http.HttpServletRequest;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@WebAppConfiguration
@ContextConfiguration(classes = { GsonConfig.class })
public class FairControllerTest extends AbstractTestNGSpringContextTests
{
private FairController controller;
private DataService dataService;
private EntityModelWriter entityModelWriter;
private MockMvc mockMvc;
@Autowired
private GsonHttpMessageConverter gsonHttpMessageConverter;
@BeforeMethod
public void beforeTest()
{
dataService = mock(DataService.class);
entityModelWriter = mock(EntityModelWriter.class);
controller = new FairController(dataService, entityModelWriter);
mockMvc = MockMvcBuilders.standaloneSetup(controller)
.setMessageConverters(new FormHttpMessageConverter(), gsonHttpMessageConverter).build();
}
@Test
public void getMetadataTest() throws Exception
{
HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getScheme()).thenReturn("http");
when(request.getServerName()).thenReturn("molgenis01.gcc.rug.nl");
when(request.getLocalPort()).thenReturn(8080);
Entity answer = mock(Entity.class);
when(dataService.findOne(eq("fdp_Metadata"), anyObject())).thenReturn(answer);
this.mockMvc.perform(get("/fdp").header("X-Forwarded-Host", "website.com")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)).andExpect(status().isOk());
Mockito.verify(entityModelWriter).createRdfModel("http://website.com/fdp", answer);
}
@Test
public void getCatalogTest() throws Exception
{
reset(dataService);
HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getScheme()).thenReturn("http");
when(request.getServerName()).thenReturn("molgenis01.gcc.rug.nl");
when(request.getLocalPort()).thenReturn(8080);
Entity answer = mock(Entity.class);
when(dataService.findOneById("fdp_Catalog", "catalogID")).thenReturn(answer);
this.mockMvc.perform(get("/fdp/catalogID").header("X-Forwarded-Host", "website.com")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)).andExpect(status().isOk());
Mockito.verify(entityModelWriter).createRdfModel("http://website.com/fdp/catalogID", answer);
}
@Test
public void getDatasetTest() throws Exception
{
HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getScheme()).thenReturn("http");
when(request.getServerName()).thenReturn("molgenis01.gcc.rug.nl");
when(request.getLocalPort()).thenReturn(8080);
Entity answer = mock(Entity.class);
when(dataService.findOneById("fdp_Dataset", "datasetID")).thenReturn(answer);
this.mockMvc.perform(get("/fdp/catalogID/datasetID").header("X-Forwarded-Host", "website.com")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)).andExpect(status().isOk());
Mockito.verify(entityModelWriter).createRdfModel("http://website.com/fdp/catalogID/datasetID", answer);
}
@Test
public void getDistributionTest() throws Exception
{
HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getScheme()).thenReturn("http");
when(request.getServerName()).thenReturn("molgenis01.gcc.rug.nl");
when(request.getLocalPort()).thenReturn(8080);
Entity answer = mock(Entity.class);
when(dataService.findOneById("fdp_Distribution", "distributionID")).thenReturn(answer);
this.mockMvc.perform(get("/fdp/catalogID/datasetID/distributionID").header("X-Forwarded-Host", "website.com")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)).andExpect(status().isOk());
Mockito.verify(entityModelWriter)
.createRdfModel("http://website.com/fdp/catalogID/datasetID/distributionID", answer);
}
}