Просмотр исходного кода

Add tests for the new functionality

Abdullah Almsaeed 6 лет назад
Родитель
Сommit
0b08023109
2 измененных файлов с 136 добавлено и 92 удалено
  1. 64 56
      tests/DataFactory.php
  2. 72 36
      tests/tripal_chado/api/ChadoQueryTest.php

+ 64 - 56
tests/DataFactory.php

@@ -11,86 +11,85 @@ use StatonLab\TripalTestSuite\Database\Factory;
  * @docs https://github.com/statonlab/TripalTestSuite
  */
 
-/** @see  StatonLab\TripalTestSuite\Database\Factory::define() */
+/** @see StatonLab\TripalTestSuite\Database\Factory::define() */
 Factory::define('chado.cv', function (Faker\Generator $faker) {
-    return [
-        'name' => $faker->name,
-        'definition' => $faker->text,
-    ];
+  return [
+    'name' => $faker->name,
+    'definition' => $faker->text,
+  ];
 });
 
-/** @see  StatonLab\TripalTestSuite\Database\Factory::define() */
+/** @see StatonLab\TripalTestSuite\Database\Factory::define() */
 Factory::define('chado.db', function (Faker\Generator $faker) {
-    return [
-        'name' => $faker->name,
-        'description' => $faker->text,
-        'urlprefix' => $faker->url,
-        'url' => $faker->url,
-    ];
+  return [
+    'name' => $faker->name,
+    'description' => $faker->text,
+    'urlprefix' => $faker->url,
+    'url' => $faker->url,
+  ];
 });
 
-/** @see  StatonLab\TripalTestSuite\Database\Factory::define() */
+/** @see StatonLab\TripalTestSuite\Database\Factory::define() */
 Factory::define('chado.dbxref', function (Faker\Generator $faker) {
-    return [
-        'db_id' => factory('chado.db')->create()->db_id,
-        'accession' => $faker->numberBetween(),
-        'version' => $faker->numberBetween(),
-        'description' => $faker->text,
-    ];
+  return [
+    'db_id' => factory('chado.db')->create()->db_id,
+    'accession' => $faker->numberBetween(),
+    'version' => $faker->numberBetween(),
+    'description' => $faker->text,
+  ];
 });
 
-/** @see  StatonLab\TripalTestSuite\Database\Factory::define() */
+/** @see StatonLab\TripalTestSuite\Database\Factory::define() */
 Factory::define('chado.cvterm', function (Faker\Generator $faker) {
-    return [
-        'cv_id' => factory('chado.cv')->create()->cv_id,
-        'dbxref_id' => factory('chado.dbxref')->create()->dbxref_id,
-        'name' => $faker->name,
-        'definition' => $faker->text,
-        'is_obsolete' => 0,
-        'is_relationshiptype' => 0,
-    ];
+  return [
+    'cv_id' => factory('chado.cv')->create()->cv_id,
+    'dbxref_id' => factory('chado.dbxref')->create()->dbxref_id,
+    'name' => $faker->name,
+    'definition' => $faker->text,
+    'is_obsolete' => 0,
+    'is_relationshiptype' => 0,
+  ];
 });
 
-/** @see  StatonLab\TripalTestSuite\Database\Factory::define() */
+/** @see StatonLab\TripalTestSuite\Database\Factory::define() */
 Factory::define('chado.organism', function (Faker\Generator $faker) {
-    return [
-        'abbreviation' => $faker->name,
-        'genus' => $faker->name,
-        'species' => $faker->name,
-        'common_name' => $faker->name,
-        'type_id' => factory('chado.cvterm')->create()->cvterm_id,
-    ];
+  return [
+    'abbreviation' => $faker->name,
+    'genus' => $faker->name,
+    'species' => $faker->name,
+    'common_name' => $faker->name,
+    'type_id' => factory('chado.cvterm')->create()->cvterm_id,
+  ];
 });
 
