package org.nextprot.api.commons.utils; import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; import org.nextprot.api.commons.exception.NextProtException; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; import org.springframework.jdbc.support.KeyHolder; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.when; public class JdbcTemplateUtilsTest { @Test public void test() throws Exception { Number generatedKey = JdbcTemplateUtils.insertAndGetKey("insert whatever", "column name", mockKeyHolder(123), Mockito.mock(MapSqlParameterSource.class), mockOperation()); Assert.assertEquals(123, generatedKey); } // TODO: we should also check the correctness of the exception message @Test(expected = NextProtException.class) public void testNonExpectedEmptySql() throws Exception { JdbcTemplateUtils.insertAndGetKey("", "column name", mockKeyHolder(123), Mockito.mock(MapSqlParameterSource.class), mockOperation()); } @Test(expected = NextProtException.class) public void testNonExpectedEmptyColumnName() throws Exception { JdbcTemplateUtils.insertAndGetKey("bla", "", mockKeyHolder(123), Mockito.mock(MapSqlParameterSource.class), mockOperation()); } private NamedParameterJdbcOperations mockOperation() { NamedParameterJdbcOperations operations = Mockito.mock(NamedParameterJdbcOperations.class); when(operations.update(anyString(), any(MapSqlParameterSource.class), any(KeyHolder.class), any(String[].class))).thenReturn(1); return operations; } private KeyHolder mockKeyHolder(int expectedGeneratedNumber) { KeyHolder keyHolder = Mockito.mock(KeyHolder.class); when(keyHolder.getKey()).thenReturn(expectedGeneratedNumber); return keyHolder; } }