Start refactoring to use a queue

References #328
This commit is contained in:
Oliver Davies 2021-01-04 19:53:39 +00:00
parent af25afe2cf
commit ec6ac1d798
2 changed files with 20 additions and 12 deletions

View file

@ -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 {

View file

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