-/** @see  StatonLab\TripalTestSuite\Database\Factory::define() */
+/** @see StatonLab\TripalTestSuite\Database\Factory::define() */
 Factory::define('chado.feature', function (Faker\Generator $faker) {
-    return [
-        'name' => $faker->name,
-        'uniquename' => $faker->unique()->name,
-        'organism_id' => factory('chado.organism')->create()->organism_id,
-        'type_id' => factory('chado.cvterm')->create()->cvterm_id,
-    ];
+  return [
+    'name' => $faker->name,
+    'uniquename' => $faker->unique()->name,
+    'organism_id' => factory('chado.organism')->create()->organism_id,
+    'type_id' => factory('chado.cvterm')->create()->cvterm_id,
+  ];
 });
 
 
-/** @see  StatonLab\TripalTestSuite\Database\Factory::define() */
+/** @see StatonLab\TripalTestSuite\Database\Factory::define() */
 Factory::define('chado.stock', function (Faker\Generator $faker) {
-    return [
-        'name' => $faker->name,
-        'uniquename' => $faker->unique()->name,
-        'organism_id' => factory('chado.organism')->create()->organism_id,
-        'type_id' => factory('chado.cvterm')->create()->cvterm_id,
-    ];
+  return [
+    'name' => $faker->name,
+    'uniquename' => $faker->unique()->name,
+    'organism_id' => factory('chado.organism')->create()->organism_id,
+    'type_id' => factory('chado.cvterm')->create()->cvterm_id,
+  ];
 });
 
-/** @see  StatonLab\TripalTestSuite\Database\Factory::define() */
+/** @see StatonLab\TripalTestSuite\Database\Factory::define() */
 Factory::define('chado.project', function (Faker\Generator $faker) {
-    return [
-        'name' => $faker->name,
-    ];
+  return [
+    'name' => $faker->name,
+  ];
 });
 
