parent
af25afe2cf
commit
ec6ac1d798
|
@ -4,18 +4,18 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace Drupal\opdavies_blog\EventSubscriber;
|
namespace Drupal\opdavies_blog\EventSubscriber;
|
||||||
|
|
||||||
|
use Drupal\Core\Queue\QueueFactory;
|
||||||
use Drupal\core_event_dispatcher\Event\Entity\AbstractEntityEvent;
|
use Drupal\core_event_dispatcher\Event\Entity\AbstractEntityEvent;
|
||||||
use Drupal\hook_event_dispatcher\HookEventDispatcherInterface;
|
use Drupal\hook_event_dispatcher\HookEventDispatcherInterface;
|
||||||
use Drupal\opdavies_blog\Entity\Node\Post;
|
use Drupal\opdavies_blog\Entity\Node\Post;
|
||||||
use Drupal\opdavies_blog\Service\PostPusher\PostPusher;
|
|
||||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||||
|
|
||||||
final class PushBlogPostToSocialMedia implements EventSubscriberInterface {
|
final class PushBlogPostToSocialMedia implements EventSubscriberInterface {
|
||||||
|
|
||||||
private PostPusher $postPusher;
|
private QueueFactory $queueFactory;
|
||||||
|
|
||||||
public function __construct(PostPusher $postPusher) {
|
public function __construct(QueueFactory $queueFactory) {
|
||||||
$this->postPusher = $postPusher;
|
$this->queueFactory = $queueFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -40,14 +40,12 @@ final class PushBlogPostToSocialMedia implements EventSubscriberInterface {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->shouldBePushed($entity)) {
|
$queue = $this->queueFactory->get('opdavies_blog_push_post_to_social_media');
|
||||||
return;
|
$queue->createQueue();
|
||||||
}
|
|
||||||
|
|
||||||
$this->postPusher->push($entity);
|
$queue->createItem([
|
||||||
|
'post' => $entity,
|
||||||
$entity->markAsSentToSocialMedia();
|
]);
|
||||||
$entity->save();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function shouldBePushed(Post $post): bool {
|
private function shouldBePushed(Post $post): bool {
|
||||||
|
|
|
@ -6,6 +6,7 @@ namespace Drupal\Tests\opdavies_blog\Kernel;
|
||||||
|
|
||||||
use Drupal\Core\Queue\QueueInterface;
|
use Drupal\Core\Queue\QueueInterface;
|
||||||
use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
|
use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
|
||||||
|
use Drupal\opdavies_blog\Entity\Node\Post;
|
||||||
use Drupal\Tests\node\Traits\NodeCreationTrait;
|
use Drupal\Tests\node\Traits\NodeCreationTrait;
|
||||||
|
|
||||||
final class PushToSocialMediaTest extends EntityKernelTestBase {
|
final class PushToSocialMediaTest extends EntityKernelTestBase {
|
||||||
|
@ -40,6 +41,15 @@ final class PushToSocialMediaTest extends EntityKernelTestBase {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->assertSame(1, $this->queue->numberOfItems());
|
$this->assertSame(1, $this->queue->numberOfItems());
|
||||||
|
|
||||||
|
$item = $this->queue->claimItem();
|
||||||
|
/** @var Post $post */
|
||||||
|
$post = $item->data['post'];
|
||||||
|
|
||||||
|
$this->assertNotNull($post);
|
||||||
|
$this->assertInstanceOf(Post::class, $post);
|
||||||
|
$this->assertSame('1', $post->id());
|
||||||
|
$this->assertSame('Ignoring PHPCS sniffs within PHPUnit tests', $post->getTitle());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function setUp() {
|
protected function setUp() {
|
||||||
|
@ -50,7 +60,7 @@ final class PushToSocialMediaTest extends EntityKernelTestBase {
|
||||||
$this->installSchema('node', ['node_access']);
|
$this->installSchema('node', ['node_access']);
|
||||||
|
|
||||||
$this->queue = $this->container->get('queue')
|
$this->queue = $this->container->get('queue')
|
||||||
->get('push_post_to_social_media');
|
->get('opdavies_blog_push_post_to_social_media');
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue