@@ -37,57 +37,93 @@ public function testMailerSendSendsMessageWithProperViewContent()
3737 /** @var SentMessage $sentMessage */
3838 $ sentMessage = $ sentMessages [0 ];
3939 self ::assertStringContainsString ('rendered.view ' , $ sentMessage ->toString ());
40+ self ::assertStringContainsString ('Content-Type: text/html; ' , $ sentMessage ->toString ());
4041 self ::assertEquals ('taylor@laravel.com ' , $ sentMessage ->getEnvelope ()->getRecipients ()[0 ]->getAddress ());
4142 self ::assertEquals ('hello@laravel.com ' , $ sentMessage ->getEnvelope ()->getSender ()->getAddress ());
4243 }
4344
4445
4546 public function testMailerSendSendsMessageWithProperPlainViewContent ()
4647 {
47- unset($ _SERVER ['__mailer.test ' ]);
48- $ mailer = $ this ->getMock (Mailer::class, ['createMessage ' ], $ this ->getMocks ());
49- $ message = m::mock ('StdClass ' );
50- $ mailer ->expects ($ this ->once ())->method ('createMessage ' )->willReturn ($ message );
51- $ view = m::mock ('StdClass ' );
52- $ mailer ->getViewFactory ()->shouldReceive ('make ' )->once ()->with ('foo ' , ['data ' , 'message ' => $ message ])->andReturn ($ view );
53- $ mailer ->getViewFactory ()->shouldReceive ('make ' )->once ()->with ('bar ' , ['data ' , 'message ' => $ message ])->andReturn ($ view );
54- $ view ->shouldReceive ('render ' )->twice ()->andReturn ('rendered.view ' );
55- $ message ->shouldReceive ('setBody ' )->once ()->with ('rendered.view ' , 'text/html ' );
56- $ message ->shouldReceive ('addPart ' )->once ()->with ('rendered.view ' , 'text/plain ' );
57- $ message ->shouldReceive ('setFrom ' )->never ();
58- $ mailer ->setSwiftMailer (m::mock ('StdClass ' ));
59- $ message ->shouldReceive ('getSwiftMessage ' )->once ()->andReturn ($ message );
60- $ mailer ->getSwiftMailer ()->shouldReceive ('send ' )->once ()->with ($ message , []);
61- $ mailer ->send (['foo ' , 'bar ' ], ['data ' ], function ($ m ) { $ _SERVER ['__mailer.test ' ] = $ m ; });
62- unset($ _SERVER ['__mailer.test ' ]);
48+ $ view = m::mock (Factory::class);
49+ $ view ->shouldReceive ('make ' )->twice ()->andReturn ($ view );
50+ $ view ->shouldReceive ('render ' )->once ()->andReturn ('rendered.view ' );
51+ $ view ->shouldReceive ('render ' )->once ()->andReturn ('rendered.plain ' );
52+
53+ $ mailer = new Mailer ($ view , $ transport = new ArrayTransport ());
54+ $ mailer ->send (['foo ' , 'bar ' ], ['data ' ], function (Message $ message ) {
55+ $ message ->to ('taylor@laravel.com ' )->from ('hello@laravel.com ' );
56+ });
57+
58+ $ sentMessages = $ transport ->messages ();
59+ self ::assertCount (1 , $ sentMessages );
60+
61+ /** @var SentMessage $sentMessage */
62+ $ sentMessage = $ sentMessages [0 ];
63+ $ expected = <<<Text
64+ Content-Type: text/html; charset=utf-8 \r
65+ Content-Transfer-Encoding: quoted-printable \r
66+ \r
67+ rendered.view
68+ Text ;
69+
70+ self ::assertStringContainsString ($ expected , $ sentMessage ->toString ());
71+
72+ $ expected = <<<Text
73+ Content-Type: text/plain; charset=utf-8 \r
74+ Content-Transfer-Encoding: quoted-printable \r
75+ \r
76+ rendered.plain
77+ Text ;
78+
79+ self ::assertStringContainsString ($ expected , $ sentMessage ->toString ());
80+ self ::assertStringContainsString ('Content-Type: text/html; ' , $ sentMessage ->toString ());
81+ self ::assertEquals ('taylor@laravel.com ' , $ sentMessage ->getEnvelope ()->getRecipients ()[0 ]->getAddress ());
82+ self ::assertEquals ('hello@laravel.com ' , $ sentMessage ->getEnvelope ()->getSender ()->getAddress ());
6383 }
6484
6585
6686 public function testMailerSendSendsMessageWithProperPlainViewContentWhenExplicit ()
6787 {
68- unset($ _SERVER ['__mailer.test ' ]);
69- $ mailer = $ this ->getMock (Mailer::class, ['createMessage ' ], $ this ->getMocks ());
70- $ message = m::mock ('StdClass ' );
71- $ mailer ->expects ($ this ->once ())->method ('createMessage ' )->willReturn ($ message );
72- $ view = m::mock ('StdClass ' );
73- $ mailer ->getViewFactory ()->shouldReceive ('make ' )->once ()->with ('foo ' , ['data ' , 'message ' => $ message ])->andReturn ($ view );
74- $ mailer ->getViewFactory ()->shouldReceive ('make ' )->once ()->with ('bar ' , ['data ' , 'message ' => $ message ])->andReturn ($ view );
75- $ view ->shouldReceive ('render ' )->twice ()->andReturn ('rendered.view ' );
76- $ message ->shouldReceive ('setBody ' )->once ()->with ('rendered.view ' , 'text/html ' );
77- $ message ->shouldReceive ('addPart ' )->once ()->with ('rendered.view ' , 'text/plain ' );
78- $ message ->shouldReceive ('setFrom ' )->never ();
79- $ mailer ->setSwiftMailer (m::mock ('StdClass ' ));
80- $ message ->shouldReceive ('getSwiftMessage ' )->once ()->andReturn ($ message );
81- $ mailer ->getSwiftMailer ()->shouldReceive ('send ' )->once ()->with ($ message , []);
82- $ mailer ->send (['html ' => 'foo ' , 'text ' => 'bar ' ], ['data ' ], function ($ m ) { $ _SERVER ['__mailer.test ' ] = $ m ; });
83- unset($ _SERVER ['__mailer.test ' ]);
88+ $ view = m::mock (Factory::class);
89+ $ view ->shouldReceive ('make ' )->twice ()->andReturn ($ view );
90+ $ view ->shouldReceive ('render ' )->once ()->andReturn ('rendered.view ' );
91+ $ view ->shouldReceive ('render ' )->once ()->andReturn ('rendered.plain ' );
92+
93+ $ mailer = new Mailer ($ view , $ transport = new ArrayTransport ());
94+ $ mailer ->send (['html ' => 'foo ' , 'text ' => 'bar ' ], ['data ' ], function (Message $ message ) {
95+ $ message ->to ('taylor@laravel.com ' )->from ('hello@laravel.com ' );
96+ });
97+
98+ $ sentMessages = $ transport ->messages ();
99+ self ::assertCount (1 , $ sentMessages );
100+
101+ /** @var SentMessage $sentMessage */
102+ $ sentMessage = $ sentMessages [0 ];
103+ $ expected = <<<Text
104+ Content-Type: text/html; charset=utf-8 \r
105+ Content-Transfer-Encoding: quoted-printable \r
106+ \r
107+ rendered.view
108+ Text ;
109+
110+ self ::assertStringContainsString ($ expected , $ sentMessage ->toString ());
111+
112+ $ expected = <<<Text
113+ Content-Type: text/plain; charset=utf-8 \r
114+ Content-Transfer-Encoding: quoted-printable \r
115+ \r
116+ rendered.plain
117+ Text ;
118+
119+ self ::assertStringContainsString ($ expected , $ sentMessage ->toString ());
84120 }
85121
86122
87123 public function testMailerCanQueueMessagesToItself ()
88124 {
89- list ( $ view, $ swift ) = $ this -> getMocks ( );
90- $ mailer = new Illuminate \ Mail \ Mailer ($ view , $ swift );
125+ $ view = m:: mock (Factory::class );
126+ $ mailer = new Mailer ($ view , new ArrayTransport () );
91127 $ mailer ->setQueue ($ queue = m::mock (QueueManager::class));
92128 $ queue ->shouldReceive ('push ' )->once ()->with ('mailer@handleQueuedMessage ' , ['view ' => 'foo ' , 'data ' => [1 ], 'callback ' => 'callable ' ], null );
93129
@@ -97,8 +133,8 @@ public function testMailerCanQueueMessagesToItself()
97133
98134 public function testMailerCanQueueMessagesToItselfOnAnotherQueue ()
99135 {
100- list ( $ view, $ swift ) = $ this -> getMocks ( );
101- $ mailer = new Illuminate \ Mail \ Mailer ($ view , $ swift );
136+ $ view = m:: mock (Factory::class );
137+ $ mailer = new Mailer ($ view , new ArrayTransport () );
102138 $ mailer ->setQueue ($ queue = m::mock (QueueManager::class));
103139 $ queue ->shouldReceive ('push ' )->once ()->with ('mailer@handleQueuedMessage ' , ['view ' => 'foo ' , 'data ' => [1 ], 'callback ' => 'callable ' ], 'queue ' );
104140
@@ -108,8 +144,8 @@ public function testMailerCanQueueMessagesToItselfOnAnotherQueue()
108144
109145 public function testMailerCanQueueMessagesToItselfWithSerializedClosures ()
110146 {
111- list ( $ view, $ swift ) = $ this -> getMocks ( );
112- $ mailer = new Illuminate \ Mail \ Mailer ($ view , $ swift );
147+ $ view = m:: mock (Factory::class );
148+ $ mailer = new Mailer ($ view , new ArrayTransport () );
113149 $ mailer ->setQueue ($ queue = m::mock (QueueManager::class));
114150 $ serialized = serialize (new Illuminate \Support \SerializableClosure ($ closure = function () {}));
115151 $ queue ->shouldReceive ('push ' )->once ()->with ('mailer@handleQueuedMessage ' , ['view ' => 'foo ' , 'data ' => [1 ], 'callback ' => $ serialized ], null );
@@ -120,8 +156,8 @@ public function testMailerCanQueueMessagesToItselfWithSerializedClosures()
120156
121157 public function testMailerCanQueueMessagesToItselfLater ()
122158 {
123- list ( $ view, $ swift ) = $ this -> getMocks ( );
124- $ mailer = new Illuminate \ Mail \ Mailer ($ view , $ swift );
159+ $ view = m:: mock (Factory::class );
160+ $ mailer = new Mailer ($ view , new ArrayTransport () );
125161 $ mailer ->setQueue ($ queue = m::mock (QueueManager::class));
126162 $ queue ->shouldReceive ('later ' )->once ()->with (10 , 'mailer@handleQueuedMessage ' , ['view ' => 'foo ' , 'data ' => [1 ], 'callback ' => 'callable ' ], null );
127163
@@ -131,8 +167,8 @@ public function testMailerCanQueueMessagesToItselfLater()
131167
132168 public function testMailerCanQueueMessagesToItselfLaterOnAnotherQueue ()
133169 {
134- list ( $ view, $ swift ) = $ this -> getMocks ( );
135- $ mailer = new Illuminate \ Mail \ Mailer ($ view , $ swift );
170+ $ view = m:: mock (Factory::class );
171+ $ mailer = new Mailer ($ view , new ArrayTransport () );
136172 $ mailer ->setQueue ($ queue = m::mock (QueueManager::class));
137173 $ queue ->shouldReceive ('later ' )->once ()->with (10 , 'mailer@handleQueuedMessage ' , ['view ' => 'foo ' , 'data ' => [1 ], 'callback ' => 'callable ' ], 'queue ' );
138174
@@ -142,83 +178,94 @@ public function testMailerCanQueueMessagesToItselfLaterOnAnotherQueue()
142178
143179 public function testMessagesCanBeLoggedInsteadOfSent ()
144180 {
145- $ mailer = $ this ->getMock (Mailer::class, ['createMessage ' ], $ this ->getMocks ());
146- $ message = m::mock ('StdClass ' );
147- $ mailer ->expects ($ this ->once ())->method ('createMessage ' )->willReturn ($ message );
148- $ view = m::mock ('StdClass ' );
149- $ mailer ->getViewFactory ()->shouldReceive ('make ' )->once ()->with ('foo ' , ['data ' , 'message ' => $ message ])->andReturn ($ view );
150- $ view ->shouldReceive ('render ' )->once ()->andReturn ('rendered.view ' );
151- $ message ->shouldReceive ('setBody ' )->once ()->with ('rendered.view ' , 'text/html ' );
152- $ message ->shouldReceive ('setFrom ' )->never ();
153- $ mailer ->setSwiftMailer (m::mock ('StdClass ' ));
154- $ message ->shouldReceive ('getTo ' )->once ()->andReturn (['taylor@userscape.com ' => 'Taylor ' ]);
155- $ message ->shouldReceive ('getSwiftMessage ' )->once ()->andReturn ($ message );
156- $ mailer ->getSwiftMailer ()->shouldReceive ('send ' )->never ();
157- $ logger = m::mock (Writer::class);
158- $ logger ->shouldReceive ('info ' )->once ()->with ('Pretending to mail message to: taylor@userscape.com ' );
159- $ mailer ->setLogger ($ logger );
160- $ mailer ->pretend ();
161-
162- $ mailer ->send ('foo ' , ['data ' ], function ($ m ) {});
181+ $ view = m::mock (Factory::class);
182+ $ view ->shouldReceive ('make ' )->once ()->andReturn ($ view );
183+ $ view ->shouldReceive ('render ' )->once ()->andReturn ('rendered.view ' );
184+
185+ $ mailer = new Mailer ($ view , $ transport = new ArrayTransport ());
186+ $ logger = m::mock (Writer::class);
187+ $ logger ->shouldReceive ('info ' )->once ()->with ('Pretending to mail message to: taylor@userscape.com ' );
188+ $ mailer ->setLogger ($ logger );
189+ $ mailer ->pretend ();
190+
191+ $ mailer ->send ('foo ' , ['data ' ], function (Message $ message ) {
192+ $ message ->from ('hello@laravel.com ' );
193+ $ message ->to ('taylor@userscape.com ' );
194+ });
195+
196+ self ::assertEmpty ($ transport ->messages ());
197+
198+ // $mailer = $this->getMock(Mailer::class, ['createMessage'], $this->getMocks());
199+ // $message = m::mock('StdClass');
200+ // $mailer->expects($this->once())->method('createMessage')->willReturn($message);
201+ // $view = m::mock('StdClass');
202+ // $mailer->getViewFactory()->shouldReceive('make')->once()->with('foo', ['data', 'message' => $message])->andReturn($view);
203+ // $view->shouldReceive('render')->once()->andReturn('rendered.view');
204+ // $message->shouldReceive('setBody')->once()->with('rendered.view', 'text/html');
205+ // $message->shouldReceive('setFrom')->never();
206+ // $mailer->setSwiftMailer(m::mock('StdClass'));
207+ // $message->shouldReceive('getTo')->once()->andReturn(['taylor@userscape.com' => 'Taylor']);
208+ // $message->shouldReceive('getSwiftMessage')->once()->andReturn($message);
209+ // $mailer->getSwiftMailer()->shouldReceive('send')->never();
210+ // $logger = m::mock(Writer::class);
211+ // $logger->shouldReceive('info')->once()->with('Pretending to mail message to: taylor@userscape.com');
212+ // $mailer->setLogger($logger);
213+ // $mailer->pretend();
214+ //
215+ // $mailer->send('foo', ['data'], function($m) {});
163216 }
164217
165218
166219 public function testMailerCanResolveMailerClasses ()
167220 {
168- $ mailer = $ this ->getMock (Mailer::class, ['createMessage ' ], $ this ->getMocks ());
169- $ message = m::mock ('StdClass ' );
170- $ mailer ->expects ($ this ->once ())->method ('createMessage ' )->willReturn ($ message );
171- $ view = m::mock ('StdClass ' );
172- $ container = new Illuminate \Container \Container ;
173- $ mailer ->setContainer ($ container );
174- $ mockMailer = m::mock ('StdClass ' );
175- $ container ['FooMailer ' ] = $ container ->share (function () use ($ mockMailer )
176- {
177- return $ mockMailer ;
178- });
179- $ mockMailer ->shouldReceive ('mail ' )->once ()->with ($ message );
180- $ mailer ->getViewFactory ()->shouldReceive ('make ' )->once ()->with ('foo ' , ['data ' , 'message ' => $ message ])->andReturn ($ view );
181- $ view ->shouldReceive ('render ' )->once ()->andReturn ('rendered.view ' );
182- $ message ->shouldReceive ('setBody ' )->once ()->with ('rendered.view ' , 'text/html ' );
183- $ message ->shouldReceive ('setFrom ' )->never ();
184- $ mailer ->setSwiftMailer (m::mock ('StdClass ' ));
185- $ message ->shouldReceive ('getSwiftMessage ' )->once ()->andReturn ($ message );
186- $ mailer ->getSwiftMailer ()->shouldReceive ('send ' )->once ()->with ($ message , []);
221+ $ view = m::mock (Factory::class);
222+ $ view ->shouldReceive ('make ' )->once ()->andReturn ($ view );
223+ $ view ->shouldReceive ('render ' )->once ()->andReturn ('rendered.view ' );
224+
225+ $ mailer = new Mailer ($ view , $ transport = new ArrayTransport ());
226+ $ container = new Illuminate \Container \Container ();
227+ $ mailer ->setContainer ($ container );
228+ $ fooMailer = new class {
229+ public int $ calledTimes = 0 ;
230+ public function mail (Message $ message ): void
231+ {
232+ $ message ->from ('hello@laravel.com ' );
233+ $ message ->to ('taylor@laravel.com ' );
234+ $ this ->calledTimes ++;
235+ }
236+ };
237+ $ container ['FooMailer ' ] = $ container ->share (fn () => $ fooMailer );
238+
187239 $ mailer ->send ('foo ' , ['data ' ], 'FooMailer ' );
240+
241+ $ sentMessage = $ transport ->messages ()[0 ];
242+ self ::assertEquals (1 , $ fooMailer ->calledTimes );
243+ self ::assertEquals ('taylor@laravel.com ' , $ sentMessage ->getEnvelope ()->getRecipients ()[0 ]->getAddress ());
244+ self ::assertEquals ('hello@laravel.com ' , $ sentMessage ->getEnvelope ()->getSender ()->getAddress ());
245+
188246 }
189247
190248
191249 public function testGlobalFromIsRespectedOnAllMessages ()
192250 {
193- unset($ _SERVER ['__mailer.test ' ]);
194- $ mailer = $ this ->getMailer ();
195- $ view = m::mock ('StdClass ' );
196- $ mailer ->getViewFactory ()->shouldReceive ('make ' )->once ()->andReturn ($ view );
197- $ view ->shouldReceive ('render ' )->once ()->andReturn ('rendered.view ' );
198- $ mailer ->setSwiftMailer (m::mock ('StdClass ' ));
199- $ mailer ->alwaysFrom ('taylorotwell@gmail.com ' , 'Taylor Otwell ' );
200- $ me = $ this ;
201- $ mailer ->getSwiftMailer ()->shouldReceive ('send ' )->once ()->with (m::type ('Swift_Message ' ), [])->andReturnUsing (function ($ message ) use ($ me )
202- {
203- $ me ->assertEquals (['taylorotwell@gmail.com ' => 'Taylor Otwell ' ], $ message ->getFrom ());
204- });
205- $ mailer ->send ('foo ' , ['data ' ], function ($ m ) {});
206- }
251+ $ view = m::mock (Factory::class);
252+ $ view ->shouldReceive ('make ' )->once ()->andReturn ($ view );
253+ $ view ->shouldReceive ('render ' )->once ()->andReturn ('rendered.view ' );
254+ $ mailer = new Mailer ($ view , $ transport = new ArrayTransport );
255+ $ mailer ->alwaysFrom ('hello@laravel.com ' );
207256
257+ $ mailer ->send ('foo ' , ['data ' ], function (Message $ message ) {
258+ $ message ->to ('taylor@laravel.com ' );
259+ });
208260
209- public function testFailedRecipientsAreAppendedAndCanBeRetrieved ()
210- {
211- unset($ _SERVER ['__mailer.test ' ]);
212- $ mailer = $ this ->getMailer ();
213- $ view = m::mock ('StdClass ' );
214- $ mailer ->getViewFactory ()->shouldReceive ('make ' )->once ()->andReturn ($ view );
215- $ view ->shouldReceive ('render ' )->once ()->andReturn ('rendered.view ' );
216- $ swift = new FailingSwiftMailerStub ;
217- $ mailer ->setSwiftMailer ($ swift );
218261
219- $ mailer ->send ('foo ' , ['data ' ], function ($ m ) {});
262+ $ sentMessages = $ transport ->messages ();
263+ self ::assertCount (1 , $ sentMessages );
220264
221- $ this ->assertEquals (['taylorotwell@gmail.com ' ], $ mailer ->failures ());
265+ /** @var SentMessage $sentMessage */
266+ $ sentMessage = $ sentMessages [0 ];
267+ self ::assertSame ('taylor@laravel.com ' , $ sentMessage ->getEnvelope ()->getRecipients ()[0 ]->getAddress ());
268+ self ::assertSame ('hello@laravel.com ' , $ sentMessage ->getEnvelope ()->getSender ()->getAddress ());
222269 }
223270
224271
0 commit comments