/**
* 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.testng.AssertJUnit.assertEquals;
import java.util.List;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.threeten.bp.LocalDate;
import com.google.common.collect.ImmutableList;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.UniqueId;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesMaster;
import com.opengamma.master.historicaltimeseries.ManageableHistoricalTimeSeries;
import com.opengamma.timeseries.date.localdate.ImmutableLocalDateDoubleTimeSeries;
import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries;
import com.opengamma.util.test.TestGroup;
/**
* Test {@link HistoricalTimeSeriesMasterUtils}.
*/
@Test(groups = TestGroup.UNIT)
public class HistoricalTimeSeriesWriterTest {
private static final String DESCRIPTION = "Description";
private static final String DATA_SOURCE = "Source";
private static final String DATA_PROVIDER = "Provider";
private static final String DATA_FIELD = "Field";
private static final String OBSERVATION_TIME = "Time";
private static final ExternalId ID = ExternalId.of("Test", "1");
private HistoricalTimeSeriesMaster _htsMaster;
private HistoricalTimeSeriesMasterUtils _htsWriter;
private LocalDate _today;
@BeforeMethod
public void setup() {
_htsMaster = new InMemoryHistoricalTimeSeriesMaster();
_htsWriter = new HistoricalTimeSeriesMasterUtils(_htsMaster);
_today = LocalDate.now();
}
public void testAddTimeSeries() {
List<LocalDate> dates = ImmutableList.of(_today.minusDays(2), _today.minusDays(1), _today);
List<Double> values = ImmutableList.of(1d, 2d, 3d);
ImmutableLocalDateDoubleTimeSeries origTs = ImmutableLocalDateDoubleTimeSeries.of(dates, values);
UniqueId id = _htsWriter.writeTimeSeries(DESCRIPTION, DATA_SOURCE, DATA_PROVIDER, DATA_FIELD, OBSERVATION_TIME, ExternalIdBundle.of(ID), origTs);
ManageableHistoricalTimeSeries manageableTs = _htsMaster.getTimeSeries(id);
LocalDateDoubleTimeSeries readTs = manageableTs.getTimeSeries();
assertEquals(origTs, readTs);
}
public void testUpdateTimeSeriesCorrectionOnly() {
// Add the test series
testAddTimeSeries();
List<LocalDate> dates = ImmutableList.of(_today.minusDays(2), _today.minusDays(1), _today);
List<Double> values = ImmutableList.of(2d, 3d, 4d);
ImmutableLocalDateDoubleTimeSeries updatedTs = ImmutableLocalDateDoubleTimeSeries.of(dates, values);
UniqueId id = _htsWriter.writeTimeSeries(DESCRIPTION, DATA_SOURCE, DATA_PROVIDER, DATA_FIELD, OBSERVATION_TIME, ExternalIdBundle.of(ID), updatedTs);
ManageableHistoricalTimeSeries manageableTs = _htsMaster.getTimeSeries(id);
LocalDateDoubleTimeSeries readTs = manageableTs.getTimeSeries();
assertEquals(updatedTs, readTs);
}
public void testUpdateTimeSeriesAddNewLaterPointsOnly() {
// Add the test series
testAddTimeSeries();
List<LocalDate> dates = ImmutableList.of(_today.plusDays(1));
List<Double> values = ImmutableList.of(4d);
ImmutableLocalDateDoubleTimeSeries newTs = ImmutableLocalDateDoubleTimeSeries.of(dates, values);
UniqueId id = _htsWriter.writeTimeSeries(DESCRIPTION, DATA_SOURCE, DATA_PROVIDER, DATA_FIELD, OBSERVATION_TIME, ExternalIdBundle.of(ID), newTs);
ManageableHistoricalTimeSeries manageableTs = _htsMaster.getTimeSeries(id);
LocalDateDoubleTimeSeries readTs = manageableTs.getTimeSeries();
List<LocalDate> expectedDates = ImmutableList.of(_today.minusDays(2), _today.minusDays(1), _today, _today.plusDays(1));
List<Double> expectedValues = ImmutableList.of(1d, 2d, 3d, 4d);
ImmutableLocalDateDoubleTimeSeries expectedTs = ImmutableLocalDateDoubleTimeSeries.of(expectedDates, expectedValues);
assertEquals(expectedTs, readTs);
}
@Test
public void testUpdateTimeSeriesAddEarlierAndLaterPoints() {
// Add the test series
testAddTimeSeries();
List<LocalDate> dates = ImmutableList.of(_today.minusDays(3), _today.plusDays(1));
List<Double> values = ImmutableList.of(0d, 4d);
ImmutableLocalDateDoubleTimeSeries newTs = ImmutableLocalDateDoubleTimeSeries.of(dates, values);
UniqueId id = _htsWriter.writeTimeSeries(DESCRIPTION, DATA_SOURCE, DATA_PROVIDER, DATA_FIELD, OBSERVATION_TIME, ExternalIdBundle.of(ID), newTs);
// Current implementation drops new, earlier points
ManageableHistoricalTimeSeries manageableTs = _htsMaster.getTimeSeries(id);
LocalDateDoubleTimeSeries readTs = manageableTs.getTimeSeries();
List<LocalDate> expectedDates = ImmutableList.of(_today.minusDays(2), _today.minusDays(1), _today, _today.plusDays(1));
List<Double> expectedValues = ImmutableList.of(1d, 2d, 3d, 4d);
ImmutableLocalDateDoubleTimeSeries expectedTs = ImmutableLocalDateDoubleTimeSeries.of(expectedDates, expectedValues);
assertEquals(expectedTs, readTs);
}
@Test(enabled = false) // Current implementation does not support removing points
public void testUpdateTimeSeriesRemoveExistingPoints() {
// Add the test series
testAddTimeSeries();
List<LocalDate> dates = ImmutableList.of(_today.minusDays(2), _today);
List<Double> values = ImmutableList.of(6d, 7d);
ImmutableLocalDateDoubleTimeSeries updatedTs = ImmutableLocalDateDoubleTimeSeries.of(dates, values);
UniqueId id = _htsWriter.writeTimeSeries(DESCRIPTION, DATA_SOURCE, DATA_PROVIDER, DATA_FIELD, OBSERVATION_TIME, ExternalIdBundle.of(ID), updatedTs);
ManageableHistoricalTimeSeries manageableTs = _htsMaster.getTimeSeries(id);
LocalDateDoubleTimeSeries readTs = manageableTs.getTimeSeries();
assertEquals(updatedTs, readTs);
}
public void testAddUpdateTimeSeriesSingleExistingPoint() {
List<LocalDate> dates = ImmutableList.of(_today);
List<Double> origValues = ImmutableList.of(1d);
ImmutableLocalDateDoubleTimeSeries origTs = ImmutableLocalDateDoubleTimeSeries.of(dates, origValues);
UniqueId id = _htsWriter.writeTimeSeries(DESCRIPTION, DATA_SOURCE, DATA_PROVIDER, DATA_FIELD, OBSERVATION_TIME, ExternalIdBundle.of(ID), origTs);
ManageableHistoricalTimeSeries manageableTs = _htsMaster.getTimeSeries(id);
LocalDateDoubleTimeSeries readTs = manageableTs.getTimeSeries();
assertEquals(origTs, readTs);
List<Double> updatedValues = ImmutableList.of(2d);
ImmutableLocalDateDoubleTimeSeries updatedTs = ImmutableLocalDateDoubleTimeSeries.of(dates, updatedValues);
id = _htsWriter.writeTimeSeries(DESCRIPTION, DATA_SOURCE, DATA_PROVIDER, DATA_FIELD, OBSERVATION_TIME, ExternalIdBundle.of(ID), updatedTs);
manageableTs = _htsMaster.getTimeSeries(id);
readTs = manageableTs.getTimeSeries();
assertEquals(updatedTs, readTs);
}
}