/** * 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.GBP; import static com.opengamma.strata.collect.TestHelper.assertSerialization; import static com.opengamma.strata.collect.TestHelper.assertThrows; 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.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.opengamma.strata.basics.ImmutableReferenceData; import com.opengamma.strata.basics.ReferenceData; import com.opengamma.strata.basics.currency.CurrencyAmount; import com.opengamma.strata.product.GenericSecurity; import com.opengamma.strata.product.SecurityId; import com.opengamma.strata.product.SecurityInfo; import com.opengamma.strata.product.SecurityPriceInfo; import com.opengamma.strata.product.TradeInfo; /** * Test {@link BondFutureSecurity}. */ @Test public class BondFutureSecurityTest { private static final BondFuture PRODUCT = BondFutureTest.sut(); private static final BondFuture PRODUCT2 = BondFutureTest.sut2(); private static final SecurityPriceInfo PRICE_INFO = SecurityPriceInfo.of(0.1, CurrencyAmount.of(GBP, 25)); private static final SecurityInfo INFO = SecurityInfo.of(PRODUCT.getSecurityId(), PRICE_INFO); private static final SecurityInfo INFO2 = SecurityInfo.of(PRODUCT2.getSecurityId(), PRICE_INFO); //------------------------------------------------------------------------- public void test_builder() { BondFutureSecurity test = sut(); assertEquals(test.getInfo(), INFO); assertEquals(test.getSecurityId(), PRODUCT.getSecurityId()); assertEquals(test.getCurrency(), PRODUCT.getCurrency()); assertEquals(test.getFirstDeliveryDate(), PRODUCT.getFirstDeliveryDate()); assertEquals(test.getLastDeliveryDate(), PRODUCT.getLastDeliveryDate()); ImmutableList<FixedCouponBond> basket = PRODUCT.getDeliveryBasket(); assertEquals(test.getUnderlyingIds(), ImmutableSet.of(basket.get(0).getSecurityId(), basket.get(1).getSecurityId())); } //------------------------------------------------------------------------- public void test_createProduct() { BondFutureSecurity test = sut(); ImmutableList<FixedCouponBond> basket = PRODUCT.getDeliveryBasket(); FixedCouponBondSecurity bondSec0 = FixedCouponBondSecurityTest.createSecurity(PRODUCT.getDeliveryBasket().get(0)); FixedCouponBondSecurity bondSec1 = FixedCouponBondSecurityTest.createSecurity(PRODUCT.getDeliveryBasket().get(1)); ReferenceData refData = ImmutableReferenceData.of(ImmutableMap.of( basket.get(0).getSecurityId(), bondSec0, basket.get(1).getSecurityId(), bondSec1)); BondFuture product = test.createProduct(refData); assertEquals(product.getDeliveryBasket().get(0), PRODUCT.getDeliveryBasket().get(0)); assertEquals(product.getDeliveryBasket().get(1), PRODUCT.getDeliveryBasket().get(1)); TradeInfo tradeInfo = TradeInfo.of(date(2016, 6, 30)); BondFutureTrade expectedTrade = BondFutureTrade.builder() .info(tradeInfo) .product(product) .quantity(100) .price(123.50) .build(); assertEquals(test.createTrade(tradeInfo, 100, 123.50, refData), expectedTrade); } public void test_createProduct_wrongType() { BondFutureSecurity test = sut(); ImmutableList<FixedCouponBond> basket = PRODUCT.getDeliveryBasket(); SecurityId secId = basket.get(0).getSecurityId(); GenericSecurity sec = GenericSecurity.of(INFO); ReferenceData refData = ImmutableReferenceData.of(secId, sec); assertThrows(() -> test.createProduct(refData), ClassCastException.class); } //------------------------------------------------------------------------- public void coverage() { coverImmutableBean(sut()); coverBeanEquals(sut(), sut2()); } public void test_serialization() { assertSerialization(sut()); } //------------------------------------------------------------------------- static BondFutureSecurity sut() { ImmutableList<FixedCouponBond> basket = PRODUCT.getDeliveryBasket(); return BondFutureSecurity.builder() .info(INFO) .currency(PRODUCT.getCurrency()) .deliveryBasketIds(basket.get(0).getSecurityId(), basket.get(1).getSecurityId()) .conversionFactors(1d, 2d) .firstNoticeDate(PRODUCT.getFirstNoticeDate()) .firstDeliveryDate(PRODUCT.getFirstDeliveryDate().get()) .lastNoticeDate(PRODUCT.getLastNoticeDate()) .lastDeliveryDate(PRODUCT.getLastDeliveryDate().get()) .lastTradeDate(PRODUCT.getLastTradeDate()) .rounding(PRODUCT.getRounding()) .build(); } static BondFutureSecurity sut2() { ImmutableList<FixedCouponBond> basket = PRODUCT2.getDeliveryBasket(); return BondFutureSecurity.builder() .info(INFO2) .currency(PRODUCT2.getCurrency()) .deliveryBasketIds(basket.get(0).getSecurityId()) .conversionFactors(3d) .firstNoticeDate(PRODUCT2.getFirstNoticeDate()) .lastNoticeDate(PRODUCT2.getLastNoticeDate()) .lastTradeDate(PRODUCT2.getLastTradeDate()) .rounding(PRODUCT2.getRounding()) .build(); } }