Package name.abuchen.portfolio.snapshot

Source Code of name.abuchen.portfolio.snapshot.PortfolioMergeTest

package name.abuchen.portfolio.snapshot;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.util.Calendar;
import java.util.Date;

import name.abuchen.portfolio.model.Client;
import name.abuchen.portfolio.model.Portfolio;
import name.abuchen.portfolio.model.PortfolioTransaction;
import name.abuchen.portfolio.model.Security;
import name.abuchen.portfolio.model.SecurityPrice;
import name.abuchen.portfolio.util.Dates;

import org.junit.Before;
import org.junit.Test;

public class PortfolioMergeTest
{
    private final Date referenceDate = Dates.date(2010, Calendar.JANUARY, 31);

    private Client client;

    private Security securityA;
    private Security securityB;
    private Security securityX;

    @Before
    public void setUpClient()
    {
        // Portfolio A : Security A + Security X
        // Portfolio B : Security B + Security X

        client = new Client();

        securityA = new Security();
        securityA.addPrice(new SecurityPrice(Dates.date(2010, Calendar.JANUARY, 1), 1000));
        client.addSecurity(securityA);

        securityB = new Security();
        securityB.addPrice(new SecurityPrice(Dates.date(2010, Calendar.JANUARY, 1), 1100));
        client.addSecurity(securityB);

        securityX = new Security();
        securityX.addPrice(new SecurityPrice(Dates.date(2010, Calendar.JANUARY, 1), 1200));
        client.addSecurity(securityX);

        Portfolio portfolioA = new Portfolio();
        portfolioA.addTransaction(new PortfolioTransaction(Dates.date(2010, Calendar.JANUARY, 1), securityA,
                        PortfolioTransaction.Type.BUY, 1000000, 10000, 0, 0));
        portfolioA.addTransaction(new PortfolioTransaction(Dates.date(2010, Calendar.JANUARY, 1), securityX,
                        PortfolioTransaction.Type.BUY, 1000000, 12100, 100, 0));
        client.addPortfolio(portfolioA);

        Portfolio portfolioB = new Portfolio();
        portfolioB.addTransaction(new PortfolioTransaction(Dates.date(2010, Calendar.JANUARY, 1), securityB,
                        PortfolioTransaction.Type.BUY, 1000000, 11000, 0, 0));
        portfolioB.addTransaction(new PortfolioTransaction(Dates.date(2010, Calendar.JANUARY, 1), securityX,
                        PortfolioTransaction.Type.BUY, 1000000, 10000, 0, 0));
        client.addPortfolio(portfolioB);
    }

    @Test
    public void testMergingPortfolioSnapshots()
    {
        ClientSnapshot snapshot = ClientSnapshot.create(client, referenceDate);
        assertNotNull(snapshot);

        PortfolioSnapshot jointPortfolio = snapshot.getJointPortfolio();

        SecurityPosition positionA = jointPortfolio.getPositionsBySecurity().get(securityA);
        assertEquals(1000000, positionA.getShares());
        assertEquals(10000, positionA.calculateValue());

        SecurityPosition positionB = jointPortfolio.getPositionsBySecurity().get(securityB);
        assertEquals(1000000, positionB.getShares());
        assertEquals(11000, positionB.calculateValue());

        SecurityPosition positionX = jointPortfolio.getPositionsBySecurity().get(securityX);
        assertEquals(2000000, positionX.getShares());
        assertEquals(24000, positionX.calculateValue());
    }

    @Test
    public void testThatTransactionsAreMergedOnSecurityPosition()
    {
        ClientSnapshot snapshot = ClientSnapshot.create(client, referenceDate);
        assertNotNull(snapshot);

        PortfolioSnapshot jointPortfolio = snapshot.getJointPortfolio();

        SecurityPosition positionX = jointPortfolio.getPositionsBySecurity().get(securityX);
        assertEquals(2000000, positionX.getShares());
        assertEquals(24000, positionX.calculateValue());
        // calculate purchase price w/o costs
        assertEquals(1100, positionX.getFIFOPurchasePrice());
        // calculate purchase value w/ costs
        assertEquals(22100, positionX.getFIFOPurchaseValue());
        assertEquals(1900, positionX.getProfitLoss());
    }

}
TOP

Related Classes of name.abuchen.portfolio.snapshot.PortfolioMergeTest

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.