| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 | <?phpnamespace Tests\tripal_ws\http;use StatonLab\TripalTestSuite\DBTransaction;use StatonLab\TripalTestSuite\TripalTestCase;class TripalWebServicesContentTest extends TripalTestCase {  // Uncomment to auto start and rollback db transactions per test method.  use DBTransaction;  /** @test */  public function testGettingMainContentList() {    // Grant user permission to all content.    $role_id = (user_is_anonymous()) ? DRUPAL_ANONYMOUS_RID : DRUPAL_AUTHENTICATED_RID;    $bundles = db_query('SELECT name FROM tripal_bundle');    foreach($bundles as $bundle) {      $bundle_name = 'view ' . $bundle->name;      user_role_grant_permissions($role_id, array($bundle_name));    }    $response = $this->get('web-services/content/v0.1');    // Make sure it returned valid json    $response->assertSuccessful();    $response->assertJsonStructure([      '@context',      '@id',      '@type',      'label',      'totalItems',      'member' => [        [          '@id',          '@type',          'label',          'description',        ],      ],    ]);  }  /** @test   * @group ws   */  public function testGettingListOfEntitiesInABundle() {    // Get bundle label    $label = db_query('SELECT label, name FROM tripal_bundle LIMIT 1')->fetchObject();    // Grant user permission to this content.    $role_id = (user_is_anonymous()) ? DRUPAL_ANONYMOUS_RID : DRUPAL_AUTHENTICATED_RID;    user_role_grant_permissions($role_id, array('view ' . $label->name));    // Call /web-services/content/v0.1/[label]    $ctype = preg_replace('/[^\w]/', '_', $label->label);    $response = $this->get("web-services/content/v0.1/" . $ctype);    // Verify the returned JSON matches the structure    $response->assertSuccessful();    $response->assertJsonStructure([      '@context',      '@id',      '@type',      'label',      'totalItems',      'member',    ]);    // Verify the collection is of the correct type    $json = $response->json();    $this->assertEquals($json['label'], "$label->label Collection");  }  /**   * Tests the sanitizeFieldKeys() method.   * @group tripal_ws   * @group tripalWS-ServiceResource   */  public function testSanitizeFieldKeys() {    // We need a bundle in order to determine a valid base path.    $label = db_query('SELECT label FROM tripal_bundle LIMIT 1')->fetchField();    $bundle = tripal_load_bundle_entity(['label' => $label]);    $this->assertNotNull($bundle,      "Unable to load the associated bundle object.");    // We need a resource to add context to.    $base_path = "web-services/content/v0.1/$label";    $resource = new \TripalWebServiceResource($base_path);    $this->assertNotNull($resource,      "Unable to create a Tripal Web Service Resource for testing.");    // We need a ContentService object to call sanitizeFieldKeys().    module_load_include('inc', 'tripal_ws', 'includes/TripalWebService/TripalContentService_v0_1');    $web_service = new \TripalContentService_v0_1($base_path);    $this->assertNotNull($web_service,      "Unable to create a TripalContentService_v0_1 object for testing.");    // Now finally, we try to test it!    // - Associative array where keys are valid terms.    $value = [      'rdfs:type' => 'fake',    ];    $sanitized_value = $this->invokeMethod($web_service, 'sanitizeFieldKeys', [      $resource,      $value,      $bundle,      $base_path    ]);    $this->assertNotNull($sanitized_value,      "You should be able to sanitize a term-indexed array if terms are valid.");    // - Numeric keys to direct values.    $value = [      'fake',      'none',      5    ];    $sanitized_value = $this->invokeMethod($web_service, 'sanitizeFieldKeys', [      $resource,      $value,      $bundle,      $base_path    ]);    $this->assertNotNull($sanitized_value,      "You should be able to sanitize a numeric-indexed array if sub-elements are direct values.");    // - Numeric keys where value is an array with term keys.    $value = [      ['rdfs:type' => 'fake'],      ['rdfs:type' => 'none'],    ];    $sanitized_value = $this->invokeMethod($web_service, 'sanitizeFieldKeys', [      $resource,      $value,      $bundle,      $base_path    ]);    $this->assertNotNull($sanitized_value,      "You should be able to sanitize a numeric-indexed array if sub-elements are also arrays.");    // - Numeric keys where value is an array with random keys.    //   (random keys should be removed.)    $value = [      ['randomnotterm' => 'fake'],    ];    $sanitized_value = $this->invokeMethod($web_service, 'sanitizeFieldKeys', [      $resource,      $value,      $bundle,      $base_path    ]);    $this->assertEmpty($sanitized_value[0],      "You should be able to sanitize a numeric-indexed array if sub-elements arrays are not keyed with valid terms.");  }  /**   * Call protected/private method of a class.   *   * @param object &$object    Instantiated object that we will run method on.   * @param string $methodName Method name to call   * @param array  $parameters Array of parameters to pass into method.   *   * @return mixed Method return.   */  public function invokeMethod(&$object, $methodName, array $parameters = array()) {      $reflection = new \ReflectionClass(get_class($object));      $method = $reflection->getMethod($methodName);      $method->setAccessible(true);      return $method->invokeArgs($object, $parameters);  }}
 |