/** * 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 com.opengamma.strata.product.common.PutCall.CALL; import static com.opengamma.strata.product.common.PutCall.PUT; 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; import com.opengamma.strata.product.option.FutureOptionPremiumStyle; /** * Test {@link BondFutureOptionSecurity}. */ @Test public class BondFutureOptionSecurityTest { private static final BondFutureOption PRODUCT = BondFutureOptionTest.sut(); private static final BondFutureOption PRODUCT2 = BondFutureOptionTest.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() { BondFutureOptionSecurity test = sut(); assertEquals(test.getInfo(), INFO); assertEquals(test.getSecurityId(), PRODUCT.getSecurityId()); assertEquals(test.getCurrency(), PRODUCT.getCurrency()); assertEquals(test.getUnderlyingIds(), ImmutableSet.of(PRODUCT.getUnderlyingFuture().getSecurityId())); } //------------------------------------------------------------------------- public void test_createProduct() { BondFutureOptionSecurity test = sut(); BondFuture future = PRODUCT.getUnderlyingFuture(); BondFutureSecurity futureSec = BondFutureSecurityTest.sut(); ImmutableList<FixedCouponBond> basket = future.getDeliveryBasket(); FixedCouponBondSecurity bondSec0 = FixedCouponBondSecurityTest.createSecurity(future.getDeliveryBasket().get(0)); FixedCouponBondSecurity bondSec1 = FixedCouponBondSecurityTest.createSecurity(future.getDeliveryBasket().get(1)); ReferenceData refData = ImmutableReferenceData.of(ImmutableMap.of( test.getUnderlyingFutureId(), futureSec, basket.get(0).getSecurityId(), bondSec0, basket.get(1).getSecurityId(), bondSec1)); BondFutureOption product = test.createProduct(refData); assertEquals(product.getUnderlyingFuture().getDeliveryBasket().get(0), future.getDeliveryBasket().get(0)); assertEquals(product.getUnderlyingFuture().getDeliveryBasket().get(1), future.getDeliveryBasket().get(1)); TradeInfo tradeInfo = TradeInfo.of(date(2016, 6, 30)); BondFutureOptionTrade expectedTrade = BondFutureOptionTrade.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() { BondFutureOptionSecurity test = sut(); BondFuture future = PRODUCT.getUnderlyingFuture(); SecurityId secId = future.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 BondFutureOptionSecurity sut() { return BondFutureOptionSecurity.builder() .info(INFO) .currency(PRODUCT.getCurrency()) .putCall(CALL) .strikePrice(PRODUCT.getStrikePrice()) .expiryDate(PRODUCT.getExpiryDate()) .expiryTime(PRODUCT.getExpiryTime()) .expiryZone(PRODUCT.getExpiryZone()) .premiumStyle(FutureOptionPremiumStyle.DAILY_MARGIN) .rounding(PRODUCT.getRounding()) .underlyingFutureId(PRODUCT.getUnderlyingFuture().getSecurityId()) .build(); } static BondFutureOptionSecurity sut2() { return BondFutureOptionSecurity.builder() .info(INFO2) .currency(PRODUCT2.getCurrency()) .putCall(PUT) .strikePrice(PRODUCT2.getStrikePrice()) .expiryDate(PRODUCT2.getExpiryDate()) .expiryTime(PRODUCT2.getExpiryTime()) .expiryZone(PRODUCT2.getExpiryZone()) .premiumStyle(FutureOptionPremiumStyle.UPFRONT_PREMIUM) .rounding(PRODUCT2.getRounding()) .underlyingFutureId(PRODUCT2.getUnderlyingFuture().getSecurityId()) .build(); } }