@DataJpaTest
public class KundeRepositoryTest {
@Autowired
private KundeRepository kundeRepository;
@Test
void findBestellungByKundeId(){
Kunde kunde = new Kunde();
kunde.setId(1L);
kunde.setVorname("Max");
kunde.setNachname("Mustermann");
kunde.setEmail("[email protected]");
kunde.setAlter(39);
Bestellung b1 = new Bestellung();
b1.setId(1L);
b1.setBestelldatum("28-05-2025");
b1.setBetrag(10.0);
b1.setKunde(kunde);
Bestellung b2 = new Bestellung();
b1.setId(2L);
b2.setBestelldatum("30-05-2025");
b2.setBetrag(20.0);
b2.setKunde(kunde);
kunde.setBestellungList(List.of(b1,b2));
kundeRepository.save(kunde);
List bestellungs = kundeRepository.findBestellungenByKundeId(kunde.getId());
assertEquals(2, bestellungs.size());
}
@ExtendWith(MockitoExtension.class)
public class KundeServiceTest {
@Mock
private KundeRepository kundeRepository;
private KundeCriteriaRepository kundeCriteriaRepository;
@InjectMocks
private KundeService kundeService;
@Test
void testGetAllKunde() {
List kundeList = List.of(
new Kunde(1L, "Anna", "Meier", 28, "[email protected]", null),
new Kunde(2L, "Tom", "Muster", 38, "[email protected]", null)
);
when(kundeRepository.findAll()).thenReturn(kundeList);
List result = kundeService.getAllKunde();
assertEquals(2, result.size());
assertEquals("Anna", result.get(0).vorname());
}
@Test
void testAddKunde() {
Bestellung bestellung = new Bestellung();
KundeDto dto = new KundeDto(null, "Lisa", "Huber", "[email protected]", 30, List.of(bestellung));
Kunde gespeicherterKunde = new Kunde(1L, "Lisa", "Huber", 30, "[email protected]", List.of(bestellung));
when(kundeRepository.save(org.mockito.ArgumentMatchers.any(Kunde.class))).thenReturn(gespeicherterKunde);
Kunde result = kundeService.addKunde(dto);
assertEquals("Lisa", result.getVorname());
}
@Test
void testGetKundeById() {
Kunde kunde = new Kunde(1L, "Max", "Muster", 40, "[email protected]", null);
when(kundeRepository.findById(1L)).thenReturn(java.util.Optional.of(kunde));
KundeDto dto = kundeService.getKundeById(1L);
assertEquals("Max", dto.vorname());
assertEquals("Muster", dto.nachname());
assertEquals(40, dto.alter());
assertEquals(null, dto.email());
}
@Test
void testGetKundeByCriteria() {
Kunde kunde = new Kunde(1L, "Sarah", "Winter", 25, "[email protected]", null);
when(kundeCriteriaRepository.getKundeByCriteria(org.mockito.ArgumentMatchers.any()))
.thenReturn(List.of(kunde));
KundeDto criteria = new KundeDto(null, "Sarah", "Winter", "[email protected]", 25, null);
List result = kundeService.getKundeByCriteria(criteria);
assertEquals(1, result.size());
}
}
@WebMvcTest(controllers = KundeController.class)
@AutoConfigureMockMvc(addFilters = false)
public class KundeControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private KundeService kundeService;
@Autowired
private ObjectMapper objectMapper;
@Test
void getAllKunde() throws Exception{
KundeDto kundeDto = new KundeDto(1L, "Tibor", "Focu", null, 45, null);
KundeDto kundeDto2 = new KundeDto(2L, "Lady", "Gaga", null, 43, null);
List kundeDtoList = Arrays.asList(kundeDto, kundeDto2);
when(kundeService.getAllKunde()).thenReturn(kundeDtoList);
ResultActions result = mockMvc.perform(get("/kunde")
.contentType(MediaType.APPLICATION_JSON));
result.andExpect(status().isOk())
.andExpect(jsonPath("$[0].vorname", CoreMatchers.is("Tibor")))
.andExpect(jsonPath("$[1].vorname", CoreMatchers.is("Lady")));
}
}
@Repository
public class KundeCriteriaRepository {
@Autowired
private EntityManager entityManager;
public List getKundeByCriteria(Kunde kunde){
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Kunde.class);
Root kundeRoot = criteriaQuery.from(Kunde.class);
Predicate vornamePredicate = criteriaBuilder.like(kundeRoot.get("vorname"), kunde.getVorname());
Predicate nachnamePredicate = criteriaBuilder.like(kundeRoot.get("nachname"), kunde.getNachname());
Predicate alterPredicate = criteriaBuilder.equal(kundeRoot.get("alter"), kunde.getAlter());
Predicate vornameAndAlterPredicate = criteriaBuilder.and(vornamePredicate, alterPredicate);
Predicate nachnameAndAlterPredicate = criteriaBuilder.and(nachnamePredicate, alterPredicate);
Predicate orPredicate = criteriaBuilder.or(vornameAndAlterPredicate, nachnameAndAlterPredicate);
criteriaQuery.where(orPredicate);
return entityManager.createQuery(criteriaQuery).getResultList();
}
}