Package com.opengamma.web.analytics

Source Code of com.opengamma.web.analytics.AnalyticsNodeBuilderTest

/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.analytics;

import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;

import org.testng.annotations.Test;
import org.threeten.bp.LocalDate;
import org.threeten.bp.ZoneOffset;

import com.opengamma.core.position.impl.SimplePortfolioNode;
import com.opengamma.core.position.impl.SimplePosition;
import com.opengamma.core.position.impl.SimpleTrade;
import com.opengamma.core.security.impl.SimpleSecurityLink;
import com.opengamma.financial.security.equity.EquitySecurity;
import com.opengamma.financial.security.fx.FXForwardSecurity;
import com.opengamma.id.ExternalId;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;

/**
* Tests that {@link AnalyticsNode.PortfolioNodeBuilder} creates nodes that match a portfolio structure.
*/
@Test(groups = TestGroup.UNIT)
public class AnalyticsNodeBuilderTest {

  @Test
  public void emptyPortfolio() {
    AnalyticsNode root = new AnalyticsNode.PortfolioNodeBuilder(new SimplePortfolioNode()).getRoot();
    assertEquals(0, root.getStartRow());
    assertEquals(0, root.getEndRow());
    assertTrue(root.getChildren().isEmpty());
  }

  @Test
  public void flatPortfolio() {
    SimplePortfolioNode portfolioRoot = new SimplePortfolioNode("");
    portfolioRoot.addPosition(new SimplePosition());
    portfolioRoot.addPosition(new SimplePosition());
    portfolioRoot.addPosition(new SimplePosition());
    portfolioRoot.addPosition(new SimplePosition());
    portfolioRoot.addPosition(new SimplePosition());

    AnalyticsNode root = new AnalyticsNode.PortfolioNodeBuilder(portfolioRoot).getRoot();
    assertEquals(0, root.getStartRow());
    assertEquals(5, root.getEndRow()); // 1 node for the root and one each for the positions
    assertTrue(root.getChildren().isEmpty());
  }

  @Test
  public void subNodesAndPositions() {
    /*
    0  root
    1   |_pos
    2   |_pos
    3   |_child1
    4      |_pos
    5      |_pos
    */
    SimplePortfolioNode portfolioChild = new SimplePortfolioNode();
    portfolioChild.addPosition(new SimplePosition());
    portfolioChild.addPosition(new SimplePosition());
    SimplePortfolioNode portfolioRoot = new SimplePortfolioNode("");
    portfolioRoot.addChildNode(portfolioChild);
    portfolioRoot.addPosition(new SimplePosition());
    portfolioRoot.addPosition(new SimplePosition());

    AnalyticsNode root = new AnalyticsNode.PortfolioNodeBuilder(portfolioRoot).getRoot();
    assertEquals(0, root.getStartRow());
    assertEquals(5, root.getEndRow());
    assertEquals(1, root.getChildren().size());
    AnalyticsNode child = root.getChildren().get(0);
    assertEquals(3, child.getStartRow());
    assertEquals(5, child.getEndRow());
    assertTrue(child.getChildren().isEmpty());
  }

  @Test
  public void deeplyNested() {
    /*
    0  root
    1   |_pos
    2   |_child1
    3      |_pos
    4      |_pos
    5      |_child2
    6        |_pos
    7        |_pos
    8        |_child3
    9          |_pos
    10         |_pos
    */
    SimplePortfolioNode portfolioRoot = new SimplePortfolioNode();
    portfolioRoot.addPosition(new SimplePosition());
    SimplePortfolioNode portfolioChild1 = new SimplePortfolioNode();
    portfolioChild1.addPosition(new SimplePosition());
    portfolioChild1.addPosition(new SimplePosition());
    SimplePortfolioNode portfolioChild2 = new SimplePortfolioNode();
    portfolioChild2.addPosition(new SimplePosition());
    portfolioChild2.addPosition(new SimplePosition());
    SimplePortfolioNode portfolioChild3 = new SimplePortfolioNode();
    portfolioChild3.addPosition(new SimplePosition());
    portfolioChild3.addPosition(new SimplePosition());
    portfolioRoot.addChildNode(portfolioChild1);
    portfolioChild1.addChildNode(portfolioChild2);
    portfolioChild2.addChildNode(portfolioChild3);

    AnalyticsNode root = new AnalyticsNode.PortfolioNodeBuilder(portfolioRoot).getRoot();
    assertEquals(0, root.getStartRow());
    assertEquals(10, root.getEndRow());
    assertEquals(1, root.getChildren().size());
    AnalyticsNode child1 = root.getChildren().get(0);
    assertEquals(2, child1.getStartRow());
    assertEquals(10, child1.getEndRow());
    assertEquals(1, child1.getChildren().size());
    AnalyticsNode child2 = child1.getChildren().get(0);
    assertEquals(5, child2.getStartRow());
    assertEquals(10, child2.getEndRow());
    assertEquals(1, child2.getChildren().size());
    AnalyticsNode child3 = child2.getChildren().get(0);
    assertEquals(8, child3.getStartRow());
    assertEquals(10, child3.getEndRow());
    assertTrue(child3.getChildren().isEmpty());
  }

