Added integration tests for repository classes.

This commit is contained in:
2019-05-22 23:03:12 +03:00
parent 463113b161
commit d61dc2ca07
8 changed files with 254 additions and 43 deletions
@@ -1,39 +0,0 @@
package com.github.prominence.carrepair;
import com.github.prominence.carrepair.model.domain.Client;
import com.github.prominence.carrepair.repository.ClientRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.context.junit4.SpringRunner;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@DataJpaTest
public class ClientRepositoryIntegrationTest {
@Autowired
private TestEntityManager entityManager;
@Autowired
private ClientRepository clientRepository;
@Test
public void whenFindById_thenReturnClient() {
// given
Client client = new Client("firstName", "middleName", "lastName", "123456789");
entityManager.persist(client);
entityManager.flush();
// when
Client found = clientRepository.findById(client.getId()).get();
// then
assertThat(found.hashCode()).isEqualTo(client.hashCode());
}
}
@@ -0,0 +1,81 @@
package com.github.prominence.carrepair.repository;
import com.github.prominence.carrepair.model.domain.Client;
import com.github.prominence.carrepair.repository.ClientRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@DataJpaTest
public class ClientRepositoryIntegrationTest {
@Autowired
private TestEntityManager entityManager;
@Autowired
private ClientRepository clientRepository;
@Test
public void whenFindById_thenReturnClient() {
// given
Client client = new Client("firstName", "middleName", "lastName", "123456789");
entityManager.persist(client);
entityManager.flush();
// when
Optional<Client> found = clientRepository.findById(client.getId());
// then
assertThat(found).isPresent().hasValue(client)
.map(Client::hashCode).get().isEqualTo(client.hashCode());
}
@Test
public void whenFindByWrongId_thenReturnNull() {
// when
Optional<Client> found = clientRepository.findById(-5L);
// then
assertThat(found).isNotPresent();
}
@Test
public void whenFindByInitials_thenReturnList() {
// given
Stream.of(
new Client("Alexey", "MiddleName", "Zinchenko", "12342312"),
new Client("John", "MiddleName", "Smith", "123123"),
new Client("Dirk", "Another", "Surname", "1231213")
).forEach(entityManager::persist);
entityManager.flush();
// when
List<Client> clientsByMiddleName = clientRepository.findAllByInitials("Name");
// then
assertThat(clientsByMiddleName).size().isEqualTo(2);
// when
List<Client> clientsByNonExistingInfo = clientRepository.findAllByInitials("Ivan");
// then
assertThat(clientsByNonExistingInfo).isEmpty();
// when
List<Client> clientsByName = clientRepository.findAllByInitials("Alexey");
// then
assertThat(clientsByName).isNotEmpty().size().isEqualTo(1);
}
}
@@ -0,0 +1,80 @@
package com.github.prominence.carrepair.repository;
import com.github.prominence.carrepair.model.domain.Mechanic;
import com.github.prominence.carrepair.repository.MechanicRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
@RunWith(SpringJUnit4ClassRunner.class)
@DataJpaTest
public class MechanicRepositoryIntegrationTest {
@Autowired
private TestEntityManager entityManager;
@Autowired
private MechanicRepository mechanicRepository;
@Test
public void whenFindById_thenReturnClient() {
// given
Mechanic mechanic = new Mechanic("firstName", "middleName", "lastName", BigDecimal.valueOf(12));
entityManager.persist(mechanic);
entityManager.flush();
// when
Optional<Mechanic> found = mechanicRepository.findById(mechanic.getId());
// then
assertThat(found).isPresent().hasValue(mechanic)
.map(Mechanic::hashCode).get().isEqualTo(mechanic.hashCode());
}
@Test
public void whenFindByWrongId_thenReturnNull() {
// when
Optional<Mechanic> found = mechanicRepository.findById(-5L);
// then
assertThat(found).isNotPresent();
}
@Test
public void whenFindByInitials_thenReturnList() {
// given
Stream.of(
new Mechanic("Alexey", "MiddleName", "Zinchenko", BigDecimal.valueOf(12)),
new Mechanic("John", "MiddleName", "Smith", BigDecimal.valueOf(25)),
new Mechanic("Dirk", "Another", "Surname", BigDecimal.valueOf(73))
).forEach(entityManager::persist);
entityManager.flush();
// when
List<Mechanic> mechanicsByMiddleName = mechanicRepository.findAllByInitials("Name");
// then
assertThat(mechanicsByMiddleName).size().isEqualTo(2);
// when
List<Mechanic> mechanicsByNonExistingInfo = mechanicRepository.findAllByInitials("Ivan");
// then
assertThat(mechanicsByNonExistingInfo).isEmpty();
// when
List<Mechanic> clientsByName = mechanicRepository.findAllByInitials("Alexey");
// then
assertThat(clientsByName).isNotEmpty().size().isEqualTo(1);
}
}
@@ -0,0 +1,89 @@
package com.github.prominence.carrepair.repository;
import com.github.prominence.carrepair.enums.OrderStatus;
import com.github.prominence.carrepair.model.domain.Client;
import com.github.prominence.carrepair.model.domain.Mechanic;
import com.github.prominence.carrepair.model.domain.Order;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Stream;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringJUnit4ClassRunner.class)
@DataJpaTest
public class OrderRepositoryIntegrationTest {
@Autowired
private TestEntityManager entityManager;
@Autowired
private OrderRepository orderRepository;
private Client testClient;
private Mechanic testMechanic;
@Before
public void setup() {
testClient = new Client("firstName", "middleName", "lastName", "123123123");
testMechanic = new Mechanic("firstNameM", "middleNameM", "lastNameM", BigDecimal.valueOf(231));
entityManager.persist(testClient);
entityManager.persist(testMechanic);
entityManager.flush();
}
@Test
public void whenFindById_thenReturnOrder() {
// given
Order order = new Order("someDescription", testClient, testMechanic, LocalDateTime.now(), null, BigDecimal.valueOf(233), OrderStatus.SCHEDULED.toString());
long orderKey = (Long) entityManager.persistAndGetId(order);
entityManager.flush();
// then
Optional<Order> foundOrder = orderRepository.findById(orderKey);
// then
assertThat(foundOrder).isPresent().map(Order::getId).get().isEqualTo(orderKey);
}
@Test
public void whenFindAllByMechanicId_thenReturnOrdersRelatedToProvidedMechanic() {
// given
List<Mechanic> tempMechanics = Arrays.asList(
new Mechanic("1", "1", "1", BigDecimal.valueOf(1)),
new Mechanic("2", "2", "2", BigDecimal.valueOf(2))
);
tempMechanics.forEach(entityManager::persist);
Stream.of(
new Order("testOrder", testClient, tempMechanics.get(0), LocalDateTime.now(), null, BigDecimal.valueOf(123), OrderStatus.DONE.toString()),
new Order("testOrder", testClient, tempMechanics.get(1), LocalDateTime.now(), null, BigDecimal.valueOf(123), OrderStatus.DONE.toString()),
new Order("testOrder", testClient, testMechanic, LocalDateTime.now(), null, BigDecimal.valueOf(123), OrderStatus.DONE.toString()),
new Order("testOrder", testClient, testMechanic, LocalDateTime.now(), null, BigDecimal.valueOf(123), OrderStatus.DONE.toString()),
new Order("testOrder", testClient, tempMechanics.get(0), LocalDateTime.now(), null, BigDecimal.valueOf(123), OrderStatus.DONE.toString()),
new Order("testOrder", testClient, testMechanic, LocalDateTime.now(), null, BigDecimal.valueOf(123), OrderStatus.DONE.toString()),
new Order("testOrder", testClient, tempMechanics.get(1), LocalDateTime.now(), null, BigDecimal.valueOf(123), OrderStatus.DONE.toString()),
new Order("testOrder", testClient, tempMechanics.get(1), LocalDateTime.now(), null, BigDecimal.valueOf(123), OrderStatus.DONE.toString())
).forEach(entityManager::persist);
entityManager.flush();
// when
List<Order> foundOrders = orderRepository.findAllByMechanic_Id(testMechanic.getId());
// then
assertThat(foundOrders).size().isEqualTo(3);
assertThat(foundOrders).allMatch(order -> Objects.equals(order.getMechanic().getId(), testMechanic.getId()));
}
}