package de.unioninvestment.eai.portal.portlet.crud.scripting.domain.container.database; 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.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 QueryDeleteStatementGeneratorTest { private QueryDeleteStatementGenerator generator; @Mock private ScriptRow rowMock; @Mock private Table tableMock; @Mock private TableColumns columnsMock; @Mock private DatabaseQueryContainer containerMock; @Mock private ScriptRowId rowIdMock; @Before public void setup() { initMocks(this); when(tableMock.getColumns()).thenReturn(columnsMock); when(tableMock.getContainer()).thenReturn(containerMock); when(containerMock.getTablename()).thenReturn("MYTABLE"); when(columnsMock.getPrimaryKeyNames()).thenReturn(asList("ID1", "ID2")); when(rowMock.getId()).thenReturn(rowIdMock); when(rowIdMock.get("ID1")).thenReturn("3"); when(rowIdMock.get("ID2")).thenReturn("4"); generator = new QueryDeleteStatementGenerator(tableMock); } @Test public void shouldReturnAnUpdateStatement() { GString update = generator.generateStatement(rowMock); assertThat(update.getStrings().length, is(2)); assertThat(update.getStrings()[0], is("DELETE FROM \"MYTABLE\" WHERE \"ID1\"=")); assertThat(update.getStrings()[1], is(" AND \"ID2\"=")); assertThat(update.getValues().length, is(2)); assertEquals("3", update.getValues()[0]); assertEquals("4", update.getValues()[1]); } @Test(expected = IllegalArgumentException.class) public void shouldFailOnMissingTable() { when(containerMock.getTablename()).thenReturn(null); generator = new QueryDeleteStatementGenerator(tableMock); generator.generateStatement(rowMock); } @Test(expected = IllegalArgumentException.class) public void shouldFailOnMissingPrimaryKey() { when(columnsMock.getPrimaryKeyNames()).thenReturn(Collections.<String>emptyList()); generator = new QueryDeleteStatementGenerator(tableMock); generator.generateStatement(rowMock); } }