|  | @@ -5,6 +5,8 @@ namespace Tests;
 | 
											
												
													
														|  |  use StatonLab\TripalTestSuite\DBTransaction;
 |  |  use StatonLab\TripalTestSuite\DBTransaction;
 | 
											
												
													
														|  |  use StatonLab\TripalTestSuite\TripalTestCase;
 |  |  use StatonLab\TripalTestSuite\TripalTestCase;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  class OBOImporterTest extends TripalTestCase {
 |  |  class OBOImporterTest extends TripalTestCase {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |    // Uncomment to auto start and rollback db transactions per test method.
 |  |    // Uncomment to auto start and rollback db transactions per test method.
 | 
											
										
											
												
													
														|  | @@ -42,534 +44,534 @@ class OBOImporterTest extends TripalTestCase {
 | 
											
												
													
														|  |      $importer->run();
 |  |      $importer->run();
 | 
											
												
													
														|  |    }
 |  |    }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -  /**
 |  | 
 | 
											
												
													
														|  | -   * Tests that an OBO from a local path can be loaded.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * For this test we will use a test ontology.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * @group obo
 |  | 
 | 
											
												
													
														|  | -   */
 |  | 
 | 
											
												
													
														|  | -  public function testLocalOBO() {
 |  | 
 | 
											
												
													
														|  | -    $name = 'tripal_obo_test';
 |  | 
 | 
											
												
													
														|  | -    $path = __DIR__ . '/../example_files/test.obo';
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    $this->loadOBO($name, $path);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // Make sure we have a proper vocabulary record.
 |  | 
 | 
											
												
													
														|  | -    $tot_cv_id = db_select('chado.cv', 'c')
 |  | 
 | 
											
												
													
														|  | -      ->fields('c', ['cv_id'])
 |  | 
 | 
											
												
													
														|  | -      ->condition('name', 'tripal_obo_test')
 |  | 
 | 
											
												
													
														|  | -      ->execute()
 |  | 
 | 
											
												
													
														|  | -      ->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $this->assertNotFalse($tot_cv_id,
 |  | 
 | 
											
												
													
														|  | -      "Missing the 'tripal_obo_test' cv record after loading the test.obo file");
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // Make sure we have a proper database record.
 |  | 
 | 
											
												
													
														|  | -    $tot_db_id = db_select('chado.db', 'd')
 |  | 
 | 
											
												
													
														|  | -      ->fields('d', ['db_id'])
 |  | 
 | 
											
												
													
														|  | -      ->condition('name', 'TOT')
 |  | 
 | 
											
												
													
														|  | -      ->execute()
 |  | 
 | 
											
												
													
														|  | -      ->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $this->assertNotFalse($tot_db_id,
 |  | 
 | 
											
												
													
														|  | -      "Missing the 'TOT' db record after loading the test.obo file");
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    return [[$tot_cv_id, $tot_db_id]];
 |  | 
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  /**
 |  | 
 | 
											
												
													
														|  | -   * Test that all nodes in our test OBO are loaded.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * @group obo
 |  | 
 | 
											
												
													
														|  | -   * @dataProvider testLocalOBO
 |  | 
 | 
											
												
													
														|  | -   */
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  public function testCVterms($cv_id, $db_id) {
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // Our test OBO has 14 nodes.
 |  | 
 | 
											
												
													
														|  | -    $nodes = [
 |  | 
 | 
											
												
													
														|  | -      ['TOT:001' => 'node01'],
 |  | 
 | 
											
												
													
														|  | -      ['TOT:002' => 'node02'],
 |  | 
 | 
											
												
													
														|  | -      ['TOT:003' => 'node03'],
 |  | 
 | 
											
												
													
														|  | -      ['TOT:004' => 'node04'],
 |  | 
 | 
											
												
													
														|  | -      ['TOT:005' => 'node05'],
 |  | 
 | 
											
												
													
														|  | -      ['TOT:006' => 'node06'],
 |  | 
 | 
											
												
													
														|  | -      ['TOT:007' => 'node07'],
 |  | 
 | 
											
												
													
														|  | -      ['TOT:008' => 'node08'],
 |  | 
 | 
											
												
													
														|  | -      ['TOT:009' => 'node09'],
 |  | 
 | 
											
												
													
														|  | -      ['TOT:010' => 'node10'],
 |  | 
 | 
											
												
													
														|  | -      ['TOT:011' => 'node11'],
 |  | 
 | 
											
												
													
														|  | -      ['TOT:012' => 'node12'],
 |  | 
 | 
											
												
													
														|  | -      ['TOT:013' => 'node13'],
 |  | 
 | 
											
												
													
														|  | -      ['TOT:014' => 'node14'],
 |  | 
 | 
											
												
													
														|  | -    ];
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // Test that the proper records were added to identify the term.    
 |  | 
 | 
											
												
													
														|  | -    foreach ($nodes as $id => $node_name) {
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -      // Check that cvterm record is inserted.
 |  | 
 | 
											
												
													
														|  | -      $cvterm_id = db_select('chado.cvterm', 'cvt')
 |  | 
 | 
											
												
													
														|  | -        ->fields('cvt', ['cvterm_id'])
 |  | 
 | 
											
												
													
														|  | -        ->condition('cvt.name', $node_name)
 |  | 
 | 
											
												
													
														|  | -        ->condition('cvt.cv_id', $cv_id)
 |  | 
 | 
											
												
													
														|  | -        ->execute()
 |  | 
 | 
											
												
													
														|  | -        ->fetchField();
 |  | 
 | 
											
												
													
														|  | -      $this->assertNotFalse($cvterm_id,
 |  | 
 | 
											
												
													
														|  | -        "Missing the cvterm record with name, '$node' after loading the test.obo file");
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -      // Check that the dbxref record is inserted.
 |  | 
 | 
											
												
													
														|  | -      $accession = preg_replace('/TOT:/', '', $id);
 |  | 
 | 
											
												
													
														|  | -      $dbxref_id = db_select('chado.dbxref', 'dbx')
 |  | 
 | 
											
												
													
														|  | -        ->fields('dbx', ['dbxref_id'])
 |  | 
 | 
											
												
													
														|  | -        ->condition('accession', $accession)
 |  | 
 | 
											
												
													
														|  | -        ->condition('db_id', $db_id);
 |  | 
 | 
											
												
													
														|  | -      $this->assertNotFalse($cvterm_id,
 |  | 
 | 
											
												
													
														|  | -        "Missing the dbxref record forid, '$id' after loading the test.obo file");
 |  | 
 | 
											
												
													
														|  | -    }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // Test node 11 to make sure the definition was inserted correctly.
 |  | 
 | 
											
												
													
														|  | -    // The definition for node11 has an extra colon and a comment.  The colon
 |  | 
 | 
											
												
													
														|  | -    // should not throw off the insertion of the full definition and
 |  | 
 | 
											
												
													
														|  | -    // the comment should be excluded.
 |  | 
 | 
											
												
													
														|  | -    $def = db_select('chado.cvterm', 'cvt')
 |  | 
 | 
											
												
													
														|  | -      ->fields('cvt', ['definition'])
 |  | 
 | 
											
												
													
														|  | -      ->condition('cvt.name', 'node11')
 |  | 
 | 
											
												
													
														|  | -      ->condition('cvt.cv_id', $cv_id)
 |  | 
 | 
											
												
													
														|  | -      ->execute()
 |  | 
 | 
											
												
													
														|  | -      ->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $this->assertNotFalse($def,
 |  | 
 | 
											
												
													
														|  | -      "The definition for node11 was not added.");
 |  | 
 | 
											
												
													
														|  | -    $this->assertEquals('This is node 11 : Yo', $def,
 |  | 
 | 
											
												
													
														|  | -      "The definition for node11 is incorrect. it was stored as \"$def\" but should be \"def: This is node 11 : Yo\".");
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // Make sure that colons in term names don't screw up the term. This test
 |  | 
 | 
											
												
													
														|  | -    // corresponds to the term with id CHEBI:132502 in the test.obo file.
 |  | 
 | 
											
												
													
														|  | -    $exists = db_select('chado.cv', 'c')
 |  | 
 | 
											
												
													
														|  | -      ->fields('c', ['cv_id'])
 |  | 
 | 
											
												
													
														|  | -      ->condition('name', 'fatty acid 18')
 |  | 
 | 
											
												
													
														|  | -      ->execute()
 |  | 
 | 
											
												
													
														|  | -      ->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $this->assertFalse($exists);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // Node14 should be marked as obsolete.
 |  | 
 | 
											
												
													
														|  | -    $sql = "
 |  | 
 | 
											
												
													
														|  | -      SELECT CVT.is_obsolete
 |  | 
 | 
											
												
													
														|  | -      FROM {cvterm} CVT
 |  | 
 | 
											
												
													
														|  | -         INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 |  | 
 | 
											
												
													
														|  | -         INNER JOIN {db} DB on DB.db_id = DBX.db_id
 |  | 
 | 
											
												
													
														|  | -       WHERE DB.name = 'TOT' and DBX.accession = '014'
 |  | 
 | 
											
												
													
														|  | -    ";
 |  | 
 | 
											
												
													
														|  | -    $is_obsolete = chado_query($sql)->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $this->assertEquals(1, $is_obsolete,
 |  | 
 | 
											
												
													
														|  | -      "The term, node14, should be marked as obsolete after loading of the test.obo file.");
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // Every vocabulary should have an is_a term added to support the is_a
 |  | 
 | 
											
												
													
														|  | -    // relationships.
 |  | 
 | 
											
												
													
														|  | -    $sql = "
 |  | 
 | 
											
												
													
														|  | -      SELECT CVT.is_relationshiptype
 |  | 
 | 
											
												
													
														|  | -      FROM {cvterm} CVT
 |  | 
 | 
											
												
													
														|  | -         INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 |  | 
 | 
											
												
													
														|  | -         INNER JOIN {db} DB on DB.db_id = DBX.db_id
 |  | 
 | 
											
												
													
														|  | -       WHERE CVT.name = 'is_a' and DB.name = 'TOT'
 |  | 
 | 
											
												
													
														|  | -    ";
 |  | 
 | 
											
												
													
														|  | -    $is_reltype = chado_query($sql)->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $this->assertNotFalse($is_reltype,
 |  | 
 | 
											
												
													
														|  | -      "The cvterm record for, is_a, should have been added during loading of the test.obo file.");
 |  | 
 | 
											
												
													
														|  | -    $this->assertEquals(1, $is_reltype,
 |  | 
 | 
											
												
													
														|  | -      "The cvterm record, is_a, should be marked as a relationship type.");
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  /**
 |  | 
 | 
											
												
													
														|  | -   * Test that insertion of synonyms works.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * The term 'node11' has a synonym:"crazy node" EXACT []
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * @group obo
 |  | 
 | 
											
												
													
														|  | -   * @dataProvider testLocalOBO
 |  | 
 | 
											
												
													
														|  | -   */
 |  | 
 | 
											
												
													
														|  | -  public function testSynonyms($cv_id, $db_id) {
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    $query = db_select('chado.cvtermsynonym', 'cvts');
 |  | 
 | 
											
												
													
														|  | -    $query->fields('cvts', ['synonym']);
 |  | 
 | 
											
												
													
														|  | -    $query->join('chado.cvterm', 'cvt', 'cvts.cvterm_id = cvt.cvterm_id');
 |  | 
 | 
											
												
													
														|  | -    $query->condition('cvt.name', 'node11');
 |  | 
 | 
											
												
													
														|  | -    $synonym = $query->execute()->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $this->assertNotFalse($synonym,
 |  | 
 | 
											
												
													
														|  | -      "Failed to find the 'crazy node' synonym record for node 11 after loading the test.obo file.");
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    $this->assertEquals("crazy node", $synonym,
 |  | 
 | 
											
												
													
														|  | -      "Failed to properly add the 'crazy node' synonym for node 11 instead the following was loaded: $synonym");
 |  | 
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  /**
 |  | 
 | 
											
												
													
														|  | -   * Test that insertion of subset works.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * The term 'node11' belongs to the test_crazy subset. Everything else belongs
 |  | 
 | 
											
												
													
														|  | -   * to the test_normal subset.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * @group obo
 |  | 
 | 
											
												
													
														|  | -   * @dataProvider testLocalOBO
 |  | 
 | 
											
												
													
														|  | -   */
 |  | 
 | 
											
												
													
														|  | -  public function testSubset($cv_id, $db_id) {
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    $sql = "
 |  | 
 | 
											
												
													
														|  | -      SELECT CVT.name
 |  | 
 | 
											
												
													
														|  | -      FROM {cvtermprop} CVTP
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {cvterm} CVTPT on CVTPT.cvterm_id = CVTP.type_id
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {cvterm} CVT on CVT.cvterm_id = CVTP.cvterm_id
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {dbxref} DBX on CVT.dbxref_id = DBX.dbxref_id
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {db} DB on DB.db_id = DBX.db_id
 |  | 
 | 
											
												
													
														|  | -      WHERE CVTPT.name = 'Subgroup' and DB.name = 'TOT' and CVTP.value = 'test_crazy'
 |  | 
 | 
											
												
													
														|  | -    ";
 |  | 
 | 
											
												
													
														|  | -    $term_name = chado_query($sql)->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $this->assertNotFalse($term_name,
 |  | 
 | 
											
												
													
														|  | -      "This cvtermprop record for the subset 'test_crazy' is missing.");
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    $this->assertEquals('node11', $term_name,
 |  | 
 | 
											
												
													
														|  | -      "This cvtermprop record for the subset 'test_crazy' is assigned to term, $term_name, instead of node11.");
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    $sql = "
 |  | 
 | 
											
												
													
														|  | -      SELECT count(CVT.cvterm_id)
 |  | 
 | 
											
												
													
														|  | -      FROM {cvtermprop} CVTP
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {cvterm} CVTPT on CVTPT.cvterm_id = CVTP.type_id
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {cvterm} CVT on CVT.cvterm_id = CVTP.cvterm_id
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {dbxref} DBX on CVT.dbxref_id = DBX.dbxref_id
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {db} DB on DB.db_id = DBX.db_id
 |  | 
 | 
											
												
													
														|  | -      WHERE CVTPT.name = 'Subgroup' and DB.name = 'TOT' and CVTP.value = 'test_normal'
 |  | 
 | 
											
												
													
														|  | -    ";
 |  | 
 | 
											
												
													
														|  | -    $subset_count = chado_query($sql)->fetchField();
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    $this->assertNotFalse($subset_count,
 |  | 
 | 
											
												
													
														|  | -      "This cvtermprop record for the subset 'test_normal' are missing.");
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // There should be 12 terms that belong to subset 'test_normal' as node14
 |  | 
 | 
											
												
													
														|  | -    // does not belong to a subset.
 |  | 
 | 
											
												
													
														|  | -    $this->assertEquals(12, $subset_count,
 |  | 
 | 
											
												
													
														|  | -      "There are $subset_count cvtermprop record for the subset 'test_normal' but there should be 13.");
 |  | 
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  /**
 |  | 
 | 
											
												
													
														|  | -   * Test that the insertion of xref works.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * The term 'node11' belongs to the test_crazy subset. Everything else belongs
 |  | 
 | 
											
												
													
														|  | -   * to the test_normal subset.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * @group obo
 |  | 
 | 
											
												
													
														|  | -   * @dataProvider testLocalOBO
 |  | 
 | 
											
												
													
														|  | -   */
 |  | 
 | 
											
												
													
														|  | -  public function testXref($cv_id, $db_id) {
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    $sql = "
 |  | 
 | 
											
												
													
														|  | -      SELECT concat(DB2.name, ':', DBX2.accession)
 |  | 
 | 
											
												
													
														|  | -      FROM {cvterm} CVT
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {db} on DB.db_id = DBX.db_id
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {cvterm_dbxref} CVTDBX on CVTDBX.cvterm_id = CVT.cvterm_id
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {dbxref} DBX2 on DBX2.dbxref_id = CVTDBX.dbxref_id
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {db} DB2 on DB2.db_id = DBX2.db_id
 |  | 
 | 
											
												
													
														|  | -      WHERE DB.name = 'TOT' and CVT.name = 'node11'
 |  | 
 | 
											
												
													
														|  | -      ORDER BY DBX.accession
 |  | 
 | 
											
												
													
														|  | -    ";
 |  | 
 | 
											
												
													
														|  | -    $xref_id = chado_query($sql)->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $this->assertNotFalse($xref_id,
 |  | 
 | 
											
												
													
														|  | -      "This cvterm_dbxref record for the xref 'GO:0043226' is missing for node11.");
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    $this->assertEquals('GO:0043226', $xref_id,
 |  | 
 | 
											
												
													
														|  | -      "This cvterm_dbxref record for node 11 is, $xref_id, instead of GO:0043226.");
 |  | 
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  /**
 |  | 
 | 
											
												
													
														|  | -   * Test that the insertion of comments works.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * The term 'node11' contains a comment.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * @group obo
 |  | 
 | 
											
												
													
														|  | -   * @dataProvider testLocalOBO
 |  | 
 | 
											
												
													
														|  | -   */
 |  | 
 | 
											
												
													
														|  | -  public function testComment($cv_id, $db_id) {
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    $sql = "
 |  | 
 | 
											
												
													
														|  | -      SELECT CVTP.value
 |  | 
 | 
											
												
													
														|  | -      FROM {cvterm} CVT
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {db} on DB.db_id = DBX.db_id
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {cvtermprop} CVTP on CVTP.cvterm_id = CVT.cvterm_id
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {cvterm} CVTPT on CVTPT.cvterm_id = CVTP.type_id
 |  | 
 | 
											
												
													
														|  | -      WHERE DB.name = 'TOT' and CVTPT.name = 'comment' and CVT.name = 'node11'
 |  | 
 | 
											
												
													
														|  | -      ORDER BY DBX.accession
 |  | 
 | 
											
												
													
														|  | -    ";
 |  | 
 | 
											
												
													
														|  | -    $comment = chado_query($sql)->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $this->assertNotFalse($xref_id,
 |  | 
 | 
											
												
													
														|  | -      "This cvterm_dbxref record for the xref 'This is a crazy node' is missing for node11.");
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    $this->assertEquals('This is a crazy node', $comment,
 |  | 
 | 
											
												
													
														|  | -      "This cvterm_dbxref record for node11 is, \"$comment\", instead of \"This is a crazy node\".");
 |  | 
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  /**
 |  | 
 | 
											
												
													
														|  | -   * Tests that the cvtermpath is properly loaded.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * @group obo
 |  | 
 | 
											
												
													
														|  | -   * @dataProvider testLocalOBO
 |  | 
 | 
											
												
													
														|  | -   */
 |  | 
 | 
											
												
													
														|  | -  public function testRelationships($cv_id, $db_id) {
 |  | 
 | 
											
												
													
														|  | -    $relationships = [
 |  | 
 | 
											
												
													
														|  | -      ['node02', 'is_a', 'node01'],
 |  | 
 | 
											
												
													
														|  | -      ['node03', 'is_a', 'node01'],
 |  | 
 | 
											
												
													
														|  | -      ['node04', 'is_a', 'node01'],
 |  | 
 | 
											
												
													
														|  | -      ['node04', 'has_part', 'node11'],
 |  | 
 | 
											
												
													
														|  | -      ['node05', 'is_a', 'node01'],
 |  | 
 | 
											
												
													
														|  | -      ['node06', 'is_a', 'node03'],
 |  | 
 | 
											
												
													
														|  | -      ['node07', 'is_a', 'node03'],
 |  | 
 | 
											
												
													
														|  | -      ['node08', 'is_a', 'node07'],
 |  | 
 | 
											
												
													
														|  | -      ['node09', 'is_a', 'node04'],
 |  | 
 | 
											
												
													
														|  | -      ['node09', 'is_a', 'node07'],
 |  | 
 | 
											
												
													
														|  | -      ['node10', 'is_a', 'node05'],
 |  | 
 | 
											
												
													
														|  | -      ['node11', 'is_a', 'node09'],
 |  | 
 | 
											
												
													
														|  | -      ['node11', 'is_a', 'node10'],
 |  | 
 | 
											
												
													
														|  | -      ['node12', 'is_a', 'node10'],
 |  | 
 | 
											
												
													
														|  | -      ['node13', 'is_a', 'node11'],
 |  | 
 | 
											
												
													
														|  | -    ];
 |  | 
 | 
											
												
													
														|  | -    foreach ($relationships as $relationship) {
 |  | 
 | 
											
												
													
														|  | -      $subject = $relationship[0];
 |  | 
 | 
											
												
													
														|  | -      $type = $relationship[1];
 |  | 
 | 
											
												
													
														|  | -      $object = $relationship[2];
 |  | 
 | 
											
												
													
														|  | -      $sql = "
 |  | 
 | 
											
												
													
														|  | -        SELECT CVTR.cvterm_relationship_id
 |  | 
 | 
											
												
													
														|  | -        FROM {cvterm} CVT
 |  | 
 | 
											
												
													
														|  | -          INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 |  | 
 | 
											
												
													
														|  | -          INNER JOIN {db} on DB.db_id = DBX.db_id
 |  | 
 | 
											
												
													
														|  | -          INNER JOIN {cvterm_relationship} CVTR on CVTR.subject_id = CVT.cvterm_id
 |  | 
 | 
											
												
													
														|  | -          INNER JOIN {cvterm} CVT2 on CVT2.cvterm_id = CVTR.object_id
 |  | 
 | 
											
												
													
														|  | -          INNER JOIN {cvterm} CVT3 on CVT3.cvterm_id = CVTR.type_id
 |  | 
 | 
											
												
													
														|  | -        WHERE DB.name = 'TOT' AND CVT2.name = :object AND 
 |  | 
 | 
											
												
													
														|  | -          CVT3.name = :type AND CVT.name = :subject
 |  | 
 | 
											
												
													
														|  | -      ";
 |  | 
 | 
											
												
													
														|  | -      $args = [':object' => $object, ':type' => $type, ':subject' => $subject];
 |  | 
 | 
											
												
													
														|  | -      $rel_id = chado_query($sql, $args)->fetchField();
 |  | 
 | 
											
												
													
														|  | -      $this->assertNotFalse($rel_id,
 |  | 
 | 
											
												
													
														|  | -        "The following relationship could not be found: $subect $type $object.");
 |  | 
 | 
											
												
													
														|  | -    }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // Now make sure we have no more relationships than what we are supposed
 |  | 
 | 
											
												
													
														|  | -    // to have.
 |  | 
 | 
											
												
													
														|  | -    $sql = "
 |  | 
 | 
											
												
													
														|  | -      SELECT count(CVTR.cvterm_relationship_id)
 |  | 
 | 
											
												
													
														|  | -      FROM {cvterm} CVT
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {db} on DB.db_id = DBX.db_id
 |  | 
 | 
											
												
													
														|  | -        INNER JOIN {cvterm_relationship} CVTR on CVTR.object_id = CVT.cvterm_id
 |  | 
 | 
											
												
													
														|  | -      WHERE DB.name = 'TOT' AND CVT.is_relationshiptype = 0
 |  | 
 | 
											
												
													
														|  | -    ";
 |  | 
 | 
											
												
													
														|  | -    $rel_count = chado_query($sql)->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $expected = count($relationships);
 |  | 
 | 
											
												
													
														|  | -    $this->assertEquals($expected, $rel_count,
 |  | 
 | 
											
												
													
														|  | -      "There are an incorrect number of relationships. There were $rel_count found but there should be $expected.");
 |  | 
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  /**
 |  | 
 | 
											
												
													
														|  | -   * Tests that the cvtermpath is properly loaded.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * @group obo
 |  | 
 | 
											
												
													
														|  | -   * @dataProvider testLocalOBO
 |  | 
 | 
											
												
													
														|  | -   */
 |  | 
 | 
											
												
													
														|  | -  public function testCVtermPath($cv_id, $db_id) {
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // For now we won't include distance or type in the check because depending
 |  | 
 | 
											
												
													
														|  | -    // how the tree was loaded and if there are multiple paths to a node
 |  | 
 | 
											
												
													
														|  | -    // then there's no guarantee we'll always get the same path. Therefore the
 |  | 
 | 
											
												
													
														|  | -    // type and pathdistance may be different (althoug not incorrect).
 |  | 
 | 
											
												
													
														|  | -    $relationships = [
 |  | 
 | 
											
												
													
														|  | -      // Node01 as root: note that the root term always has a link to itself
 |  | 
 | 
											
												
													
														|  | -      // in the cvtermpath table.
 |  | 
 | 
											
												
													
														|  | -      ['node01', 'node01'],
 |  | 
 | 
											
												
													
														|  | -      ['node01', 'node02'],
 |  | 
 | 
											
												
													
														|  | -      ['node01', 'node03'],
 |  | 
 | 
											
												
													
														|  | -      ['node01', 'node04'],
 |  | 
 | 
											
												
													
														|  | -      ['node01', 'node05'],
 |  | 
 | 
											
												
													
														|  | -      ['node01', 'node06'],
 |  | 
 | 
											
												
													
														|  | -      ['node01', 'node07'],
 |  | 
 | 
											
												
													
														|  | -      ['node01', 'node08'],
 |  | 
 | 
											
												
													
														|  | -      ['node01', 'node09'],
 |  | 
 | 
											
												
													
														|  | -      ['node01', 'node10'],
 |  | 
 | 
											
												
													
														|  | -      ['node01', 'node11'],
 |  | 
 | 
											
												
													
														|  | -      ['node01', 'node12'],
 |  | 
 | 
											
												
													
														|  | -      ['node01', 'node13'],
 |  | 
 | 
											
												
													
														|  | -      // Node03 as root.
 |  | 
 | 
											
												
													
														|  | -      ['node03', 'node04'],
 |  | 
 | 
											
												
													
														|  | -      ['node03', 'node06'],
 |  | 
 | 
											
												
													
														|  | -      ['node03', 'node07'],
 |  | 
 | 
											
												
													
														|  | -      ['node03', 'node08'],
 |  | 
 | 
											
												
													
														|  | -      ['node03', 'node09'],
 |  | 
 | 
											
												
													
														|  | -      ['node03', 'node11'],
 |  | 
 | 
											
												
													
														|  | -      ['node03', 'node13'],
 |  | 
 | 
											
												
													
														|  | -      // Node04 as root.
 |  | 
 | 
											
												
													
														|  | -      ['node04', 'node09'],
 |  | 
 | 
											
												
													
														|  | -      ['node04', 'node11'],
 |  | 
 | 
											
												
													
														|  | -      ['node04', 'node13'],
 |  | 
 | 
											
												
													
														|  | -      // Node05 as root.
 |  | 
 | 
											
												
													
														|  | -      ['node05', 'node04'],
 |  | 
 | 
											
												
													
														|  | -      ['node05', 'node09'],
 |  | 
 | 
											
												
													
														|  | -      ['node05', 'node10'],
 |  | 
 | 
											
												
													
														|  | -      ['node05', 'node11'],
 |  | 
 | 
											
												
													
														|  | -      ['node05', 'node12'],
 |  | 
 | 
											
												
													
														|  | -      ['node05', 'node13'],
 |  | 
 | 
											
												
													
														|  | -      // Node07 as root.
 |  | 
 | 
											
												
													
														|  | -      ['node07', 'node04'],
 |  | 
 | 
											
												
													
														|  | -      ['node07', 'node08'],
 |  | 
 | 
											
												
													
														|  | -      ['node07', 'node09'],
 |  | 
 | 
											
												
													
														|  | -      ['node07', 'node11'],
 |  | 
 | 
											
												
													
														|  | -      ['node07', 'node13'],
 |  | 
 | 
											
												
													
														|  | -      // Node09 as root.
 |  | 
 | 
											
												
													
														|  | -      ['node09', 'node04'],
 |  | 
 | 
											
												
													
														|  | -      ['node09', 'node11'],
 |  | 
 | 
											
												
													
														|  | -      ['node09', 'node13'],
 |  | 
 | 
											
												
													
														|  | -      // Node10 as root.
 |  | 
 | 
											
												
													
														|  | -      ['node10', 'node04'],
 |  | 
 | 
											
												
													
														|  | -      ['node10', 'node09'],
 |  | 
 | 
											
												
													
														|  | -      ['node10', 'node11'],
 |  | 
 | 
											
												
													
														|  | -      ['node10', 'node12'],
 |  | 
 | 
											
												
													
														|  | -      ['node10', 'node13'],
 |  | 
 | 
											
												
													
														|  | -      // Node11 as root.
 |  | 
 | 
											
												
													
														|  | -      ['node11', 'node04'],
 |  | 
 | 
											
												
													
														|  | -      ['node11', 'node09'],
 |  | 
 | 
											
												
													
														|  | -      ['node11', 'node13'],
 |  | 
 | 
											
												
													
														|  | -    ];
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // Populate the cvtermpath for our test OBO.
 |  | 
 | 
											
												
													
														|  | -    chado_update_cvtermpath($cv_id);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    foreach ($relationships as $relationship) {
 |  | 
 | 
											
												
													
														|  | -      $object = $relationship[0];
 |  | 
 | 
											
												
													
														|  | -      $subject = $relationship[1];
 |  | 
 | 
											
												
													
														|  | -      $sql = "
 |  | 
 | 
											
												
													
														|  | -        SELECT cvtermpath_id
 |  | 
 | 
											
												
													
														|  | -        FROM {cvtermpath} CVTP 
 |  | 
 | 
											
												
													
														|  | -          INNER JOIN {cvterm} CVTO on CVTO.cvterm_id = CVTP.object_id
 |  | 
 | 
											
												
													
														|  | -          INNER JOIN {cvterm} CVTS on CVTS.cvterm_id = CVTP.subject_id
 |  | 
 | 
											
												
													
														|  | -          INNER JOIN {cvterm} CVTT on CVTT.cvterm_id = CVTP.type_id
 |  | 
 | 
											
												
													
														|  | -        WHERE CVTP.cv_id = :cv_id and CVTO.name = :object and 
 |  | 
 | 
											
												
													
														|  | -          CVTS.name = :subject
 |  | 
 | 
											
												
													
														|  | -      ";
 |  | 
 | 
											
												
													
														|  | -      $args = [
 |  | 
 | 
											
												
													
														|  | -        ':cv_id' => $cv_id,
 |  | 
 | 
											
												
													
														|  | -        ':object' => $object,
 |  | 
 | 
											
												
													
														|  | -        ':subject' => $subject,
 |  | 
 | 
											
												
													
														|  | -      ];
 |  | 
 | 
											
												
													
														|  | -      $cvtermpath_id = chado_query($sql, $args)->fetchField();
 |  | 
 | 
											
												
													
														|  | -      $this->assertNotFalse($cvtermpath_id,
 |  | 
 | 
											
												
													
														|  | -        "Cound not find the cvtermpath record for the relationship: $subject => $object.");
 |  | 
 | 
											
												
													
														|  | -    }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // Now make sure we have no additional entries.
 |  | 
 | 
											
												
													
														|  | -    $sql = "
 |  | 
 | 
											
												
													
														|  | -          SELECT count(cvtermpath_id)
 |  | 
 | 
											
												
													
														|  | -          FROM {cvtermpath} CVTP
 |  | 
 | 
											
												
													
														|  | -            INNER JOIN {cvterm} CVTO on CVTO.cvterm_id = CVTP.object_id
 |  | 
 | 
											
												
													
														|  | -            INNER JOIN {cvterm} CVTS on CVTS.cvterm_id = CVTP.subject_id
 |  | 
 | 
											
												
													
														|  | -            INNER JOIN {cvterm} CVTT on CVTT.cvterm_id = CVTP.type_id
 |  | 
 | 
											
												
													
														|  | -          WHERE CVTP.cv_id = :cv_id
 |  | 
 | 
											
												
													
														|  | -        ";
 |  | 
 | 
											
												
													
														|  | -    $args = [':cv_id' => $cv_id];
 |  | 
 | 
											
												
													
														|  | -    $rel_count = chado_query($sql, $args)->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $expected = count($relationships);
 |  | 
 | 
											
												
													
														|  | -    $this->assertEquals($expected, $rel_count,
 |  | 
 | 
											
												
													
														|  | -      "There are an incorrect number of paths. There were $rel_count found but there should be $expected.");
 |  | 
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  /**
 |  | 
 | 
											
												
													
														|  | -   * Tests that the EBI Lookup is properly working.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * The term CHEBI:132502 should have been loaded via EBI.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * @group obo
 |  | 
 | 
											
												
													
														|  | -   * @dataProvider testLocalOBO
 |  | 
 | 
											
												
													
														|  | -   */
 |  | 
 | 
											
												
													
														|  | -  public function testEBILookup($cv_id, $db_id) {
 |  | 
 | 
											
												
													
														|  | -    $sql = "
 |  | 
 | 
											
												
													
														|  | -       SELECT CVT.cvterm_id
 |  | 
 | 
											
												
													
														|  | -       FROM  {cvterm} CVT
 |  | 
 | 
											
												
													
														|  | -         INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 |  | 
 | 
											
												
													
														|  | -         INNER JOIN {db} DB on DB.db_id = DBX.db_id
 |  | 
 | 
											
												
													
														|  | -       WHERE DB.name = 'CHEBI' and DBX.accession = '132502'
 |  | 
 | 
											
												
													
														|  | -    ";
 |  | 
 | 
											
												
													
														|  | -    $cvterm_id = chado_query($sql)->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $this->assertNotFalse($cvterm_id,
 |  | 
 | 
											
												
													
														|  | -      "The term, CHEBI:132502, is not present the EBI OLS lookup must not have succeeded.");
 |  | 
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  /**
 |  | 
 | 
											
												
													
														|  | -   * Tests when changes are made between OBO loads.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * Sometimes an ontology can change the names of it's terms, or set some
 |  | 
 | 
											
												
													
														|  | -   * as obsolete, etc. We need to makes sure that when changes are made and
 |  | 
 | 
											
												
													
														|  | -   * the OBO is reloaded that the terms are properly update.
 |  | 
 | 
											
												
													
														|  | -   *
 |  | 
 | 
											
												
													
														|  | -   * @group obo
 |  | 
 | 
											
												
													
														|  | -   * @dataProvider testLocalOBO
 |  | 
 | 
											
												
													
														|  | -   */
 |  | 
 | 
											
												
													
														|  | -  public function testOBOChanges($cv_id, $db_id) {
 |  | 
 | 
											
												
													
														|  | -    $name = 'tripal_obo_test_update';
 |  | 
 | 
											
												
													
														|  | -    $path = __DIR__ . '/../example_files/test.update.obo';
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    $this->loadOBO($name, $path);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // Did the name of term 13 change?
 |  | 
 | 
											
												
													
														|  | -    $sql = "
 |  | 
 | 
											
												
													
														|  | -      SELECT CVT.name
 |  | 
 | 
											
												
													
														|  | -      FROM {cvterm} CVT
 |  | 
 | 
											
												
													
														|  | -         INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 |  | 
 | 
											
												
													
														|  | -         INNER JOIN {db} DB on DB.db_id = DBX.db_id
 |  | 
 | 
											
												
													
														|  | -       WHERE DB.name = 'TOT' and DBX.accession = '013'
 |  | 
 | 
											
												
													
														|  | -    ";
 |  | 
 | 
											
												
													
														|  | -    $name = chado_query($sql)->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $this->assertEquals('New name 13.', $name,
 |  | 
 | 
											
												
													
														|  | -      "The name for node13 (TOT:013) failed to update to 'New name 13'.");
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // Node15 is new, and node02 got removed. Node15 now uses node02's name and
 |  | 
 | 
											
												
													
														|  | -    // has TOT:002 as an alt_id. So, node02 should be marked as obsolete
 |  | 
 | 
											
												
													
														|  | -    $sql = "
 |  | 
 | 
											
												
													
														|  | -      SELECT CVT.is_obsolete
 |  | 
 | 
											
												
													
														|  | -      FROM {cvterm} CVT
 |  | 
 | 
											
												
													
														|  | -         INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 |  | 
 | 
											
												
													
														|  | -         INNER JOIN {db} DB on DB.db_id = DBX.db_id
 |  | 
 | 
											
												
													
														|  | -       WHERE DB.name = 'TOT' and DBX.accession = '002'
 |  | 
 | 
											
												
													
														|  | -    ";
 |  | 
 | 
											
												
													
														|  | -    $is_obsolete = chado_query($sql)->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $this->assertEquals(1, $is_obsolete,
 |  | 
 | 
											
												
													
														|  | -      "The node02 (TOT:002) should be marked as obsolete after update.");
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // Node16 is new, and node08 is now obsolete. Node16 now uses node08's name,
 |  | 
 | 
											
												
													
														|  | -    // so, node08 should be marked as obsolete and have the word '(obsolete)'
 |  | 
 | 
											
												
													
														|  | -    // added to prevent future conflicts.
 |  | 
 | 
											
												
													
														|  | -    $sql = "
 |  | 
 | 
											
												
													
														|  | -      SELECT CVT.name
 |  | 
 | 
											
												
													
														|  | -      FROM {cvterm} CVT
 |  | 
 | 
											
												
													
														|  | -         INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 |  | 
 | 
											
												
													
														|  | -         INNER JOIN {db} DB on DB.db_id = DBX.db_id
 |  | 
 | 
											
												
													
														|  | -       WHERE DB.name = 'TOT' and DBX.accession = '008'
 |  | 
 | 
											
												
													
														|  | -    ";
 |  | 
 | 
											
												
													
														|  | -    $name = chado_query($sql)->fetchField();
 |  | 
 | 
											
												
													
														|  | -    $this->assertEquals("node08 (obsolete)", $name,
 |  | 
 | 
											
												
													
														|  | -      "The node08 (TOT:008) should be marked as obsolete after update.");
 |  | 
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  /**
 |  | 
 | 
											
												
													
														|  | -   * @group obo
 |  | 
 | 
											
												
													
														|  | -   * @group chado
 |  | 
 | 
											
												
													
														|  | -   */
 |  | 
 | 
											
												
													
														|  | -  public function testfindEBITerm_finder_retrieves_term() {
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    module_load_include('inc', 'tripal_chado', 'includes/TripalImporter/OBOImporter');
 |  | 
 | 
											
												
													
														|  | -    $importer_private = new \OBOImporter();
 |  | 
 | 
											
												
													
														|  | -    $importer = reflect($importer_private);
 |  | 
 | 
											
												
													
														|  | -    $id = 'PECO:0007085';
 |  | 
 | 
											
												
													
														|  | -    $result = $importer->findEBITerm($id);
 |  | 
 | 
											
												
													
														|  | -    $this->assertNotEmpty($result);
 |  | 
 | 
											
												
													
														|  | -    $this->assertEquals('fertilizer exposure', $result['name'][0]);
 |  | 
 | 
											
												
													
														|  | -    }
 |  | 
 | 
											
												
													
														|  | 
 |  | +//  /**
 | 
											
												
													
														|  | 
 |  | +//   * Tests that an OBO from a local path can be loaded.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * For this test we will use a test ontology.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * @group obo
 | 
											
												
													
														|  | 
 |  | +//   */
 | 
											
												
													
														|  | 
 |  | +//  public function testLocalOBO() {
 | 
											
												
													
														|  | 
 |  | +//    $name = 'tripal_obo_test';
 | 
											
												
													
														|  | 
 |  | +//    $path = __DIR__ . '/../example_files/test.obo';
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    $this->loadOBO($name, $path);
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // Make sure we have a proper vocabulary record.
 | 
											
												
													
														|  | 
 |  | +//    $tot_cv_id = db_select('chado.cv', 'c')
 | 
											
												
													
														|  | 
 |  | +//      ->fields('c', ['cv_id'])
 | 
											
												
													
														|  | 
 |  | +//      ->condition('name', 'tripal_obo_test')
 | 
											
												
													
														|  | 
 |  | +//      ->execute()
 | 
											
												
													
														|  | 
 |  | +//      ->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $this->assertNotFalse($tot_cv_id,
 | 
											
												
													
														|  | 
 |  | +//      "Missing the 'tripal_obo_test' cv record after loading the test.obo file");
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // Make sure we have a proper database record.
 | 
											
												
													
														|  | 
 |  | +//    $tot_db_id = db_select('chado.db', 'd')
 | 
											
												
													
														|  | 
 |  | +//      ->fields('d', ['db_id'])
 | 
											
												
													
														|  | 
 |  | +//      ->condition('name', 'TOT')
 | 
											
												
													
														|  | 
 |  | +//      ->execute()
 | 
											
												
													
														|  | 
 |  | +//      ->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $this->assertNotFalse($tot_db_id,
 | 
											
												
													
														|  | 
 |  | +//      "Missing the 'TOT' db record after loading the test.obo file");
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    return [[$tot_cv_id, $tot_db_id]];
 | 
											
												
													
														|  | 
 |  | +//  }
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//  /**
 | 
											
												
													
														|  | 
 |  | +//   * Test that all nodes in our test OBO are loaded.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * @group obo
 | 
											
												
													
														|  | 
 |  | +//   * @dataProvider testLocalOBO
 | 
											
												
													
														|  | 
 |  | +//   */
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//  public function testCVterms($cv_id, $db_id) {
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // Our test OBO has 14 nodes.
 | 
											
												
													
														|  | 
 |  | +//    $nodes = [
 | 
											
												
													
														|  | 
 |  | +//      ['TOT:001' => 'node01'],
 | 
											
												
													
														|  | 
 |  | +//      ['TOT:002' => 'node02'],
 | 
											
												
													
														|  | 
 |  | +//      ['TOT:003' => 'node03'],
 | 
											
												
													
														|  | 
 |  | +//      ['TOT:004' => 'node04'],
 | 
											
												
													
														|  | 
 |  | +//      ['TOT:005' => 'node05'],
 | 
											
												
													
														|  | 
 |  | +//      ['TOT:006' => 'node06'],
 | 
											
												
													
														|  | 
 |  | +//      ['TOT:007' => 'node07'],
 | 
											
												
													
														|  | 
 |  | +//      ['TOT:008' => 'node08'],
 | 
											
												
													
														|  | 
 |  | +//      ['TOT:009' => 'node09'],
 | 
											
												
													
														|  | 
 |  | +//      ['TOT:010' => 'node10'],
 | 
											
												
													
														|  | 
 |  | +//      ['TOT:011' => 'node11'],
 | 
											
												
													
														|  | 
 |  | +//      ['TOT:012' => 'node12'],
 | 
											
												
													
														|  | 
 |  | +//      ['TOT:013' => 'node13'],
 | 
											
												
													
														|  | 
 |  | +//      ['TOT:014' => 'node14'],
 | 
											
												
													
														|  | 
 |  | +//    ];
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // Test that the proper records were added to identify the term.
 | 
											
												
													
														|  | 
 |  | +//    foreach ($nodes as $id => $node_name) {
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//      // Check that cvterm record is inserted.
 | 
											
												
													
														|  | 
 |  | +//      $cvterm_id = db_select('chado.cvterm', 'cvt')
 | 
											
												
													
														|  | 
 |  | +//        ->fields('cvt', ['cvterm_id'])
 | 
											
												
													
														|  | 
 |  | +//        ->condition('cvt.name', $node_name)
 | 
											
												
													
														|  | 
 |  | +//        ->condition('cvt.cv_id', $cv_id)
 | 
											
												
													
														|  | 
 |  | +//        ->execute()
 | 
											
												
													
														|  | 
 |  | +//        ->fetchField();
 | 
											
												
													
														|  | 
 |  | +//      $this->assertNotFalse($cvterm_id,
 | 
											
												
													
														|  | 
 |  | +//        "Missing the cvterm record with name, ' $node_name ' after loading the test.obo file");
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//      // Check that the dbxref record is inserted.
 | 
											
												
													
														|  | 
 |  | +//      $accession = preg_replace('/TOT:/', '', $id);
 | 
											
												
													
														|  | 
 |  | +//      $dbxref_id = db_select('chado.dbxref', 'dbx')
 | 
											
												
													
														|  | 
 |  | +//        ->fields('dbx', ['dbxref_id'])
 | 
											
												
													
														|  | 
 |  | +//        ->condition('accession', $accession)
 | 
											
												
													
														|  | 
 |  | +//        ->condition('db_id', $db_id);
 | 
											
												
													
														|  | 
 |  | +//      $this->assertNotFalse($cvterm_id,
 | 
											
												
													
														|  | 
 |  | +//        "Missing the dbxref record forid, '$id' after loading the test.obo file");
 | 
											
												
													
														|  | 
 |  | +//    }
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // Test node 11 to make sure the definition was inserted correctly.
 | 
											
												
													
														|  | 
 |  | +//    // The definition for node11 has an extra colon and a comment.  The colon
 | 
											
												
													
														|  | 
 |  | +//    // should not throw off the insertion of the full definition and
 | 
											
												
													
														|  | 
 |  | +//    // the comment should be excluded.
 | 
											
												
													
														|  | 
 |  | +//    $def = db_select('chado.cvterm', 'cvt')
 | 
											
												
													
														|  | 
 |  | +//      ->fields('cvt', ['definition'])
 | 
											
												
													
														|  | 
 |  | +//      ->condition('cvt.name', 'node11')
 | 
											
												
													
														|  | 
 |  | +//      ->condition('cvt.cv_id', $cv_id)
 | 
											
												
													
														|  | 
 |  | +//      ->execute()
 | 
											
												
													
														|  | 
 |  | +//      ->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $this->assertNotFalse($def,
 | 
											
												
													
														|  | 
 |  | +//      "The definition for node11 was not added.");
 | 
											
												
													
														|  | 
 |  | +//    $this->assertEquals('This is node 11 : Yo', $def,
 | 
											
												
													
														|  | 
 |  | +//      "The definition for node11 is incorrect. it was stored as \"$def\" but should be \"def: This is node 11 : Yo\".");
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // Make sure that colons in term names don't screw up the term. This test
 | 
											
												
													
														|  | 
 |  | +//    // corresponds to the term with id CHEBI:132502 in the test.obo file.
 | 
											
												
													
														|  | 
 |  | +//    $exists = db_select('chado.cv', 'c')
 | 
											
												
													
														|  | 
 |  | +//      ->fields('c', ['cv_id'])
 | 
											
												
													
														|  | 
 |  | +//      ->condition('name', 'fatty acid 18')
 | 
											
												
													
														|  | 
 |  | +//      ->execute()
 | 
											
												
													
														|  | 
 |  | +//      ->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $this->assertFalse($exists);
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // Node14 should be marked as obsolete.
 | 
											
												
													
														|  | 
 |  | +//    $sql = "
 | 
											
												
													
														|  | 
 |  | +//      SELECT CVT.is_obsolete
 | 
											
												
													
														|  | 
 |  | +//      FROM {cvterm} CVT
 | 
											
												
													
														|  | 
 |  | +//         INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 | 
											
												
													
														|  | 
 |  | +//         INNER JOIN {db} DB on DB.db_id = DBX.db_id
 | 
											
												
													
														|  | 
 |  | +//       WHERE DB.name = 'TOT' and DBX.accession = '014'
 | 
											
												
													
														|  | 
 |  | +//    ";
 | 
											
												
													
														|  | 
 |  | +//    $is_obsolete = chado_query($sql)->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $this->assertEquals(1, $is_obsolete,
 | 
											
												
													
														|  | 
 |  | +//      "The term, node14, should be marked as obsolete after loading of the test.obo file.");
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // Every vocabulary should have an is_a term added to support the is_a
 | 
											
												
													
														|  | 
 |  | +//    // relationships.
 | 
											
												
													
														|  | 
 |  | +//    $sql = "
 | 
											
												
													
														|  | 
 |  | +//      SELECT CVT.is_relationshiptype
 | 
											
												
													
														|  | 
 |  | +//      FROM {cvterm} CVT
 | 
											
												
													
														|  | 
 |  | +//         INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 | 
											
												
													
														|  | 
 |  | +//         INNER JOIN {db} DB on DB.db_id = DBX.db_id
 | 
											
												
													
														|  | 
 |  | +//       WHERE CVT.name = 'is_a' and DB.name = 'TOT'
 | 
											
												
													
														|  | 
 |  | +//    ";
 | 
											
												
													
														|  | 
 |  | +//    $is_reltype = chado_query($sql)->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $this->assertNotFalse($is_reltype,
 | 
											
												
													
														|  | 
 |  | +//      "The cvterm record for, is_a, should have been added during loading of the test.obo file.");
 | 
											
												
													
														|  | 
 |  | +//    $this->assertEquals(1, $is_reltype,
 | 
											
												
													
														|  | 
 |  | +//      "The cvterm record, is_a, should be marked as a relationship type.");
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//  }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +//  /**
 | 
											
												
													
														|  | 
 |  | +//   * Test that insertion of synonyms works.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * The term 'node11' has a synonym:"crazy node" EXACT []
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * @group obo
 | 
											
												
													
														|  | 
 |  | +//   * @dataProvider testLocalOBO
 | 
											
												
													
														|  | 
 |  | +//   */
 | 
											
												
													
														|  | 
 |  | +//  public function testSynonyms($cv_id, $db_id) {
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    $query = db_select('chado.cvtermsynonym', 'cvts');
 | 
											
												
													
														|  | 
 |  | +//    $query->fields('cvts', ['synonym']);
 | 
											
												
													
														|  | 
 |  | +//    $query->join('chado.cvterm', 'cvt', 'cvts.cvterm_id = cvt.cvterm_id');
 | 
											
												
													
														|  | 
 |  | +//    $query->condition('cvt.name', 'node11');
 | 
											
												
													
														|  | 
 |  | +//    $synonym = $query->execute()->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $this->assertNotFalse($synonym,
 | 
											
												
													
														|  | 
 |  | +//      "Failed to find the 'crazy node' synonym record for node 11 after loading the test.obo file.");
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    $this->assertEquals("crazy node", $synonym,
 | 
											
												
													
														|  | 
 |  | +//      "Failed to properly add the 'crazy node' synonym for node 11 instead the following was loaded: $synonym");
 | 
											
												
													
														|  | 
 |  | +//  }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +//  /**
 | 
											
												
													
														|  | 
 |  | +//   * Test that insertion of subset works.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * The term 'node11' belongs to the test_crazy subset. Everything else belongs
 | 
											
												
													
														|  | 
 |  | +//   * to the test_normal subset.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * @group obo
 | 
											
												
													
														|  | 
 |  | +//   * @dataProvider testLocalOBO
 | 
											
												
													
														|  | 
 |  | +//   */
 | 
											
												
													
														|  | 
 |  | +//  public function testSubset($cv_id, $db_id) {
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    $sql = "
 | 
											
												
													
														|  | 
 |  | +//      SELECT CVT.name
 | 
											
												
													
														|  | 
 |  | +//      FROM {cvtermprop} CVTP
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {cvterm} CVTPT on CVTPT.cvterm_id = CVTP.type_id
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {cvterm} CVT on CVT.cvterm_id = CVTP.cvterm_id
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {dbxref} DBX on CVT.dbxref_id = DBX.dbxref_id
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {db} DB on DB.db_id = DBX.db_id
 | 
											
												
													
														|  | 
 |  | +//      WHERE CVTPT.name = 'Subgroup' and DB.name = 'TOT' and CVTP.value = 'test_crazy'
 | 
											
												
													
														|  | 
 |  | +//    ";
 | 
											
												
													
														|  | 
 |  | +//    $term_name = chado_query($sql)->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $this->assertNotFalse($term_name,
 | 
											
												
													
														|  | 
 |  | +//      "This cvtermprop record for the subset 'test_crazy' is missing.");
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    $this->assertEquals('node11', $term_name,
 | 
											
												
													
														|  | 
 |  | +//      "This cvtermprop record for the subset 'test_crazy' is assigned to term, $term_name, instead of node11.");
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    $sql = "
 | 
											
												
													
														|  | 
 |  | +//      SELECT count(CVT.cvterm_id)
 | 
											
												
													
														|  | 
 |  | +//      FROM {cvtermprop} CVTP
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {cvterm} CVTPT on CVTPT.cvterm_id = CVTP.type_id
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {cvterm} CVT on CVT.cvterm_id = CVTP.cvterm_id
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {dbxref} DBX on CVT.dbxref_id = DBX.dbxref_id
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {db} DB on DB.db_id = DBX.db_id
 | 
											
												
													
														|  | 
 |  | +//      WHERE CVTPT.name = 'Subgroup' and DB.name = 'TOT' and CVTP.value = 'test_normal'
 | 
											
												
													
														|  | 
 |  | +//    ";
 | 
											
												
													
														|  | 
 |  | +//    $subset_count = chado_query($sql)->fetchField();
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    $this->assertNotFalse($subset_count,
 | 
											
												
													
														|  | 
 |  | +//      "This cvtermprop record for the subset 'test_normal' are missing.");
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // There should be 12 terms that belong to subset 'test_normal' as node14
 | 
											
												
													
														|  | 
 |  | +//    // does not belong to a subset.
 | 
											
												
													
														|  | 
 |  | +//    $this->assertEquals(12, $subset_count,
 | 
											
												
													
														|  | 
 |  | +//      "There are $subset_count cvtermprop record for the subset 'test_normal' but there should be 13.");
 | 
											
												
													
														|  | 
 |  | +//  }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +//  /**
 | 
											
												
													
														|  | 
 |  | +//   * Test that the insertion of xref works.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * The term 'node11' belongs to the test_crazy subset. Everything else belongs
 | 
											
												
													
														|  | 
 |  | +//   * to the test_normal subset.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * @group obo
 | 
											
												
													
														|  | 
 |  | +//   * @dataProvider testLocalOBO
 | 
											
												
													
														|  | 
 |  | +//   */
 | 
											
												
													
														|  | 
 |  | +//  public function testXref($cv_id, $db_id) {
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    $sql = "
 | 
											
												
													
														|  | 
 |  | +//      SELECT concat(DB2.name, ':', DBX2.accession)
 | 
											
												
													
														|  | 
 |  | +//      FROM {cvterm} CVT
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {db} on DB.db_id = DBX.db_id
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {cvterm_dbxref} CVTDBX on CVTDBX.cvterm_id = CVT.cvterm_id
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {dbxref} DBX2 on DBX2.dbxref_id = CVTDBX.dbxref_id
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {db} DB2 on DB2.db_id = DBX2.db_id
 | 
											
												
													
														|  | 
 |  | +//      WHERE DB.name = 'TOT' and CVT.name = 'node11'
 | 
											
												
													
														|  | 
 |  | +//      ORDER BY DBX.accession
 | 
											
												
													
														|  | 
 |  | +//    ";
 | 
											
												
													
														|  | 
 |  | +//    $xref_id = chado_query($sql)->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $this->assertNotFalse($xref_id,
 | 
											
												
													
														|  | 
 |  | +//      "This cvterm_dbxref record for the xref 'GO:0043226' is missing for node11.");
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    $this->assertEquals('GO:0043226', $xref_id,
 | 
											
												
													
														|  | 
 |  | +//      "This cvterm_dbxref record for node 11 is, $xref_id, instead of GO:0043226.");
 | 
											
												
													
														|  | 
 |  | +//  }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +//  /**
 | 
											
												
													
														|  | 
 |  | +//   * Test that the insertion of comments works.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * The term 'node11' contains a comment.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * @group obo
 | 
											
												
													
														|  | 
 |  | +//   * @dataProvider testLocalOBO
 | 
											
												
													
														|  | 
 |  | +//   */
 | 
											
												
													
														|  | 
 |  | +//  public function testComment($cv_id, $db_id) {
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    $sql = "
 | 
											
												
													
														|  | 
 |  | +//      SELECT CVTP.value
 | 
											
												
													
														|  | 
 |  | +//      FROM {cvterm} CVT
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {db} on DB.db_id = DBX.db_id
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {cvtermprop} CVTP on CVTP.cvterm_id = CVT.cvterm_id
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {cvterm} CVTPT on CVTPT.cvterm_id = CVTP.type_id
 | 
											
												
													
														|  | 
 |  | +//      WHERE DB.name = 'TOT' and CVTPT.name = 'comment' and CVT.name = 'node11'
 | 
											
												
													
														|  | 
 |  | +//      ORDER BY DBX.accession
 | 
											
												
													
														|  | 
 |  | +//    ";
 | 
											
												
													
														|  | 
 |  | +//    $comment = chado_query($sql)->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $this->assertNotFalse($xref_id,
 | 
											
												
													
														|  | 
 |  | +//      "This cvterm_dbxref record for the xref 'This is a crazy node' is missing for node11.");
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    $this->assertEquals('This is a crazy node', $comment,
 | 
											
												
													
														|  | 
 |  | +//      "This cvterm_dbxref record for node11 is, \"$comment\", instead of \"This is a crazy node\".");
 | 
											
												
													
														|  | 
 |  | +//  }
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//  /**
 | 
											
												
													
														|  | 
 |  | +//   * Tests that the cvtermpath is properly loaded.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * @group obo
 | 
											
												
													
														|  | 
 |  | +//   * @dataProvider testLocalOBO
 | 
											
												
													
														|  | 
 |  | +//   */
 | 
											
												
													
														|  | 
 |  | +//  public function testRelationships($cv_id, $db_id) {
 | 
											
												
													
														|  | 
 |  | +//    $relationships = [
 | 
											
												
													
														|  | 
 |  | +//      ['node02', 'is_a', 'node01'],
 | 
											
												
													
														|  | 
 |  | +//      ['node03', 'is_a', 'node01'],
 | 
											
												
													
														|  | 
 |  | +//      ['node04', 'is_a', 'node01'],
 | 
											
												
													
														|  | 
 |  | +//      ['node04', 'has_part', 'node11'],
 | 
											
												
													
														|  | 
 |  | +//      ['node05', 'is_a', 'node01'],
 | 
											
												
													
														|  | 
 |  | +//      ['node06', 'is_a', 'node03'],
 | 
											
												
													
														|  | 
 |  | +//      ['node07', 'is_a', 'node03'],
 | 
											
												
													
														|  | 
 |  | +//      ['node08', 'is_a', 'node07'],
 | 
											
												
													
														|  | 
 |  | +//      ['node09', 'is_a', 'node04'],
 | 
											
												
													
														|  | 
 |  | +//      ['node09', 'is_a', 'node07'],
 | 
											
												
													
														|  | 
 |  | +//      ['node10', 'is_a', 'node05'],
 | 
											
												
													
														|  | 
 |  | +//      ['node11', 'is_a', 'node09'],
 | 
											
												
													
														|  | 
 |  | +//      ['node11', 'is_a', 'node10'],
 | 
											
												
													
														|  | 
 |  | +//      ['node12', 'is_a', 'node10'],
 | 
											
												
													
														|  | 
 |  | +//      ['node13', 'is_a', 'node11'],
 | 
											
												
													
														|  | 
 |  | +//    ];
 | 
											
												
													
														|  | 
 |  | +//    foreach ($relationships as $relationship) {
 | 
											
												
													
														|  | 
 |  | +//      $subject = $relationship[0];
 | 
											
												
													
														|  | 
 |  | +//      $type = $relationship[1];
 | 
											
												
													
														|  | 
 |  | +//      $object = $relationship[2];
 | 
											
												
													
														|  | 
 |  | +//      $sql = "
 | 
											
												
													
														|  | 
 |  | +//        SELECT CVTR.cvterm_relationship_id
 | 
											
												
													
														|  | 
 |  | +//        FROM {cvterm} CVT
 | 
											
												
													
														|  | 
 |  | +//          INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 | 
											
												
													
														|  | 
 |  | +//          INNER JOIN {db} on DB.db_id = DBX.db_id
 | 
											
												
													
														|  | 
 |  | +//          INNER JOIN {cvterm_relationship} CVTR on CVTR.subject_id = CVT.cvterm_id
 | 
											
												
													
														|  | 
 |  | +//          INNER JOIN {cvterm} CVT2 on CVT2.cvterm_id = CVTR.object_id
 | 
											
												
													
														|  | 
 |  | +//          INNER JOIN {cvterm} CVT3 on CVT3.cvterm_id = CVTR.type_id
 | 
											
												
													
														|  | 
 |  | +//        WHERE DB.name = 'TOT' AND CVT2.name = :object AND
 | 
											
												
													
														|  | 
 |  | +//          CVT3.name = :type AND CVT.name = :subject
 | 
											
												
													
														|  | 
 |  | +//      ";
 | 
											
												
													
														|  | 
 |  | +//      $args = [':object' => $object, ':type' => $type, ':subject' => $subject];
 | 
											
												
													
														|  | 
 |  | +//      $rel_id = chado_query($sql, $args)->fetchField();
 | 
											
												
													
														|  | 
 |  | +//      $this->assertNotFalse($rel_id,
 | 
											
												
													
														|  | 
 |  | +//        "The following relationship could not be found: $subect $type $object.");
 | 
											
												
													
														|  | 
 |  | +//    }
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // Now make sure we have no more relationships than what we are supposed
 | 
											
												
													
														|  | 
 |  | +//    // to have.
 | 
											
												
													
														|  | 
 |  | +//    $sql = "
 | 
											
												
													
														|  | 
 |  | +//      SELECT count(CVTR.cvterm_relationship_id)
 | 
											
												
													
														|  | 
 |  | +//      FROM {cvterm} CVT
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {db} on DB.db_id = DBX.db_id
 | 
											
												
													
														|  | 
 |  | +//        INNER JOIN {cvterm_relationship} CVTR on CVTR.object_id = CVT.cvterm_id
 | 
											
												
													
														|  | 
 |  | +//      WHERE DB.name = 'TOT' AND CVT.is_relationshiptype = 0
 | 
											
												
													
														|  | 
 |  | +//    ";
 | 
											
												
													
														|  | 
 |  | +//    $rel_count = chado_query($sql)->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $expected = count($relationships);
 | 
											
												
													
														|  | 
 |  | +//    $this->assertEquals($expected, $rel_count,
 | 
											
												
													
														|  | 
 |  | +//      "There are an incorrect number of relationships. There were $rel_count found but there should be $expected.");
 | 
											
												
													
														|  | 
 |  | +//  }
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//  /**
 | 
											
												
													
														|  | 
 |  | +//   * Tests that the cvtermpath is properly loaded.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * @group obo
 | 
											
												
													
														|  | 
 |  | +//   * @dataProvider testLocalOBO
 | 
											
												
													
														|  | 
 |  | +//   */
 | 
											
												
													
														|  | 
 |  | +//  public function testCVtermPath($cv_id, $db_id) {
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // For now we won't include distance or type in the check because depending
 | 
											
												
													
														|  | 
 |  | +//    // how the tree was loaded and if there are multiple paths to a node
 | 
											
												
													
														|  | 
 |  | +//    // then there's no guarantee we'll always get the same path. Therefore the
 | 
											
												
													
														|  | 
 |  | +//    // type and pathdistance may be different (althoug not incorrect).
 | 
											
												
													
														|  | 
 |  | +//    $relationships = [
 | 
											
												
													
														|  | 
 |  | +//      // Node01 as root: note that the root term always has a link to itself
 | 
											
												
													
														|  | 
 |  | +//      // in the cvtermpath table.
 | 
											
												
													
														|  | 
 |  | +//      ['node01', 'node01'],
 | 
											
												
													
														|  | 
 |  | +//      ['node01', 'node02'],
 | 
											
												
													
														|  | 
 |  | +//      ['node01', 'node03'],
 | 
											
												
													
														|  | 
 |  | +//      ['node01', 'node04'],
 | 
											
												
													
														|  | 
 |  | +//      ['node01', 'node05'],
 | 
											
												
													
														|  | 
 |  | +//      ['node01', 'node06'],
 | 
											
												
													
														|  | 
 |  | +//      ['node01', 'node07'],
 | 
											
												
													
														|  | 
 |  | +//      ['node01', 'node08'],
 | 
											
												
													
														|  | 
 |  | +//      ['node01', 'node09'],
 | 
											
												
													
														|  | 
 |  | +//      ['node01', 'node10'],
 | 
											
												
													
														|  | 
 |  | +//      ['node01', 'node11'],
 | 
											
												
													
														|  | 
 |  | +//      ['node01', 'node12'],
 | 
											
												
													
														|  | 
 |  | +//      ['node01', 'node13'],
 | 
											
												
													
														|  | 
 |  | +//      // Node03 as root.
 | 
											
												
													
														|  | 
 |  | +//      ['node03', 'node04'],
 | 
											
												
													
														|  | 
 |  | +//      ['node03', 'node06'],
 | 
											
												
													
														|  | 
 |  | +//      ['node03', 'node07'],
 | 
											
												
													
														|  | 
 |  | +//      ['node03', 'node08'],
 | 
											
												
													
														|  | 
 |  | +//      ['node03', 'node09'],
 | 
											
												
													
														|  | 
 |  | +//      ['node03', 'node11'],
 | 
											
												
													
														|  | 
 |  | +//      ['node03', 'node13'],
 | 
											
												
													
														|  | 
 |  | +//      // Node04 as root.
 | 
											
												
													
														|  | 
 |  | +//      ['node04', 'node09'],
 | 
											
												
													
														|  | 
 |  | +//      ['node04', 'node11'],
 | 
											
												
													
														|  | 
 |  | +//      ['node04', 'node13'],
 | 
											
												
													
														|  | 
 |  | +//      // Node05 as root.
 | 
											
												
													
														|  | 
 |  | +//      ['node05', 'node04'],
 | 
											
												
													
														|  | 
 |  | +//      ['node05', 'node09'],
 | 
											
												
													
														|  | 
 |  | +//      ['node05', 'node10'],
 | 
											
												
													
														|  | 
 |  | +//      ['node05', 'node11'],
 | 
											
												
													
														|  | 
 |  | +//      ['node05', 'node12'],
 | 
											
												
													
														|  | 
 |  | +//      ['node05', 'node13'],
 | 
											
												
													
														|  | 
 |  | +//      // Node07 as root.
 | 
											
												
													
														|  | 
 |  | +//      ['node07', 'node04'],
 | 
											
												
													
														|  | 
 |  | +//      ['node07', 'node08'],
 | 
											
												
													
														|  | 
 |  | +//      ['node07', 'node09'],
 | 
											
												
													
														|  | 
 |  | +//      ['node07', 'node11'],
 | 
											
												
													
														|  | 
 |  | +//      ['node07', 'node13'],
 | 
											
												
													
														|  | 
 |  | +//      // Node09 as root.
 | 
											
												
													
														|  | 
 |  | +//      ['node09', 'node04'],
 | 
											
												
													
														|  | 
 |  | +//      ['node09', 'node11'],
 | 
											
												
													
														|  | 
 |  | +//      ['node09', 'node13'],
 | 
											
												
													
														|  | 
 |  | +//      // Node10 as root.
 | 
											
												
													
														|  | 
 |  | +//      ['node10', 'node04'],
 | 
											
												
													
														|  | 
 |  | +//      ['node10', 'node09'],
 | 
											
												
													
														|  | 
 |  | +//      ['node10', 'node11'],
 | 
											
												
													
														|  | 
 |  | +//      ['node10', 'node12'],
 | 
											
												
													
														|  | 
 |  | +//      ['node10', 'node13'],
 | 
											
												
													
														|  | 
 |  | +//      // Node11 as root.
 | 
											
												
													
														|  | 
 |  | +//      ['node11', 'node04'],
 | 
											
												
													
														|  | 
 |  | +//      ['node11', 'node09'],
 | 
											
												
													
														|  | 
 |  | +//      ['node11', 'node13'],
 | 
											
												
													
														|  | 
 |  | +//    ];
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // Populate the cvtermpath for our test OBO.
 | 
											
												
													
														|  | 
 |  | +//    chado_update_cvtermpath($cv_id);
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    foreach ($relationships as $relationship) {
 | 
											
												
													
														|  | 
 |  | +//      $object = $relationship[0];
 | 
											
												
													
														|  | 
 |  | +//      $subject = $relationship[1];
 | 
											
												
													
														|  | 
 |  | +//      $sql = "
 | 
											
												
													
														|  | 
 |  | +//        SELECT cvtermpath_id
 | 
											
												
													
														|  | 
 |  | +//        FROM {cvtermpath} CVTP
 | 
											
												
													
														|  | 
 |  | +//          INNER JOIN {cvterm} CVTO on CVTO.cvterm_id = CVTP.object_id
 | 
											
												
													
														|  | 
 |  | +//          INNER JOIN {cvterm} CVTS on CVTS.cvterm_id = CVTP.subject_id
 | 
											
												
													
														|  | 
 |  | +//          INNER JOIN {cvterm} CVTT on CVTT.cvterm_id = CVTP.type_id
 | 
											
												
													
														|  | 
 |  | +//        WHERE CVTP.cv_id = :cv_id and CVTO.name = :object and
 | 
											
												
													
														|  | 
 |  | +//          CVTS.name = :subject
 | 
											
												
													
														|  | 
 |  | +//      ";
 | 
											
												
													
														|  | 
 |  | +//      $args = [
 | 
											
												
													
														|  | 
 |  | +//        ':cv_id' => $cv_id,
 | 
											
												
													
														|  | 
 |  | +//        ':object' => $object,
 | 
											
												
													
														|  | 
 |  | +//        ':subject' => $subject,
 | 
											
												
													
														|  | 
 |  | +//      ];
 | 
											
												
													
														|  | 
 |  | +//      $cvtermpath_id = chado_query($sql, $args)->fetchField();
 | 
											
												
													
														|  | 
 |  | +//      $this->assertNotFalse($cvtermpath_id,
 | 
											
												
													
														|  | 
 |  | +//        "Cound not find the cvtermpath record for the relationship: $subject => $object.");
 | 
											
												
													
														|  | 
 |  | +//    }
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // Now make sure we have no additional entries.
 | 
											
												
													
														|  | 
 |  | +//    $sql = "
 | 
											
												
													
														|  | 
 |  | +//          SELECT count(cvtermpath_id)
 | 
											
												
													
														|  | 
 |  | +//          FROM {cvtermpath} CVTP
 | 
											
												
													
														|  | 
 |  | +//            INNER JOIN {cvterm} CVTO on CVTO.cvterm_id = CVTP.object_id
 | 
											
												
													
														|  | 
 |  | +//            INNER JOIN {cvterm} CVTS on CVTS.cvterm_id = CVTP.subject_id
 | 
											
												
													
														|  | 
 |  | +//            INNER JOIN {cvterm} CVTT on CVTT.cvterm_id = CVTP.type_id
 | 
											
												
													
														|  | 
 |  | +//          WHERE CVTP.cv_id = :cv_id
 | 
											
												
													
														|  | 
 |  | +//        ";
 | 
											
												
													
														|  | 
 |  | +//    $args = [':cv_id' => $cv_id];
 | 
											
												
													
														|  | 
 |  | +//    $rel_count = chado_query($sql, $args)->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $expected = count($relationships);
 | 
											
												
													
														|  | 
 |  | +//    $this->assertEquals($expected, $rel_count,
 | 
											
												
													
														|  | 
 |  | +//      "There are an incorrect number of paths. There were $rel_count found but there should be $expected.");
 | 
											
												
													
														|  | 
 |  | +//  }
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//  /**
 | 
											
												
													
														|  | 
 |  | +//   * Tests that the EBI Lookup is properly working.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * The term CHEBI:132502 should have been loaded via EBI.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * @group obo
 | 
											
												
													
														|  | 
 |  | +//   * @dataProvider testLocalOBO
 | 
											
												
													
														|  | 
 |  | +//   */
 | 
											
												
													
														|  | 
 |  | +//  public function testEBILookup($cv_id, $db_id) {
 | 
											
												
													
														|  | 
 |  | +//    $sql = "
 | 
											
												
													
														|  | 
 |  | +//       SELECT CVT.cvterm_id
 | 
											
												
													
														|  | 
 |  | +//       FROM  {cvterm} CVT
 | 
											
												
													
														|  | 
 |  | +//         INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 | 
											
												
													
														|  | 
 |  | +//         INNER JOIN {db} DB on DB.db_id = DBX.db_id
 | 
											
												
													
														|  | 
 |  | +//       WHERE DB.name = 'CHEBI' and DBX.accession = '132502'
 | 
											
												
													
														|  | 
 |  | +//    ";
 | 
											
												
													
														|  | 
 |  | +//    $cvterm_id = chado_query($sql)->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $this->assertNotFalse($cvterm_id,
 | 
											
												
													
														|  | 
 |  | +//      "The term, CHEBI:132502, is not present the EBI OLS lookup must not have succeeded.");
 | 
											
												
													
														|  | 
 |  | +//  }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +//  /**
 | 
											
												
													
														|  | 
 |  | +//   * Tests when changes are made between OBO loads.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * Sometimes an ontology can change the names of it's terms, or set some
 | 
											
												
													
														|  | 
 |  | +//   * as obsolete, etc. We need to makes sure that when changes are made and
 | 
											
												
													
														|  | 
 |  | +//   * the OBO is reloaded that the terms are properly update.
 | 
											
												
													
														|  | 
 |  | +//   *
 | 
											
												
													
														|  | 
 |  | +//   * @group obo
 | 
											
												
													
														|  | 
 |  | +//   * @dataProvider testLocalOBO
 | 
											
												
													
														|  | 
 |  | +//   */
 | 
											
												
													
														|  | 
 |  | +//  public function testOBOChanges($cv_id, $db_id) {
 | 
											
												
													
														|  | 
 |  | +//    $name = 'tripal_obo_test_update';
 | 
											
												
													
														|  | 
 |  | +//    $path = __DIR__ . '/../example_files/test.update.obo';
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    $this->loadOBO($name, $path);
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // Did the name of term 13 change?
 | 
											
												
													
														|  | 
 |  | +//    $sql = "
 | 
											
												
													
														|  | 
 |  | +//      SELECT CVT.name
 | 
											
												
													
														|  | 
 |  | +//      FROM {cvterm} CVT
 | 
											
												
													
														|  | 
 |  | +//         INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 | 
											
												
													
														|  | 
 |  | +//         INNER JOIN {db} DB on DB.db_id = DBX.db_id
 | 
											
												
													
														|  | 
 |  | +//       WHERE DB.name = 'TOT' and DBX.accession = '013'
 | 
											
												
													
														|  | 
 |  | +//    ";
 | 
											
												
													
														|  | 
 |  | +//    $name = chado_query($sql)->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $this->assertEquals('New name 13.', $name,
 | 
											
												
													
														|  | 
 |  | +//      "The name for node13 (TOT:013) failed to update to 'New name 13'.");
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // Node15 is new, and node02 got removed. Node15 now uses node02's name and
 | 
											
												
													
														|  | 
 |  | +//    // has TOT:002 as an alt_id. So, node02 should be marked as obsolete
 | 
											
												
													
														|  | 
 |  | +//    $sql = "
 | 
											
												
													
														|  | 
 |  | +//      SELECT CVT.is_obsolete
 | 
											
												
													
														|  | 
 |  | +//      FROM {cvterm} CVT
 | 
											
												
													
														|  | 
 |  | +//         INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 | 
											
												
													
														|  | 
 |  | +//         INNER JOIN {db} DB on DB.db_id = DBX.db_id
 | 
											
												
													
														|  | 
 |  | +//       WHERE DB.name = 'TOT' and DBX.accession = '002'
 | 
											
												
													
														|  | 
 |  | +//    ";
 | 
											
												
													
														|  | 
 |  | +//    $is_obsolete = chado_query($sql)->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $this->assertEquals(1, $is_obsolete,
 | 
											
												
													
														|  | 
 |  | +//      "The node02 (TOT:002) should be marked as obsolete after update.");
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    // Node16 is new, and node08 is now obsolete. Node16 now uses node08's name,
 | 
											
												
													
														|  | 
 |  | +//    // so, node08 should be marked as obsolete and have the word '(obsolete)'
 | 
											
												
													
														|  | 
 |  | +//    // added to prevent future conflicts.
 | 
											
												
													
														|  | 
 |  | +//    $sql = "
 | 
											
												
													
														|  | 
 |  | +//      SELECT CVT.name
 | 
											
												
													
														|  | 
 |  | +//      FROM {cvterm} CVT
 | 
											
												
													
														|  | 
 |  | +//         INNER JOIN {dbxref} DBX on DBX.dbxref_id = CVT.dbxref_id
 | 
											
												
													
														|  | 
 |  | +//         INNER JOIN {db} DB on DB.db_id = DBX.db_id
 | 
											
												
													
														|  | 
 |  | +//       WHERE DB.name = 'TOT' and DBX.accession = '008'
 | 
											
												
													
														|  | 
 |  | +//    ";
 | 
											
												
													
														|  | 
 |  | +//    $name = chado_query($sql)->fetchField();
 | 
											
												
													
														|  | 
 |  | +//    $this->assertEquals("node08 (obsolete)", $name,
 | 
											
												
													
														|  | 
 |  | +//      "The node08 (TOT:008) should be marked as obsolete after update.");
 | 
											
												
													
														|  | 
 |  | +//  }
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//  /**
 | 
											
												
													
														|  | 
 |  | +//   * @group obo
 | 
											
												
													
														|  | 
 |  | +//   * @group chado
 | 
											
												
													
														|  | 
 |  | +//   */
 | 
											
												
													
														|  | 
 |  | +//  public function testfindEBITerm_finder_retrieves_term() {
 | 
											
												
													
														|  | 
 |  | +//
 | 
											
												
													
														|  | 
 |  | +//    module_load_include('inc', 'tripal_chado', 'includes/TripalImporter/OBOImporter');
 | 
											
												
													
														|  | 
 |  | +//    $importer_private = new \OBOImporter();
 | 
											
												
													
														|  | 
 |  | +//    $importer = reflect($importer_private);
 | 
											
												
													
														|  | 
 |  | +//    $id = 'PECO:0007085';
 | 
											
												
													
														|  | 
 |  | +//    $result = $importer->findEBITerm($id);
 | 
											
												
													
														|  | 
 |  | +//    $this->assertNotEmpty($result);
 | 
											
												
													
														|  | 
 |  | +//    $this->assertEquals('fertilizer exposure', $result['name'][0]);
 | 
											
												
													
														|  | 
 |  | +//    }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  }
 |  |  }
 |