package uk.ac.cam.cstibhotel.otcanalyser.database; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Date; import java.util.LinkedList; import java.util.List; import org.junit.Test; import static org.junit.Assert.*; import uk.ac.cam.cstibhotel.otcanalyser.trade.Action; import uk.ac.cam.cstibhotel.otcanalyser.trade.Trade; /** * * @author Wai-Wai Ng */ public class DatabaseTest { static Date d; /** * */ @org.junit.BeforeClass public static void setUp(){ d = new Date(); } /** * Test of getDB method, of class Database. */ @Test public void testGetDB() { System.out.println("getDB"); Database result = Database.getDB(); assertNotNull(result); } /** * Test of addTrade method, of class Database. This tests an insertion. * @throws java.sql.SQLException */ @Test public void testAddTrade() throws SQLException { System.out.println("addTradeInsert"); List<Trade> tradeList = new LinkedList<>(); Trade trade = new Trade(); trade.setCleared(Boolean.TRUE); trade.setExecutionTimestamp(d); trade.setDisseminationID(128); tradeList.add(trade); Database instance = Database.getDB(); boolean result = instance.addTrade(tradeList); assertTrue(result); Connection c = instance.getConnection(); ResultSet rs = c.createStatement().executeQuery("SELECT cleared FROM data WHERE id = 128"); assertTrue(rs.next()); assertEquals(true, rs.getBoolean(1)); } private void specialAdder() throws SQLException { List<Trade> tradeList = new LinkedList<>(); Trade trade = new Trade(); trade.setCleared(Boolean.TRUE); trade.setExecutionTimestamp(d); trade.setDisseminationID(127); tradeList.add(trade); Database instance = Database.getDB(); boolean result = instance.addTrade(tradeList); assertTrue(result); } private void specialAdder(Trade t) throws SQLException { List<Trade> tradeList = new LinkedList<>(); tradeList.add(t); Database instance = Database.getDB(); boolean result = instance.addTrade(tradeList); assertTrue(result); } /** * Test of addTrade method, of class Database. This tests the update of an existing row. * @throws java.sql.SQLException */ @Test public void testUpdateTrade() throws SQLException { System.out.println("addTradeUpdate"); specialAdder(); List<Trade> tradeList = new LinkedList<>(); Trade trade = new Trade(); trade.setCleared(Boolean.FALSE); trade.setBespoke(Boolean.TRUE); trade.setAction(Action.CORRECT); trade.setDisseminationID(127); tradeList.add(trade); Database instance = Database.getDB(); boolean result = instance.addTrade(tradeList); assertTrue(result); Connection c = instance.getConnection(); ResultSet rs = c.createStatement().executeQuery("SELECT cleared FROM data WHERE id = 127"); assertTrue(rs.next()); assertEquals(false, rs.getBoolean(1)); c = instance.getConnection(); rs = c.createStatement().executeQuery("SELECT bespoke FROM data WHERE id = 127"); assertTrue(rs.next()); assertEquals(true, rs.getBoolean(1)); } /** * Test of addTrade method, of class Database. This tests a deletion of an existing row. * @throws java.sql.SQLException */ @Test public void testDeleteTrade() throws SQLException { System.out.println("addTradeDelete"); specialAdder(); List<Trade> tradeList = new LinkedList<>(); Trade trade = new Trade(); trade.setAction(Action.CANCEL); trade.setDisseminationID(127); tradeList.add(trade); Database instance = Database.getDB(); boolean result = instance.addTrade(tradeList); assertTrue(result); Connection c = instance.getConnection(); ResultSet rs = c.createStatement().executeQuery("SELECT * FROM data WHERE id = 127"); assertFalse(rs.next()); } /** * Test of getLastUpdateTime method, of class Database. * @throws java.sql.SQLException */ @Test public void testGetLastUpdateTime() throws SQLException { System.out.println("getLastUpdateTime"); specialAdder(); Database instance = Database.getDB(); Date expResult = d; Date result = instance.getLastUpdateTime(); assertTrue((expResult.getTime() - result.getTime()) < 1000); // accept a second of tolerance } }