package com.microsoft.bingads.v10.internal.bulk;
import com.googlecode.jcsv.reader.CSVReader;
import com.microsoft.bingads.v10.bulk.BulkFileReader;
import com.microsoft.bingads.v10.bulk.entities.BulkEntity;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import org.easymock.EasyMockRunner;
import org.easymock.EasyMockSupport;
import org.easymock.Mock;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(EasyMockRunner.class)
public class ReadEntitiesFromFilesTest extends EasyMockSupport {
@Mock
RowValues values;
@Mock
Iterator<String[]> iterator;
@Mock
BulkEntity expectedEntity;
@Test
public void readsRowFromCsvReader_createsEntityUsingObjectFactory_callsReadFromRowValuesOnEntity() {
String[] emptyArray = new String[CsvHeaders.Headers.length];
Arrays.fill(emptyArray, "");
String[] headers = emptyArray.clone();
headers[0] = "Type";
String[] formatVersion = emptyArray.clone();
formatVersion[0] = "Format Version";
formatVersion[51] = "4.0";
String[] campaign = emptyArray.clone();
campaign[0] = "Campaign";
campaign[1] = "Active";
campaign[2] = "1";
expect(iterator.hasNext()).andReturn(true).times(3);
expect(iterator.next()).andReturn(CsvHeaders.Headers); //Headers
expect(iterator.next()).andReturn(formatVersion); //Format Version
expect(iterator.next()).andReturn(campaign); //Campaign
expect(iterator.hasNext()).andReturn(false);
replay(iterator);
BulkFileReader fileReader;
try {
fileReader = TestFactory.createBulkFileReader(
createFakeCsvReader(iterator),
createFakeBulkObjectFactory(values, expectedEntity)
);
replay(values);
expectedEntity.readFromRowValues(anyObject(RowValues.class));
expectedEntity.readRelatedDataFromStream(anyObject(BulkStreamReader.class));
expect(expectedEntity.canEncloseInMultilineEntity()).andReturn(false);
replay(expectedEntity);
Iterable<BulkEntity> entityIterable = fileReader.getEntities();
List<BulkEntity> entities = new ArrayList<BulkEntity>();
assertEquals(true, entityIterable.iterator().hasNext());
for (BulkEntity entity : entityIterable) {
entities.add(entity);
}
assertEquals(1, entities.size());
assertEquals(expectedEntity, entities.get(0));
} catch (FileNotFoundException e) {
fail("Threw a FileNotFoundException");
}
}
private BulkObjectFactory createFakeBulkObjectFactory(RowValues expectedRowValues,
BulkEntity expectedEntity) {
BulkObjectFactory factory = createMock(BulkObjectFactory.class);
FormatVersion formatVersion = new FormatVersion();
formatVersion.setValue("4.0");
expect(factory.createBulkObject(anyObject(RowValues.class))).andReturn(formatVersion);
expect(factory.createBulkObject(anyObject(RowValues.class))).andReturn(expectedEntity);
replay(factory);
return factory;
}
private CSVReader<String[]> createFakeCsvReader(Iterator<String[]> iterator) {
CSVReader<String[]> reader = createMock(CSVReader.class);
expect(reader.iterator()).andReturn(iterator);
replay(reader);
return reader;
}
}