|
5 | 5 | use Illuminate\Auth\Reminders\ReminderRepositoryInterface; |
6 | 6 | use Illuminate\Auth\UserProviderInterface; |
7 | 7 | use Illuminate\Mail\Mailer; |
| 8 | +use Illuminate\Mail\Transport\ArrayTransport; |
| 9 | +use Illuminate\View\Factory; |
8 | 10 | use L4\Tests\BackwardCompatibleTestCase; |
9 | 11 | use Mockery as m; |
10 | 12 | use Prophecy\Prophecy\ObjectProphecy; |
| 13 | +use Symfony\Component\Mailer\SentMessage; |
11 | 14 |
|
12 | 15 | class AuthPasswordBrokerTest extends BackwardCompatibleTestCase |
13 | 16 | { |
@@ -95,21 +98,35 @@ public function testBrokerCreatesReminderAndRedirectsWithoutError() |
95 | 98 |
|
96 | 99 | public function testMailerIsCalledWithProperViewTokenAndCallback() |
97 | 100 | { |
98 | | - unset($_SERVER['__auth.reminder']); |
99 | | - $broker = $this->getBroker($mocks = $this->getMocks()); |
100 | | - $callback = function($message, $user) { $_SERVER['__auth.reminder'] = true; }; |
101 | | - $user = m::mock(RemindableInterface::class); |
102 | | - $mocks['mailer']->shouldReceive('send')->once()->with('reminderView', ['token' => 'token', 'user' => $user], m::type('Closure'))->andReturnUsing(function($view, $data, $callback) |
103 | | - { |
104 | | - return $callback; |
105 | | - }); |
106 | | - $user->shouldReceive('getReminderEmail')->once()->andReturn('email'); |
107 | | - $message = m::mock('StdClass'); |
108 | | - $message->shouldReceive('to')->once()->with('email'); |
109 | | - $result = $broker->sendReminder($user, 'token', $callback); |
110 | | - call_user_func($result, $message); |
111 | | - |
112 | | - $this->assertTrue($_SERVER['__auth.reminder']); |
| 101 | + $factoryView = m::mock(Factory::class); |
| 102 | + $factoryView->shouldReceive('make')->once()->andReturnUsing(function ($view, $data) use($factoryView, &$maker) { |
| 103 | + $factoryView->shouldReceive('render')->once()->andReturn($view); |
| 104 | + return $factoryView; |
| 105 | + }); |
| 106 | + |
| 107 | + $broker = $this->getBroker($mocks = [ |
| 108 | + ...$this->getMocks(), |
| 109 | + 'mailer' => new Mailer($factoryView, $transport = new ArrayTransport()) |
| 110 | + ]); |
| 111 | + $mocks['mailer']->alwaysFrom('sender@mail.com'); |
| 112 | + |
| 113 | + $user = m::mock(RemindableInterface::class); |
| 114 | + $user->shouldReceive('getReminderEmail')->once()->andReturn('user@email.com'); |
| 115 | + |
| 116 | + $receivedCallback = new stdClass(); |
| 117 | + $someCallback = function($message, $user, $token) use (&$receivedCallback) { |
| 118 | + $receivedCallback->user = $user; |
| 119 | + $receivedCallback->token = $token; |
| 120 | + }; |
| 121 | + |
| 122 | + $broker->sendReminder($user, 'token', $someCallback); |
| 123 | + |
| 124 | + /** @var SentMessage $message */ |
| 125 | + $message = $transport->messages()[0]; |
| 126 | + self::assertEquals('user@email.com', $message->getEnvelope()->getRecipients()[0]->getAddress()); |
| 127 | + self::assertStringContainsString('reminderView', $message->toString()); |
| 128 | + self::assertEquals($user, $receivedCallback->user); |
| 129 | + self::assertEquals('token', $receivedCallback->token); |
113 | 130 | } |
114 | 131 |
|
115 | 132 |
|
@@ -207,22 +224,20 @@ public function testResetRemovesRecordOnReminderTableAndCallsCallback() |
207 | 224 | } |
208 | 225 |
|
209 | 226 |
|
210 | | - protected function getBroker($mocks) |
211 | | - { |
| 227 | + protected function getBroker($mocks): PasswordBroker |
| 228 | + { |
212 | 229 | return new PasswordBroker($mocks['reminders'], $mocks['users'], $mocks['mailer'], $mocks['view']); |
213 | 230 | } |
214 | 231 |
|
215 | 232 |
|
216 | | - protected function getMocks() |
217 | | - { |
218 | | - $mocks = [ |
219 | | - 'reminders' => m::mock(ReminderRepositoryInterface::class), |
220 | | - 'users' => m::mock(UserProviderInterface::class), |
221 | | - 'mailer' => m::mock(Mailer::class), |
222 | | - 'view' => 'reminderView', |
| 233 | + protected function getMocks(): array |
| 234 | + { |
| 235 | + return [ |
| 236 | + 'reminders' => m::mock(ReminderRepositoryInterface::class), |
| 237 | + 'users' => m::mock(UserProviderInterface::class), |
| 238 | + 'mailer' => m::mock(Mailer::class), |
| 239 | + 'view' => 'reminderView', |
223 | 240 | ]; |
224 | | - |
225 | | - return $mocks; |
226 | 241 | } |
227 | 242 |
|
228 | 243 | } |
0 commit comments