package com.kritsit.casetracker.server.datalayer;
import static org.mockito.Mockito.*;
import com.kritsit.casetracker.shared.domain.model.Defendant;
import com.kritsit.casetracker.shared.domain.model.Vehicle;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class VehicleRepositoryTest extends TestCase {
private IVehicleRepository vehicleRepo;
private List<Map<String, String>> vehicleList;
public VehicleRepositoryTest(String name) {
super(name);
}
public static Test suite() {
return new TestSuite(VehicleRepositoryTest.class);
}
public void setUp() {
vehicleList = new ArrayList<>();
Map<String, String> vehicle = new HashMap<>();
vehicle.put("registration", "CA222-222");
vehicle.put("make", "Toyota");
vehicle.put("colour", "Black");
vehicle.put("isTrailer", "0");
vehicleList.add(vehicle);
}
public void testGetVehicles() throws SQLException, RowToModelParseException {
String id = "9802245849032";
String sql = "SELECT vehicles.*, defendants.id FROM vehicles " +
"INNER JOIN(defendants) WHERE vehicles.owner=defendants.indexID " +
"AND defendants.id=?;";
IPersistenceService db = mock(IPersistenceService.class);
when(db.executeQuery(sql, id)).thenReturn(vehicleList);
IVehicleRepository vehicleRepo = new VehicleRepository(db);
Defendant defendant = new Defendant(1, id, "Bob", "Dylan", "1 address road",
"0212221233", "test@testing.co.za", false);
List<Vehicle> vehicles = vehicleRepo.getVehicles(defendant);
assertTrue(vehicles != null);
verify(db).executeQuery(sql, id);
}
public void testGetVehicles_Null() throws SQLException, RowToModelParseException {
String id = "9802245849032";
String sql = "SELECT vehicles.*, defendants.id FROM vehicles " +
"INNER JOIN(defendants) WHERE vehicles.owner=defendants.indexID " +
"AND defendants.id=?;";
IPersistenceService db = mock(IPersistenceService.class);
IVehicleRepository vehicleRepo = new VehicleRepository(db);
Defendant defendant = new Defendant(1, id, "Bob", "Dylan", "1 address road",
"0212221233", "test@testing.co.za", false);
List<Vehicle> vehicles = vehicleRepo.getVehicles(defendant);
assertTrue(vehicles == null);
verify(db).executeQuery(sql, id);
}
public void testGetVehicles_Empty() throws SQLException, RowToModelParseException{
String id = "9802245849032";
String sql = "SELECT vehicles.*, defendants.id FROM vehicles " +
"INNER JOIN(defendants) WHERE vehicles.owner=defendants.indexID " +
"AND defendants.id=?;";
IPersistenceService db = mock(IPersistenceService.class);
when(db.executeQuery(sql, id)).thenReturn(new ArrayList<Map<String, String>>());
IVehicleRepository vehicleRepo = new VehicleRepository(db);
Defendant defendant = new Defendant(1, id, "Bob", "Dylan", "1 address road",
"0212221233", "test@testing.co.za", false);
List<Vehicle> vehicles = vehicleRepo.getVehicles(defendant);
assertTrue(vehicles == null);
verify(db).executeQuery(sql, id);
}
public void testInsertVehicle() throws SQLException, RowToModelParseException{
String id = "9802245849032";
Defendant defendant = new Defendant(1, id, "Bob", "Dylan", "1 address road",
"0212221233", "test@testing.co.za", false);
Vehicle vehicle = new Vehicle("ZSZ1234", "Citroen", "silver", false);
String isTrailer = (vehicle.isTrailer()) ? "1" : "0";
String sql = "INSERT INTO vehicles VALUES(?, ( " +
"SELECT indexID FROM defendants WHERE firstName=? AND lastName=? " +
" AND address=?), ?, ?, ?);";
IPersistenceService db = mock(IPersistenceService.class);
IVehicleRepository vehicleRepo = new VehicleRepository(db);
vehicleRepo.insertVehicle(vehicle, defendant);
verify(db).executeUpdate(sql, vehicle.getRegistration(), defendant.getFirstName(),
defendant.getLastName(), defendant.getAddress(), vehicle.getMake(),
vehicle.getColour(), isTrailer);
}
}