package name.abuchen.portfolio.datatransfer.csv;
import static name.abuchen.portfolio.datatransfer.csv.CSVExtractorTestUtil.buildField2Column;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.collection.IsEmptyCollection.empty;
import static org.junit.Assert.assertThat;
import java.text.ParseException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import name.abuchen.portfolio.datatransfer.Extractor.Item;
import name.abuchen.portfolio.datatransfer.Extractor.SecurityItem;
import name.abuchen.portfolio.model.Client;
import name.abuchen.portfolio.model.Security;
import name.abuchen.portfolio.model.SecurityPrice;
import name.abuchen.portfolio.money.Values;
@SuppressWarnings("nls")
public class CSVSecurityPriceExtractorTest
{
@Test
public void testSecurityCreation() throws ParseException
{
Client client = new Client();
CSVExtractor extractor = new CSVSecurityPriceExtractor(client);
List<Exception> errors = new ArrayList<Exception>();
List<Item> results = extractor.extract(0,
Arrays.<String[]>asList( //
new String[] { "2015-01-01", "14,20" }, new String[] { "2015-01-02", "15,20" }),
buildField2Column(extractor), errors);
assertThat(errors, empty());
assertThat(results.size(), is(1));
Security security = results.stream().filter(i -> i instanceof SecurityItem).findAny().get().getSecurity();
List<SecurityPrice> prices = security.getPrices();
assertThat(prices.size(), is(2));
assertThat(prices.get(0), is(new SecurityPrice(LocalDate.parse("2015-01-01"), Values.Quote.factorize(14.20))));
assertThat(prices.get(1), is(new SecurityPrice(LocalDate.parse("2015-01-02"), Values.Quote.factorize(15.20))));
}
@Test
public void testErrorIfDateIsMissing() throws ParseException
{
Client client = new Client();
CSVExtractor extractor = new CSVSecurityPriceExtractor(client);
List<Exception> errors = new ArrayList<Exception>();
List<Item> results = extractor.extract(0, Arrays.<String[]>asList( //
new String[] { "", "14,20" }), buildField2Column(extractor), errors);
assertThat(errors.size(), is(1));
assertThat(results, empty());
}
@Test
public void testErrorIfAmountIsMissing() throws ParseException
{
Client client = new Client();
CSVExtractor extractor = new CSVSecurityPriceExtractor(client);
List<Exception> errors = new ArrayList<Exception>();
List<Item> results = extractor.extract(0, Arrays.<String[]>asList( //
new String[] { "2015-01-01", "" }), buildField2Column(extractor), errors);
assertThat(errors.size(), is(1));
assertThat(results, empty());
}
}