View source
<?php
namespace Drupal\Tests\acquia_contenthub\Kernel\EventSubscriber\ExportUnownedContentOnDualConfigSites;
use Acquia\ContentHubClient\CDF\CDFObject;
use Acquia\ContentHubClient\CDFAttribute;
use Acquia\ContentHubClient\CDFDocument;
use Acquia\ContentHubClient\ContentHubClient;
use Drupal\acquia_contenthub\Event\PrunePublishCdfEntitiesEvent;
use Drupal\acquia_contenthub\PubSubModuleStatusChecker;
use Drupal\acquia_contenthub_subscriber\EventSubscriber\PrunePublishEntities\PruneImportedEntitiesFromExport;
use Drupal\acquia_contenthub_subscriber\SubscriberTracker;
use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
class PruneImportedEntitiesFromExportTest extends EntityKernelTestBase {
private $checker;
private $event;
public static $modules = [
'user',
'field',
'depcalc',
'acquia_contenthub',
PubSubModuleStatusChecker::ACQUIA_CONTENTHUB_SUBSCRIBER_MODULE_ID,
];
private $tracker;
private $client;
private $document;
private $thisSiteOrigin;
private $untrackedUnownedUuid;
private $untrackedOwnedUuid;
private $trackedUnownedUuid;
private $otherSiteOrigin;
private $database;
protected function setUp() {
parent::setUp();
$time = time();
$entity_type = 'user';
$this->database = \Drupal::database();
$this->thisSiteOrigin = 'this_site_uuid';
$this->otherSiteOrigin = 'some-other-origin';
$this->untrackedOwnedUuid = 'some-uuid-1';
$this->trackedUnownedUuid = 'some-uuid-2';
$this->untrackedUnownedUuid = 'some-uuid-3';
$this
->installEntitySchema($entity_type);
$this
->installSchema($entity_type, [
'users_data',
]);
$this
->installSchema('acquia_contenthub_subscriber', 'acquia_contenthub_subscriber_import_tracking');
$this
->createUser([
'uuid' => $this->untrackedUnownedUuid,
'name' => 'foo',
'mail' => 'foo@foo.com',
]);
$tracked_objects = [
$this->trackedUnownedUuid => new CDFObject($entity_type, $this->trackedUnownedUuid, $time, $time, $this->otherSiteOrigin, []),
];
$untracked_objects = [
$this->untrackedOwnedUuid => new CDFObject($entity_type, $this->untrackedOwnedUuid, $time, $time, $this->thisSiteOrigin, []),
$this->untrackedUnownedUuid => new CDFObject($entity_type, $this->untrackedUnownedUuid, $time, $time, $this->otherSiteOrigin, []),
];
$untracked_objects[$this->untrackedUnownedUuid]
->addAttribute('entity_type', CDFAttribute::TYPE_ARRAY_STRING, $entity_type);
$untracked_objects[$this->untrackedUnownedUuid]
->addAttribute('hash', CDFAttribute::TYPE_ARRAY_STRING, $this->otherSiteOrigin);
$this
->trackImportedCdf(...array_values($tracked_objects));
$this->tracker = new SubscriberTracker($this->database);
$this->checker = $this
->prophesize(PubSubModuleStatusChecker::class);
$this->checker
->siteHasDualConfiguration()
->willReturn(TRUE);
$this->client = $this
->prophesize(ContentHubClient::class);
$this->client
->getEntities()
->withArguments([
array_keys($untracked_objects),
])
->willReturn(new CDFDocument(...array_values($untracked_objects)));
$this->document = new CDFDocument(...array_values(array_merge($tracked_objects, $untracked_objects)));
$this->event = new PrunePublishCdfEntitiesEvent($this->client
->reveal(), $this->document, $this->thisSiteOrigin);
}
public function testIfSiteHasDualConfigurationEntitiesOriginatedElsewhereWontBeExported() : void {
$this
->assertFalse($this->tracker
->isTracked($this->untrackedOwnedUuid));
$this
->assertTrue($this->tracker
->isTracked($this->trackedUnownedUuid));
$this
->assertFalse($this->tracker
->isTracked($this->untrackedUnownedUuid));
$this
->triggerEvent($this->event);
$document = $this->event
->getDocument();
$this
->assertTrue($document
->hasEntity($this->untrackedOwnedUuid));
$this
->assertFalse($document
->hasEntity($this->trackedUnownedUuid));
$this
->assertTrue($this->tracker
->isTracked($this->trackedUnownedUuid));
$this
->assertFalse($document
->hasEntity($this->untrackedUnownedUuid));
}
private function triggerEvent(PrunePublishCdfEntitiesEvent $event) : void {
$handler = new PruneImportedEntitiesFromExport($this->tracker, $this->checker
->reveal(), \Drupal::service('entity.repository'));
$handler
->onPrunePublishCdfEntitiesIfSiteHasDualConfiguration($event);
}
private function trackImportedCdf(CDFObject ...$objects) : void {
$query = $this->database
->insert('acquia_contenthub_subscriber_import_tracking')
->fields([
'entity_uuid',
'entity_type',
'entity_id',
'first_imported',
'last_imported',
'hash',
'status',
]);
foreach ($objects as $object) {
$query
->values([
$object
->getUuid(),
$object
->getType(),
1,
date('c'),
date('c'),
'some-hash-value',
SubscriberTracker::IMPORTED,
]);
}
$query
->execute();
}
}