Don't serialize meta fields if they're null [MAILPOET-2073]

This commit is contained in:
wxa
2019-05-14 12:24:57 +03:00
committed by M. Shull
parent e15fd4661e
commit b99096d2df
4 changed files with 29 additions and 3 deletions

View File

@ -99,7 +99,7 @@ class ScheduledTask extends Model {
if (!$this->priority) {
$this->priority = self::PRIORITY_MEDIUM;
}
if (!Helpers::isJson($this->meta)) {
if (!is_null($this->meta) && !Helpers::isJson($this->meta)) {
$this->set(
'meta',
json_encode($this->meta)

View File

@ -16,7 +16,7 @@ if (!defined('ABSPATH')) exit;
* @property string $newsletter_rendered_subject
* @property int $task_id
* @property int $newsletter_id
* @property string|object $meta
* @property string|object|null $meta
* @property string|array $subscribers
* @property string|null $deleted_at
*/
@ -77,7 +77,7 @@ class SendingQueue extends Model {
json_encode($this->encodeEmojisInBody($this->newsletter_rendered_body))
);
}
if (!Helpers::isJson($this->meta)) {
if (!is_null($this->meta) && !Helpers::isJson($this->meta)) {
$this->set(
'meta',
json_encode($this->meta)

View File

@ -125,6 +125,18 @@ class ScheduledTaskTest extends \MailPoetTest {
expect(json_decode($task->meta, true))->equals($meta);
}
function testItDoesNotJsonEncodesMetaEqualToNull() {
$task = ScheduledTask::create();
$meta = null;
$task->meta = $meta;
$task->save();
$task = ScheduledTask::findOne($task->id);
expect(Helpers::isJson($task->meta))->false();
expect($task->meta)->equals($meta);
}
function _after() {
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTaskSubscriber::$_table);

View File

@ -113,6 +113,20 @@ class SendingQueueTest extends \MailPoetTest {
expect(json_decode($queue->meta, true))->equals($meta);
}
function testItDoesNotJsonEncodesMetaEqualToNull() {
$queue = SendingQueue::create();
$meta = null;
$queue->task_id = 0;
$queue->newsletter_id = 1;
$queue->meta = $meta;
$queue->save();
$queue = SendingQueue::findOne($queue->id);
expect(Helpers::isJson($queue->meta))->false();
expect($queue->meta)->equals($meta);
}
function testItReencodesSerializedObjectToJsonEncoded() {
$queue = $this->queue;
$newsletter_rendered_body = $this->rendered_body;