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);
}
}
