Skip to content

Commit 12376b1

Browse files
committed
Replace serialize/unserialize with json encode/decode
1 parent ad2d3c7 commit 12376b1

File tree

5 files changed

+43
-22
lines changed

5 files changed

+43
-22
lines changed

src/Job/SendMailJob.php

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,19 @@ public function execute(Message $message): ?string
3737
/** @var \Cake\Mailer\AbstractTransport $transport */
3838
$transport = $this->getTransport($transportClassName, $config);
3939

40-
$emailMessage = unserialize($message->getArgument('emailMessage'));
40+
$emailMessage = new \Cake\Mailer\Message();
41+
$data = json_decode($message->getArgument('emailMessage'), true);
42+
if (!is_array($data)) {
43+
throw new \InvalidArgumentException('Email Message cannot be decoded.');
44+
}
45+
$emailMessage->createFromArray($data);
4146
$result = $transport->send($emailMessage);
4247
} catch (\Exception $e) {
4348
Log::error(sprintf('An error has occurred processing message: %s', $e->getMessage()));
44-
} finally {
45-
if (!$result) {
46-
return Processor::REJECT;
47-
}
49+
}
50+
51+
if (!$result) {
52+
return Processor::REJECT;
4853
}
4954

5055
return Processor::ACK;

src/Mailer/Transport/QueueTransport.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ protected function prepareData(Message $message): array
8686
return [
8787
'transport' => $this->getConfig('transport'),
8888
'config' => $this->getConfig(),
89-
'emailMessage' => serialize($message),
89+
'emailMessage' => json_encode($message),
9090
];
9191
}
9292
}

tests/TestCase/Job/SendMailJobTest.php

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
namespace Cake\Queue\Test\TestCase\Job;
1818

19+
use Cake\Mailer\Mailer;
1920
use Cake\Mailer\Transport\DebugTransport;
2021
use Cake\Queue\Job\Message;
2122
use Cake\Queue\Job\SendMailJob;
@@ -62,6 +63,20 @@ public function testExecute()
6263
$this->assertSame(Processor::ACK, $actual);
6364
}
6465

66+
/**
67+
* Test execute with attachments method
68+
*
69+
* @return void
70+
*/
71+
public function testExecuteWithAttachments()
72+
{
73+
$emailMessage = clone $this->message;
74+
$emailMessage->addAttachments(['test.txt' => ROOT . 'files' . DS . 'test.txt']);
75+
$message = $this->createMessage(DebugTransport::class, [], $emailMessage);
76+
$actual = $this->job->execute($message);
77+
$this->assertSame(Processor::ACK, $actual);
78+
}
79+
6580
/**
6681
* Test execute method with invalid transport
6782
*
@@ -86,6 +101,13 @@ public function testExecuteUnserializableMessage()
86101
$this->assertSame(Processor::REJECT, $actual);
87102
}
88103

104+
public function testExecuteNoAbstractTransport()
105+
{
106+
$message = $this->createMessage(Mailer::class, [], $this->message);
107+
$actual = $this->job->execute($message);
108+
$this->assertSame(Processor::REJECT, $actual);
109+
}
110+
89111
/**
90112
* Create a simple message for testing.
91113
*
@@ -98,7 +120,7 @@ protected function createMessage($transport, $config, $emailMessage): Message
98120
'data' => [
99121
'transport' => $transport,
100122
'config' => $config,
101-
'emailMessage' => serialize($emailMessage),
123+
'emailMessage' => json_encode($emailMessage),
102124

103125
],
104126
];

tests/TestCase/Mailer/Transport/QueueTransportTest.php

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
namespace Cake\Queue\Test\TestCase\Job;
1818

1919
use Cake\Queue\Mailer\Transport\QueueTransport;
20+
use Cake\Queue\QueueManager;
2021
use Cake\TestSuite\TestCase;
2122

2223
class QueueTransportTest extends TestCase
@@ -28,26 +29,17 @@ class QueueTransportTest extends TestCase
2829
*/
2930
public function testSend()
3031
{
32+
QueueManager::setConfig('default', [
33+
'queue' => 'default',
34+
'url' => 'null:',
35+
]);
3136
$message = (new \Cake\Mailer\Message())
3237
->setFrom('[email protected]')
3338
->setTo('[email protected]')
3439
->setSubject('Sample Subject');
3540

36-
$transport = $this
37-
->getMockBuilder(QueueTransport::class)->onlyMethods(['enqueueJob'])
38-
->getMock();
39-
$expectedData = [
40-
'transport' => 'Cake\Mailer\Transport\MailTransport',
41-
'config' => [
42-
'options' => [],
43-
'transport' => 'Cake\Mailer\Transport\MailTransport',
44-
],
45-
'emailMessage' => serialize($message),
46-
];
47-
$expectedOptions = [];
48-
$transport->expects($this->once())
49-
->method('enqueueJob')
50-
->with($expectedData, $expectedOptions);
41+
$transport = new QueueTransport();
42+
5143
$result = $transport->send($message);
5244

5345
$headers = $message->getHeadersString(
@@ -66,5 +58,6 @@ public function testSend()
6658

6759
$expected = ['headers' => $headers, 'message' => 'Message has been enqueued'];
6860
$this->assertEquals($expected, $result);
61+
QueueManager::drop('default');
6962
}
7063
}

tests/test_app/files/test.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
TEST CONTENT

0 commit comments

Comments
 (0)