/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.volatility.surface;
import static org.testng.AssertJUnit.assertEquals;
import org.testng.annotations.Test;
import org.threeten.bp.LocalDate;
import org.threeten.bp.Month;
import com.opengamma.core.id.ExternalSchemes;
import com.opengamma.core.value.MarketDataRequirementNames;
import com.opengamma.financial.analytics.model.FutureOptionExpiries;
import com.opengamma.financial.convention.calendar.Calendar;
import com.opengamma.financial.convention.calendar.MondayToFridayCalendar;
import com.opengamma.financial.convention.expirycalc.ExchangeTradedInstrumentExpiryCalculator;
import com.opengamma.financial.fudgemsg.FinancialTestBase;
import com.opengamma.id.ExternalId;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class BloombergEquityFuturePriceCurveInstrumentProviderTest extends FinancialTestBase {
private static final String DATA_FIELD_NAME = MarketDataRequirementNames.IMPLIED_VOLATILITY;
private static final String POSTFIX = "Equity";
private static final String SCHEME = ExternalSchemes.BLOOMBERG_BUID_WEAK.getName();
private static final String PREFIX = "AAPL=";
private static final String EXCHANGE = "OC";
private static final BloombergEquityFuturePriceCurveInstrumentProvider PROVIDER =
new BloombergEquityFuturePriceCurveInstrumentProvider(PREFIX, POSTFIX, DATA_FIELD_NAME, EXCHANGE);
private static final LocalDate DATE = LocalDate.of(2013, 2, 1);
static final Calendar WEEKEND_CALENDAR = new MondayToFridayCalendar("Weekday");
private static final Short[] EXPIRY_OFFSETS = new Short[] { 1, 2, 8, 13 };
private static final ExchangeTradedInstrumentExpiryCalculator EXPIRY_CALC = FutureOptionExpiries.EQUITY_FUTURE;
private static final String[] RESULTS = new String[] {
"AAPL=G3 OC Equity", "AAPL=H3 OC Equity", "AAPL=U3 OC Equity", "AAPL=G4 OC Equity"
};
@Test
public void testExpiryMonth() {
assertEquals(Month.FEBRUARY, EXPIRY_CALC.getExpiryMonth(1, DATE).getMonth());
assertEquals(Month.MARCH, EXPIRY_CALC.getExpiryMonth(2,DATE).getMonth());
assertEquals(Month.APRIL, EXPIRY_CALC.getExpiryMonth(3,DATE).getMonth());
assertEquals(Month.MAY, EXPIRY_CALC.getExpiryMonth(4,DATE).getMonth());
assertEquals(Month.JUNE, EXPIRY_CALC.getExpiryMonth(5,DATE).getMonth());
assertEquals(Month.JULY, EXPIRY_CALC.getExpiryMonth(6,DATE).getMonth());
assertEquals(Month.SEPTEMBER, EXPIRY_CALC.getExpiryMonth(8,DATE).getMonth());
assertEquals(Month.DECEMBER, EXPIRY_CALC.getExpiryMonth(11,DATE).getMonth());
}
@Test
public void testExpiryDate() {
assertEquals(LocalDate.of(2013, 2, 15), EXPIRY_CALC.getExpiryDate(1, DATE, WEEKEND_CALENDAR));
assertEquals(LocalDate.of(2013, 3, 15), EXPIRY_CALC.getExpiryDate(2, DATE, WEEKEND_CALENDAR));
assertEquals(LocalDate.of(2013, 9, 20), EXPIRY_CALC.getExpiryDate(8, DATE, WEEKEND_CALENDAR));
assertEquals(LocalDate.of(2014, 2, 21), EXPIRY_CALC.getExpiryDate(13, DATE, WEEKEND_CALENDAR));
}
@Test
public void testFuturePriceCurveInstrumentProvider() {
for (int i = 0; i < EXPIRY_OFFSETS.length; i++) {
final String expected = RESULTS[i];
final ExternalId actual = PROVIDER.getInstrument(EXPIRY_OFFSETS[i], DATE);
assertEquals(ExternalSchemes.BLOOMBERG_TICKER_WEAK, actual.getScheme());
assertEquals(expected, actual.getValue());
}
}
@Test
public void testCycle() {
BloombergEquityFuturePriceCurveInstrumentProvider provider = new BloombergEquityFuturePriceCurveInstrumentProvider(PREFIX, POSTFIX,
DATA_FIELD_NAME, EXCHANGE);
assertEquals(provider, cycleObject(BloombergEquityFuturePriceCurveInstrumentProvider.class, provider));
provider = new BloombergEquityFuturePriceCurveInstrumentProvider(PREFIX, POSTFIX,
DATA_FIELD_NAME, SCHEME, EXCHANGE);
assertEquals(provider, cycleObject(BloombergEquityFuturePriceCurveInstrumentProvider.class, provider));
}
}