package uk.ac.ebi.ep.pdbeadapter;
import java.io.IOException;
import static junit.framework.TestCase.assertEquals;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertThat;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.method;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo;
import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;
import uk.ac.ebi.ep.pdbeadapter.experiment.PDBexperiments;
import uk.ac.ebi.ep.pdbeadapter.molecule.PDBmolecules;
import uk.ac.ebi.ep.pdbeadapter.publication.PDBePublications;
import uk.ac.ebi.ep.pdbeadapter.summary.PdbSearchResult;
/**
*
* @author joseph
*/
public class PDBeRestServiceTest extends AbstractPDBeTest {
@Autowired
private PDBeRestService restService;
@Test
public void testPDBeRestService() {
LOGGER.info("testPDBeRestService");
PDBeRestService service = new PDBeRestService(restTemplate, pDBeUrl);
assertNotNull(service);
}
/**
* Test of getPdbSummaryResults method, of class PDBeRestService.
*/
@Test
public void testGetPdbSummaryResults() {
LOGGER.info("getPdbSummaryResults");
String pdbId = "3tge";
String url = pDBeUrl.getSummaryUrl() + pdbId;
String filename = "summary.json";
String json = getJsonFile(filename);
mockRestServer.expect(requestTo(url)).andExpect(method(HttpMethod.GET))
.andRespond(withSuccess(json, MediaType.APPLICATION_JSON));
PdbSearchResult expResult = restTemplate.getForObject(url.trim(), PdbSearchResult.class);
PdbSearchResult result = restService.getPdbSummaryResults(pdbId);
String title = expResult.get(pdbId).stream().findFirst().get().getTitle();
mockRestServer.verify();
assertThat(result.get(pdbId).stream().findFirst().get().getTitle(), containsString(title));
assertEquals(title, result.get(pdbId).stream().findFirst().get().getTitle());
assertEquals(expResult.get(pdbId).stream().findFirst().get().getTitle(), result.get(pdbId).stream().findFirst().get().getTitle());
}
/**
* Test of getPDBexperimentResults method, of class PDBeRestService.
*/
@Test
public void testGetPDBexperimentResults() {
LOGGER.info("getPDBexperimentResults");
String pdbId = "3tge";
String url = pDBeUrl.getExperimentUrl() + pdbId;
String filename = "experiment.json";
String json = getJsonFile(filename);
mockRestServer.expect(requestTo(url)).andExpect(method(HttpMethod.GET))
.andRespond(withSuccess(json, MediaType.APPLICATION_JSON));
PDBexperiments result = restService.getPDBexperimentResults(pdbId);
PDBexperiments expResult = restTemplate.getForObject(url.trim(), PDBexperiments.class);
String experimentalMethod = expResult.get(pdbId).stream().findFirst().get().getExperimentalMethod();
mockRestServer.verify();
assertThat(result.get(pdbId).stream().findFirst().get().getExperimentalMethod(), containsString(experimentalMethod));
assertEquals(experimentalMethod, result.get(pdbId).stream().findFirst().get().getExperimentalMethod());
}
/**
* Test of getPDBpublicationResults method, of class PDBeRestService.
*/
@Test
public void testGetPDBpublicationResults() {
LOGGER.info("getPDBpublicationResults");
String pdbId = "3tge";
String url = pDBeUrl.getPublicationsUrl() + pdbId;
String filename = "publication.json";
String json = getJsonFile(filename);
mockRestServer.expect(requestTo(url)).andExpect(method(HttpMethod.GET))
.andRespond(withSuccess(json, MediaType.APPLICATION_JSON));
PDBePublications expResult = restTemplate.getForObject(url.trim(), PDBePublications.class);
PDBePublications result = restService.getPDBpublicationResults(pdbId);
String title = expResult.get(pdbId).stream().findFirst().get().getTitle();
mockRestServer.verify();
assertThat(result.get(pdbId).stream().findFirst().get().getTitle(), containsString(title));
assertEquals(title, result.get(pdbId).stream().findFirst().get().getTitle());
assertEquals(expResult.get(pdbId).stream().findFirst().get().getTitle(), result.get(pdbId).stream().findFirst().get().getTitle());
}
/**
* Test of getPDBmoleculeResults method, of class PDBeRestService.
*/
public void testGetPDBmoleculeResults() {
LOGGER.info("getPDBmoleculeResults");
String pdbId = "3tge";
String url = pDBeUrl.getMoleculesUrl() + pdbId;
String filename = "molecule.json";
String json = getJsonFile(filename);
mockRestServer.expect(requestTo(url)).andExpect(method(HttpMethod.GET))
.andRespond(withSuccess(json, MediaType.APPLICATION_JSON));
PDBmolecules expResult = restTemplate.getForObject(url.trim(), PDBmolecules.class);
PDBmolecules result = restService.getPDBmoleculeResults(pdbId);
String name = expResult.get(pdbId).stream().findFirst().get().getMoleculeName().stream().findFirst().get();
mockRestServer.verify();
assertThat(result.get(pdbId).stream().findFirst().get().getMoleculeName().stream().findFirst().get(), containsString(name));
assertEquals(name, result.get(pdbId).stream().findFirst().get().getMoleculeName().stream().findFirst().get());
assertEquals(expResult.get(pdbId).stream().findFirst().get().getMoleculeName().stream().findFirst().get(), result.get(pdbId).stream().findFirst().get().getMoleculeName().stream().findFirst().get());
}
/**
* Test of getStructuralDomain method, of class PDBeRestService.
*/
@Test
public void testGetStructuralDomain() {
LOGGER.info("getStructuralDomain");
try {
String pdbId = "3tge";
String url = pDBeUrl.getStructuralDomainUrl() + pdbId;
String filename = "structureDomain.json";
String json = getJsonFile(filename);
mockRestServer.expect(requestTo(url)).andExpect(method(HttpMethod.GET))
.andRespond(withSuccess(json, MediaType.APPLICATION_JSON));
String result = restService.getStructuralDomain(pdbId);
String data = restTemplate.getForObject(url.trim(), String.class);
String homology = "homology";
String expResult = getValueFromJsonData(data, homology);
mockRestServer.verify();
assertThat(result, containsString(expResult));
assertEquals(expResult, result);
} catch (IOException ex) {
LOGGER.error(ex.getMessage(), ex);
}
}
}