salesforce-8.x-4.x-dev/modules/salesforce_pull/tests/src/Functional/PullQueueTest.php

modules/salesforce_pull/tests/src/Functional/PullQueueTest.php
<?php

namespace Drupal\Tests\salesforce_pull\Functional;

use Drupal\salesforce\SFID;
use Drupal\salesforce\Tests\TestRestClient;
use Drupal\salesforce_mapping\Entity\SalesforceMapping;
use Drupal\Tests\BrowserTestBase;

/**
 * Test PushQueue.
 *
 * @group salesforce_push
 */
class PullQueueTest extends BrowserTestBase {

  /**
   * Default theme required for D9.
   *
   * @var string
   */
  protected $defaultTheme = 'stark';

  /**
   * Required modules.
   *
   * @var array
   */
  protected static $modules = [
    'typed_data',
    'dynamic_entity_reference',
    'salesforce',
    'salesforce_mapping',
    'salesforce_mapping_test',
    'salesforce_test_rest_client',
    'salesforce_pull',
  ];

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    // Why do we have to do this here but not for other modules?
    \Drupal::service('config.installer')->installDefaultConfig('module', 'salesforce_mapping_test');
    drupal_flush_all_caches();
  }

  /**
   * Test that saving mapped nodes enqueues them for push to Salesforce.
   */
  public function testEnqueue() {
    // Process the queue.
    $mapping = SalesforceMapping::load('test_mapping');
    $this->assertTrue($mapping->doesPull());

    // Trigger salesforce_pull_cron to ensure an item in the pull queue, thanks
    // to our mocked response from TestRestClient service.
    \Drupal::service('salesforce_pull.queue_handler')->getUpdatedRecords();
    $items = TestRestClient::getContactQueryResults();

    // Pulled from Cron.php in core.
    $queue_name = 'cron_salesforce_pull';
    /** @var \Drupal\Core\Queue\QueueFactory $queueFactory */
    $queueFactory = \Drupal::service('queue');
    $queue = $queueFactory->get($queue_name);
    $this->assertEquals($items['totalSize'], $queue->numberOfItems());

    /** @var \Drupal\Core\Queue\QueueWorkerManagerInterface $queueManager */
    $queueManager = \Drupal::service('plugin.manager.queue_worker');
    $queueFactory->get('cron_salesforce_pull')->createQueue();
    $queue_worker = $queueManager->createInstance($queue_name);

    /** @var \Drupal\salesforce_mapping\MappedObjectStorage $mappedObjectStorage */
    $mappedObjectStorage = \Drupal::entityTypeManager()
      ->getStorage('salesforce_mapped_object');
    for ($i = 0; $i < $items['totalSize']; $i++) {
      $item = $queue->claimItem();
      /** @var \Drupal\salesforce_pull\PullQueueItem $data */
      $data = $item->data;
      $queue_worker->processItem($item->data);
      $queue->deleteItem($item);
      $this->assertEquals($items['totalSize'] - ($i + 1), $queue->numberOfItems());
      $sfid = $data->getSobject()->id();
      /** @var \Drupal\salesforce_mapping\Entity\MappedObject $mappedObject */
      $mappedObject = $mappedObjectStorage
        ->loadBySfidAndMapping($sfid, $mapping);
      /** @var \Drupal\node\Entity\Node $createdEntity */
      $createdEntity = $mappedObject->getMappedEntity();
      $this->assertEquals('SALESFORCE TEST', $createdEntity->getTitle());
      $this->assertEquals($data->getSobject()
        ->field('Email'), $createdEntity->field_salesforce_test_email->value);

      $birthdate = $data->getSobject()->field('Birthdate');
      if ($birthdate === NULL) {
        $this->assertNull($createdEntity->field_salesforce_test_date->value);
      }
      else {
        $this->assertEquals(
          date('Y-m-d', strtotime($birthdate)),
          date('Y-m-d', strtotime($createdEntity->field_salesforce_test_date->value))
        );
      }

      $this->assertEquals((boolean) $data->getSobject()
        ->field('d5__Do_Not_Mail__c'), (boolean) $createdEntity->field_salesforce_test_bool->value);
      $this->assertEquals($data->getSobject()
        ->field('Description'), $createdEntity->field_salesforce_test_link->uri);
    }

    $mapping->setLastPullTime(NULL)->save();
    drupal_flush_all_caches();
    // If we have any entity reference, we can't be sure it'll be pulled
    // before the record to which it points. So, we pull the entire queue a 2nd
    // time in order to check that references get assigned properly.
    \Drupal::service('salesforce_pull.queue_handler')->getUpdatedRecords(TRUE);

    // Make sure our queue was re-populated.
    $this->assertEquals($items['totalSize'], $queue->numberOfItems());

    for ($i = 0; $i < $items['totalSize']; $i++) {
      $item = $queue->claimItem();
      /** @var \Drupal\salesforce_pull\PullQueueItem $data */
      $data = $item->data;
      $queue_worker->processItem($data);
      $queue->deleteItem($item);
      $this->assertEquals($items['totalSize'] - ($i + 1), $queue->numberOfItems());
      $sfid = $data->getSobject()->id();
      /** @var \Drupal\salesforce_mapping\Entity\MappedObject $mappedObject */
      $mappedObject = $mappedObjectStorage
        ->loadBySfidAndMapping($sfid, $mapping);
      /** @var \Drupal\node\Entity\Node $createdEntity */
      $createdEntity = $mappedObject->getMappedEntity();

      if (!empty($data->getSobject()->field('ReportsToId'))) {
        $referencedSfid = new SFID($data->getSobject()->field('ReportsToId'));
        $referencedMappedObject = $mappedObjectStorage->loadBySfidAndMapping($referencedSfid, $mapping);
        $referencedEntity = $referencedMappedObject->getMappedEntity();
        $this->assertEquals($referencedEntity->uuid(), $createdEntity->field_salesforce_test_reference->entity->uuid());
      }
    }
  }

}

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

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