浏览代码

More testing.

Lacey Sanderson 5 年之前
父节点
当前提交
6b8038ff4f
共有 3 个文件被更改,包括 175 次插入45 次删除
  1. 1 1
      .travis.yml
  2. 172 31
      tests/tripal_jbrowse_mgmt/ApiTest.php
  3. 2 13
      tripal_jbrowse_mgmt/includes/tripal_jbrowse_mgmt.api.inc

+ 1 - 1
.travis.yml

@@ -8,7 +8,7 @@ services:
   - docker
 
 env:
-  - DRUPAL_ROOT=/var/www/html
+  - DRUPAL_ROOT=/var/www/html JBROWSE_ROOT=/var/www/html/jbrowse
 
 before_script:
   - docker pull statonlab/tripal3

+ 172 - 31
tests/tripal_jbrowse_mgmt/ApiTest.php

@@ -14,10 +14,15 @@ class ApiTest extends TripalTestCase {
    *
    * Specifically tripal_jbrowse_mgmt_save_settings()
    * and tripal_jbrowse_mgmt_get_settings().
-   *
-   * @dataProvider settingsProvider
    */
-  public function testSettings($test_settings) {
+  public function testSettings() {
+
+    $test_settings = [
+      'bin_path' => 'test/fake/path',
+	    'link' => 'test/fake/path',
+	    'data_dir' => 'test/fake/path',
+	    'menu_template' => [],
+    ];
 
     tripal_jbrowse_mgmt_save_settings($test_settings);
     $retrieved = tripal_jbrowse_mgmt_get_settings();
@@ -38,33 +43,25 @@ class ApiTest extends TripalTestCase {
       }
     }
   }
-  // Associated Data Provider for testing settings.
-  public function settingsProvider() {
-    $faker = Factory::create();
-    $sets = [];
-
-    // No settings.
-    $sets[] = [[]];
-
-    // Full Fake Settings.
-    $sets[] = [[
-      'bin_path' => 'test/fake/path',
-	    'link' => 'test/fake/path',
-	    'data_dir' => 'test/fake/path',
-	    'menu_template' => [],
-    ]];
-
-    return $sets;
-  }
 
   /**
    * Test Instance Create-Retrieve-Update-Delete.
-   *
-   * @dataProvider instanceProvider
    */
-  public function testInstanceCRUD($testdata) {
+  public function testInstanceCRUD() {
     putenv("TRIPAL_SUPPRESS_ERRORS=TRUE");
 
+    $organism = factory('chado.organism')->create();
+
+    // Full Fake Instance Details.
+    $faker = Factory::create();
+    $testdata = [
+      'organism_id' => $organism->organism_id,
+      'title' => $faker->words(3, TRUE),
+      'description' => $faker->sentence(25, TRUE),
+      'created_at' => $faker->unixTime(),
+      'file' => '/path/to/fake/file',
+    ];
+
     // Check we cannot create a JBrowse instance without an organism.
     $noOrganism = $testdata;
     unset($noOrganism['organism_id']);
@@ -116,23 +113,167 @@ class ApiTest extends TripalTestCase {
 
     putenv("TRIPAL_SUPPRESS_ERRORS");
   }
-  // Associated Data Provider for testing instances.
-  public function instanceProvider() {
+
+  /**
+   * Test Track Create-Retrieve-Update-Delete.
+   */
+  public function testTrackCRUD() {
+
+    // Fake Instance.
     $faker = Factory::create();
-    $sets = [];
+    $organism = factory('chado.organism')->create();
+    $instance_details = [
+      'organism_id' => $organism->organism_id,
+      'title' => $faker->words(3, TRUE),
+      'description' => $faker->sentence(25, TRUE),
+      'created_at' => $faker->unixTime(),
+      'file' => '/path/to/fake/file',
+    ];
+    $instance_id = tripal_jbrowse_mgmt_create_instance($instance_details);
+    $instance = tripal_jbrowse_mgmt_get_instance($instance_id);
 
+    $path = tripal_jbrowse_mgmt_get_track_list_file_path($instance);
+    $this->assertNotFalse($path,
+      "Unable to retrieve the path to the trackList.json");
+
+    // Fake track details.
+    $testdata = [
+      'label' => $faker->words(2, TRUE),
+      'track_type' => 'CanvasFeatures',
+      'file_type' => 'gff',
+      'created_at' => $faker->unixTime(),
+      'file' => '/path/to/fake/file',
+    ];
+
+    // First retrieve when there are no tracks.
+    $tracks = tripal_jbrowse_mgmt_get_tracks($instance);
+    $this->assertCount(0, $tracks,
+      "There should not be tracks as we just created this instance.");
+
+    // Create tracks.
+    $track_id = tripal_jbrowse_mgmt_create_track($instance, $testdata);
+    $this->assertNotFalse($track_id,
+      "We should have a track created successfully.");
+
+    // Retrieve our newly created track.
+    $track = tripal_jbrowse_mgmt_get_track($track_id);
+    $this->assertNotFalse($track, "Unable to create track.");
+    $this->assertEquals($testdata['label'], $track->label,
+      "The label of our new track didn't match what we submitted.");
+    $this->assertEquals($instance->id, $track->instance_id,
+      "The instance_id of our new track didn't match what we submitted.");
+    $this->assertEquals($instance->organism_id, $track->organism_id,
+      "The organism_id of our new track didn't match what we submitted.");
+
+    // Retrieve track with a condition.
+    $tracks = tripal_jbrowse_mgmt_get_tracks($instance, ['label' => $testdata['label']]);
+    $this->assertCount(1, $tracks, "We were not able to select a track we knew should exist.");
+
+    // Now update it.
+    $new_label = 'NEW LABEL ' . uniqid();
+    $success = tripal_jbrowse_mgmt_update_track($track, ['label' => $new_label]);
+    $this->assertNotFalse($success, "Unable to update track label.");
+    $new_track = tripal_jbrowse_mgmt_get_track($track_id);
+    $this->assertEquals($new_label, $new_track->label,
+      "The label of the track was not updated.");
+
+    // Finally, delete it.
+    $success = tripal_jbrowse_mgmt_delete_track($track_id);
+    $this->assertNotFalse($success, "Unable to delete track.");
+    $success = tripal_jbrowse_mgmt_delete_track($track_id);
+    $this->assertEquals(0, $success, "Deleted a track that doesn't exist?");
+  }
+
+  /**
+   * Test organism-related api functions.
+   */
+  public function testOrganismAPI() {
+
+    // Fake Organism.
+    $faker = Factory::create();
     $organism = factory('chado.organism')->create();
 
-    // Full Fake Instance Details.
-    $sets[] = [[
+    $organism_list = tripal_jbrowse_mgmt_get_organisms_list();
+    $this->assertNotCount(0, $organism_list, "There should be at least one organism.");
+    $this->assertArrayContainsObjectValue($organism_list, 'organism_id', $organism->organism_id);
+
+    $organism_name = tripal_jbrowse_mgmt_construct_organism_name($organism);
+    $this->assertRegexp('/'.$organism->genus.'/', $organism_name,
+      "The organism name did not contain the genus.");
+    $this->assertRegexp('/'.$organism->species.'/', $organism_name,
+      "The organism name did not contain the species.");
+
+    $slug = tripal_jbrowse_mgmt_make_slug($organism_name);
+    $this->assertNotRegexp('/ /', $slug,
+      "The organism slug should not contain spaces.");
+  }
+
+  /**
+   * Test Instance Properties Create-Retrieve-Update.
+   */
+  public function testInstanceProperyCRU() {
+
+    // Fake Instance.
+    $faker = Factory::create();
+    $organism = factory('chado.organism')->create();
+    $instance_details = [
       'organism_id' => $organism->organism_id,
       'title' => $faker->words(3, TRUE),
       'description' => $faker->sentence(25, TRUE),
       'created_at' => $faker->unixTime(),
       'file' => '/path/to/fake/file',
-    ]];
+    ];
+    $instance_id = tripal_jbrowse_mgmt_create_instance($instance_details);
+
+    $testdata = [
+      $faker->word() => $faker->words(3, TRUE),
+      $faker->word() => $faker->words(2, TRUE),
+      $faker->word() => $faker->words(10, TRUE),
+    ];
+
+    // Create.
+    tripal_jbrowse_mgmt_save_instance_properties($instance_id, $testdata);
+
+    // Retrieve.
+    $properties = tripal_jbrowse_mgmt_get_instance_properties($instance_id);
+    $this->assertIsArray($properties, "Unable to retrieve newly created properties.");
+    $this->assertCount(3, $properties,
+      "There was not the expected count of properties.");
+
+    // Update single property.
+    $property_name = key($testdata);
+    $new_value = 'NEW VALUE '.uniqid();
+    tripal_jbrowse_mgmt_save_instance_property($instance_id, $property_name, $new_value);
+    $retrieved_value = tripal_jbrowse_mgmt_get_instance_property($instance_id, $property_name);
+    $this->assertEquals($new_value, $retrieved_value,
+      "We were unable to update a single property.");
 
-    return $sets;
   }
 
+  /**
+   * Test Miscellaneous API functions.
+   */
+  public function testMiscAPI() {
+
+    $track_types = tripal_jbrowse_mgmt_get_track_types();
+    $this->assertIsArray($track_types,
+      "The track types should be an array.");
+
+  }
+  /**
+   * Provide an assertion to check properties of an array of objects.
+   *
+   * For example, if you have an array of organism objects, the following code
+   * would check that one object in the array has an organism_id of 50.
+   * @code $this->assertArrayContainsObjectValue($array, 'organism_id', 50);
+   */
+  private function assertArrayContainsObjectValue($theArray, $attribute, $value)
+  {
+      foreach($theArray as $arrayItem) {
+          if($arrayItem->$attribute == $value) {
+              return true;
+          }
+      }
+      return false;
+  }
 }

+ 2 - 13
tripal_jbrowse_mgmt/includes/tripal_jbrowse_mgmt.api.inc

@@ -108,7 +108,7 @@ function tripal_jbrowse_mgmt_create_instance($data) {
   }
 
   // If they are all present, then insert into the database.
-  $instance_id = db_insert('tripal_jbrowse_mgmt_instances')->fields([
+  return db_insert('tripal_jbrowse_mgmt_instances')->fields([
     'uid' => $user->uid,
     'organism_id' => $data['organism_id'],
     'title' => $data['title'],
@@ -117,11 +117,6 @@ function tripal_jbrowse_mgmt_create_instance($data) {
     'file' => $data['file'],
   ])->execute();
 
-  if (!$instance_id) {
-    return FALSE;
-  }
-
-  return $instance_id;
 }
 
 /**
@@ -186,7 +181,7 @@ function tripal_jbrowse_mgmt_delete_instance($instance) {
 function tripal_jbrowse_mgmt_create_track($instance, $data) {
   global $user;
 
-  $track_id = db_insert('tripal_jbrowse_mgmt_tracks')->fields([
+  return db_insert('tripal_jbrowse_mgmt_tracks')->fields([
     'uid' => $user->uid,
     'instance_id' => $instance->id,
     'organism_id' => $instance->organism_id,
@@ -196,12 +191,6 @@ function tripal_jbrowse_mgmt_create_track($instance, $data) {
     'created_at' => $data['created_at'],
     'file' => $data['file'],
   ])->execute();
-
-  if (!$track_id) {
-    return FALSE;
-  }
-
-  return $track_id;
 }
 
 /**