JAL-3829 move mock query and responses to files
[jalview.git] / test / jalview / gui / structurechooser / StructureChooserQuerySourceTest.java
index b6b4615..1912f14 100644 (file)
 package jalview.gui.structurechooser;
 
 
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Collection;
+import java.util.List;
 import java.util.Vector;
 
+import org.junit.Assert;
 import org.testng.AssertJUnit;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
 import jalview.datamodel.DBRefEntry;
@@ -34,9 +41,15 @@ import jalview.datamodel.DBRefSource;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceI;
+import jalview.fts.api.FTSData;
 import jalview.fts.core.FTSRestRequest;
+import jalview.fts.core.FTSRestResponse;
+import jalview.fts.service.pdb.PDBFTSRestClient;
+import jalview.fts.service.pdb.PDBFTSRestClientTest;
 import jalview.fts.threedbeacons.TDBeaconsFTSRestClientTest;
 import jalview.gui.JvOptionPane;
+import jalview.gui.StructureChooser;
+import jalview.jbgui.FilterOption;
 
 public class StructureChooserQuerySourceTest
 {
@@ -48,7 +61,7 @@ public class StructureChooserQuerySourceTest
     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
   }
 
-  Sequence seq,upSeq;
+  Sequence seq,upSeq,upSeq_insulin;
 
   // same set up as for structurechooser test
   
@@ -106,6 +119,13 @@ public class StructureChooserQuerySourceTest
     upSeq.createDatasetSequence();
     upSeq.setDescription("Breast cancer type 1 susceptibility protein");
     upSeq.addDBRef(new DBRefEntry("UNIPROT","0","P38398",null,true));
+    
+    upSeq_insulin=new Sequence("INS_HUMAN",
+            "MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAEDLQVGQVELGGGP"
+            + "GAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN");
+    upSeq_insulin.createDatasetSequence();
+    upSeq_insulin.setDescription("Insulin");
+    upSeq_insulin.addDBRef(new DBRefEntry("UNIPROT","0","P01308",null,true));
   }
 
 @AfterMethod(alwaysRun = true)
@@ -166,7 +186,9 @@ public class StructureChooserQuerySourceTest
   {
     System.out.println("seq >>>> " + upSeq);
     TDBeaconsFTSRestClientTest.setMock();
+    PDBFTSRestClientTest.setMock();
     StructureChooserQuerySource scquery = StructureChooserQuerySource.getQuerySourceFor(new SequenceI[] { upSeq});
+    // gets the lightweight proxy rather than the ThreeDBStructureChooserQuerySource
     AssertJUnit.assertTrue(scquery instanceof ThreeDBStructureChooserQuerySource);
     String query = scquery.buildQuery(upSeq);
     AssertJUnit.assertEquals("P38398", query);
@@ -238,28 +260,63 @@ public class StructureChooserQuerySourceTest
 //            "uniprot_accession:P12345 OR uniprot_id:P12345 OR pdb_id:1xyz",
 //            query);
   }
-  @Test(groups= {"Functional"})
-  public void cascadingThreeDBandPDBQuerys()
+  @Test(groups= {"Functional"},dataProvider = "testUpSeqs")
+  public void cascadingThreeDBandPDBQuerys(SequenceI testUpSeq)
   {
     TDBeaconsFTSRestClientTest.setMock();
-    
-    StructureChooserQuerySource scquery = StructureChooserQuerySource.getQuerySourceFor(new SequenceI[] { upSeq});
+    PDBFTSRestClientTest.setMock();
+    ThreeDBStructureChooserQuerySource tdbquery = new ThreeDBStructureChooserQuerySource();
+    PDBStructureChooserQuerySource pdbquery  = new PDBStructureChooserQuerySource();
+            
 
-    // query TDB for doc
-    // query PDBe for PDB entry metadata
-    // Combine
     
-    FTSRestRequest tdbQuery = new FTSRestRequest();
-    tdbQuery.setResponseSize(100);
-    tdbQuery.setFieldToSearchBy("");
-    tdbQuery.setSearchTerm(scquery.buildQuery(upSeq));
-    tdbQuery.setWantedFields(scquery.getDocFieldPrefs().getStructureSummaryFields());
-    //scquery.fetchStructuresMetaData(upSeq, null, null, false);
-    String secondaryPdbQuery;
-    //secondaryPdbQuery = ((ThreeDBStructureChooserQuerySource)scquery).buildPDBFTSquery();
+    FTSRestResponse upResponse = null;
+    FTSRestResponse pdbResponse = null;
+    // TODO test available options
+    // Best coverage
+    // Best Alphafold Model
+    // Best model (by confidence score)
+    // Will also need to develop a more sophisticated filtering system
+    List<FilterOption> opts = tdbquery.getAvailableFilterOptions(StructureChooser.VIEWS_FILTER);
+    FilterOption opt_singlebest = opts.get(0);
+    FilterOption opt_manybest = opts.get(1);
+    assertEquals(opt_singlebest.getValue(), ThreeDBStructureChooserQuerySource.FILTER_FIRST_BEST_COVERAGE);
+    assertEquals(opt_manybest.getValue(), ThreeDBStructureChooserQuerySource.FILTER_TDBEACONS_COVERAGE);
+    
+    try {
+      upResponse = tdbquery.fetchStructuresMetaData(testUpSeq, tdbquery.getDocFieldPrefs().getStructureSummaryFields(),  opt_singlebest, false);
+      tdbquery.updateAvailableFilterOptions(StructureChooser.VIEWS_FILTER,opts,upResponse.getSearchSummary());
+      // test ranking without additional PDBe data
+      FTSRestResponse firstRanked = tdbquery.selectFirstRankedQuery(testUpSeq, upResponse.getSearchSummary(), tdbquery.getDocFieldPrefs().getStructureSummaryFields(), opt_singlebest.getValue(), false);
+      assertEquals(firstRanked.getNumberOfItemsFound(),1);
+      // many best response
+      upResponse = tdbquery.fetchStructuresMetaData(testUpSeq, tdbquery.getDocFieldPrefs().getStructureSummaryFields(),  opt_manybest, false);
+      assertTrue(firstRanked.getSearchSummary().size()<upResponse.getSearchSummary().size());
+      // NB Could have race condition here 
+      String pdb_Query = tdbquery.buildPDBFTSQueryFor(upResponse);
+      assertTrue(pdb_Query.trim().length()>0);
+      pdbResponse = tdbquery.fetchStructuresMetaDataFor(pdbquery, upResponse);
+      assertTrue(pdbResponse.getNumberOfItemsFound()>0);
+      FTSRestResponse joinedResp = tdbquery.joinResponses(upResponse, pdbResponse);
+      assertEquals(upResponse.getNumberOfItemsFound(),joinedResp.getNumberOfItemsFound());
+      
+      
+    } catch (Exception x)
+    {
+      x.printStackTrace();
+      Assert.fail("Unexpected Exception");
+    }
+    StructureChooserQuerySource scquery = StructureChooserQuerySource.getQuerySourceFor(new SequenceI[] { testUpSeq});
 
   }
   
+  @DataProvider(name = "testUpSeqs")
+  public Object[][] testUpSeqs() throws Exception
+  {
+    setUp();
+    return new Object[][] { {upSeq},{upSeq_insulin}};
+  }
+  
   @Test(groups = { "Functional" })
   public void sanitizeSeqNameTest()
   {