package de.unioninvestment.eai.portal.portlet.crud.scripting.domain.container.database; import com.google.common.collect.ImmutableMap; import de.unioninvestment.eai.portal.portlet.crud.domain.model.DatabaseQueryContainer; import de.unioninvestment.eai.portal.portlet.crud.domain.model.Table; import de.unioninvestment.eai.portal.portlet.crud.domain.model.TableColumn; import de.unioninvestment.eai.portal.portlet.crud.domain.model.TableColumns; import de.unioninvestment.eai.portal.portlet.crud.scripting.model.ScriptRow; import de.unioninvestment.eai.portal.portlet.crud.scripting.model.ScriptRowId; import groovy.lang.GString; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import java.util.Collections; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; /** * Created by cmj on 13.07.14. */ public class QueryUpdateStatementGeneratorTest { private QueryUpdateStatementGenerator generator; @Mock private ScriptRow rowMock; @Mock private Table tableMock; @Mock private TableColumns columnsMock; @Mock private DatabaseQueryContainer containerMock; @Mock private ScriptRowId rowIdMock; @Mock private TableColumn col1Mock, col2Mock; @Before public void setup() { initMocks(this); when(tableMock.getColumns()).thenReturn(columnsMock); when(tableMock.getContainer()).thenReturn(containerMock); when(containerMock.getTablename()).thenReturn("MYTABLE"); when(columnsMock.getUpdateColumns()).thenReturn(asList(col1Mock, col2Mock)); when(col1Mock.getName()).thenReturn("COL1"); when(col2Mock.getName()).thenReturn("COL2"); when(columnsMock.getPrimaryKeyNames()).thenReturn(asList("ID1","ID2")); when(rowMock.getValues()).thenReturn(ImmutableMap.<String,Object>of("COL1", "1", "COL2", 2)); when(rowMock.getId()).thenReturn(rowIdMock); when(rowIdMock.get("ID1")).thenReturn("3"); when(rowIdMock.get("ID2")).thenReturn("4"); generator = new QueryUpdateStatementGenerator(tableMock); } @Test public void shouldReturnAnUpdateStatement() { GString update = generator.generateStatement(rowMock); assertThat(update.getStrings().length, is(4)); assertThat(update.getStrings()[0], is("UPDATE \"MYTABLE\" SET \"COL1\"=")); assertThat(update.getStrings()[1], is(", \"COL2\"=")); assertThat(update.getStrings()[2], is(" WHERE \"ID1\"=")); assertThat(update.getStrings()[3], is(" AND \"ID2\"=")); assertThat(update.getValues().length, is(4)); assertEquals("1", update.getValues()[0]); assertEquals(2, update.getValues()[1]); assertEquals("3", update.getValues()[2]); assertEquals("4", update.getValues()[3]); } @Test(expected = IllegalArgumentException.class) public void shouldFailOnMissingTable() { when(containerMock.getTablename()).thenReturn(null); generator = new QueryUpdateStatementGenerator(tableMock); generator.generateStatement(rowMock); } @Test(expected = IllegalArgumentException.class) public void shouldFailIfNothingUpdateable() { when(columnsMock.getUpdateColumns()).thenReturn(Collections.<TableColumn>emptyList()); generator = new QueryUpdateStatementGenerator(tableMock); generator.generateStatement(rowMock); } @Test(expected = IllegalArgumentException.class) public void shouldFailOnMissingPrimaryKey() { when(columnsMock.getPrimaryKeyNames()).thenReturn(Collections.<String>emptyList()); generator = new QueryUpdateStatementGenerator(tableMock); generator.generateStatement(rowMock); } }