/** * Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.product.bond; import static com.opengamma.strata.basics.currency.Currency.USD; import static com.opengamma.strata.collect.TestHelper.assertSerialization; import static com.opengamma.strata.collect.TestHelper.assertThrowsIllegalArg; import static com.opengamma.strata.collect.TestHelper.coverBeanEquals; import static com.opengamma.strata.collect.TestHelper.coverImmutableBean; import static com.opengamma.strata.collect.TestHelper.date; import static org.testng.Assert.assertEquals; import org.testng.annotations.Test; import com.opengamma.strata.basics.ReferenceData; import com.opengamma.strata.basics.currency.Payment; /** * Test {@link ResolvedBondFuture}. */ @Test public class ResolvedBondFutureTest { private static final ReferenceData REF_DATA = ReferenceData.standard(); //------------------------------------------------------------------------- public void test_builder_noDeliveryDate() { ResolvedBondFuture base = sut(); ResolvedBondFuture test = ResolvedBondFuture.builder() .securityId(base.getSecurityId()) .deliveryBasket(base.getDeliveryBasket()) .conversionFactors(base.getConversionFactors()) .firstNoticeDate(base.getFirstNoticeDate()) .lastNoticeDate(base.getLastNoticeDate()) .firstDeliveryDate(base.getFirstDeliveryDate()) .lastDeliveryDate(base.getLastDeliveryDate()) .lastTradeDate(base.getLastTradeDate()) .rounding(base.getRounding()) .build(); assertEquals(test, base); } public void test_builder_fail() { ResolvedBondFuture base = sut(); // wrong size assertThrowsIllegalArg(() -> ResolvedBondFuture.builder() .securityId(base.getSecurityId()) .deliveryBasket(base.getDeliveryBasket().subList(0, 1)) .conversionFactors(base.getConversionFactors()) .firstNoticeDate(base.getFirstNoticeDate()) .lastNoticeDate(base.getLastNoticeDate()) .lastTradeDate(base.getLastTradeDate()) .build()); // first notice date missing assertThrowsIllegalArg(() -> ResolvedBondFuture.builder() .securityId(base.getSecurityId()) .deliveryBasket(base.getDeliveryBasket()) .conversionFactors(base.getConversionFactors()) .lastNoticeDate(base.getLastNoticeDate()) .lastTradeDate(base.getLastTradeDate()) .build()); // last notice date missing assertThrowsIllegalArg(() -> ResolvedBondFuture.builder() .securityId(base.getSecurityId()) .deliveryBasket(base.getDeliveryBasket()) .conversionFactors(base.getConversionFactors()) .firstNoticeDate(base.getFirstNoticeDate()) .lastTradeDate(base.getLastTradeDate()) .build()); // basket list empty assertThrowsIllegalArg(() -> ResolvedBondFuture.builder() .securityId(base.getSecurityId()) .firstNoticeDate(base.getFirstNoticeDate()) .lastNoticeDate(base.getLastNoticeDate()) .lastTradeDate(base.getLastTradeDate()) .build()); // notional mismatch ResolvedFixedCouponBond bond0 = base.getDeliveryBasket().get(0); ResolvedFixedCouponBond bond1 = bond0.toBuilder().nominalPayment(Payment.of(USD, 100, date(2016, 6, 30))).build(); assertThrowsIllegalArg(() -> ResolvedBondFuture.builder() .securityId(base.getSecurityId()) .deliveryBasket(bond0, bond1) .conversionFactors(1d, 2d) .firstNoticeDate(base.getFirstNoticeDate()) .firstDeliveryDate(base.getFirstDeliveryDate()) .lastNoticeDate(base.getLastNoticeDate()) .lastDeliveryDate(base.getLastDeliveryDate()) .lastTradeDate(base.getLastTradeDate()) .rounding(base.getRounding()) .build()); } //------------------------------------------------------------------------- public void coverage() { coverImmutableBean(sut()); coverBeanEquals(sut(), sut2()); } public void test_serialization() { assertSerialization(sut()); } //------------------------------------------------------------------------- static ResolvedBondFuture sut() { return BondFutureTest.sut().resolve(REF_DATA); } static ResolvedBondFuture sut2() { return BondFutureTest.sut2().resolve(REF_DATA); } }