package com.opower.updater.admin.loader;
import com.opower.updater.admin.Update;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.SortedSet;
import java.util.TreeSet;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
* Tests for {@link com.opower.updater.admin.loader.UpdateLoaderWithPreProcessor}.
*
* @author felix.trepanier
*/
public class TestUpdateLoaderWithPreProcessor {
private static final String TABLE_NAME = "test";
private UpdateLoader mockUpdateLoader;
private UpdateProcessor mockPreprocessor;
private UpdateLoaderWithPreProcessor updateLoader;
private Update firstUpdate = new Update(0, "CREATE TABLE;");
private Update secondUpdate = new Update(1, "ALTER TABLE;");
@Before
public void setup() {
mockUpdateLoader = mock(UpdateLoader.class);
mockPreprocessor = mock(UpdateProcessor.class);
updateLoader = new UpdateLoaderWithPreProcessor(mockUpdateLoader, mockPreprocessor);
}
@Test
public void testPreProcessorCalledOnLoadCreate() throws IOException {
when(mockUpdateLoader.loadCreateTable(TABLE_NAME)).thenReturn(firstUpdate);
when(mockPreprocessor.processUpdate(firstUpdate)).thenReturn(new Update(0, "processed"));
Update update = updateLoader.loadCreateTable(TABLE_NAME);
assertEquals(0, update.getId());
assertEquals("processed", update.getDDL());
}
@Test
public void testPreProcessorCalledOnLoadUpdates() throws IOException {
SortedSet<Update> updates = new TreeSet<Update>(Update.UPDATE_COMPARATOR);
updates.add(firstUpdate);
updates.add(secondUpdate);
when(mockUpdateLoader.loadUpdates(TABLE_NAME)).thenReturn(updates);
when(mockPreprocessor.processUpdate(firstUpdate)).thenReturn(new Update(0, "processed"));
when(mockPreprocessor.processUpdate(secondUpdate)).thenReturn(new Update(1, "processed again"));
SortedSet<Update> processedUpdates = updateLoader.loadUpdates(TABLE_NAME);
assertEquals(0, processedUpdates.first().getId());
assertEquals("processed", processedUpdates.first().getDDL());
assertEquals(1, processedUpdates.last().getId());
assertEquals("processed again", processedUpdates.last().getDDL());
}
}