<?php
use yii\db\ActiveRecord;
abstract class User extends ActiveRecord {};
class UserQuery
{
public function findByEmail($email)
{
return $this->where(['email' => $email]);
}
}
class PrivateMessenger
{
public $emails = [];
public $message;
private $_users;
private $_user;
public function __construct(UserQuery $users, User $user)
{
$this->_users = $users;
$this->_user = $user;
}
public function send()
{
foreach ($this->emails as $email)
{
$user = $this->users->findByEmail($email)->one();
if (!$user->privateMessageIsDisable()) {
$user->sendMessage($this->_user, $this->message);
}
}
}
}
class PrivateMessengerTest extends TestCase
{
/**
* @test
*/
public function it_can_send_private_messages()
{
$this->user->shouldReceive('privateMessageIsDisable')->andReturn(false);
$this->user->shouldHaveReceived('sendMessage');
}
protected $user;
protected $users;
protected $messenger;
public function setUp()
{
$this->user = \Mockery::mock(User::class);
$this->users = \Mockery::mock(UserQuery::class);
$this->messenger = new PrivateMessenger($this->users, $this->user);
}
}