Update also newsletter status when completing sending task
[MAILPOET-3962]
This commit is contained in:
committed by
Veljko V
parent
c8111a7a85
commit
bbb23e4f37
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user