X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Ffts%2Fthreedbeacons%2FTDBeaconsFTSRestClientTest.java;h=aaf91efeb19210f517d4d74ec266181753726dad;hb=066e3a364c358a39a66cf292cb98c9b26b289795;hp=3c0d61647a83af8eb6d7fb542d62ce032efd92fe;hpb=f640efee12150d1ae174c64c936f4630716cb7c4;p=jalview.git diff --git a/test/jalview/fts/threedbeacons/TDBeaconsFTSRestClientTest.java b/test/jalview/fts/threedbeacons/TDBeaconsFTSRestClientTest.java index 3c0d616..aaf91ef 100644 --- a/test/jalview/fts/threedbeacons/TDBeaconsFTSRestClientTest.java +++ b/test/jalview/fts/threedbeacons/TDBeaconsFTSRestClientTest.java @@ -1,10 +1,37 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.fts.threedbeacons; +import static org.testng.Assert.assertNull; +import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertTrue; +import java.io.IOException; +import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.testng.Assert; import org.testng.annotations.AfterMethod; @@ -13,9 +40,11 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import jalview.fts.api.FTSDataColumnI; +import jalview.fts.api.FTSDataColumnI.FTSDataColumnGroupI; import jalview.fts.core.FTSRestClient; import jalview.fts.core.FTSRestRequest; import jalview.fts.core.FTSRestResponse; +import jalview.fts.service.pdb.PDBFTSRestClientTest; import jalview.fts.service.threedbeacons.TDBeaconsFTSRestClient; import jalview.gui.JvOptionPane; @@ -27,7 +56,7 @@ public class TDBeaconsFTSRestClientTest JvOptionPane.setInteractiveMode(false); JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); } - + private FTSRestClient ftsRestClient; @BeforeMethod(alwaysRun = true) @@ -55,19 +84,22 @@ public class TDBeaconsFTSRestClientTest public void tearDown() throws Exception { } - + @Test public void getAllDefaulDisplayedDataColumns() { - Assert.assertNotNull(ftsRestClient - .getAllDefaultDisplayedFTSDataColumns()); - System.out.println(ftsRestClient.getAllDefaultDisplayedFTSDataColumns()); + // to change when resources.tdbeacons_data_columns.txt is changed + Assert.assertNotNull( + ftsRestClient.getAllDefaultDisplayedFTSDataColumns()); + System.out + .println(ftsRestClient.getAllDefaultDisplayedFTSDataColumns()); Assert.assertTrue(!ftsRestClient.getAllDefaultDisplayedFTSDataColumns() .isEmpty()); - Assert.assertEquals(ftsRestClient - .getAllDefaultDisplayedFTSDataColumns().size(), 3); + Assert.assertEquals( + ftsRestClient.getAllDefaultDisplayedFTSDataColumns().size(), + 15); } - + @Test(groups = { "Functional" }) public void getPrimaryKeyColumIndexTest() { @@ -79,29 +111,349 @@ public class TDBeaconsFTSRestClientTest Assert.assertEquals(foundIndex, -1); foundIndex = ftsRestClient.getPrimaryKeyColumIndex(wantedFields, false); - Assert.assertEquals(foundIndex, 0); - foundIndex = ftsRestClient - .getPrimaryKeyColumIndex(wantedFields, true); - Assert.assertEquals(foundIndex, 1); + Assert.assertEquals(foundIndex, 12); + foundIndex = ftsRestClient.getPrimaryKeyColumIndex(wantedFields, + true); + // 1+primary key index + Assert.assertEquals(foundIndex, 13); } catch (Exception e) { e.printStackTrace(); Assert.fail("Exception thrown while testing..."); } } - - @Test(groups = { "External", "Network" }) - public void executeRequestTest() + + @Test(groups = { "Functional" }) + public void getDataColumnsFieldsAsCommaDelimitedString() + { + // to change when resources.tdbeacons_data_columns.txt is changed + Collection wantedFields = ftsRestClient + .getAllDefaultDisplayedFTSDataColumns(); + String actual = ftsRestClient + .getDataColumnsFieldsAsCommaDelimitedString(wantedFields); + Assert.assertEquals(actual, + "uniprot_start,uniprot_end,provider,model_identifier,model_category,model_title,resolution,confidence_avg_local_score,confidence_type,confidence_version,coverage,created,model_url,model_format,model_page_url"); + } + + @Test(groups = { "Functional" }) + public void getAllFTSDataColumns() + { + Collection allFields = ftsRestClient + .getAllFTSDataColumns(); + Assert.assertNotNull(allFields); + // System.out.println(allFields.size()); + Assert.assertEquals(allFields.size(), 20); + } + + @Test(groups = { "Functional" }) + public void getSearchableDataColumns() + { + // to change when resources.tdbeacons_data_columns.txt is changed + Collection searchableFields = ftsRestClient + .getSearchableDataColumns(); + Assert.assertNotNull(searchableFields); + // System.out.println(searchableFields.size()); + Assert.assertEquals(searchableFields.size(), 1); // only 1: uniprot + // accession + } + + @Test(groups = { "Functional" }) + public void getPrimaryKeyColumn() + { + // to change when resources.tdbeacons_data_columns.txt is changed + FTSDataColumnI expectedPKColumn; + try + { + expectedPKColumn = ftsRestClient.getDataColumnByNameOrCode("Url"); + Assert.assertNotNull(ftsRestClient.getPrimaryKeyColumn()); + Assert.assertEquals(ftsRestClient.getPrimaryKeyColumn(), + expectedPKColumn); + } catch (Exception e) + { + e.printStackTrace(); + Assert.fail("Exception thrown while testing..."); + } + } + + @Test(groups = { "Functional" }) + public void getDataColumnByNameOrCode() + { + try + { + FTSDataColumnI foundDataCol = ftsRestClient + .getDataColumnByNameOrCode("uniprot_accession"); + Assert.assertNotNull(foundDataCol); + Assert.assertEquals(foundDataCol.getName(), "UniProt Accession"); + } catch (Exception e) + { + e.printStackTrace(); + Assert.fail("Exception thrown while testing..."); + } + } + + @Test(groups = { "Functional" }) + public void getDataColumnGroupById() + { + FTSDataColumnGroupI foundDataColGroup; + try + { + foundDataColGroup = ftsRestClient.getDataColumnGroupById("g2"); + Assert.assertNotNull(foundDataColGroup); + Assert.assertEquals(foundDataColGroup.getName(), "Quality"); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + @Test(groups = { "Functional" }) + public void getDefaultResponsePageSize() + { + int defaultResSize = ftsRestClient.getDefaultResponsePageSize(); + Assert.assertEquals(defaultResSize, 100); // why 100 or 500 ? pdb is 100, + // uniprot 500 + } + + @Test(groups = { "Functional" }) + public void getColumnMinWidthTest() + { + try + { + FTSDataColumnI foundDataCol = ftsRestClient + .getDataColumnByNameOrCode("uniprot_accession"); + Assert.assertNotNull(foundDataCol); + int actualColMinWidth = foundDataCol.getMinWidth(); + Assert.assertEquals(actualColMinWidth, 50); + } catch (Exception e) + { + e.printStackTrace(); + Assert.fail("Exception thrown while testing..."); + } + } + // could add test for MaxWidth & PreferedWith + + @Test(groups = { "Functional" }) + public void getColumnClassTest() + { + try + { + FTSDataColumnI foundDataCol = ftsRestClient + .getDataColumnByNameOrCode("uniprot_accession"); + Assert.assertNotNull(foundDataCol); + Assert.assertEquals(foundDataCol.getDataType().getDataTypeClass(), + String.class); + foundDataCol = ftsRestClient.getDataColumnByNameOrCode("id"); + Assert.assertNotNull(foundDataCol); + Assert.assertEquals(foundDataCol.getDataType().getDataTypeClass(), + String.class); + } catch (Exception e) + { + e.printStackTrace(); + Assert.fail("Exception thrown while testing..."); + } + } + + @Test(groups = { "Functional" }) + public void coverageForEqualsAndHashFunction() + { + Set uniqueSet = new HashSet(); + Collection searchableCols = ftsRestClient + .getSearchableDataColumns(); + System.out.println(searchableCols); + for (FTSDataColumnI foundCol : searchableCols) + { + System.out.println(foundCol.toString()); + uniqueSet.add(foundCol); + uniqueSet.add(foundCol); + } + Assert.assertTrue(!uniqueSet.isEmpty()); + // Assert.assertEquals(uniqueSet.size(), 22); -> 1 or 2 currently for 3DB + } + + @Test(groups = { "Functional" }) + public void getTDBIdColumIndexTest() + { + List wantedFields = new ArrayList(); + try + { + wantedFields.add(TDBeaconsFTSRestClient.getInstance() + .getDataColumnByNameOrCode("Model id")); + wantedFields.add(TDBeaconsFTSRestClient.getInstance() + .getDataColumnByNameOrCode("uniprot_accession")); + wantedFields.add(TDBeaconsFTSRestClient.getInstance() + .getDataColumnByNameOrCode("Title")); + } catch (Exception e) + { + e.printStackTrace(); + } + try + { + assertEquals(4, TDBeaconsFTSRestClient.getInstance() + .getPrimaryKeyColumIndex(wantedFields, true)); + // assertEquals(3, TDBeaconsFTSRestClient.getInstance() + // .getPrimaryKeyColumIndex(wantedFields, true)); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + private static String[][] mocks = { { "P38398.json", null }, + { "P01308.json", null }, + { "P0DTD1.json", null } + + // , { "P0DTD3.json", "{}" } actually results in 404, but {} is in body + }; + + private static void setMockData() + { + try + { + mocks[0][1] = PDBFTSRestClientTest.readJsonStringFromFile( + "test/jalview/fts/threedbeacons/p38398_tdb_fts_query_resp.txt"); + + mocks[1][1] = PDBFTSRestClientTest.readJsonStringFromFile( + "test/jalview/fts/threedbeacons/p01308_tdb_fts_query_resp.txt"); + + mocks[2][1] = PDBFTSRestClientTest.readJsonStringFromFile( + "test/jalview/fts/threedbeacons/p0dtd1_tdb_fts_query_resp.txt"); + + } catch (IOException e) + { + Assert.fail("Couldn't read mock response data", e); + } + } + + public static void setMock() + { + setMockData(); + FTSRestClient.createMockFTSRestClient( + (FTSRestClient) TDBeaconsFTSRestClient.getInstance(), mocks); + } + + private static String dev_url = "https://wwwdev.ebi.ac.uk/pdbe/pdbe-kb/3dbeacons/api/uniprot/summary/"; + + private static String prod_url = "https://www.ebi.ac.uk/pdbe/pdbe-kb/3dbeacons/api/uniprot/summary/"; + + /** + * check that the mock request and response are the same as the response from + * a live 3D-beacons endpoint + * + * Note - servers often have rapidly changing ids / URIs so this might fail, + * but the overall structure will remain. + * + * @throws Exception + */ + @Test(groups = { "Network", "Integration" }) + public void verifyMockTDBRequest() throws Exception + { + setMockData(); + for (String[] otherMock : mocks) + { + verifyMockTDBRequest(otherMock[0], otherMock[1]); + } + } + + private void verifyMockTDBRequest(String mockRequest, + String _mockResponse) throws Exception { + URL tdb_req = new URL(prod_url + mockRequest); + byte[] resp = tdb_req.openStream().readAllBytes(); + String tresp = new String(resp, StandardCharsets.UTF_8); + assertEquals(_mockResponse.trim(), tresp.trim()); + } + + @Test(groups = { "Functional" }) + public void testMockTDBRequest() + { + + setMock(); List wantedFields = new ArrayList(); try { wantedFields.add(TDBeaconsFTSRestClient.getInstance() + .getDataColumnByNameOrCode("Model Id")); + wantedFields.add(TDBeaconsFTSRestClient.getInstance() + .getDataColumnByNameOrCode("model_url")); + wantedFields.add(TDBeaconsFTSRestClient.getInstance() + .getDataColumnByNameOrCode("provider")); + wantedFields.add(TDBeaconsFTSRestClient.getInstance() .getDataColumnByNameOrCode("model_category")); wantedFields.add(TDBeaconsFTSRestClient.getInstance() + .getDataColumnByNameOrCode("qmean_avg_local_score")); + wantedFields.add(TDBeaconsFTSRestClient.getInstance() + .getDataColumnByNameOrCode("uniprot_start")); + wantedFields.add(TDBeaconsFTSRestClient.getInstance() + .getDataColumnByNameOrCode("uniprot_end")); + } catch (Exception e1) + { + e1.printStackTrace(); + } + System.out.println("wantedFields >>" + wantedFields); + + FTSRestRequest request = new FTSRestRequest(); + FTSRestResponse response; + + request.setResponseSize(100); + request.setFieldToSearchBy(""); + request.setWantedFields(wantedFields); + // check 404 behaviour + request.setSearchTerm("P00000.json"); + + try + { + response = TDBeaconsFTSRestClient.getInstance() + .executeRequest(request); + + assertNull(response); + } catch (Exception e) + { + e.printStackTrace(); + Assert.fail("Unexpected failure during mock 3DBeacons 404 test"); + } + + // check 200 behaviour + request.setSearchTerm("P38398.json"); + System.out.println("request : " + request.getFieldToSearchBy()); + // System.out.println(request.toString()); + + try + { + response = TDBeaconsFTSRestClient.getInstance() + .executeRequest(request); + } catch (Exception e) + { + e.printStackTrace(); + Assert.fail("Couldn't execute webservice call!"); + return; + } + assertTrue(response.getSearchSummary() != null); + assertTrue(response.getNumberOfItemsFound() > 3); // 4 atm + System.out.println("Search summary : \n" + response.getSearchSummary()); + + // System.out.println(response.getSearchSummary().size()); + } + + @Test(groups = { "External", "Network" }) + public void executeRequestTest() + { + List wantedFields = new ArrayList(); + try + { + wantedFields.add(TDBeaconsFTSRestClient.getInstance() + .getDataColumnByNameOrCode("Model Id")); + wantedFields.add(TDBeaconsFTSRestClient.getInstance() + .getDataColumnByNameOrCode("model_url")); + wantedFields.add(TDBeaconsFTSRestClient.getInstance() .getDataColumnByNameOrCode("provider")); wantedFields.add(TDBeaconsFTSRestClient.getInstance() - .getDataColumnByNameOrCode("created")); + .getDataColumnByNameOrCode("model_category")); + wantedFields.add(TDBeaconsFTSRestClient.getInstance() + .getDataColumnByNameOrCode("confidence_avg_local_score")); + wantedFields.add(TDBeaconsFTSRestClient.getInstance() + .getDataColumnByNameOrCode("uniprot_start")); + wantedFields.add(TDBeaconsFTSRestClient.getInstance() + .getDataColumnByNameOrCode("uniprot_end")); } catch (Exception e1) { e1.printStackTrace(); @@ -109,25 +461,27 @@ public class TDBeaconsFTSRestClientTest System.out.println("wantedFields >>" + wantedFields); FTSRestRequest request = new FTSRestRequest(); - //request.setAllowEmptySeq(false); - //request.setResponseSize(100); - request.setSearchTerm("01308.json"); + request.setResponseSize(100); + request.setFieldToSearchBy(""); + request.setSearchTerm("P01318.json"); request.setWantedFields(wantedFields); System.out.println("request : " + request.getFieldToSearchBy()); - System.out.println(request.toString()); + // System.out.println(request.toString()); FTSRestResponse response; try { - response = TDBeaconsFTSRestClient.getInstance().executeRequest(request); + response = TDBeaconsFTSRestClient.getInstance() + .executeRequest(request); } catch (Exception e) { e.printStackTrace(); Assert.fail("Couldn't execute webservice call!"); return; } - //assertTrue(response.getNumberOfItemsFound() > 99); assertTrue(response.getSearchSummary() != null); - assertTrue(response.getSearchSummary().size() > 99); + assertTrue(response.getNumberOfItemsFound() > 3); // 4 atm + System.out.println("Search summary : \n" + response.getSearchSummary()); + // System.out.println(response.getSearchSummary().size()); } }