function let(Options $options, Language $language, \PHPMailer $mailer)
{
$prophet = new Prophet();
//OPTIONS MOCKING
$options = $options->options;
$options_object = $prophet->prophesize('PolyAuth\\Options');
$options_object->offsetGet(Argument::any())->will(function ($args) use(&$options) {
$key = $args[0];
return $options[$key];
});
$options_object->offsetSet(Argument::cetera())->will(function ($args) use(&$options) {
if (is_null($args[0])) {
$options[] = $args[1];
} else {
$options[$args[0]] = $args[1];
}
});
$options_object = $options_object->reveal();
//LOGGER MOCKING
$logger = $prophet->prophesize();
$logger->willExtend('stdClass');
$logger->willImplement('Psr\\Log\\LoggerInterface');
$logger->error(Argument::type('string'), Argument::type('array'))->willReturn(true);
$logger = $logger->reveal();
//MAILER MOCKING
$mailer->AddAddress(Argument::any())->willReturn(true);
$mailer->Send()->willReturn(true);
$mailer->__destruct()->willReturn(true);
$mailer->IsHTML(Argument::any())->willReturn(true);
$this->beConstructedWith($options_object, $language, $logger, $mailer);
//USER MOCKING
$user_data = array('id' => 1, 'username' => 'CMCDragonkai', 'email' => '*****@*****.**', 'activationCode' => 'ABCDEFG', 'forgottenCode' => '1234567');
$user_object = $prophet->prophesize('PolyAuth\\UserAccount');
$user_object->offsetGet(Argument::any())->will(function ($args) use(&$user_data) {
$key = $args[0];
return $user_data[$key];
});
$user_object->offsetSet(Argument::cetera())->will(function ($args) use(&$user_data) {
if (is_null($args[0])) {
$user_data[] = $args[1];
} else {
$user_data[$args[0]] = $args[1];
}
});
$this->user = $user_object->reveal();
}