  @Test
  public void multipleChildren() {
    /*
    0 root
    1  |_child1
    2  |  |_pos
    3  |_child2
    4     |_pos
    */
    SimplePortfolioNode portfolioRoot = new SimplePortfolioNode();
    SimplePortfolioNode portfolioChild1 = new SimplePortfolioNode();
    portfolioChild1.addPosition(new SimplePosition());
    SimplePortfolioNode portfolioChild2 = new SimplePortfolioNode();
    portfolioChild2.addPosition(new SimplePosition());
    portfolioRoot.addChildNode(portfolioChild1);
    portfolioRoot.addChildNode(portfolioChild2);

    AnalyticsNode root = new AnalyticsNode.PortfolioNodeBuilder(portfolioRoot).getRoot();
    assertEquals(0, root.getStartRow());
    assertEquals(4, root.getEndRow());
    assertEquals(2, root.getChildren().size());
    AnalyticsNode child1 = root.getChildren().get(0);
    assertEquals(1, child1.getStartRow());
    assertEquals(2, child1.getEndRow());
    assertTrue(child1.getChildren().isEmpty());
    AnalyticsNode child2 = root.getChildren().get(1);
    assertEquals(3, child2.getStartRow());
    assertEquals(4, child2.getEndRow());
    assertTrue(child2.getChildren().isEmpty());
  }

  @Test
  public void fungibleTrades() {
    /*
    0 root
    1  |_pos1
    2  |  |_trade1
    3  |  |_trade2
    4  |_pos2
    5     |_trade3
    */
    EquitySecurity security = new EquitySecurity("exchange", "exchangeCode", "companyName", Currency.USD);
    SimplePortfolioNode portfolioRoot = new SimplePortfolioNode();
    SimplePosition position1 = new SimplePosition();
    SimpleSecurityLink securityLink = new SimpleSecurityLink();
    securityLink.setTarget(security);
    position1.setSecurityLink(securityLink);
    position1.addTrade(new SimpleTrade());
    position1.addTrade(new SimpleTrade());
    SimplePosition position2 = new SimplePosition();
    position2.setSecurityLink(securityLink);
    position2.addTrade(new SimpleTrade());
    portfolioRoot.addPosition(position1);
    portfolioRoot.addPosition(position2);

    AnalyticsNode root = new AnalyticsNode.PortfolioNodeBuilder(portfolioRoot).getRoot();
    assertEquals(0, root.getStartRow());
    assertEquals(5, root.getEndRow());
    assertEquals(2, root.getChildren().size());
    AnalyticsNode position1Node = root.getChildren().get(0);
    assertEquals(1, position1Node.getStartRow());
    assertEquals(3, position1Node.getEndRow());
    assertTrue(position1Node.getChildren().isEmpty());
    AnalyticsNode position2Node = root.getChildren().get(1);
    assertEquals(4, position2Node.getStartRow());
    assertEquals(5, position2Node.getEndRow());
    assertTrue(position2Node.getChildren().isEmpty());
  }

  @Test
  public void otcTrades() {
    /*
    0 root
    1  |_pos/trade1
    2  |_pos/trade2
    */
    FXForwardSecurity security = new FXForwardSecurity(Currency.GBP, 123,
                                                       Currency.USD, 321,
                                                       LocalDate.of(2012, 12, 21).atTime(11, 0).atZone(ZoneOffset.UTC),
                                                       ExternalId.of("Reg", "ABC"));
    SimplePortfolioNode portfolioRoot = new SimplePortfolioNode();
    SimplePosition position1 = new SimplePosition();
    SimpleSecurityLink securityLink = new SimpleSecurityLink();
    securityLink.setTarget(security);
    position1.setSecurityLink(securityLink);
    position1.addTrade(new SimpleTrade());
    SimplePosition position2 = new SimplePosition();
    position2.setSecurityLink(securityLink);
    position2.addTrade(new SimpleTrade());
    portfolioRoot.addPosition(position1);
    portfolioRoot.addPosition(position2);

    AnalyticsNode root = new AnalyticsNode.PortfolioNodeBuilder(portfolioRoot).getRoot();
    assertEquals(0, root.getStartRow());
    assertEquals(2, root.getEndRow());
    assertEquals(0, root.getChildren().size());
  }
}
TOP

Related Classes of com.opengamma.web.analytics.AnalyticsNodeBuilderTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.