Boa noite, fiquei com uma dúvida após adicionado os testes:
$this->expectException(\DomainException::class);
$this->expectExceptionMessage('Usuário não pode propor 2 lances consecutivos');
Ao rodar os testes não era pra falhar? já que está sendo passado 2 lances consecutivos do mesmo usuário ?
public function testLeilaoNaoDeveReceberLancesRepetidos()
{
$this->expectException(\DomainException::class);
$this->expectExceptionMessage('Usuário não pode propor 2 lances consecutivos');
$leilao = new Leilao('Variante');
$ana = new Usuario('Ana');
$leilao->recebeLance(new Lance($ana, 1000));
$leilao->recebeLance(new Lance($ana, 1500));
}
public function recebeLance(Lance $lance)
{
if (!empty($this->lances) && $this->isDoUltimoUsuario($lance)) {
throw new \DomainException('Usuário não pode propor 2 lances consecutivos');
}
$totalLancesUsuario = $this->quantidadeLancesPorUsuario($lance->getUsuario());
if ($totalLancesUsuario >= 5) {
throw new \DomainException('Usuário não pode propor mais de 5 lances por leilão');
}
$this->lances[] = $lance;
}
private function isDoUltimoUsuario(Lance $lance): bool
{
$ultimoLance = $this->lances[count($this->lances) - 1];
return $lance->getUsuario() == $ultimoLance->getUsuario();
}