/** * Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.product.capfloor; import static com.opengamma.strata.basics.currency.Currency.EUR; import static com.opengamma.strata.basics.date.HolidayCalendarIds.EUTA; import static com.opengamma.strata.basics.index.IborIndices.EUR_EURIBOR_3M; import static com.opengamma.strata.collect.TestHelper.assertSerialization; import static com.opengamma.strata.collect.TestHelper.coverBeanEquals; import static com.opengamma.strata.collect.TestHelper.coverImmutableBean; import static com.opengamma.strata.product.common.PayReceive.PAY; import static com.opengamma.strata.product.common.PayReceive.RECEIVE; import static org.testng.Assert.assertEquals; import java.time.LocalDate; import org.testng.annotations.Test; import com.opengamma.strata.basics.ReferenceData; import com.opengamma.strata.basics.currency.AdjustablePayment; import com.opengamma.strata.basics.currency.CurrencyAmount; import com.opengamma.strata.basics.date.BusinessDayAdjustment; import com.opengamma.strata.basics.date.BusinessDayConventions; import com.opengamma.strata.basics.date.DaysAdjustment; import com.opengamma.strata.basics.schedule.Frequency; import com.opengamma.strata.basics.schedule.PeriodicSchedule; import com.opengamma.strata.basics.value.ValueSchedule; import com.opengamma.strata.product.TradeInfo; import com.opengamma.strata.product.swap.IborRateCalculation; /** * Test {@link IborCapFloorTrade}. */ @Test public class IborCapFloorTradeTest { private static final ReferenceData REF_DATA = ReferenceData.standard(); private static final LocalDate START = LocalDate.of(2011, 3, 17); private static final LocalDate END = LocalDate.of(2016, 3, 17); private static final IborRateCalculation RATE_CALCULATION = IborRateCalculation.of(EUR_EURIBOR_3M); private static final Frequency FREQUENCY = Frequency.P3M; private static final BusinessDayAdjustment BUSS_ADJ = BusinessDayAdjustment.of(BusinessDayConventions.FOLLOWING, EUTA); private static final PeriodicSchedule SCHEDULE = PeriodicSchedule.builder() .startDate(START) .endDate(END) .frequency(FREQUENCY) .businessDayAdjustment(BUSS_ADJ) .build(); private static final DaysAdjustment PAYMENT_OFFSET = DaysAdjustment.ofBusinessDays(2, EUTA); private static final ValueSchedule CAP = ValueSchedule.of(0.0325); private static final double NOTIONAL_VALUE = 1.0e6; private static final ValueSchedule NOTIONAL = ValueSchedule.of(NOTIONAL_VALUE); private static final IborCapFloorLeg CAPFLOOR_LEG = IborCapFloorLeg.builder() .calculation(RATE_CALCULATION) .capSchedule(CAP) .notional(NOTIONAL) .paymentDateOffset(PAYMENT_OFFSET) .paymentSchedule(SCHEDULE) .payReceive(RECEIVE) .build(); private static final IborCapFloor PRODUCT = IborCapFloor.of(CAPFLOOR_LEG); private static final AdjustablePayment PREMIUM = AdjustablePayment.of(CurrencyAmount.of(EUR, NOTIONAL_VALUE), LocalDate.of(2011, 3, 18)); private static final TradeInfo TRADE_INFO = TradeInfo.builder() .tradeDate(LocalDate.of(2011, 3, 15)) .build(); public void test_builder_full() { IborCapFloorTrade test = IborCapFloorTrade.builder() .info(TRADE_INFO) .product(PRODUCT) .premium(PREMIUM) .build(); assertEquals(test.getPremium().get(), PREMIUM); assertEquals(test.getProduct(), PRODUCT); assertEquals(test.getInfo(), TRADE_INFO); } public void test_builder_min() { IborCapFloorTrade test = IborCapFloorTrade.builder() .product(PRODUCT) .build(); assertEquals(test.getPremium().isPresent(), false); assertEquals(test.getProduct(), PRODUCT); assertEquals(test.getInfo(), TradeInfo.empty()); } //------------------------------------------------------------------------- public void test_resolve() { IborCapFloorTrade test = IborCapFloorTrade.builder() .info(TRADE_INFO) .product(PRODUCT) .premium(PREMIUM) .build(); ResolvedIborCapFloorTrade expected = ResolvedIborCapFloorTrade.builder() .info(TRADE_INFO) .product(PRODUCT.resolve(REF_DATA)) .premium(PREMIUM.resolve(REF_DATA)) .build(); assertEquals(test.resolve(REF_DATA), expected); } public void test_resolve_noPremium() { IborCapFloorTrade test = IborCapFloorTrade.builder() .info(TRADE_INFO) .product(PRODUCT) .build(); ResolvedIborCapFloorTrade expected = ResolvedIborCapFloorTrade.builder() .info(TRADE_INFO) .product(PRODUCT.resolve(REF_DATA)) .build(); assertEquals(test.resolve(REF_DATA), expected); } //------------------------------------------------------------------------- public void coverage() { IborCapFloorTrade test1 = IborCapFloorTrade.builder() .info(TRADE_INFO) .product(PRODUCT) .premium(PREMIUM) .build(); coverImmutableBean(test1); IborCapFloor product = IborCapFloor.of( IborCapFloorLeg.builder() .calculation(RATE_CALCULATION) .floorSchedule(CAP) .notional(NOTIONAL) .paymentDateOffset(PAYMENT_OFFSET) .paymentSchedule(SCHEDULE) .payReceive(PAY) .build()); IborCapFloorTrade test2 = IborCapFloorTrade.builder() .product(product) .build(); coverBeanEquals(test1, test2); } public void test_serialization() { IborCapFloorTrade test = IborCapFloorTrade.builder() .info(TRADE_INFO) .product(PRODUCT) .premium(PREMIUM) .build(); assertSerialization(test); } }