salesforce-8.x-4.x-dev/modules/salesforce_pull/tests/src/Unit/DeleteHandlerTest.php

modules/salesforce_pull/tests/src/Unit/DeleteHandlerTest.php
<?php

namespace Drupal\Tests\salesforce_pull\Unit;

use Symfony\Component\EventDispatcher\EventDispatcher;
use Drupal\Core\Entity\EntityStorageBase;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\State\StateInterface;
use Drupal\salesforce\Rest\RestClientInterface;
use Drupal\salesforce_mapping\Entity\MappedObjectInterface;
use Drupal\salesforce_mapping\Entity\SalesforceMappingInterface;
use Drupal\salesforce_mapping\MappedObjectStorage;
use Drupal\salesforce_mapping\MappingConstants;
use Drupal\salesforce_mapping\SalesforceMappingStorage;
use Drupal\salesforce_pull\DeleteHandler;
use Drupal\salesforce_pull\QueueHandler;
use Drupal\Tests\UnitTestCase;
use Drupal\user\Entity\User;
use Prophecy\Argument;

/**
 * Test Object instantiation.
 *
 * @group salesforce_pull
 */
class DeleteHandlerTest extends UnitTestCase {

  /**
   * Required modules.
   *
   * @var array
   */
  protected static $modules = ['salesforce_pull'];

  protected $configStorage;

  protected $dh;

  protected $drupalEntityStorage;

  protected $ed;

  protected $entity;

  protected $entityId;

  protected $entityRef;

  protected $entityStorage;

  protected $entityTypeId;

  protected $etm;

  protected $mappedObject;

  protected $mapping;

  protected $sfapi;

  protected $state;

  protected $pullQueue;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    $result = [
      'totalSize' => 1,
      'done' => TRUE,
      'deletedRecords' => [
        [
          'id' => '1234567890abcde',
          'attributes' => ['type' => 'dummy'],
          'name' => 'Example',
        ],
      ],
    ];

    $prophecy = $this->prophesize(RestClientInterface::CLASS);
    $prophecy->getDeleted(Argument::any(), Argument::any(), Argument::any())
      ->willReturn($result);
    $this->sfapi = $prophecy->reveal();

    // Mock an atribtary Drupal entity.
    $this->entity = $this->getMockBuilder(User::CLASS)
      ->disableOriginalConstructor()
      ->getMock();
    $this->entity->expects($this->any())->method('delete')->willReturn(TRUE);
    $this->entity->expects($this->any())->method('id')->willReturn(1);
    $this->entity->expects($this->any())->method('label')->willReturn('foo');

    $this->mapping = $this->getMockBuilder(SalesforceMappingInterface::CLASS)
      ->getMock();
    $this->mapping->expects($this->any())
      ->method('__get')
      ->with($this->equalTo('id'))
      ->willReturn(1);
    $this->mapping->expects($this->any())
      ->method('__get')
      ->with($this->equalTo('entity'))
      ->willReturn($this->entity);
    $this->mapping->expects($this->any())
      ->method('getSalesforceObjectType')
      ->willReturn('default');
    $this->mapping->expects($this->any())
      ->method('getPullFieldsArray')
      ->willReturn(['Name' => 'Name', 'Account Number' => 'Account Number']);
    $this->mapping->expects($this->any())
      ->method('checkTriggers')
      ->with([MappingConstants::SALESFORCE_MAPPING_SYNC_SF_DELETE])
      ->willReturn(TRUE);

    // Mock mapped object.
    $this->entityTypeId = new \stdClass();
    $this->entityId = new \stdClass();
    $this->entityRef = new \stdClass();
    $this->entityTypeId->value = 'test';
    $this->entityId->value = '1';
    $this->entityRef->entity = $this->mapping;

    $this->mappedObject = $this->getMockBuilder(MappedObjectInterface::CLASS)
      ->getMock();
    $this->mappedObject
      ->expects($this->any())
      ->method('delete')
      ->willReturn(TRUE);
    $this->mappedObject
      ->expects($this->any())
      ->method('getMapping')
      ->willReturn($this->mapping);
    $this->mappedObject
      ->expects($this->any())
      ->method('getFieldDefinitions')
      ->willReturn(['drupal_entity', 'salesforce_mapping']);
    $this->mappedObject
      ->expects($this->any())
      ->method('getMappedEntity')
      ->willReturn($this->entity);

    // Mock mapping ConfigEntityStorage object.
    $prophecy = $this->prophesize(SalesforceMappingStorage::CLASS);
    $prophecy->loadByProperties(Argument::any())->willReturn([$this->mapping]);
    $prophecy->load(Argument::any())->willReturn($this->mapping);
    $prophecy->loadMultiple()->willReturn([
      $this->mapping,
    ]);
    $this->configStorage = $prophecy->reveal();

    // Mock mapped object EntityStorage object.
    $this->entityStorage = $this->getMockBuilder(MappedObjectStorage::CLASS)
      ->disableOriginalConstructor()
      ->getMock();
    $this->entityStorage->expects($this->any())
      ->method('loadBySfid')
      ->willReturn([$this->mappedObject]);

    // Mock Drupal entity EntityStorage object.
    $prophecy = $this->prophesize(EntityStorageBase::CLASS);
    $prophecy->load(Argument::any())->willReturn($this->entity);
    $this->drupalEntityStorage = $prophecy->reveal();

    // Mock EntityTypeManagerInterface.
    $prophecy = $this->prophesize(EntityTypeManagerInterface::CLASS);
    $prophecy->getStorage('salesforce_mapping')
      ->willReturn($this->configStorage);
    $prophecy->getStorage('salesforce_mapped_object')
      ->willReturn($this->entityStorage);
    $prophecy->getStorage('test')->willReturn($this->drupalEntityStorage);
    $this->etm = $prophecy->reveal();

    // Mock state.
    $prophecy = $this->prophesize(StateInterface::CLASS);
    $prophecy->get('salesforce.mapping_pull_info', Argument::any())
      ->willReturn([1 => ['last_delete_timestamp' => '1485787434']]);
    $prophecy->set('salesforce.mapping_pull_info', Argument::any())
      ->willReturn(NULL);
    $this->state = $prophecy->reveal();

    // Mock event dispatcher.
    $prophecy = $this->prophesize(EventDispatcher::CLASS);
    $prophecy->dispatch(Argument::any(), Argument::any())
      ->willReturnArgument(0);
    $this->ed = $prophecy->reveal();

    $prophecy = $this->prophesize(QueueHandler::CLASS);
    $this->pullQueue = $prophecy->reveal();

    $this->dh = new DeleteHandler(
      $this->sfapi,
      $this->etm,
      $this->state,
      $this->ed,
      $this->pullQueue
    );
  }

  /**
   * Test object creation.
   */
  public function testObject() {
    $this->assertTrue($this->dh instanceof DeleteHandler);
  }

  /**
   * Test processDeletedRecords.
   */
  public function testGetUpdatedRecords() {
    $result = $this->dh->processDeletedRecords();
    $this->assertTrue($result);
  }

}

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

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