/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.integration.tool.portfolio.xml.v1_0.conversion;
import static org.testng.Assert.assertEquals;
import java.math.BigDecimal;
import org.testng.annotations.Test;
import org.threeten.bp.LocalDate;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.financial.security.fra.FRASecurity;
import com.opengamma.integration.tool.portfolio.xml.v1_0.jaxb.ExtId;
import com.opengamma.integration.tool.portfolio.xml.v1_0.jaxb.FixingIndex;
import com.opengamma.integration.tool.portfolio.xml.v1_0.jaxb.FixingIndex.RateType;
import com.opengamma.integration.tool.portfolio.xml.v1_0.jaxb.FraTrade;
import com.opengamma.integration.tool.portfolio.xml.v1_0.jaxb.IdWrapper;
import com.opengamma.master.security.ManageableSecurity;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;
@Test(groups = TestGroup.UNIT)
public class FraTradeSecurityExtractorTest {
@Test
public void testExtractSecurities() {
FraTrade fra = createBasicFra();
FraTradeSecurityExtractor fraExtractor = new FraTradeSecurityExtractor(fra);
ManageableSecurity[] extractSecurities = fraExtractor.extractSecurities();
assertEquals(1, extractSecurities.length, "One fra expected");
assertEquals(FRASecurity.class, extractSecurities[0].getClass(), "Expected instance of FraSecurity");
}
@Test(expectedExceptions={OpenGammaRuntimeException.class})
public void testExtractSecuritiesBadPaymentDate() {
FraTrade fra = createBasicFra();
fra.setPaymentDate(fra.getEffectiveDate().plusDays(1));
FraTradeSecurityExtractor fraExtractor = new FraTradeSecurityExtractor(fra);
//should throw:
fraExtractor.extractSecurities();
}
@Test
public void testExtractSecuritiesWithCalendarInfo() {
//should work, but will print a warning
FraTrade fra = createBasicFra();
fra.setDayCount("Modified Following");
fra.setBusinessDayConvention("Actual/365");
FraTradeSecurityExtractor fraExtractor = new FraTradeSecurityExtractor(fra);
ManageableSecurity[] extractSecurities = fraExtractor.extractSecurities();
assertEquals(1, extractSecurities.length, "One fra expected");
assertEquals(FRASecurity.class, extractSecurities[0].getClass(), "Expected instance of FraSecurity");
}
/**
* @return a fra with some fields set
*/
private FraTrade createBasicFra(){
FraTrade fra = new FraTrade();
IdWrapper tradeId = createExternalId("IdFromExternalSystem", "External");
IdWrapper regionId = createExternalId("IdFromExternalSystem", "External");
IdWrapper counterparty = createExternalId("GOLDMAN", "Cpty");
fra.setExternalSystemId(tradeId);
fra.setTradeDate(LocalDate.of(2013, 1, 21));
fra.setCounterparty(counterparty);
fra.setPayFixed(true);
fra.setRegionId(regionId);
fra.setEffectiveDate(LocalDate.of(2013, 1, 23));
fra.setPaymentDate(LocalDate.of(2013, 1, 23));
fra.setFixingDate(LocalDate.of(2013, 2, 21));
fra.setTerminationDate(LocalDate.of(2013, 5, 23));
fra.setCurrency(Currency.USD);
fra.setNotional(BigDecimal.valueOf(1000000));
fra.setRate(BigDecimal.valueOf(105.25));
FixingIndex fixingIndex = new FixingIndex();
fixingIndex.setIndex(createExternalId("US0003M Curncy", "BLOOMBERG_TICKER").getExternalId());
fixingIndex.setRateType(RateType.IBOR);
fra.setFixingIndex(fixingIndex);
return fra;
}
private IdWrapper createExternalId(String id, String scheme) {
ExtId tradeExtId = new ExtId();
tradeExtId.setId(id);
tradeExtId.setScheme(scheme);
IdWrapper tradeId = new IdWrapper();
tradeId.setExternalId(tradeExtId);
return tradeId;
}
}