| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 | 
							- <?php
 
- namespace Tests\tripal_jbrowse_mgmt;
 
- use StatonLab\TripalTestSuite\DBTransaction;
 
- use StatonLab\TripalTestSuite\TripalTestCase;
 
- use Faker\Factory;
 
- class ApiTest extends TripalTestCase {
 
-   // Uncomment to auto start and rollback db transactions per test method.
 
-   use DBTransaction;
 
-   /**
 
-    * Tests the Settings API.
 
-    *
 
-    * Specifically tripal_jbrowse_mgmt_save_settings()
 
-    * and tripal_jbrowse_mgmt_get_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();
 
-     // Check that all the expected settings are available.
 
-     $expected = ['bin_path', 'link', 'data_dir', 'menu_template'];
 
-     foreach ($expected as $expected_key) {
 
-       $this->assertArrayHasKey($expected_key, $retrieved,
 
-         "Retrieved settings do not contain $expected_key");
 
-       // Check that the settings match if provided in test.
 
-       if (isset($test_settings[$expected_key])) {
 
-         $this->assertEquals(
 
-           $test_settings[$expected_key],
 
-           $retrieved[$expected_key],
 
-           "The retrieved value for $expected_key does not match what we set."
 
-         );
 
-       }
 
-     }
 
-   }
 
-   /**
 
-    * Test Instance Create-Retrieve-Update-Delete.
 
-    */
 
-   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']);
 
-     $id = tripal_jbrowse_mgmt_create_instance($noOrganism);
 
-     $this->assertFalse($id,
 
-       "Created an instance without an organism_id!?!");
 
-     // Now try to create an instance with all the data.
 
-     $id = tripal_jbrowse_mgmt_create_instance($testdata);
 
-     $this->assertNotFalse($id,
 
-       "Unable to create instance.");
 
-     // Try to retrieve the instance we just created.
 
-     $retrieved_instance = tripal_jbrowse_mgmt_get_instance($id);
 
-     $this->assertNotFalse($id, "We did not retrieve an instance?");
 
-     $this->assertEquals($id, $retrieved_instance->id,
 
-       "We retrieved a different instance then we asked for?");
 
-     $this->assertEquals(
 
-       $testdata['organism_id'], $retrieved_instance->organism_id,
 
-       "Retreived the same instance but the organism is not correct?");
 
-     // Change the title and test the instance was updated.
 
-     $new_title = $testdata;
 
-     $testdata['title'] = 'NEW FAKE TITLE ' . uniqid();
 
-     $success = tripal_jbrowse_mgmt_update_instance($id, $new_title);
 
-     $this->assertNotFalse($success, 'Unable to update instance title.');
 
-     $retrieved_instance = tripal_jbrowse_mgmt_get_instance($id);
 
-     $this->assertEquals(
 
-       $new_title['title'], $retrieved_instance->title,
 
-       "The title was not updated.");
 
-     // Finally delete him!
 
-     $success = tripal_jbrowse_mgmt_delete_instance($retrieved_instance);
 
-     $this->assertNotFalse($success, 'Unable to delete this instance.');
 
-     $one_more_time = tripal_jbrowse_mgmt_get_instance($id);
 
-     $this->assertFalse($one_more_time);
 
-     // and delete with numeric id.
 
-     $success = tripal_jbrowse_mgmt_delete_instance($id);
 
-     $this->assertNotFalse($success, 'Unable to delete this instance.');
 
-     // and catch an exception during delete.
 
-     try {
 
-       $success = tripal_jbrowse_mgmt_delete_instance('FAKESTRING');
 
-       // If we get here without an exception then this test should fail.
 
-       $this->assertTrue(FALSE, "Shouldn't be able to extract instance to delete.");
 
-     } catch (\Exception $e) {
 
-         // Not worried since this is expected!
 
-     }
 
-     putenv("TRIPAL_SUPPRESS_ERRORS");
 
-   }
 
-   /**
 
-    * Test Track Create-Retrieve-Update-Delete.
 
-    */
 
-   public function testTrackCRUD() {
 
-     // 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);
 
-     $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();
 
-     $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.");
 
-   }
 
-   /**
 
-    * 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;
 
-   }
 
- }
 
 
  |