/**
* Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.report.framework.expression;
import static com.opengamma.strata.basics.currency.Currency.USD;
import static com.opengamma.strata.collect.CollectProjectAssertions.assertThat;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Set;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.opengamma.strata.basics.StandardId;
import com.opengamma.strata.basics.currency.CurrencyAmount;
import com.opengamma.strata.calc.runner.CalculationFunctions;
import com.opengamma.strata.measure.StandardComponents;
import com.opengamma.strata.product.GenericSecurity;
import com.opengamma.strata.product.GenericSecurityTrade;
import com.opengamma.strata.product.SecurityId;
import com.opengamma.strata.product.SecurityInfo;
import com.opengamma.strata.product.Trade;
import com.opengamma.strata.product.TradeInfo;
/**
* Test {@link TradeTokenEvaluator}.
*/
@Test
public class TradeTokenEvaluatorTest {
private static final CalculationFunctions FUNCTIONS = StandardComponents.calculationFunctions();
public void tokens() {
TradeTokenEvaluator evaluator = new TradeTokenEvaluator();
Set<String> tokens = evaluator.tokens(trade());
Set<String> expected = ImmutableSet.of(
"quantity",
"price",
"security",
"id",
"counterparty",
"tradeDate",
"tradeTime",
"zone",
"settlementDate",
"attributes",
"info");
assertThat(tokens).isEqualTo(expected);
}
public void evaluate() {
TradeTokenEvaluator evaluator = new TradeTokenEvaluator();
Trade trade = trade();
EvaluationResult quantity = evaluator.evaluate(trade, FUNCTIONS, "quantity", ImmutableList.of());
assertThat(quantity.getResult()).hasValue(123d);
EvaluationResult initialPrice = evaluator.evaluate(trade, FUNCTIONS, "price", ImmutableList.of());
assertThat(initialPrice.getResult()).hasValue(456d);
// Check that property name isn't case sensitive
EvaluationResult initialPrice2 = evaluator.evaluate(trade, FUNCTIONS, "price", ImmutableList.of());
assertThat(initialPrice2.getResult()).hasValue(456d);
EvaluationResult counterparty = evaluator.evaluate(trade, FUNCTIONS, "counterparty", ImmutableList.of());
assertThat(counterparty.getResult()).hasValue(StandardId.of("cpty", "a"));
// Optional property with no value
EvaluationResult tradeTime = evaluator.evaluate(trade, FUNCTIONS, "tradeTime", ImmutableList.of());
assertThat(tradeTime.getResult()).isFailure();
// Unknown property
EvaluationResult foo = evaluator.evaluate(trade, FUNCTIONS, "foo", ImmutableList.of());
assertThat(foo.getResult()).isFailure();
}
private static Trade trade() {
SecurityInfo info = SecurityInfo.of(SecurityId.of("OG-Test", "1"), 20, CurrencyAmount.of(USD, 10));
GenericSecurity security = GenericSecurity.of(info);
TradeInfo tradeInfo = TradeInfo.builder()
.counterparty(StandardId.of("cpty", "a"))
.build();
return GenericSecurityTrade.builder()
.info(tradeInfo)
.security(security)
.quantity(123)
.price(456)
.build();
}
}