You are here

plugin.test in Services Client 7.2

Rules tests.

File

tests/plugin.test
View source
<?php

/**
 * @file
 * Rules tests.
 */
class ServicesClientPluginsTestCase extends DrupalUnitTestCase {
  static function getInfo() {
    return array(
      'name' => 'Plugins unit tests',
      'description' => 'Basic plugin unit testing',
      'group' => 'Services Client',
    );
  }
  function setUp() {
    parent::setUp();
  }
  protected function loadFiles() {
    require_once drupal_get_path('module', 'services_client') . '/services_client.module';
    require_once drupal_get_path('module', 'services_client') . '/include/plugin.inc';
    require_once drupal_get_path('module', 'services_client') . '/include/mapping.inc';
    require_once drupal_get_path('module', 'services_client') . '/include/condition.inc';
  }

  /**
   * Create new event.
   *
   * @param  array  $values
   *   Override custom values.
   *
   * @return ServicesClientEvent
   */
  protected function createFakeEvent($values = array()) {
    $event = new ServicesClientEvent();
    $values += array(
      'eid' => 1,
      'title' => $this
        ->randomName(),
      'name' => $this
        ->randomName(),
      'connection' => $this
        ->randomName(),
      'entity_type' => 'node',
      'event' => 'save',
      'plugin' => 'EntitySaveHandler',
      'config' => array(),
    );
    foreach ($values as $key => $val) {
      $event->{$key} = $val;
    }
    return $event;
  }
  public function testServicesClientControl() {
    $this
      ->loadFiles();
    $client_id = services_client_get_id();
    $remote_id = $this
      ->randomName();

    // Try adding new control data to simple entity.
    $fake_entity = new stdClass();
    $control = new ServicesClientControl($fake_entity, $client_id, $remote_id);
    $object = new stdClass();
    $control
      ->setData($object);
    $this
      ->assertTrue(isset($object->_services_client), "Services client data was created.");
    $this
      ->assertIdentical($object->_services_client['origin'], $client_id, "V1 services client origin was added.");
    $this
      ->assertTrue(is_array($object->_services_client['visted']), "V1 list of visited sites was created.");
    $this
      ->assertEqual(count($object->_services_client['visted']), 1, "V1 list of visited sites has one item.");
    $this
      ->assertIdentical($object->_services_client['visted'][0], $client_id, "V1 list of visited sites has correct site.");
    $this
      ->assertTrue(isset($object->_services_client['v2']), "V2 control data was created.");
    $this
      ->assertIdentical($object->_services_client['v2']['id'], $client_id, "V2 services client id was added.");
    if (drupal_is_cli()) {
      $this
        ->assertIdentical($object->_services_client['v2']['source'], "cli", "V2 services client source was added.");
    }
    else {
      $this
        ->assertTrue(preg_match('~^https?\\://.*~i', $object->_services_client['v2']['source']), "V2 services client source was added.");
    }
    $this
      ->assertEqual(count($object->_services_client['v2']['nodes']), 1, "V2 list of visited sites has one item.");
    $this
      ->assertIdentical($object->_services_client['v2']['nodes'][0], $client_id, "V2 list of visited sites has correct site.");
    $this
      ->assertIdentical($control
      ->shouldQueue(), FALSE, "Entity shouldn't be queued");
    $this
      ->assertIdentical($control
      ->isLooping(), FALSE, "No looping when remote client id isn't in visited list.");

    // Try to create control data from existing _services_client data V1 entity
    $name = $this
      ->randomName();
    $fake_entity->_services_client = array(
      'origin' => $name,
      'visted' => array(
        $name,
        $this
          ->randomName(),
      ),
    );
    $control = new ServicesClientControl($fake_entity, $client_id, $remote_id);
    $object = new stdClass();
    $control
      ->setData($object);
    $this
      ->assertTrue(isset($object->_services_client), "Services client data was created.");
    $this
      ->assertIdentical($object->_services_client['origin'], $client_id, "V1 services client origin was added.");
    $this
      ->assertTrue(is_array($object->_services_client['visted']), "V1 list of visited sites was created.");
    $this
      ->assertEqual(count($object->_services_client['visted']), 3, "V1 list of visited sites has two item.");
    $this
      ->assertIdentical($object->_services_client['visted'][2], $client_id, "V1 list of visited sites has correct site.");
    $this
      ->assertTrue(isset($object->_services_client['v2']), "V2 control data was created.");
    $this
      ->assertIdentical($object->_services_client['v2']['id'], $client_id, "V2 services client id was added.");
    if (drupal_is_cli()) {
      $this
        ->assertIdentical($object->_services_client['v2']['source'], "cli", "V2 services client source was added.");
    }
    else {
      $this
        ->assertTrue(preg_match('~^https?\\://.*~i', $object->_services_client['v2']['source']), "V2 services client source was added.");
    }
    $this
      ->assertEqual(count($object->_services_client['v2']['nodes']), 3, "V2 list of visited sites has one item.");
    $this
      ->assertIdentical($object->_services_client['v2']['nodes'][2], $client_id, "V2 list of visited sites has correct site.");
    $this
      ->assertIdentical($control
      ->shouldQueue(), TRUE, "Entity should be queued when remote id exists");
    $this
      ->assertIdentical($control
      ->isLooping(), FALSE, "V1 source: No looping when remote client id isn't in visited list.");

    // Try to create control data from existing _services_client data V2 entity
    $name = $this
      ->randomName();
    $fake_entity->_services_client = array(
      'v2' => array(
        'id' => $name,
        'source' => drupal_is_cli() ? 'cli' : 'http://example.com/user',
        'nodes' => array(
          $name,
          $this
            ->randomName(),
        ),
      ),
    );
    $control = new ServicesClientControl($fake_entity, $client_id, $remote_id);
    $object = new stdClass();
    $control
      ->setData($object);
    $this
      ->assertTrue(isset($object->_services_client), "Services client data was created.");
    $this
      ->assertIdentical($object->_services_client['origin'], $client_id, "V1 services client origin was added.");
    $this
      ->assertTrue(is_array($object->_services_client['visted']), "V1 list of visited sites was created.");
    $this
      ->assertEqual(count($object->_services_client['visted']), 3, "V1 list of visited sites has two item.");
    $this
      ->assertIdentical($object->_services_client['visted'][2], $client_id, "V1 list of visited sites has correct site.");
    $this
      ->assertTrue(isset($object->_services_client['v2']), "V2 control data was created.");
    $this
      ->assertIdentical($object->_services_client['v2']['id'], $client_id, "V2 services client id was added.");
    if (drupal_is_cli()) {
      $this
        ->assertIdentical($object->_services_client['v2']['source'], "cli", "V2 services client source was added.");
    }
    else {
      $this
        ->assertTrue(preg_match('~^https?\\://.*~i', $object->_services_client['v2']['source']), "V2 services client source was added.");
    }
    $this
      ->assertEqual(count($object->_services_client['v2']['nodes']), 3, "V2 list of visited sites has one item.");
    $this
      ->assertIdentical($object->_services_client['v2']['nodes'][2], $client_id, "V2 list of visited sites has correct site.");
    $this
      ->assertIdentical($control
      ->shouldQueue(), TRUE, "Entity should be queued when remote id exists");
    $this
      ->assertIdentical($control
      ->isLooping(), FALSE, "V2 source: No looping when remote client id isn't in visited list.");

    // Test looping detection from V2 data
    $name = $this
      ->randomName();
    $fake_entity->_services_client = array(
      'origin' => $remote_id,
      'visted' => array(
        $remote_id,
        $this
          ->randomName(),
      ),
    );
    $control = new ServicesClientControl($fake_entity, $client_id, $remote_id);
    $this
      ->assertIdentical($control
      ->isLooping(), TRUE, "Possible loop is detected.");

    // Test looping detection from V1 data
    $name = $this
      ->randomName();
    $fake_entity->_services_client = array(
      'v2' => array(
        'id' => $remote_id,
        'source' => drupal_is_cli() ? 'cli' : 'http://example.com/user',
        'nodes' => array(
          $remote_id,
          $this
            ->randomName(),
        ),
      ),
    );
    $control = new ServicesClientControl($fake_entity, $client_id, $remote_id);
    $this
      ->assertIdentical($control
      ->isLooping(), TRUE, "Possible loop is detected.");

    // V2 Test queue bypassing when data are set
    $name = $this
      ->randomName();
    $fake_entity->_services_client = array(
      'v2' => array(
        'id' => $name,
        'source' => drupal_is_cli() ? 'cli' : 'http://example.com/user',
        'nodes' => array(
          $name,
          $this
            ->randomName(),
        ),
        'bypass_queue' => TRUE,
      ),
    );
    $control = new ServicesClientControl($fake_entity, $client_id, $remote_id);
    $this
      ->assertIdentical($control
      ->shouldQueue(), FALSE, "Entity shouldn't be queued when remote id exists and bypass queue flag is enabled.");

    // V1 Test queue bypassing when data are set
    $name = $this
      ->randomName();
    $fake_entity->_services_client = array(
      'origin' => $name,
      'visted' => array(
        $name,
        $this
          ->randomName(),
      ),
      'bypass_queue' => TRUE,
    );
    $control = new ServicesClientControl($fake_entity, $client_id, $remote_id);
    $this
      ->assertIdentical($control
      ->shouldQueue(), FALSE, "Entity shouldn't be queued when remote id exists and bypass queue flag is enabled.");
  }
  public function testServicesClientMappingValue() {
    $this
      ->loadFiles();
    $source = new ServicesClientMappingValue();
    $this
      ->assertIdentical($source
      ->isEmpty(), FALSE, "Default value is not empty");
    $this
      ->assertIdentical($source
      ->getValue(), array(), "Default value is empty array");
    $source
      ->setEmpty();
    $this
      ->assertIdentical($source
      ->isEmpty(), TRUE, "Reports empty when set.");
    $source
      ->setNotEmpty();
    $this
      ->assertIdentical($source
      ->isEmpty(), FALSE, "Reports not empty when set");
    $source
      ->setValue("TEST");
    $this
      ->assertIdentical($source
      ->getValue(), "TEST", "Setting value will change value in object");
  }
  public function testServicesClientPropertyReader() {
    $event = $this
      ->createFakeEvent();
    $reader = new ServicesClientPropertyReader($event, $event->config);
    $this
      ->assertIdentical("[PropertyReader - not configured]", $reader
      ->getSummary(), "Not configured property reader returns correct summary");
    $reader
      ->setConfiguration(array(
      'property' => 'test',
    ));
    $this
      ->assertIdentical("\$source-><b>test</b>", $reader
      ->getSummary(), "Configured property reader returns correct summary");
    $fake_entity = new stdClass();
    $result = $reader
      ->read($fake_entity);
    $this
      ->assertIdentical(get_class($result), "ServicesClientMappingValue", "Property reader returns correct result object.");
    $this
      ->assertIdentical($result
      ->isEmpty(), TRUE, "Non existing property will result in empty value");
    $fake_entity->different_property = 1;
    $result = $reader
      ->read($fake_entity);
    $this
      ->assertIdentical($result
      ->isEmpty(), TRUE, "Non existing property will result in empty value");
    $fake_entity->test = 1;
    $result = $reader
      ->read($fake_entity);
    $this
      ->assertIdentical($result
      ->isEmpty(), FALSE, "Existing property will result in non empty value");
    $this
      ->assertIdentical($result
      ->getValue(), array(
      1,
    ), "Array value is returned from simple property.");
    $fake_entity->test = array(
      1,
      2,
    );
    $result = $reader
      ->read($fake_entity);
    $this
      ->assertIdentical($result
      ->getValue(), array(
      1,
      2,
    ), "Array value is returned from array property.");
  }
  public function testServicesClientFieldReader() {
    $this
      ->loadFiles();
    $event = $this
      ->createFakeEvent();
    $reader = new ServicesClientFieldReader($event, $event->config);
    $this
      ->assertIdentical("[FieldReader - not configured]", $reader
      ->getSummary(), "Not configured field reader returns correct summary");
    $config = array(
      'field' => 'field_test',
      'property' => 'value',
    ) + $reader
      ->getConfiguration();
    $reader
      ->setConfiguration($config);
    $this
      ->assertIdentical("\$source-><b>field_test[und][*][value]</b>", $reader
      ->getSummary(), "Configured field reader returns correct summary");
    $reader
      ->setConfiguration(array(
      'all_values' => FALSE,
    ) + $reader
      ->getConfiguration());
    $this
      ->assertIdentical("\$source-><b>field_test[und][0][value]</b>", $reader
      ->getSummary(), "Configured field reader returns correct summary for single value read");
    $reader
      ->setConfiguration(array(
      'all_values' => TRUE,
    ) + $reader
      ->getConfiguration());
    $source = $reader
      ->read(new stdClass());
    $this
      ->assertIdentical($source
      ->isEmpty(), TRUE, "Non existing field will result in empty value");
    $fake_entity = (object) array(
      'field_test_other' => array(
        LANGUAGE_NONE => array(
          array(
            'value' => 'test',
          ),
        ),
      ),
    );
    $source = $reader
      ->read($fake_entity);
    $this
      ->assertIdentical($source
      ->isEmpty(), TRUE, "Non existing field will result in empty value");
    $fake_entity = (object) array(
      'field_test' => array(
        LANGUAGE_NONE => array(
          array(
            'value' => 'test',
          ),
        ),
      ),
    );
    $source = $reader
      ->read($fake_entity);
    $this
      ->assertIdentical($source
      ->isEmpty(), FALSE, "Existing field will result in non empty value");
    $this
      ->assertIdentical($source
      ->getValue(), array(
      'test',
    ), "Correct value is read from simple field.");
    $reader
      ->setConfiguration(array(
      'property' => 'tid',
    ) + $reader
      ->getConfiguration());
    $source = $reader
      ->read($fake_entity);
    $this
      ->assertIdentical($source
      ->isEmpty(), TRUE, "Existing field, non exiting property will return empty value.");
    $reader
      ->setConfiguration(array(
      'property' => 'value',
    ) + $reader
      ->getConfiguration());
    $fake_entity->field_test[LANGUAGE_NONE][]['value'] = 'test2';
    $source = $reader
      ->read($fake_entity);
    $this
      ->assertIdentical($source
      ->isEmpty(), FALSE, "Existing field will result in non empty value");
    $this
      ->assertIdentical($source
      ->getValue(), array(
      'test',
      'test2',
    ), "Correct value is read from multi value field.");
    $fake_entity->field_test['sk'][]['value'] = 'test sk';
    $source = $reader
      ->read($fake_entity);
    $this
      ->assertIdentical($source
      ->isEmpty(), FALSE, "Existing field will result in non empty value");
    $this
      ->assertIdentical($source
      ->getValue(), array(
      'test',
      'test2',
    ), "Different language value is ignored.");
    $reader
      ->setConfiguration(array(
      'language' => 'sk',
    ) + $reader
      ->getConfiguration());
    $source = $reader
      ->read($fake_entity);
    $this
      ->assertIdentical($source
      ->isEmpty(), FALSE, "Existing field (non default language) will result in non empty value");
    $this
      ->assertIdentical($source
      ->getValue(), array(
      'test sk',
    ), "Different language is read properly.");
    $reader
      ->setConfiguration(array(
      'all_values' => FALSE,
      'language' => LANGUAGE_NONE,
      'property' => 'value',
    ) + $reader
      ->getConfiguration());
    $source = $reader
      ->read($fake_entity);
    $this
      ->assertIdentical($source
      ->isEmpty(), FALSE, "Existing field (non default language) will result in non empty value");
    $this
      ->assertIdentical($source
      ->getValue(), array(
      'test',
    ), "Single value is read when configured to read only one.");
  }
  public function testServicesClientPropertyFormatter() {
    $this
      ->loadFiles();
    $event = $this
      ->createFakeEvent();
    $formatter = new ServicesClientPropertyFormatter($event, $event->config);
    $source = new ServicesClientMappingValue(array(
      1,
    ));
    $this
      ->assertIdentical($formatter
      ->getSummary(), '[PropertyFormatter - not configured]', 'Not configured property formatter show correct summary');
    $formatter
      ->setConfiguration(array(
      'property' => 'test',
    ) + $formatter
      ->getConfiguration());
    $this
      ->assertIdentical($formatter
      ->getSummary(), '$object-><b>test</b>', 'Not configured property formatter show correct summary');
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'test', "Property formatter set correct property name.");
    $this
      ->assertIdentical($result['value'], 1, "Property formatter set correct value.");
    $source
      ->setValue(array(
      1,
      2,
    ));
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'test', "Property formatter set correct property name.");
    $this
      ->assertIdentical($result['value'], 1, "Property formatter set correct single value for multivalue source.");
    $formatter
      ->setConfiguration(array(
      'multivalue' => 'force_array',
    ) + $formatter
      ->getConfiguration());
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'test', "Property formatter set correct property name.");
    $this
      ->assertIdentical($result['value'], array(
      1,
      2,
    ), "Property formatter set correct multi value for multivalue source.");
    $source
      ->setEmpty();
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result, NULL, "Property formatter: No result is returend if value is empty");
    $formatter
      ->setConfiguration(array(
      'empty' => 'null_field',
    ) + $formatter
      ->getConfiguration());
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'test', "Property formatter set correct property name.");
    $this
      ->assertIdentical($result['value'], NULL, "Property formatter: NULL is returend if value is empty and null field configured.");
    $formatter
      ->setConfiguration(array(
      'empty' => 'default_value',
      'default_value' => 1,
    ) + $formatter
      ->getConfiguration());
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'test', "Property formatter set correct property name.");
    $this
      ->assertIdentical($result['value'], 1, "Property formatter: Default value is returned when empty value and default configured.");
  }
  public function testServicesClientFieldFormatter() {
    $this
      ->loadFiles();
    $event = $this
      ->createFakeEvent();
    $formatter = new ServicesClientFieldFormatter($event, $event->config);
    $source = new ServicesClientMappingValue(array(
      1,
    ));
    $this
      ->assertIdentical($formatter
      ->getSummary(), '[FieldFormatter - not configured]', 'Not configured field formatter show correct summary');
    $formatter
      ->setConfiguration(array(
      'field' => 'field_test',
      'property' => 'value',
    ) + $formatter
      ->getConfiguration());
    $this
      ->assertIdentical($formatter
      ->getSummary(), '$object-><b>field_test[und][*][value]</b>', 'Not configured field formatter show correct summary');
    $formatter
      ->setConfiguration(array(
      'multivalue' => 'force_single',
    ) + $formatter
      ->getConfiguration());
    $this
      ->assertIdentical($formatter
      ->getSummary(), '$object-><b>field_test[und][0][value]</b>', 'Not configured field formatter show correct summary');
    $formatter
      ->setConfiguration(array(
      'multivalue' => 'all_values',
    ) + $formatter
      ->getConfiguration());
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'field_test', "Field formatter set correct field name.");
    $this
      ->assertIdentical($result['value'][LANGUAGE_NONE][0]['value'], 1, "Field formatter created correct value.");
    $source
      ->setValue(array(
      1,
      2,
    ));
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'field_test', "Field formatter set correct field name.");
    $this
      ->assertIdentical(count($result['value'][LANGUAGE_NONE]), 2, "Field formatter created two values.");
    $this
      ->assertIdentical($result['value'][LANGUAGE_NONE][1]['value'], 2, "Field formatter set second value correct value.");
    $formatter
      ->setConfiguration(array(
      'language' => 'sk',
    ) + $formatter
      ->getConfiguration());
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'field_test', "Field formatter set correct field name.");
    $this
      ->assertIdentical(count($result['value']['sk']), 2, "Field formatter created two values.");
    $this
      ->assertIdentical($result['value']['sk'][1]['value'], 2, "Field formatter set second value correct value.");
    $source
      ->setEmpty();
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result, NULL, "Empty value results in NULL with default formatter configuration.");
    $formatter
      ->setConfiguration(array(
      'language' => LANGUAGE_NONE,
      'empty' => 'null_field',
    ) + $formatter
      ->getConfiguration());
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'field_test', "Field formatter set correct field name.");
    $this
      ->assertIdentical($result['value'][LANGUAGE_NONE], array(), "Field formatter empty value null field creates correct empty array");
    $formatter
      ->setConfiguration(array(
      'empty' => 'null_property',
    ) + $formatter
      ->getConfiguration());
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'field_test', "Field formatter set correct field name.");
    $this
      ->assertIdentical($result['value'], NULL, "Field formatter empty value null property creates correct NULL property.");
    $formatter
      ->setConfiguration(array(
      'empty' => 'default_value',
      'default_value' => 'default',
    ) + $formatter
      ->getConfiguration());
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'field_test', "Field formatter set correct field name.");
    $this
      ->assertIdentical($result['value'][LANGUAGE_NONE][0]['value'], 'default', "Field formatter empty value default value creates correct default.");
    $source
      ->setNotEmpty();
    $formatter
      ->setConfiguration(array(
      'multivalue' => 'force_single',
    ) + $formatter
      ->getConfiguration());
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'field_test', "Field formatter set correct field name.");
    $this
      ->assertIdentical(count($result['value'][LANGUAGE_NONE]), 1, "Field formatter created one value when force_single is enabled.");
    $this
      ->assertTrue(empty($result['value'][LANGUAGE_NONE][1]['value']), "Field formatter sets only one value.");
  }
  public function testServicesClientFieldD6Formatter() {
    $this
      ->loadFiles();
    $event = $this
      ->createFakeEvent();
    $formatter = new ServicesClientFieldD6Formatter($event, $event->config);
    $source = new ServicesClientMappingValue(array(
      1,
    ));
    $this
      ->assertIdentical($formatter
      ->getSummary(), '[FieldD6Formatter - not configured]', 'Not configured field D6 formatter show correct summary');
    $formatter
      ->setConfiguration(array(
      'field' => 'field_test',
      'property' => 'value',
    ) + $formatter
      ->getConfiguration());
    $this
      ->assertIdentical($formatter
      ->getSummary(), '$object-><b>field_test[*][value]</b>', 'Not configured field D6 formatter show correct summary');
    $formatter
      ->setConfiguration(array(
      'multivalue' => 'force_single',
    ) + $formatter
      ->getConfiguration());
    $this
      ->assertIdentical($formatter
      ->getSummary(), '$object-><b>field_test[0][value]</b>', 'Not configured field formatter show correct summary');
    $formatter
      ->setConfiguration(array(
      'multivalue' => 'all_values',
    ) + $formatter
      ->getConfiguration());
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'field_test', "Field D6 formatter set correct field name.");
    $this
      ->assertIdentical($result['value'][0]['value'], 1, "Field D6 formatter created correct value.");
    $source
      ->setValue(array(
      1,
      2,
    ));
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'field_test', "Field formatter set correct field name.");
    $this
      ->assertIdentical(count($result['value']), 2, "Field formatter created two values.");
    $this
      ->assertIdentical($result['value'][1]['value'], 2, "Field formatter set second value correct value.");
    $source
      ->setEmpty();
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result, NULL, "Empty value results in NULL with default formatter configuration.");
    $formatter
      ->setConfiguration(array(
      'empty' => 'null_field',
    ) + $formatter
      ->getConfiguration());
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'field_test', "Field formatter set correct field name.");
    $this
      ->assertIdentical($result['value'], array(), "Field formatter empty value null field creates correct empty array");
    $formatter
      ->setConfiguration(array(
      'empty' => 'null_property',
    ) + $formatter
      ->getConfiguration());
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'field_test', "Field formatter set correct field name.");
    $this
      ->assertIdentical($result['value'], NULL, "Field formatter empty value null property creates correct NULL property.");
    $formatter
      ->setConfiguration(array(
      'empty' => 'default_value',
      'default_value' => 'default',
    ) + $formatter
      ->getConfiguration());
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'field_test', "Field formatter set correct field name.");
    $this
      ->assertIdentical($result['value'][0]['value'], 'default', "Field formatter empty value default value creates correct default.");
    $source
      ->setNotEmpty();
    $formatter
      ->setConfiguration(array(
      'multivalue' => 'force_single',
    ) + $formatter
      ->getConfiguration());
    $result = $formatter
      ->format($source);
    $this
      ->assertIdentical($result['key'], 'field_test', "Field formatter set correct field name.");
    $this
      ->assertIdentical(count($result['value']), 1, "Field formatter created one value when force_single is enabled.");
    $this
      ->assertTrue(empty($result['value'][1]['value']), "Field formatter sets only one value.");
  }
  public function testServicesClientPropertyCondition() {
    $this
      ->loadFiles();
    $event = $this
      ->createFakeEvent();
    $fake_entity = new stdClass();
    $fake_entity->test_prop = 'test';
    $condition = new ServicesClientPropertyCondition($event, $event->config);
    $this
      ->assertIdentical($condition
      ->getSummary(), "[ Property condition - not configured ]", "Uncofigured property condition returns correct summary.");
    $this
      ->assertIdentical($condition
      ->match($fake_entity), FALSE, "Unconfigured property condition returns FALSE");
    $condition
      ->setConfiguration(array(
      'property' => 'test_prop',
      'condition' => 'equals',
      'value' => 'test',
    ) + $condition
      ->getConfiguration());
    $this
      ->assertIdentical($condition
      ->getSummary(), '<b>test_prop</b> equals <b>test</b>', "Configured property condition plugin returns correct summary.");
    $this
      ->assertIdentical($condition
      ->match($fake_entity), TRUE, "Condition matches if entity has property value");
    $fake_entity->test_prop = 'test1';
    $this
      ->assertIdentical($condition
      ->match($fake_entity), FALSE, "Condition doesn't match if entity has property value different");
    unset($fake_entity->test_prop);
    $this
      ->assertIdentical($condition
      ->match($fake_entity), FALSE, "Condition doesn't match if entity has property doesn't exists.");

    // Change condition configuration to empty
    $condition
      ->setConfiguration(array(
      'condition' => 'empty',
    ) + $condition
      ->getConfiguration());
    $this
      ->assertIdentical($condition
      ->match($fake_entity), TRUE, "Condition matches if configured to empty and entity has doesn't have property.");
    $fake_entity->test_prop = 'test';
    $this
      ->assertIdentical($condition
      ->match($fake_entity), FALSE, "Condition doesn't match if configured to empty and entity has property value.");
    $condition
      ->setConfiguration(array(
      'condition' => 'not_empty',
    ) + $condition
      ->getConfiguration());
    $this
      ->assertIdentical($condition
      ->match($fake_entity), TRUE, "Condition matches if configured to not empty and entity has property value.");
    unset($fake_entity->test_prop);
    $this
      ->assertIdentical($condition
      ->match($fake_entity), FALSE, "Condition doesn't match if configured to not empty and entity doesn't have property value.");
    $condition
      ->setConfiguration(array(
      'condition' => 'not_equals',
    ) + $condition
      ->getConfiguration());
    $this
      ->assertIdentical($condition
      ->match($fake_entity), TRUE, "Condition matches if configured to not equals and entity doesn't have property value.");
    $fake_entity->test_prop = 'test1';
    $this
      ->assertIdentical($condition
      ->match($fake_entity), TRUE, "Condition matches if configured to not equals and entity  has different property value.");
    $fake_entity->test_prop = 'test';
    $this
      ->assertIdentical($condition
      ->match($fake_entity), FALSE, "Condition doesn't match if configured to not equals and entity has same property value.");
  }
  public function testServicesClientFieldCondition() {
    $this
      ->loadFiles();
    $event = $this
      ->createFakeEvent();
    $fake_entity = new stdClass();
    $fake_entity->field_test[LANGUAGE_NONE][0]['value'] = 'test';
    $condition = new ServicesClientFieldCondition($event, $event->config);
    $this
      ->assertIdentical($condition
      ->getSummary(), "[ Field condition - not configured ]", "Uncofigured field condition returns correct summary.");
    $this
      ->assertIdentical($condition
      ->match($fake_entity), FALSE, "Unconfigured field condition doesn't match.");
    $condition
      ->setConfiguration(array(
      'field' => 'field_test',
      'language' => LANGUAGE_NONE,
      'property' => 'value',
      'condition' => 'equals',
      'value' => 'test',
    ) + $condition
      ->getConfiguration());
    $this
      ->assertIdentical($condition
      ->getSummary(), '<b>field_test[und][*][value]</b> equals <b>test</b>', "Configured field condition plugin returns correct summary.");
    $this
      ->assertIdentical($condition
      ->match($fake_entity), TRUE, "Condition matches if entity has field value");
    $fake_entity->field_test[LANGUAGE_NONE][0]['value'] = 'test1';
    $this
      ->assertIdentical($condition
      ->match($fake_entity), FALSE, "Condition doesn't match if entity has field value different");
    unset($fake_entity->field_test);
    $this
      ->assertIdentical($condition
      ->match($fake_entity), FALSE, "Condition doesn't match if entity field doesn't exists.");
    $fake_entity->field_test[LANGUAGE_NONE] = array(
      array(
        'value' => 'test1',
      ),
      array(
        'value' => 'test',
      ),
    );
    $this
      ->assertIdentical($condition
      ->match($fake_entity), TRUE, "Condition matches if entity has field value");

    // Change condition configuration to empty
    $condition
      ->setConfiguration(array(
      'condition' => 'empty',
    ) + $condition
      ->getConfiguration());
    $this
      ->assertIdentical($condition
      ->match($fake_entity), FALSE, "Condition doesn't match if configured to empty and entity has field value.");
    unset($fake_entity->field_test);
    $this
      ->assertIdentical($condition
      ->match($fake_entity), TRUE, "Condition matches if configured to empty and entity doens't have field.");
    $condition
      ->setConfiguration(array(
      'condition' => 'not_empty',
    ) + $condition
      ->getConfiguration());
    $this
      ->assertIdentical($condition
      ->match($fake_entity), FALSE, "Condition matches if configured to not empty and entity has property value.");
    $fake_entity->field_test[LANGUAGE_NONE][0]['value'] = 'test';
    $this
      ->assertIdentical($condition
      ->match($fake_entity), TRUE, "Condition doesn't match if configured to not empty and entity doesn't have property value.");
    $condition
      ->setConfiguration(array(
      'condition' => 'not_equals',
    ) + $condition
      ->getConfiguration());
    unset($fake_entity->field_test);
    $this
      ->assertIdentical($condition
      ->match($fake_entity), TRUE, "Condition matches if configured to not equals and entity doesn't have field value.");
    $fake_entity->field_test[LANGUAGE_NONE][0]['value'] = 'test1';
    $fake_entity->field_test[LANGUAGE_NONE][1]['value'] = 'test2';
    $fake_entity->field_test[LANGUAGE_NONE][1]['key'] = 'test3';
    $this
      ->assertIdentical($condition
      ->match($fake_entity), TRUE, "Condition matches if configured to not equals and entity  has different field value.");
    $fake_entity->field_test[LANGUAGE_NONE][0]['value'] = 'test';
    $this
      ->assertIdentical($condition
      ->match($fake_entity), FALSE, "Condition doesn't match if configured to not equals and entity has same field value.");
  }
  public function testServicesClientUserRoleCondition() {
    $this
      ->loadFiles();
    $event = $this
      ->createFakeEvent(array(
      'entity_type' => 'user',
    ));
    $user = new stdClass();
    $user->roles = array(
      '1',
      '2',
      '4',
    );
    $condition = new ServicesClientUserRoleCondition($event, $event->config);
    $this
      ->assertIdentical($condition
      ->getSummary(), "[ User roles condition - not configured ]", "Uncofigured user roles condition returns correct summary.");
    $condition
      ->setConfiguration(array(
      'roles' => array(
        '1' => '1',
        '2' => '2',
        '3' => '3',
      ),
      'intersect' => FALSE,
      'reverse' => FALSE,
    ) + $condition
      ->getConfiguration());

    // getSummary method contains user_role_load() that uses DB
    // $this->assertIdentical($condition->getSummary(), 'User has one of these roles: ', "Configured field condition plugin returns correct summary.");
    $this
      ->assertTrue($condition
      ->match($user));
    $condition
      ->setConfiguration(array(
      'intersect' => TRUE,
    ) + $condition
      ->getConfiguration());
    $this
      ->assertFalse($condition
      ->match($user));
    $condition
      ->setConfiguration(array(
      'reverse' => TRUE,
    ) + $condition
      ->getConfiguration());
    $this
      ->assertTrue($condition
      ->match($user));
  }

}

Classes

Namesort descending Description
ServicesClientPluginsTestCase @file Rules tests.