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'] ?? '';
|
$content = $this->getBody()['content'] ?? '';
|
||||||
return json_encode($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'));
|
$processedAt = Carbon::createFromTimestamp($this->wp->currentTime('mysql'));
|
||||||
$task->setProcessedAt($processedAt);
|
$task->setProcessedAt($processedAt);
|
||||||
$task->setStatus(ScheduledTaskEntity::STATUS_COMPLETED);
|
$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();
|
$this->flush();
|
||||||
} else {
|
} else {
|
||||||
$newsletter = $queue->getNewsletter();
|
$newsletter = $queue->getNewsletter();
|
||||||
|
@@ -54,6 +54,44 @@ class SendingQueuesRepositoryTest extends \MailPoetTest {
|
|||||||
expect($result)->true();
|
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) {
|
private function createTaskSubscriber(ScheduledTaskEntity $task, SubscriberEntity $subscriber, int $processed) {
|
||||||
$taskSubscriber = new ScheduledTaskSubscriberEntity(
|
$taskSubscriber = new ScheduledTaskSubscriberEntity(
|
||||||
$task,
|
$task,
|
||||||
|
Reference in New Issue
Block a user