/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.fudgemsg;
import static org.testng.AssertJUnit.assertEquals;
import java.util.Set;
import java.util.TreeSet;
import org.testng.annotations.Test;
import org.threeten.bp.LocalDate;
import com.opengamma.core.id.ExternalSchemes;
import com.opengamma.core.value.MarketDataRequirementNames;
import com.opengamma.financial.analytics.curve.AbstractCurveSpecification;
import com.opengamma.financial.analytics.curve.ConstantCurveSpecification;
import com.opengamma.financial.analytics.curve.CurveSpecification;
import com.opengamma.financial.analytics.curve.InterpolatedCurveSpecification;
import com.opengamma.financial.analytics.curve.SpreadCurveSpecification;
import com.opengamma.financial.analytics.fudgemsg.AnalyticsTestBase;
import com.opengamma.financial.analytics.ircurve.strips.CashNode;
import com.opengamma.financial.analytics.ircurve.strips.CreditSpreadNode;
import com.opengamma.financial.analytics.ircurve.strips.CurveNodeWithIdentifier;
import com.opengamma.financial.analytics.ircurve.strips.DataFieldType;
import com.opengamma.id.ExternalId;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.time.Tenor;
/**
* Tests all curve specification Fudge builders.
*/
@Test(groups = TestGroup.UNIT)
public class CurveSpecificationBuildersTest extends AnalyticsTestBase {
/** A set of nodes */
private static final Set<CurveNodeWithIdentifier> NODES = new TreeSet<>();
static {
NODES.add(new CurveNodeWithIdentifier(new CreditSpreadNode("X", Tenor.DAY), ExternalId.of("Test", "A"), "X", DataFieldType.OUTRIGHT));
NODES.add(new CurveNodeWithIdentifier(new CreditSpreadNode("Y", Tenor.ONE_MONTH), ExternalId.of("Test", "B"), "Y", DataFieldType.POINTS));
NODES.add(new CurveNodeWithIdentifier(new CreditSpreadNode("Z", Tenor.ONE_YEAR), ExternalId.of("Test", "C"), "Z", DataFieldType.OUTRIGHT));
NODES.add(new CurveNodeWithIdentifier(new CashNode(Tenor.DAY, Tenor.ONE_WEEK, ExternalId.of("Test convention", "convention1"), "Test"),
ExternalId.of("Test", "D"), "A", DataFieldType.OUTRIGHT));
NODES.add(new CurveNodeWithIdentifier(new CashNode(Tenor.TWO_DAYS, Tenor.TWO_WEEKS, ExternalId.of("Test convention", "convention2"), "Test"),
ExternalId.of("Test", "E"), "B", DataFieldType.POINTS));
NODES.add(new CurveNodeWithIdentifier(new CashNode(Tenor.TWO_DAYS, Tenor.THREE_WEEKS, ExternalId.of("Test convention", "convention3"), "Test"),
ExternalId.of("Test", "F"), "C", DataFieldType.OUTRIGHT));
}
/**
* Tests cycling of curve specifications.
*/
@Test
public void testCurveSpecification() {
final CurveSpecification specification = new CurveSpecification(LocalDate.of(2013, 1, 1), "NAME", NODES);
assertEquals(specification, cycleObject(CurveSpecification.class, specification));
}
/**
* Tests cycling of interpolated curve specifications
*/
@Test
public void testInterpolatedCurveSpecification() {
final InterpolatedCurveSpecification specification = new InterpolatedCurveSpecification(LocalDate.of(2013, 1, 1), "NAME", NODES, "A", "B", "C");
assertEquals(specification, cycleObject(InterpolatedCurveSpecification.class, specification));
}
/**
* Tests cycling of constant curve specifications
*/
@Test
public void testConstantCurveSpecification() {
ConstantCurveSpecification specification = new ConstantCurveSpecification(LocalDate.of(2013, 1, 1), "NAME", ExternalSchemes.activFeedTickerSecurityId("A"), MarketDataRequirementNames.ALL);
assertEquals(specification, cycleObject(ConstantCurveSpecification.class, specification));
specification = new ConstantCurveSpecification(LocalDate.of(2013, 1, 1), "NAME", ExternalSchemes.activFeedTickerSecurityId("A"), MarketDataRequirementNames.MARKET_VALUE);
assertEquals(specification, cycleObject(ConstantCurveSpecification.class, specification));
final ConstantCurveSpecification other = new ConstantCurveSpecification(LocalDate.of(2013, 1, 1), "NAME", ExternalSchemes.activFeedTickerSecurityId("A"), null);
assertEquals(specification, cycleObject(ConstantCurveSpecification.class, other));
}
/**
* Tests cycling of spread curve specifications
*/
@Test
public void testSpreadCurveSpecification() {
final LocalDate date = LocalDate.of(2013, 1, 1);
final AbstractCurveSpecification constant = new ConstantCurveSpecification(date, "C", ExternalSchemes.bloombergTickerSecurityId("A"), null);
final AbstractCurveSpecification interpolated = new InterpolatedCurveSpecification(date, "R", NODES, "B", "F", "G");
final SpreadCurveSpecification spread1 = new SpreadCurveSpecification(date, "I", constant, interpolated, "+");
assertEquals(spread1, cycleObject(SpreadCurveSpecification.class, spread1));
final SpreadCurveSpecification spread2 = new SpreadCurveSpecification(date, "D", spread1, interpolated, "-");
assertEquals(spread2, cycleObject(SpreadCurveSpecification.class, spread2));
}
}