-
 Factory::define('chado.analysis', function (Faker\Generator $faker) {
   return [
     'name' => $faker->name,
@@ -104,7 +103,8 @@ Factory::define('chado.analysis', function (Faker\Generator $faker) {
     'sourceuri' => $faker->name,
   ];
 });
-/** @see  StatonLab\TripalTestSuite\Database\Factory::define() */
+
+/** @see StatonLab\TripalTestSuite\Database\Factory::define() */
 Factory::define('tripal_jobs', function (Faker\Generator $faker) {
   return [
     'uid' => 1,
@@ -127,3 +127,11 @@ Factory::define('tripal_jobs', function (Faker\Generator $faker) {
     'priority' => $faker->numberBetween(1, 10),
   ];
 }, 'job_id');
+
+/** @see StatonLab\TripalTestSuite\Database\Factory::define() */
+Factory::define('chado.pub', function (Faker\Generator $faker) {
+  return [
+    'uniquename' => $faker->word,
+    'type_id' => factory('chado.cvterm')->create()->cvterm_id,
+  ];
+});

+ 72 - 36
tests/tripal_chado/api/ChadoQueryTest.php

@@ -1,10 +1,12 @@
 <?php
+
 namespace Tests;
 
 use StatonLab\TripalTestSuite\DBTransaction;
 use StatonLab\TripalTestSuite\TripalTestCase;
 
 class ChadoQueryTest extends TripalTestCase {
+
   // Uncomment to auto start and rollback db transactions per test method.
   use DBTransaction;
 
@@ -12,91 +14,125 @@ class ChadoQueryTest extends TripalTestCase {
    * @group filter
    * See PR 827.
    */
-  public function test_filter_level(){
-
+  public function test_filter_level() {
     $stock = factory('chado.stock')->create(['uniquename' => 'octopus_core_test_name']);
 
     // Test 1. Pass a single filter.
-    $selector = array(
+    $selector = [
       'stock_id' => $stock->stock_id,
-      'uniquename' => array(
+      'uniquename' => [
         'op' => 'LIKE',
         'data' => 'octopus%',
-      ),
-    );
+      ],
+    ];
 
     $object = chado_generate_var('stock', $selector);
 
     $this->assertNotNull($object->stock_id);
     $this->assertEquals($stock->stock_id, $object->stock_id);
 
-
     // Test 2 Pass an array of filters with a single item.
-    $selector = array(
+    $selector = [
       'stock_id' => $stock->stock_id,
-      'uniquename' => array(
-        array(
+      'uniquename' => [
+        [
           'op' => 'LIKE',
           'data' => 'octopus%',
-        ),
-      ),
-    );
+        ],
+      ],
+    ];
     $object = chado_generate_var('stock', $selector);
 
     $this->assertNotNull($object->stock_id);
     $this->assertEquals($stock->stock_id, $object->stock_id);
 
-
     // Test 3 Pass an array of filters with multiple items.
-    $selector = array(
-      'type_id' => array(
-        array(
+    $selector = [
+      'type_id' => [
+        [
           'op' => '>',
           'data' => ($stock->type_id - 1),
-        ),
-        array(
+        ],
+        [
           'op' => '<',
           'data' => ($stock->type_id + 1),
-        ),
-      ),
-    );
+        ],
+      ],
+    ];
 
     $object = chado_generate_var('stock', $selector);
     $this->assertNotNull($object->stock_id);
     $this->assertEquals($stock->stock_id, $object->stock_id);
-
   }
 
   /**
    * @group api
-   * @group failing
    * @group chado
-   * 
    */
-  public function test_chado_db_select() {
-
+  public function test_chado_db_select_works_for_chado_tables() {
     $analysis_record = factory('chado.analysis')->create();
 
     $id = $analysis_record->analysis_id;
 
-    $query = chado_db_select('{analysis}', 't');
-    $analysis = $query->fields('t')
-      ->condition('analysis_id', $id)
-      ->execute()
-      ->fetchObject();
 
-    $querytwo = db_select('chado.analysis', 't');
+    // Test passing a table name without brackets or braces.
+    $query = chado_db_select('analysis', 't');
 
-    $traditional_analysis = $querytwo
+    $analysis = $query
       ->condition('analysis_id', $id)
       ->fields('t')
       ->execute()
       ->fetchObject();
 
-
     $this->assertNotFalse($analysis);
-    $this->assertNotFalse($traditional_analysis);
+    $this->assertNotEmpty($analysis);
+    $this->assertEquals($id, $analysis->analysis_id);
+  }
+
+  /**
+   * @group api
+   * @group chado
+   */
+  public function test_chado_db_select_should_throw_an_exception_if_table_is_undefined() {
+    $this->expectException(\Exception::class);
+    chado_db_select('some_nonexistent_table', 'd')->execute();
+  }
+
+  /**
+   * @group api
+   * @group chado
+   */
+  public function test_chado_db_select_recognizes_non_chado_tables() {
+    $query = chado_db_select('users');
+    $query->range(0, 1);
+    $results = $query->execute()->fetchAll();
 
+    $this->assertNotEmpty($results);
   }
 
+  /**
+   * @group api
+   * @group chado
+   */
+  public function test_joining_chado_tables_in_chado_db_select() {
+    $feature = factory('chado.feature')->create();
+    $cvterm = factory('chado.cvterm')->create();
+    $pub = factory('chado.pub')->create();
+
+    $feature_cvterm = chado_insert_record('feature_cvterm', [
+      'feature_id' => $feature->feature_id,
+      'cvterm_id' => $cvterm->cvterm_id,
+      'pub_id' => $pub->pub_id
+    ]);
+
+    $query = chado_db_select('feature', 'f');
+    $query->join('feature_cvterm', 'fcvt', 'f.feature_id = fcvt.feature_id');
+    $query->fields('f', ['name']);
+    $query->fields('fcvt', ['cvterm_id']);
+    $query->condition('f.feature_id', $feature->feature_id);
+    $found = $query->execute()->fetchObject();
+
+    $this->assertNotEmpty($found);
+    $this->assertEquals($feature_cvterm['cvterm_id'], $found->cvterm_id);
+  }
 }