salesforce-8.x-4.x-dev/modules/salesforce_mapping/tests/src/Unit/SalesforceMappingStorageTest.php

modules/salesforce_mapping/tests/src/Unit/SalesforceMappingStorageTest.php
<?php

namespace Drupal\Tests\salesforce_mapping\Unit;

use Drupal\Component\Uuid\UuidInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Config\Entity\ConfigEntityType;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\salesforce_mapping\Entity\SalesforceMapping;
use Drupal\salesforce_mapping\SalesforceMappingStorage;
use Drupal\Tests\UnitTestCase;

/**
 * @coversDefaultClass \Drupal\salesforce_mapping\SalesforceMappingStorage
 * @group salesforce_mapping
 */
class SalesforceMappingStorageTest extends UnitTestCase {

  /**
   * The type ID of the entity under test.
   *
   * @var string
   */
  protected $entityTypeId;

  /**
   * The UUID service.
   *
   * @var \Drupal\Component\Uuid\UuidInterface|\Prophecy\Prophecy\ProphecyInterface
   */
  protected $uuidService;

  /**
   * The language manager.
   *
   * @var \Drupal\Core\Language\LanguageManagerInterface|\Prophecy\Prophecy\ProphecyInterface
   */
  protected $languageManager;

  /**
   * The config factory service.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface|\Prophecy\Prophecy\ProphecyInterface
   */
  protected $configFactory;

  /**
   * Entity type manager service.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected $etm;

  /**
   * Entity type under test.
   *
   * @var \Drupal\Core\Entity\EntityTypeInterface
   */
  protected $entityType;

  /**
   * Mapping storage service mock.
   *
   * @var \PHPUnit_Framework_MockObject_MockObject
   */
  protected $salesforceMappingStorage;

  /**
   * {@inheritdoc}
   *
   * @covers ::__construct
   */
  protected function setUp(): void {
    parent::setUp();

    $this->entityTypeId = 'test_entity_type';
    $this->entityType = new ConfigEntityType([
      'id' => $this->entityTypeId,
      'class' => SalesforceMapping::class,
      'provider' => 'the_provider',
      'config_prefix' => 'the_config_prefix',
      'entity_keys' => [
        'id' => 'id',
        'uuid' => 'uuid',
        'langcode' => 'langcode',
      ],
      'list_cache_tags' => [$this->entityTypeId . '_list'],
    ]);

    $this->uuidService = $this->createMock(UuidInterface::class);
    $this->languageManager = $this->createMock(LanguageManagerInterface::class);
    $this->configFactory = $this->createMock(ConfigFactoryInterface::class);
    $this->etm = $this->getMockBuilder(EntityTypeManagerInterface::class)
      ->disableOriginalConstructor()
      ->getMock();
    $this->etm->expects($this->any())
      ->method('getDefinition')
      ->with($this->equalTo('test_entityType'))
      ->willReturn($this->entityType);

    $this->salesforceMappingStorage = $this->getMockBuilder(SalesforceMappingStorage::class)
      ->setConstructorArgs([
        $this->entityTypeId,
        $this->configFactory,
        $this->uuidService,
        $this->languageManager,
        $this->etm,
      ])
      ->disableOriginalConstructor()
      ->onlyMethods(['loadByProperties'])
      ->getMock();
  }

  /**
   * @covers ::loadByDrupal
   */
  public function testLoadByDrupal() {
    $config_object = $this->prophesize(SalesforceMapping::class);

    $this->salesforceMappingStorage
      ->expects($this->once())
      ->method('loadByProperties')
      ->with($this->equalTo(['drupal_entity_type' => $this->entityTypeId]))
      ->willReturn([$config_object->reveal()]);

    // Good entity type id provided means config object should be returned.
    $entities = $this->salesforceMappingStorage->loadByDrupal($this->entityTypeId);
    $this->assertEquals([$config_object->reveal()], $entities);
  }

  /**
   * @covers ::loadByDrupal
   */
  public function testLoadByDrupalEmpty() {
    $this->salesforceMappingStorage
      ->expects($this->once())
      ->method('loadByProperties')
      ->with($this->equalTo(['drupal_entity_type' => 'dummy']))
      ->willReturn([]);

    // Bad entity type provided means config should not be returned.
    $entities = $this->salesforceMappingStorage->loadByDrupal('dummy');
    $this->assertEquals([], $entities);
  }

