/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.integration.tool.portfolio; import java.math.BigDecimal; import org.joda.beans.JodaBeanUtils; import org.testng.AssertJUnit; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import org.threeten.bp.LocalDate; import org.threeten.bp.OffsetTime; import com.opengamma.DataNotFoundException; import com.opengamma.id.ExternalId; import com.opengamma.master.portfolio.ManageablePortfolio; import com.opengamma.master.portfolio.ManageablePortfolioNode; import com.opengamma.master.portfolio.PortfolioDocument; import com.opengamma.master.portfolio.impl.InMemoryPortfolioMaster; import com.opengamma.master.position.ManageablePosition; import com.opengamma.master.position.ManageableTrade; import com.opengamma.master.position.PositionDocument; import com.opengamma.master.position.impl.InMemoryPositionMaster; import com.opengamma.util.test.TestGroup; /** * Test {@link OrphanedPositionRemover} */ @Test(groups = TestGroup.UNIT) public class OrphanedPositionRemoverTest { private static final ExternalId SEC1 = ExternalId.of ("Test", "sec1"); private static final ExternalId SEC2 = ExternalId.of ("Test", "sec2"); private static final ExternalId SEC3 = ExternalId.of ("Test", "sec3"); private static final ExternalId SEC4 = ExternalId.of ("Test", "sec4"); private static final ExternalId COUNTER_PARTY = ExternalId.of ("Test", "counterParty"); private static final ManageableTrade TRADE1 = new ManageableTrade(BigDecimal.ONE, SEC1, LocalDate.now(), OffsetTime.now(), COUNTER_PARTY); private static final ManageableTrade TRADE2 = new ManageableTrade(BigDecimal.ONE, SEC2, LocalDate.now(), OffsetTime.now(), COUNTER_PARTY); private static final ManageableTrade TRADE3 = new ManageableTrade(BigDecimal.ONE, SEC3, LocalDate.now(), OffsetTime.now(), COUNTER_PARTY); private InMemoryPositionMaster _positionMaster; private InMemoryPortfolioMaster _portfolioMaster; private PositionDocument _pos1; private PositionDocument _pos2; private PositionDocument _pos3; private PositionDocument _pos4; @BeforeMethod public void setUp() { _positionMaster = new InMemoryPositionMaster(); _pos1 = new PositionDocument(new ManageablePosition(BigDecimal.ONE, SEC1)); _pos1.getPosition().addTrade(JodaBeanUtils.clone(TRADE1)); _pos1 = _positionMaster.add(_pos1); _pos2 = new PositionDocument(new ManageablePosition(BigDecimal.valueOf(2), SEC2)); _pos2.getPosition().addTrade(JodaBeanUtils.clone(TRADE1)); _pos2.getPosition().addTrade(JodaBeanUtils.clone(TRADE2)); _pos2 = _positionMaster.add(_pos2); _pos3 = new PositionDocument(new ManageablePosition(BigDecimal.valueOf(3), SEC3)); _pos3.getPosition().addTrade(JodaBeanUtils.clone(TRADE1)); _pos3.getPosition().addTrade(JodaBeanUtils.clone(TRADE2)); _pos3.getPosition().addTrade(JodaBeanUtils.clone(TRADE3)); _pos3 = _positionMaster.add(_pos3); _pos4 = new PositionDocument(new ManageablePosition(BigDecimal.valueOf(3), SEC4)); _pos4.getPosition().addTrade(JodaBeanUtils.clone(TRADE1)); _pos4.getPosition().addTrade(JodaBeanUtils.clone(TRADE2)); _pos4.getPosition().addTrade(JodaBeanUtils.clone(TRADE3)); _pos4 = _positionMaster.add(_pos4); _portfolioMaster = new InMemoryPortfolioMaster(); _portfolioMaster.add(new PortfolioDocument(new ManageablePortfolio("Port1", generatePortfolio()))); } private ManageablePortfolioNode generatePortfolio() { ManageablePortfolioNode rootNode = new ManageablePortfolioNode("Port1"); rootNode.addPosition(_pos1.getUniqueId()); ManageablePortfolioNode pn2 = new ManageablePortfolioNode("pn2"); pn2.addPosition(_pos2.getUniqueId()); ManageablePortfolioNode pn3 = new ManageablePortfolioNode("pn3"); pn3.addPosition(_pos3.getUniqueId()); rootNode.addChildNode(pn2); rootNode.addChildNode(pn3); return rootNode; } @Test public void removeOrphanedPosition() { PositionDocument positionDocument = _positionMaster.get(_pos1.getUniqueId()); AssertJUnit.assertNotNull(positionDocument.getPosition()); positionDocument = _positionMaster.get(_pos2.getUniqueId()); AssertJUnit.assertNotNull(positionDocument.getPosition()); positionDocument = _positionMaster.get(_pos3.getUniqueId()); AssertJUnit.assertNotNull(positionDocument.getPosition()); positionDocument = _positionMaster.get(_pos4.getUniqueId()); AssertJUnit.assertNotNull(positionDocument.getPosition()); OrphanedPositionRemover positionRemover = new OrphanedPositionRemover(_portfolioMaster, _positionMaster); positionRemover.run(); positionDocument = _positionMaster.get(_pos1.getUniqueId()); AssertJUnit.assertNotNull(positionDocument.getPosition()); positionDocument = _positionMaster.get(_pos2.getUniqueId()); AssertJUnit.assertNotNull(positionDocument.getPosition()); positionDocument = _positionMaster.get(_pos3.getUniqueId()); AssertJUnit.assertNotNull(positionDocument.getPosition()); try { _positionMaster.get(_pos4.getUniqueId()); AssertJUnit.fail("position 4 should have been removed"); } catch (DataNotFoundException ex) { //do nothing } } }