77use Cake \Core \Configure ;
88use Cake \Datasource \ConnectionManager ;
99use Cake \Mailer \Mailer ;
10+ use Cake \Mailer \Message ;
1011use Cake \Mailer \Transport \DebugTransport ;
1112use Cake \Mailer \TransportFactory ;
1213use Cake \TestSuite \TestCase ;
1314use Queue \Console \Io ;
1415use Queue \Queue \Task \EmailTask ;
16+ use Queue \Utility \JsonSerializer ;
17+ use Queue \Utility \Serializer ;
1518use Shim \TestSuite \ConsoleOutput ;
1619use Shim \TestSuite \TestTrait ;
1720use Tools \Mailer \Message as MailerMessage ;
@@ -21,7 +24,7 @@ class EmailTaskTest extends TestCase {
2124 use TestTrait;
2225
2326 /**
24- * @var array
27+ * @var array<string>
2528 */
2629 protected array $ fixtures = [
2730 'plugin.Queue.QueuedJobs ' ,
@@ -70,10 +73,91 @@ public function testAdd() {
7073 $ queuedJobsTable = $ this ->getTableLocator ()->get ('Queue.QueuedJobs ' );
7174
7275 /** @var \Queue\Model\Entity\QueuedJob $queuedJob */
73- $ queuedJob = $ queuedJobsTable ->find ()->orderDesc ('id ' )->firstOrFail ();
76+ $ queuedJob = $ queuedJobsTable ->find ()->orderByDesc ('id ' )->firstOrFail ();
7477 $ this ->assertSame ('Queue.Email ' , $ queuedJob ->job_task );
7578 }
7679
80+ /**
81+ * @return void
82+ */
83+ public function testAddMessageSerialized () {
84+ Configure::write ('Queue.serializerClass ' , JsonSerializer::class);
85+
86+ $ message = new Message ();
87+ $ message
88+ ->setSubject ('I haz Cake ' )
89+ ->setEmailFormat (Message::MESSAGE_BOTH )
90+ ->setBody ([
91+ Message::MESSAGE_TEXT => 'text message ' ,
92+ Message::MESSAGE_HTML => '<strong>html message</strong> ' ,
93+ ]);
94+
95+ $ data = [
96+ 'class ' => Message::class,
97+ 'settings ' => $ message ->__serialize (),
98+ 'serialized ' => true ,
99+ ];
100+
101+ /** @var \Queue\Model\Table\QueuedJobsTable $queuedJobsTable */
102+ $ queuedJobsTable = $ this ->getTableLocator ()->get ('Queue.QueuedJobs ' );
103+ $ queuedJobsTable ->createJob ('Email ' , $ data );
104+
105+ /** @var \Queue\Model\Entity\QueuedJob $queuedJob */
106+ $ queuedJob = $ queuedJobsTable ->find ()->orderByDesc ('id ' )->firstOrFail ();
107+
108+ $ settings = Serializer::deserialize ($ queuedJob ->data )['settings ' ];
109+ $ message = (new Message ())->createFromArray ($ settings );
110+
111+ $ this ->assertSame ('I haz Cake ' , $ message ->getSubject ());
112+
113+ $ serialized = EmailTask::serialize ($ message );
114+ $ message = EmailTask::unserialize (new Message (), $ serialized );
115+
116+ $ this ->assertSame ('I haz Cake ' , $ message ->getSubject ());
117+
118+ $ this ->Task ->run ($ data , 0 );
119+
120+ $ this ->assertInstanceOf (Message::class, $ this ->Task ->message );
121+
122+ Configure::delete ('Queue.serializerClass ' );
123+ }
124+
125+ /**
126+ * @return void
127+ */
128+ public function testAddMessagePhpSerialized () {
129+ $ message = new Message ();
130+ $ message
131+ ->setSubject ('I haz Cake ' )
132+ ->setEmailFormat (Message::MESSAGE_BOTH )
133+ ->setBody ([
134+ Message::MESSAGE_TEXT => 'text message ' ,
135+ Message::MESSAGE_HTML => '<strong>html message</strong> ' ,
136+ ]);
137+
138+ $ data = [
139+ 'class ' => Message::class,
140+ 'settings ' => serialize ($ message ),
141+ 'serialized ' => true ,
142+ ];
143+
144+ /** @var \Queue\Model\Table\QueuedJobsTable $queuedJobsTable */
145+ $ queuedJobsTable = $ this ->getTableLocator ()->get ('Queue.QueuedJobs ' );
146+ $ queuedJobsTable ->createJob ('Email ' , $ data );
147+
148+ /** @var \Queue\Model\Entity\QueuedJob $queuedJob */
149+ $ queuedJob = $ queuedJobsTable ->find ()->orderByDesc ('id ' )->firstOrFail ();
150+
151+ $ settings = Serializer::deserialize ($ queuedJob ->data )['settings ' ];
152+ $ message = unserialize ($ settings );
153+
154+ $ this ->assertSame ('I haz Cake ' , $ message ->getSubject ());
155+
156+ $ this ->Task ->run ($ data , 0 );
157+
158+ $ this ->assertInstanceOf (Message::class, $ this ->Task ->message );
159+ }
160+
77161 /**
78162 * @return void
79163 */
@@ -145,7 +229,7 @@ public function testRunToolsEmailMessageClassString() {
145229 $ queuedJobsTable = $ this ->getTableLocator ()->get ('Queue.QueuedJobs ' );
146230 $ queuedJobsTable ->createJob ('Queue.Email ' , ['class ' => $ class , 'settings ' => $ settings ]);
147231
148- $ queuedJob = $ queuedJobsTable ->find ()->orderDesc ('id ' )->firstOrFail ();
232+ $ queuedJob = $ queuedJobsTable ->find ()->orderByDesc ('id ' )->firstOrFail ();
149233 $ data = unserialize ($ queuedJob ->data );
150234 /** @var \TestApp\Mailer\TestMailer $mailer */
151235 $ class = $ data ['class ' ];
0 commit comments