Encontrei bugs nas classes UsuarioRepositoryImpl e LeilaoRepositoryImpl, impedindo o correto funcionamento da remoção (DELETE) e da busca (FIND) dos novos objetos Usuario e Leilao criados ao longo do projeto, numa mesma execução dos serviços.
Descrição do problema
São feitas comparações entre dois objetos Long que sempre retornam false para números grandes!
@Test
public void comparaIds() {
Long id1 = 9169117855179980407L;
Long id2 = 9169117855179980407L;
Assert.assertFalse(id1 == id2);
Assert.assertTrue(id1.equals(id2));
}
Observe que a comparação com o operador "==" parece funcionar com valores que cabem dentro de um byte (-128L a 127L). Talvez por isso o problema tenha passado desapercebido no projeto:
@Test
public void comparaIds_Pequenos() {
Long id1 = 127L;
Long id2 = 127L;
Assert.assertTrue(id1 == id2);
Assert.assertTrue(id1.equals(id2));
}
Ajustes necessários na classe UsuarioRepositoryImpl:
(1) no método delete(Usuario entity)
trocar
if (current.getId() == entity.getId()) { ... }
por
if (current.getId().equals(entity.getId())) { ... }
(2) no método public Usuario find(Long id)
trocar
if (u.getId() == id) return u
por
if (u.getId().equals(id)) return u
Justificativa
A comparação entre dois objetos da classe Long normalmente retorna true para o operador "==" apenas quando os objetos correspondem à mesma instância da classe. Para comparar os valores, é preciso utilizar o método equals(Long).
Com esses ajustes, a deleção e a busca pelos novos objetos, criados com números Long randômicos, passará a funcionar.
Os ajustes necessários na classe LeilaoRepositoryImpl são idênticos.