Skip to content

Commit ff8dbcc

Browse files
committed
refactor failed test
1 parent 8437072 commit ff8dbcc

1 file changed

Lines changed: 41 additions & 26 deletions

File tree

tests/Auth/AuthPasswordBrokerTest.php

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
use Illuminate\Auth\Reminders\ReminderRepositoryInterface;
66
use Illuminate\Auth\UserProviderInterface;
77
use Illuminate\Mail\Mailer;
8+
use Illuminate\Mail\Transport\ArrayTransport;
9+
use Illuminate\View\Factory;
810
use L4\Tests\BackwardCompatibleTestCase;
911
use Mockery as m;
1012
use Prophecy\Prophecy\ObjectProphecy;
13+
use Symfony\Component\Mailer\SentMessage;
1114

1215
class AuthPasswordBrokerTest extends BackwardCompatibleTestCase
1316
{
@@ -95,21 +98,35 @@ public function testBrokerCreatesReminderAndRedirectsWithoutError()
9598

9699
public function testMailerIsCalledWithProperViewTokenAndCallback()
97100
{
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);
113130
}
114131

115132

@@ -207,22 +224,20 @@ public function testResetRemovesRecordOnReminderTableAndCallsCallback()
207224
}
208225

209226

210-
protected function getBroker($mocks)
211-
{
227+
protected function getBroker($mocks): PasswordBroker
228+
{
212229
return new PasswordBroker($mocks['reminders'], $mocks['users'], $mocks['mailer'], $mocks['view']);
213230
}
214231

215232

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',
223240
];
224-
225-
return $mocks;
226241
}
227242

228243
}

0 commit comments

Comments
 (0)