package name.abuchen.portfolio.model;
import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertThat;
import java.time.LocalDate;
import name.abuchen.portfolio.model.PortfolioTransaction.Type;
import org.junit.Before;
import org.junit.Test;
public class PortfolioTest
{
private Client client;
private Portfolio portfolio;
private PortfolioTransaction transactionWithPlan;
private PortfolioTransaction transaction;
@Before
public void createClient()
{
client = new Client();
portfolio = new Portfolio();
client.addPortfolio(portfolio);
Security security = new Security();
security.setName("Some security"); //$NON-NLS-1$
client.addSecurity(security);
InvestmentPlan plan = new InvestmentPlan("Some plan"); //$NON-NLS-1$
client.addPlan(plan);
buildTransaction(security);
buildTransactionWithPlan(security, plan);
}
private void buildTransaction(Security security)
{
transaction = new PortfolioTransaction();
transaction.setType(Type.DELIVERY_INBOUND);
transaction.setDate(LocalDate.now());
transaction.setSecurity(security);
portfolio.addTransaction(transaction);
}
private void buildTransactionWithPlan(Security security, InvestmentPlan plan)
{
transactionWithPlan = new PortfolioTransaction();
transactionWithPlan.setType(Type.DELIVERY_INBOUND);
transactionWithPlan.setDate(LocalDate.now());
transactionWithPlan.setSecurity(security);
plan.getTransactions().add(transactionWithPlan);
portfolio.addTransaction(transactionWithPlan);
}
@Test
public void testShallowDelete()
{
portfolio.deleteTransaction(transaction, client);
assertThat(portfolio.getTransactions(), not(hasItem(transaction)));
assertThat(portfolio.getTransactions(), hasItem(transactionWithPlan));
assertThat(client.getPlans().get(0).getTransactions().size(), is(1));
}
@Test
public void testShallowDeleteWithTransaction()
{
portfolio.deleteTransaction(transactionWithPlan, client);
assertThat(portfolio.getTransactions(), not(hasItem(transactionWithPlan)));
assertThat(client.getPlans().get(0).getTransactions(), not(hasItem(transactionWithPlan)));
assertThat(portfolio.getTransactions(), hasItem(transaction));
}
}