You are here

RestfulDiscoveryTestCase.test in RESTful 7

Same filename and directory in other branches
  1. 7.2 tests/RestfulDiscoveryTestCase.test

Contains RestfulDiscoveryTestCase

File

tests/RestfulDiscoveryTestCase.test
View source
<?php

/**
 * @file
 * Contains RestfulDiscoveryTestCase
 */
class RestfulDiscoveryTestCase extends RestfulCurlBaseTestCase {
  public static function getInfo() {
    return array(
      'name' => 'Discovery',
      'description' => 'Test the discovery features.',
      'group' => 'RESTful',
    );
  }
  function setUp() {
    parent::setUp('restful_test');
  }

  /**
   * Test the headers populated in an OPTIONS request.
   */
  function testOptionsMethod() {
    $handler = restful_get_restful_handler('test_articles', 1, 4);

    // 1. Assert Access-Control-Allow-Methods.
    $handler
      ->options('');
    $headers = $handler
      ->getHttpHeaders();
    $this
      ->assertEqual($headers['Access-Control-Allow-Methods'], \RestfulInterface::HEAD, 'Access-Control-Allow-Methods header is populated correctly.');

    // Make sure it returns the appropriate headers for every path.
    $handler
      ->options('1');
    $headers = $handler
      ->getHttpHeaders();
    $this
      ->assertEqual($headers['Access-Control-Allow-Methods'], \RestfulInterface::PATCH . ',' . \RestfulInterface::DELETE, 'Access-Control-Allow-Methods header is populated correctly for different paths.');

    // 2. Assert Accept.
    $this
      ->assertEqual($headers['Accept'], 'application/xml; charset=utf-8', 'Accept header is populated correctly for configured formatter.');
    $handler = restful_get_restful_handler('test_articles', 1, 2);
    $handler
      ->options('');
    $accepted_formats = array();
    foreach ($handler
      ->formatterNames() as $formatter_name) {
      $formatter = restful_get_formatter_handler($formatter_name, $handler);
      $accepted_formats[] = $formatter
        ->getContentTypeHeader();
    }
    $headers = $handler
      ->getHttpHeaders();
    $this
      ->assertEqual($headers['Accept'], implode(',', $accepted_formats), 'Accept header is populated correctly for non configured formatters.');

    // 3. Assert Access-Control-Allow-Origin.
    $response = $this
      ->httpRequest('api/v1.4/test_articles', \RestfulInterface::HEAD);
    $headers = explode("\n", $response['headers']);
    $this
      ->assertTrue(in_array('*', $headers), 'Access-Control-Allow-Origin header is populated correctly.');
  }

  /**
   * Field discovery.
   */
  public function testFieldDiscovery() {
    $handler = restful_get_restful_handler('main', 1, 1);
    $result = $handler
      ->options();
    $expected = array(
      'id' => array(
        'data' => array(
          'cardinality' => 1,
          'read_only' => TRUE,
          'type' => 'int',
          'required' => FALSE,
        ),
        'form_element' => array(
          'allowed_values' => NULL,
          'default_value' => '',
          'placeholder' => '',
          'size' => NULL,
          'type' => NULL,
        ),
        'info' => array(
          'description' => t('Base ID for the entity.'),
          'label' => t('ID'),
        ),
      ),
      'label' => array(
        'data' => array(
          'cardinality' => 1,
          'read_only' => FALSE,
          'type' => 'string',
          'required' => FALSE,
        ),
        'form_element' => array(
          'allowed_values' => NULL,
          'type' => 'textfield',
          'default_value' => '',
          'placeholder' => '',
          'size' => 255,
        ),
        'info' => array(
          'description' => t('The label of the resource.'),
          'label' => t('Label'),
        ),
      ),
      'text_multiple' => array(
        'data' => array(
          'cardinality' => FIELD_CARDINALITY_UNLIMITED,
          'read_only' => FALSE,
          'type' => 'string',
          'required' => FALSE,
        ),
        'form_element' => array(
          'allowed_values' => NULL,
          'default_value' => '',
          'placeholder' => t('This is helpful.'),
          'size' => 255,
          'type' => 'textfield',
        ),
        'info' => array(
          'description' => t('This field holds different text inputs.'),
          'label' => t('Text multiple'),
        ),
      ),
    );
    foreach ($expected as $public_field => $discovery_info) {
      $result_data = $result[$public_field]['data'];
      $expected_data = $expected[$public_field]['data'];
      ksort($result_data);
      ksort($expected_data);
      $this
        ->assertEqual($result_data, $expected_data, format_string('The "data" information is properly described for @field.', array(
        '@field' => $public_field,
      )));
      $result_form_element = $result[$public_field]['form_element'];
      $expected_form_element = $expected[$public_field]['form_element'];
      ksort($result_form_element);
      ksort($expected_form_element);
      $this
        ->assertEqual($result_form_element, $expected_form_element, format_string('The "form_element" information is properly described for @field.', array(
        '@field' => $public_field,
      )));
      $result_info = $result[$public_field]['info'];
      $expected_info = $expected[$public_field]['info'];
      ksort($result_info);
      ksort($expected_info);
      $this
        ->assertEqual($result_info, $expected_info, format_string('The "info" information is properly described for @field.', array(
        '@field' => $public_field,
      )));
    }
  }

  /**
   * Field discovery allowed values.
   */
  public function testFieldDiscoveryAllowedValues() {
    $handler = restful_get_restful_handler('test_articles', 1, 2);

    // Add entity reference fields.
    restful_test_add_fields('node', 'article');

    // Create 3 nodes.
    $expected_result = array();
    foreach (array(
      1,
      2,
      3,
    ) as $id) {
      $title = 'article' . '/' . $id;
      $settings = array(
        'title' => $title,
        'type' => 'article',
      );
      $node = $this
        ->drupalCreateNode($settings);
      $expected_result[$node->nid] = $title;
    }

    // Set widget to select list.
    $instance = field_info_instance('node', 'entity_reference_single', 'article');
    $instance['widget']['type'] = 'options_select';
    field_update_instance($instance);
    $result = $handler
      ->options();
    $this
      ->assertEqual($result['entity_reference_single']['form_element']['allowed_values'], $expected_result);

    // Set widget to autocomplete.
    $instance['widget']['type'] = 'entityreference_autocomplete';
    field_update_instance($instance);

    // Invalidate public fields cache.
    $handler
      ->setPublicFields(array());
    $result = $handler
      ->options();
    $this
      ->assertNull($result['entity_reference_single']['form_element']['allowed_values']);
  }

}

Classes

Namesort descending Description
RestfulDiscoveryTestCase @file Contains RestfulDiscoveryTestCase