  /**
   * @covers ::loadPushMappings
   */
  public function testLoadPushMappings() {
    $foo_config_object = $this->prophesize(SalesforceMapping::class);
    $foo_config_object->id()->willReturn('foo');
    $foo_config_object->doesPush()->willReturn(TRUE);

    $bar_config_object = $this->prophesize(SalesforceMapping::class);
    $bar_config_object->id()->willReturn('bar');
    $bar_config_object->doesPush()->willReturn(TRUE);

    $zee_config_object = $this->prophesize(SalesforceMapping::class);
    $zee_config_object->id()->willReturn('zee');
    // Zee does NOT push; make sure it's excluded from our load helper.
    $zee_config_object->doesPush()->willReturn(FALSE);

    $this->salesforceMappingStorage
      ->expects($this->once())
      ->method('loadByProperties')
      ->willReturn([
        'foo' => $foo_config_object->reveal(),
        'bar' => $bar_config_object->reveal(),
        'zee' => $zee_config_object->reveal(),
      ]);

    $entities = $this->salesforceMappingStorage->loadPushMappings($this->entityTypeId);
    $expected = [
      'foo' => $foo_config_object->reveal(),
      'bar' => $bar_config_object->reveal(),
    ];
    $this->assertContainsOnlyInstancesOf(EntityInterface::class, $entities);
    $this->assertEquals($expected, $entities);
  }

  /**
   * @covers ::loadPullMappings
   */
  public function testLoadPullMappings() {
    $foo_config_object = $this->prophesize(SalesforceMapping::class);
    $foo_config_object->id()->willReturn('foo');
    $foo_config_object->doesPull()->willReturn(TRUE);

    $bar_config_object = $this->prophesize(SalesforceMapping::class);
    $bar_config_object->id()->willReturn('bar');
    $bar_config_object->doesPull()->willReturn(TRUE);

    $zee_config_object = $this->prophesize(SalesforceMapping::class);
    $zee_config_object->id()->willReturn('zee');
    // Zee does NOT push; make sure it's excluded from our load helper.
    $zee_config_object->doesPull()->willReturn(FALSE);

    $this->salesforceMappingStorage
      ->expects($this->once())
      ->method('loadByProperties')
      ->willReturn([
        'foo' => $foo_config_object->reveal(),
        'bar' => $bar_config_object->reveal(),
        'zee' => $zee_config_object->reveal(),
      ]);

    $entities = $this->salesforceMappingStorage->loadPullMappings($this->entityTypeId);
    $expected = [
      'foo' => $foo_config_object->reveal(),
      'bar' => $bar_config_object->reveal(),
    ];
    $this->assertContainsOnlyInstancesOf(EntityInterface::class, $entities);
    $this->assertEquals($expected, $entities);
  }

  /**
   * @covers ::getMappedSobjectTypes
   */
  public function testGetMappedSobjectTypes() {
    $foo_config_object = $this->prophesize(SalesforceMapping::class);
    $foo_config_object->id()->willReturn('foo');
    $foo_config_object->getSalesforceObjectType()->willReturn('Account');

    $bar_config_object = $this->prophesize(SalesforceMapping::class);
    $bar_config_object->id()->willReturn('bar');
    $bar_config_object->getSalesforceObjectType()->willReturn('Account');

    $zee_config_object = $this->prophesize(SalesforceMapping::class);
    $zee_config_object->id()->willReturn('zee');
    $zee_config_object->getSalesforceObjectType()->willReturn('Contact');

    $this->salesforceMappingStorage
      ->expects($this->once())
      ->method('loadByProperties')
      ->willReturn([
        $foo_config_object->reveal(),
        $bar_config_object->reveal(),
        $zee_config_object->reveal(),
      ]);

    $object_types = $this->salesforceMappingStorage->getMappedSobjectTypes();
    $expected = ['Account' => 'Account', 'Contact' => 'Contact'];
    $this->assertEquals($expected, $object_types);
  }

}

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

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