You are here

protected function PullBaseTest::setUp in Salesforce Suite 8.4

Same name and namespace in other branches
  1. 8.3 modules/salesforce_pull/tests/src/Unit/PullBaseTest.php \Drupal\Tests\salesforce_pull\Unit\PullBaseTest::setUp()
  2. 5.0.x modules/salesforce_pull/tests/src/Unit/PullBaseTest.php \Drupal\Tests\salesforce_pull\Unit\PullBaseTest::setUp()

Overrides UnitTestCase::setUp

File

modules/salesforce_pull/tests/src/Unit/PullBaseTest.php, line 43

Class

PullBaseTest
Test Object instantitation.

Namespace

Drupal\Tests\salesforce_pull\Unit

Code

protected function setUp() {
  parent::setUp();
  $this->salesforce_id = '1234567890abcde';

  // Mock SFID.
  $prophecy = $this
    ->prophesize(SFID::CLASS);
  $prophecy
    ->__toString(Argument::any())
    ->willReturn($this->salesforce_id);
  $this->sfid = $prophecy
    ->reveal();

  // Mock StringItem for mock Entity.
  $changed_value = $this
    ->getMockBuilder(StringItem::CLASS)
    ->setMethods([
    '__get',
  ])
    ->disableOriginalConstructor()
    ->getMock();
  $changed_value
    ->expects($this
    ->any())
    ->method('__get')
    ->with($this
    ->equalTo('value'))
    ->willReturn('999999');

  // Mock content entity.
  $this->entity = $this
    ->getMockBuilder(ContentEntityBase::CLASS)
    ->setMethods([
    '__construct',
    '__get',
    '__set',
    'label',
    'id',
    '__isset',
  ])
    ->disableOriginalConstructor()
    ->getMock();
  $this->entity
    ->expects($this
    ->any())
    ->method('__get')
    ->with($this
    ->equalTo('changed'))
    ->willReturn($changed_value);
  $this->entity
    ->expects($this
    ->any())
    ->method('__set')
    ->with($this
    ->equalTo('salesforce_pull'));
  $this->entity
    ->expects($this
    ->any())
    ->method('__isset')
    ->with($this
    ->equalTo('changed'))
    ->willReturn(TRUE);

  // Mock mapping object.
  $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('checkTriggers')
    ->willReturn(TRUE);
  $this->mapping
    ->method('getPullTriggerDate')
    ->willReturn('pull_trigger_date');
  $this->mapping
    ->method('getDrupalEntityType')
    ->willReturn('test');
  $this->mapping
    ->method('getDrupalBundle')
    ->willReturn('test');
  $this->mapping
    ->method('getSalesforceObjectType')
    ->willReturn('test');

  // @TODO testing a mapping with no fields is of questionable value:
  $this->mapping
    ->method('getFieldMappings')
    ->willReturn([]);

  // Mock mapped object.
  $this->mappedObject = $this
    ->getMockBuilder(MappedObjectInterface::CLASS)
    ->getMock();
  $this->mappedObject
    ->expects($this
    ->any())
    ->method('getChanged')
    ->willReturn('1486490500');
  $this->mappedObject
    ->expects($this
    ->any())
    ->method('setDrupalEntity')
    ->willReturn($this->mappedObject);
  $this->mappedObject
    ->expects($this
    ->any())
    ->method('setSalesforceRecord')
    ->willReturn($this->mappedObject);
  $this->mappedObject
    ->expects($this
    ->any())
    ->method('pull')
    ->willReturn($this->mappedObject);
  $this->mappedObject
    ->expects($this
    ->any())
    ->method('sfid')
    ->willReturn($this->salesforce_id);
  $this->mappedObject
    ->expects($this
    ->any())
    ->method('getMappedEntity')
    ->willReturn($this->entity);

  // Mock mapping ConfigEntityStorage object.
  $prophecy = $this
    ->prophesize(ConfigEntityStorage::CLASS);
  $prophecy
    ->load(Argument::any())
    ->willReturn($this->mapping);
  $this->salesforceMappingStorage = $prophecy
    ->reveal();

  // Mock mapped object EntityStorage object.
  $prophecy = $this
    ->prophesize(EntityStorageBase::CLASS);
  $prophecy
    ->loadByProperties(Argument::any())
    ->willReturn([
    $this->mappedObject,
  ]);
  $prophecy
    ->create(Argument::type('array'))
    ->willReturn($this->mappedObject);
  $this->mappedObjectStorage = $prophecy
    ->reveal();

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

  // Mock EntityType Definition.
  $prophecy = $this
    ->prophesize(EntityTypeInterface::CLASS);
  $prophecy
    ->getKeys(Argument::any())
    ->willReturn([
    'bundle' => 'test',
  ]);
  $prophecy->id = 'test';
  $this->entityDefinition = $prophecy
    ->reveal();

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

  // SelectQueryResult for rest client call.
  $result = [
    'totalSize' => 1,
    'done' => TRUE,
    'records' => [
      [
        'Id' => $this->salesforce_id,
        'attributes' => [
          'type' => 'test',
        ],
        'name' => 'Example',
      ],
    ],
  ];
  $this->sqr = new SelectQueryResult($result);

  // Mock rest cient.
  $this->sfapi = $this
    ->getMockBuilder(RestClientInterface::CLASS)
    ->getMock();
  $this->sfapi
    ->expects($this
    ->any())
    ->method('query')
    ->willReturn($this->sqr);
  $this->sfapi
    ->expects($this
    ->any())
    ->method('objectUpdate')
    ->willReturn(NULL);
  $this->sfapi
    ->expects($this
    ->any())
    ->method('objectCreate')
    ->willReturn($this->sfid);

  // Mock event dispatcher.
  $this->ed = $this
    ->getMockBuilder('\\Symfony\\Component\\EventDispatcher\\EventDispatcherInterface')
    ->getMock();
  $this->ed
    ->expects($this
    ->any())
    ->method('dispatch')
    ->willReturn(new SalesforcePullEvent($this->mappedObject, MappingConstants::SALESFORCE_MAPPING_SYNC_SF_UPDATE));
  $container = new ContainerBuilder();
  $container
    ->set('salesforce.client', $this->sfapi);
  $container
    ->set('event_dispatcher', $this->ed);
  $container
    ->set('entity_type.manager', $this->etm);
  \Drupal::setContainer($container);
  $this->pullWorker = $this
    ->getMockBuilder(PullBase::CLASS)
    ->setMethods([
    'getMappedEntity',
  ])
    ->setConstructorArgs([
    $this->etm,
    $this->sfapi,
    $this->ed,
  ])
    ->getMock();
  $this->pullWorker
    ->expects($this
    ->any())
    ->method('getMappedEntity')
    ->willReturn($this->entity);
}