/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.master.position.impl; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; import java.math.BigDecimal; import org.testng.annotations.Test; import org.threeten.bp.Instant; import org.threeten.bp.OffsetDateTime; import com.opengamma.core.position.Portfolio; import com.opengamma.core.position.PortfolioNode; import com.opengamma.core.position.Position; import com.opengamma.core.position.Trade; import com.opengamma.id.ExternalId; import com.opengamma.id.ExternalIdBundle; import com.opengamma.id.UniqueId; import com.opengamma.id.VersionCorrection; import com.opengamma.master.portfolio.ManageablePortfolio; import com.opengamma.master.portfolio.ManageablePortfolioNode; import com.opengamma.master.portfolio.PortfolioDocument; import com.opengamma.master.portfolio.PortfolioMaster; import com.opengamma.master.position.ManageablePosition; import com.opengamma.master.position.ManageableTrade; import com.opengamma.master.position.PositionDocument; import com.opengamma.master.position.PositionMaster; import com.opengamma.master.position.PositionSearchRequest; import com.opengamma.master.position.PositionSearchResult; import com.opengamma.master.security.ManageableSecurityLink; import com.opengamma.util.test.TestGroup; /** * Test {@link MasterPositionSource}. */ @Test(groups = TestGroup.UNIT) public class MasterPositionSourceTest { private static final UniqueId UID = UniqueId.of("A", "B"); private static final UniqueId UID2 = UniqueId.of("C", "D"); private static final UniqueId UID3 = UniqueId.of("E", "F"); private static final UniqueId UID4 = UniqueId.of("G", "H"); private static final UniqueId UID5 = UniqueId.of("I", "J"); private static final Instant NOW = Instant.now(); private static final VersionCorrection VC = VersionCorrection.of(NOW.minusSeconds(2), NOW.minusSeconds(1)); @Test(expectedExceptions = IllegalArgumentException.class) public void test_constructor_2arg_nullMaster() throws Exception { new MasterPositionSource(null, null); } @Test(expectedExceptions = IllegalArgumentException.class) public void test_constructor_3arg_nullMaster() throws Exception { new MasterPositionSource(null, null); } //------------------------------------------------------------------------- public void test_getPortfolio_UniqueId() throws Exception { PortfolioMaster mockPortfolio = mock(PortfolioMaster.class); PositionMaster mockPosition = mock(PositionMaster.class); ManageablePortfolioNode manNode = example(false); ManageablePortfolio manPrt = new ManageablePortfolio("Hello", manNode); manPrt.addAttribute("A1", "V1"); manPrt.addAttribute("A2", "V2"); manPrt.setUniqueId(UID); PortfolioDocument prtDoc = new PortfolioDocument(manPrt); when(mockPortfolio.get(UID)).thenReturn(prtDoc); MasterPositionSource test = new MasterPositionSource(mockPortfolio, mockPosition); Portfolio testResult = test.getPortfolio(UID, VersionCorrection.LATEST); verify(mockPortfolio, times(1)).get(UID); assertEquals(UID, testResult.getUniqueId()); assertEquals("Hello", testResult.getName()); assertEquals("Node", testResult.getRootNode().getName()); assertEquals(UID2, testResult.getRootNode().getUniqueId()); assertEquals(null, testResult.getRootNode().getParentNodeId()); assertEquals(0, testResult.getRootNode().getPositions().size()); assertEquals(1, testResult.getRootNode().getChildNodes().size()); assertEquals("Child", testResult.getRootNode().getChildNodes().get(0).getName()); assertEquals(UID3, testResult.getRootNode().getChildNodes().get(0).getUniqueId()); assertEquals(UID2, testResult.getRootNode().getChildNodes().get(0).getParentNodeId()); assertEquals(0, testResult.getRootNode().getChildNodes().get(0).getPositions().size()); assertEquals(0, testResult.getRootNode().getChildNodes().get(0).getChildNodes().size()); assertNotNull(testResult.getAttributes()); assertEquals(2, testResult.getAttributes().size()); assertEquals("V1", testResult.getAttributes().get("A1")); assertEquals("V2", testResult.getAttributes().get("A2")); } public void test_getPortfolio_UniqueId_instants_children() throws Exception { PortfolioMaster mockPortfolio = mock(PortfolioMaster.class); PositionMaster mockPosition = mock(PositionMaster.class); ManageablePortfolioNode manNode = example(true); ManageablePortfolio manPrt = new ManageablePortfolio("Hello", manNode); manPrt.setUniqueId(UID); PortfolioDocument prtDoc = new PortfolioDocument(manPrt); ManageableTrade manTrade = new ManageableTrade(); manTrade.setQuantity(BigDecimal.valueOf(1234)); manTrade.setSecurityLink(new ManageableSecurityLink(ExternalId.of("CC", "DD"))); manTrade.setUniqueId(UID5); ManageablePosition manPos = new ManageablePosition(); manPos.setQuantity(BigDecimal.valueOf(1235)); manPos.setSecurityLink(new ManageableSecurityLink(ExternalId.of("AA", "BB"))); manPos.setUniqueId(UID4); manPos.addTrade(manTrade); PositionDocument posDoc = new PositionDocument(manPos); PositionSearchRequest posRequest = new PositionSearchRequest(); posRequest.addPositionObjectId(UID4); posRequest.setVersionCorrection(VC); PositionSearchResult posResult = new PositionSearchResult(); posResult.getDocuments().add(posDoc); when(mockPortfolio.get(UID)).thenReturn(prtDoc); when(mockPosition.search(posRequest)).thenReturn(posResult); MasterPositionSource test = new MasterPositionSource(mockPortfolio, mockPosition); Portfolio testResult = test.getPortfolio(UID, VC); verify(mockPortfolio, times(1)).get(UID); verify(mockPosition, times(1)).search(posRequest); assertEquals(UID, testResult.getUniqueId()); assertEquals("Hello", testResult.getName()); assertEquals("Node", testResult.getRootNode().getName()); assertEquals(UID2, testResult.getRootNode().getUniqueId()); assertEquals(null, testResult.getRootNode().getParentNodeId()); assertEquals(0, testResult.getRootNode().getPositions().size()); assertEquals(1, testResult.getRootNode().getChildNodes().size()); assertEquals("Child", testResult.getRootNode().getChildNodes().get(0).getName()); assertEquals(UID3, testResult.getRootNode().getChildNodes().get(0).getUniqueId()); assertEquals(UID2, testResult.getRootNode().getChildNodes().get(0).getParentNodeId()); assertEquals(1, testResult.getRootNode().getChildNodes().get(0).getPositions().size()); assertEquals(0, testResult.getRootNode().getChildNodes().get(0).getChildNodes().size()); Position pos = testResult.getRootNode().getChildNodes().get(0).getPositions().get(0); assertEquals(UID4, pos.getUniqueId()); assertEquals(BigDecimal.valueOf(1235), pos.getQuantity()); assertEquals(ExternalIdBundle.of("AA", "BB"), pos.getSecurityLink().getExternalId()); assertEquals(1, pos.getTrades().size()); Trade trade = pos.getTrades().iterator().next(); assertEquals(UID5, trade.getUniqueId()); assertEquals(BigDecimal.valueOf(1234), trade.getQuantity()); assertEquals(ExternalIdBundle.of("CC", "DD"), trade.getSecurityLink().getExternalId()); } //------------------------------------------------------------------------- public void test_getPortfolioNode_UniqueId() throws Exception { PortfolioMaster mockPortfolio = mock(PortfolioMaster.class); PositionMaster mockPosition = mock(PositionMaster.class); ManageablePortfolioNode manNode = new ManageablePortfolioNode("Node"); manNode.setUniqueId(UID2); manNode.setPortfolioId(UID); ManageablePortfolioNode manChild = new ManageablePortfolioNode("Child"); manChild.setUniqueId(UID3); manChild.setParentNodeId(UID2); manChild.setPortfolioId(UID); manNode.addChildNode(manChild); when(mockPortfolio.getNode(UID2)).thenReturn(manNode); MasterPositionSource test = new MasterPositionSource(mockPortfolio, mockPosition); PortfolioNode testResult = test.getPortfolioNode(UID2, VersionCorrection.LATEST); verify(mockPortfolio, times(1)).getNode(UID2); assertEquals("Node", testResult.getName()); assertEquals(UID2, testResult.getUniqueId()); assertEquals(null, testResult.getParentNodeId()); assertEquals(0, testResult.getPositions().size()); assertEquals(1, testResult.getChildNodes().size()); assertEquals("Child", testResult.getChildNodes().get(0).getName()); assertEquals(UID3, testResult.getChildNodes().get(0).getUniqueId()); assertEquals(UID2, testResult.getChildNodes().get(0).getParentNodeId()); assertEquals(0, testResult.getChildNodes().get(0).getPositions().size()); assertEquals(0, testResult.getChildNodes().get(0).getChildNodes().size()); } public void test_getPosition() throws Exception { final PortfolioMaster mockPortfolio = mock(PortfolioMaster.class); final PositionMaster mockPosition = mock(PositionMaster.class); final PositionDocument doc = new PositionDocument(new ManageablePosition(BigDecimal.TEN, ExternalId.of("B", "C"))); doc.getPosition().setUniqueId(UID); when(mockPosition.get(UID)).thenReturn(doc); MasterPositionSource test = new MasterPositionSource(mockPortfolio, mockPosition); Position testResult = test.getPosition(UID); verify(mockPosition, times(1)).get(UID); assertEquals(UID, testResult.getUniqueId()); assertEquals(BigDecimal.TEN, testResult.getQuantity()); assertEquals(ExternalId.of("B", "C").toBundle(), testResult.getSecurityLink().getExternalId()); } public void test_getTrade() throws Exception { final PortfolioMaster mockPortfolio = mock(PortfolioMaster.class); final PositionMaster mockPosition = mock(PositionMaster.class); final OffsetDateTime now = OffsetDateTime.now(); final ManageableTrade doc = new ManageableTrade(BigDecimal.TEN, ExternalId.of("B", "C"), now.toLocalDate(), now.toOffsetTime().minusSeconds(100), ExternalId.of("CPARTY", "C100")); doc.setUniqueId(UID); when(mockPosition.getTrade(UID)).thenReturn(doc); MasterPositionSource test = new MasterPositionSource(mockPortfolio, mockPosition); Trade testResult = test.getTrade(UID); verify(mockPosition, times(1)).getTrade(UID); assertEquals(UID, testResult.getUniqueId()); assertEquals(BigDecimal.TEN, testResult.getQuantity()); assertEquals(ExternalId.of("B", "C").toBundle(), testResult.getSecurityLink().getExternalId()); } //------------------------------------------------------------------------- protected ManageablePortfolioNode example(boolean withPosition) { ManageablePortfolioNode manNode = new ManageablePortfolioNode("Node"); manNode.setUniqueId(UID2); manNode.setPortfolioId(UID); ManageablePortfolioNode manChild = new ManageablePortfolioNode("Child"); manChild.setUniqueId(UID3); manChild.setParentNodeId(UID2); manChild.setPortfolioId(UID); if (withPosition) { manChild.addPosition(UID4); } manNode.addChildNode(manChild); return manNode; } }