Update also newsletter status when completing sending task

[MAILPOET-3962]
This commit is contained in:
Rostislav Wolny
2021-11-19 15:35:04 +01:00
committed by Veljko V
parent c8111a7a85
commit bbb23e4f37
3 changed files with 50 additions and 0 deletions

View File

@@ -505,4 +505,11 @@ class NewsletterEntity {
$content = $this->getBody()['content'] ?? '';
return json_encode($content) ?: '';
}
/**
* Only some types of newsletters can be set as sent. Some others are just active or draft.
*/
public function canBeSetSent(): bool {
return in_array($this->getType(), [self::TYPE_NOTIFICATION_HISTORY, self::TYPE_STANDARD], true);
}
}

View File

@@ -103,6 +103,11 @@ class SendingQueuesRepository extends Repository {
$processedAt = Carbon::createFromTimestamp($this->wp->currentTime('mysql'));
$task->setProcessedAt($processedAt);
$task->setStatus(ScheduledTaskEntity::STATUS_COMPLETED);
// Update also status of newsletter if necessary
$newsletter = $queue->getNewsletter();
if ($newsletter instanceof NewsletterEntity && $newsletter->canBeSetSent()) {
$newsletter->setStatus(NewsletterEntity::STATUS_SENT);
}
$this->flush();
} else {
$newsletter = $queue->getNewsletter();

View File

@@ -54,6 +54,44 @@ class SendingQueuesRepositoryTest extends \MailPoetTest {
expect($result)->true();
}
public function testItFinishesSendingWhenResumingQueueWithEverythingSent() {
$task = $this->createTask();
$task->setStatus(ScheduledTaskEntity::STATUS_PAUSED);
$queue = $this->createQueue($task);
$newsletter = $queue->getNewsletter();
$this->assertInstanceOf(NewsletterEntity::class, $newsletter);
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
$newsletter->setStatus(NewsletterEntity::STATUS_SENDING);
$queue->setCountTotal(1);
$queue->setCountProcessed(1);
$this->entityManager->flush();
$this->repository->resume($queue);
$this->entityManager->refresh($task);
expect($task->getStatus())->equals(ScheduledTaskEntity::STATUS_COMPLETED);
expect($newsletter->getStatus())->equals(NewsletterEntity::STATUS_SENT);
}
public function testItResumesSending() {
$task = $this->createTask();
$task->setStatus(ScheduledTaskEntity::STATUS_PAUSED);
$queue = $this->createQueue($task);
$newsletter = $queue->getNewsletter();
$this->assertInstanceOf(NewsletterEntity::class, $newsletter);
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
$newsletter->setStatus(NewsletterEntity::STATUS_SENDING);
$queue->setCountTotal(1);
$queue->setCountProcessed(2);
$this->entityManager->flush();
$this->repository->resume($queue);
$this->entityManager->refresh($task);
expect($task->getStatus())->null();
expect($newsletter->getStatus())->equals(NewsletterEntity::STATUS_SENDING);
}
private function createTaskSubscriber(ScheduledTaskEntity $task, SubscriberEntity $subscriber, int $processed) {
$taskSubscriber = new ScheduledTaskSubscriberEntity(
$task,