/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.master.historicaltimeseries.impl;
import static org.mockito.Mockito.mock;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.opengamma.core.historicaltimeseries.HistoricalTimeSeriesAdjuster;
import com.opengamma.id.ExternalIdBundleWithDates;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesMaster;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesResolutionResult;
import com.opengamma.master.historicaltimeseries.ManageableHistoricalTimeSeriesInfo;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.tuple.Triple;
/**
* Tests {@link FieldMappingHistoricalTimeSeriesResolver}.
*/
@Test(groups = TestGroup.UNIT)
public class FieldMappingHistoricalTimeSeriesResolverTest {
private static final int TS_DATASET_SIZE = 1;
private static final String LCLOSE_OBSERVATION_TIME = "LCLOSE";
private static final String[] DATA_FIELDS = new String[] { "PX_LAST", "VOLUME" };
private static final String[] DATA_PROVIDERS = new String[] { "UNKNOWN", "CMPL", "CMPT" };
private static final String[] DATA_SOURCES = new String[] { "BLOOMBERG", "REUTERS", "JPM" };
private List<ExternalIdBundleWithDates> _identifiers;
private TestHistoricalTimeSeriesSelector _selector = new TestHistoricalTimeSeriesSelector();
private HistoricalTimeSeriesMaster _htsMaster = new InMemoryHistoricalTimeSeriesMaster();
@BeforeClass
public void setUp() {
_identifiers = HistoricalTimeSeriesMasterPopulator.populateAndTestMaster(_htsMaster, TS_DATASET_SIZE, DATA_SOURCES, DATA_PROVIDERS, DATA_FIELDS, LCLOSE_OBSERVATION_TIME);
}
@Test
public void testNoMaps() {
FieldMappingHistoricalTimeSeriesResolver resolver = new FieldMappingHistoricalTimeSeriesResolver(ImmutableList.<HistoricalTimeSeriesFieldAdjustmentMap>of(), _selector, _htsMaster);
for (ExternalIdBundleWithDates identifierBundleWithDates : _identifiers) {
resolver.resolve(identifierBundleWithDates.toBundle(), null, null, null, "PX_LAST", null);
assertEquals(9, _selector.getLastCandidates().size());
resolver.resolve(identifierBundleWithDates.toBundle(), null, null, null, "Something else", null);
assertEquals(0, _selector.getLastCandidates().size());
}
}
@Test
public void testMappings() {
String syntheticFieldName = "Synthetic";
// Synthetic -> (CMPL, BLOOMBERG.PX_LAST)
HistoricalTimeSeriesFieldAdjustmentMap map1 = new HistoricalTimeSeriesFieldAdjustmentMap("BLOOMBERG");
map1.addFieldAdjustment(syntheticFieldName, "CMPL", "PX_LAST", null);
// Synthetic -> (*, REUTERS.VOLUME, adjuster)
HistoricalTimeSeriesFieldAdjustmentMap map2 = new HistoricalTimeSeriesFieldAdjustmentMap("REUTERS");
HistoricalTimeSeriesAdjuster reutersAdjuster = mock(HistoricalTimeSeriesAdjuster.class);
map2.addFieldAdjustment(syntheticFieldName, null, "VOLUME", reutersAdjuster);
FieldMappingHistoricalTimeSeriesResolver resolver = new FieldMappingHistoricalTimeSeriesResolver(ImmutableList.<HistoricalTimeSeriesFieldAdjustmentMap>of(map1, map2), _selector, _htsMaster);
for (ExternalIdBundleWithDates identifierBundleWithDates : _identifiers) {
resolver.resolve(identifierBundleWithDates.toBundle(), null, null, null, "PX_LAST", null);
assertEquals(9, _selector.getLastCandidates().size());
resolver.resolve(identifierBundleWithDates.toBundle(), null, null, null, "Something else", null);
assertEquals(0, _selector.getLastCandidates().size());
resolver.resolve(identifierBundleWithDates.toBundle(), null, null, null, syntheticFieldName, null);
Set<Triple<String, String, String>> candidateInfo = getCandidateInfo(_selector.getLastCandidates());
assertEquals(candidateInfo.toString(), 4, candidateInfo.size());
assertTrue(candidateInfo.contains(Triple.of("BLOOMBERG", "CMPL", "PX_LAST")));
assertTrue(candidateInfo.contains(Triple.of("REUTERS", "UNKNOWN", "VOLUME")));
assertTrue(candidateInfo.contains(Triple.of("REUTERS", "CMPL", "VOLUME")));
assertTrue(candidateInfo.contains(Triple.of("REUTERS", "CMPT", "VOLUME")));
HistoricalTimeSeriesResolutionResult resolutionResult = resolver.resolve(identifierBundleWithDates.toBundle(), null, "REUTERS", "Ignored for mapped fields", syntheticFieldName, null);
assertEquals(3, _selector.getLastCandidates().size());
assertEquals(reutersAdjuster, resolutionResult.getAdjuster());
}
}
private Set<Triple<String, String, String>> getCandidateInfo(Collection<ManageableHistoricalTimeSeriesInfo> candidates) {
Set<Triple<String, String, String>> results = new HashSet<Triple<String,String,String>>();
for (ManageableHistoricalTimeSeriesInfo candidate : candidates) {
results.add(Triple.of(candidate.getDataSource(), candidate.getDataProvider(), candidate.getDataField()));
}
return results;
}
}