xero-8.x-2.x-dev/tests/src/Kernel/XeroItemTest.php

tests/src/Kernel/XeroItemTest.php
<?php

namespace Drupal\Tests\xero\Kernel\Normalizer;

use Drupal\Core\TypedData\TypedDataTrait;
use Drupal\KernelTests\KernelTestBase;

/**
 * Tests denormalizer with services enabled.
 *
 * @group xero
 */
class XeroItemTest extends KernelTestBase {

  use TypedDataTrait;

  /**
   * {@inheritdoc}
   */
  protected static $modules = ['user', 'serialization', 'xero'];

  /**
   * Tests the normalization of a Xero type under different data scenarios.
   */
  public function testGetSpecifiedProperties() {
    $definition = $this->getTypedDataManager()
      ->createDataDefinition('xero_contact');

    // Test properties set at item creation are specified.
    $data = [
      'EmailAddress' => 'John@example.com',
      'Name' => 'John Doe',
      'Addresses' => [
        [
          'AddressLine1' => '500 Main Street',
          'City' => 'Wellington',
          'PostalCode' => '6011',
        ],
      ],
    ];
    /** @var \Drupal\xero\TypedData\XeroItemInterface $item */
    $item = $this->getTypedDataManager()->create($definition, $data, 'Contact');
    $set = array_keys($item->getSpecifiedProperties());
    sort($set);
    $this->assertEquals(['Addresses', 'EmailAddress', 'Name'], $set);

    // Test properties explicitly set subsequently are specified.
    $item->get('ContactNumber')->setValue('123');
    $set = array_keys($item->getSpecifiedProperties());
    sort($set);
    $this->assertEquals(['Addresses', 'ContactNumber', 'EmailAddress', 'Name'], $set);

    // Test applying default values has no effect.
    $item->applyDefaultValue();
    $set = array_keys($item->getSpecifiedProperties());
    sort($set);
    $this->assertEquals(['Addresses', 'ContactNumber', 'EmailAddress', 'Name'], $set);

    // Test validation has no effect.
    $item->validate();
    $set = array_keys($item->getSpecifiedProperties());
    sort($set);
    $this->assertSame(['Addresses', 'ContactNumber', 'EmailAddress', 'Name'], $set);

    // Test the specified properties remain correct when retrieved from list.
    $listDefinition = $this->getTypedDataManager()
      ->createListDataDefinition('xero_contact');
    $list = $this->getTypedDataManager()->create($listDefinition);
    $list->offsetSet(0, $item);
    $item = $list->get(0);
    $set = array_keys($item->getSpecifiedProperties());
    sort($set);
    $this->assertSame(['Addresses', 'ContactNumber', 'EmailAddress', 'Name'], $set);

    // Test setting to pristine resets the specified properties to only required
    // properties.
    $item->markAsPristine();
    $set = array_keys($item->getSpecifiedProperties());
    $this->assertEquals(['Name'], $set);

    // Test setting a property has only the changed property.
    $item->get('ContactNumber')->setValue('456');
    $set = array_keys($item->getSpecifiedProperties());
    $this->assertEquals(['ContactNumber', 'Name'], $set);

    // Test setting a property of a child property.
    $item
      ->get('Addresses')
      ->set(0, ['AddressLine' => '10 High Street']);
    $set = array_keys($item->getSpecifiedProperties());
    sort($set);
    $this->assertEquals(['Addresses', 'ContactNumber', 'Name'], $set);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc