Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package cz.muni.fi.pv168.project.hotelmanager; import java.sql.Connection; import java.sql.SQLException; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.sql.DataSource; import org.apache.commons.dbcp2.BasicDataSource; import org.apache.derby.jdbc.EmbeddedDriver; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.sameInstance; import org.junit.After; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import org.junit.Before; import org.junit.Test; import org.springframework.core.io.ClassPathResource; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; /** * * @author Klara Kosecka */ public class RoomManagerImplTest { private RoomManager manager; private DataSource dataSource; @Before public void setUp() throws SQLException { BasicDataSource bds = new BasicDataSource(); //set JDBC driver and URL bds.setDriverClassName(EmbeddedDriver.class.getName()); bds.setUrl("jdbc:derby:memory:TestRoomManagerDB;create=true"); //populate db with tables and data new ResourceDatabasePopulator(new ClassPathResource("schema-javadb.sql")).execute(bds); this.dataSource = bds; manager = new RoomManagerImpl(bds); } @After public void tearDown() throws SQLException { try (Connection connection = dataSource.getConnection()) { connection.prepareStatement("DROP TABLE room").executeUpdate(); connection.prepareStatement("DROP TABLE guest").executeUpdate(); connection.prepareStatement("DROP TABLE reservation").executeUpdate(); } } private Room setRoom(int roomnumber, int capacity, int costpernight, boolean doublebed) { Room room = new Room(); room.setRoomNumber(roomnumber); room.setCapacity(capacity); room.setCostPerNight(costpernight); room.setDoubleBed(doublebed); return room; } @Test public void testCreatRoom() { Room room = setRoom(1, 2, 125, true); manager.createRoom(room); Long roomId = room.getId(); assertNotNull(roomId); Room result = manager.findRoom(roomId); assertThat("loaded room differs from the saved one", result, is(equalTo(room))); assertThat("loaded room is the same instance", result, is(not(sameInstance(room)))); assertDeepEquals(room, result); } @Test public void testUpdateRoom() { Room room1 = setRoom(101, 2, 125, true); Room room2 = setRoom(102, 3, 250, false); manager.createRoom(room1); manager.createRoom(room2); Long roomId = room1.getId(); room1 = manager.findRoom(roomId); room1.setRoomNumber(103); manager.updateRoom(room1); assertThat("room number was not changed", room1.getRoomNumber(), is(equalTo(103))); assertThat("capacity was changed", room1.getCapacity(), is(equalTo(2))); assertThat("cost per night was changed", room1.getCostPerNight(), is(equalTo(125))); assertThat("doublebeded was changed", room1.getDoubleBed(), is(equalTo(true))); room1 = manager.findRoom(roomId); room1.setCapacity(3); manager.updateRoom(room1); assertThat("room number was changed", room1.getRoomNumber(), is(equalTo(103))); assertThat("capacity was not changed", room1.getCapacity(), is(equalTo(3))); assertThat("cost per night was changed", room1.getCostPerNight(), is(equalTo(125))); assertThat("doublebeded was changed", room1.getDoubleBed(), is(equalTo(true))); room1 = manager.findRoom(roomId); room1.setCostPerNight(130); manager.updateRoom(room1); assertThat("room number was changed", room1.getRoomNumber(), is(equalTo(103))); assertThat("capacity was changed", room1.getCapacity(), is(equalTo(3))); assertThat("cost per night was not changed", room1.getCostPerNight(), is(equalTo(130))); assertThat("doublebeded was changed", room1.getDoubleBed(), is(equalTo(true))); room1 = manager.findRoom(roomId); room1.setDoubleBed(false); manager.updateRoom(room1); assertThat("room number was changed", room1.getRoomNumber(), is(equalTo(103))); assertThat("capacity was changed", room1.getCapacity(), is(equalTo(3))); assertThat("cost per night was changed", room1.getCostPerNight(), is(equalTo(130))); assertThat("doublebeded was not changed", room1.getDoubleBed(), is(equalTo(false))); assertDeepEquals(room2, manager.findRoom(room2.getId())); } @Test(expected = IllegalArgumentException.class) public void testCreateRoomWithNull() throws Exception { manager.createRoom(null); } @Test public void testCreateRoomWithWrongValues() { Room room; room = setRoom(-5, 2, 125, true); try { manager.createRoom(room); fail("wrong room number (negative value)"); } catch (IllegalArgumentException ex) { //OK } room = setRoom(2, -5, 125, true); try { manager.createRoom(room); fail("wrong capacity number(negative value)"); } catch (IllegalArgumentException ex) { //OK } room = setRoom(2, 2, -125, true); try { manager.createRoom(room); fail("wrong cost number"); } catch (IllegalArgumentException ex) { //OK } } @Test public void testGetAllRooms() { assertTrue(manager.findAllRooms().isEmpty()); Room r1 = setRoom(101, 2, 125, true); Room r2 = setRoom(102, 3, 250, false); manager.createRoom(r1); manager.createRoom(r2); List<Room> expected = Arrays.asList(r1, r2); List<Room> actual = manager.findAllRooms(); Collections.sort(actual, idComparator); Collections.sort(expected, idComparator); assertEquals("saved and retrieved rooms differ", expected, actual); assertDeepEquals(expected, actual); } @Test public void TestdeleteRoom() { Room r1 = setRoom(101, 2, 125, true); Room r2 = setRoom(102, 3, 250, false); manager.createRoom(r1); manager.createRoom(r2); assertNotNull(manager.findRoom(r1.getId())); assertNotNull(manager.findRoom(r2.getId())); manager.deleteRoom(r1); assertNull(manager.findRoom(r1.getId())); assertNotNull(manager.findRoom(r2.getId())); } private void assertDeepEquals(List<Room> expectedList, List<Room> actualList) { for (int i = 0; i < expectedList.size(); i++) { Room expected = expectedList.get(i); Room actual = actualList.get(i); assertDeepEquals(expected, actual); } } private void assertDeepEquals(Room expected, Room actual) { assertEquals(expected.getId(), actual.getId()); assertEquals(expected.getRoomNumber(), actual.getRoomNumber()); assertEquals(expected.getCapacity(), actual.getCapacity()); assertEquals(expected.getCostPerNight(), actual.getCostPerNight()); assertEquals(expected.getDoubleBed(), actual.getDoubleBed()); } private static Comparator<Room> idComparator = new Comparator<Room>() { @Override public int compare(Room o1, Room o2) { return o1.getId().compareTo(o2.getId()); } }; }